Пример #1
0
        internal Uri GetUri(Uri announceUri, string key, string trackerID)
        {
            var parameters = new Dictionary <string, object>(13);

            parameters.Add("info_hash", infoHash.ToUrlEncodedString());
            parameters.Add("peer_id", peerID.ToUrlEncodedString());
            parameters.Add("port", port);
            parameters.Add("uploaded", bytesUploaded);
            parameters.Add("downloaded", bytesDownloaded);
            parameters.Add("left", bytesLeft);
            parameters.Add("compact", "1");

            // TODO: Uncomment this line when we actually support crypto
            //parameters.Add("supportcrypto", "1");
            // TODO: Add support for "requirecrypto"?

            if (trackerEvent != TrackerEvent.None)
            {
                parameters.Add("event", trackerEvent.ToString().ToLowerInvariant());
            }
            if (ip != null)
            {
                parameters.Add("ip", UriHelper.UrlEncodeText(ip.ToString()));
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    parameters.Add("ipv4", UriHelper.UrlEncodeText(ip.ToString()));
                }
                else if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                {
                    parameters.Add("ipv6", UriHelper.UrlEncodeText(ip.ToString()));
                }
            }
            if (desiredPeerCount > 0)
            {
                parameters.Add("numwant", desiredPeerCount);
            }
            if (!string.IsNullOrEmpty(key))
            {
                parameters.Add("key", key);
            }
            if (!string.IsNullOrEmpty(trackerID))
            {
                parameters.Add("trackerid", trackerID);
            }

            return(UriHelper.AppendQueryString(announceUri, parameters));
        }