public void ContainQuery() { var builder = new UriQueryBuilder("http://mytest.com/announce.aspx?key=1&foo=bar"); Assert.IsTrue(builder.Contains("key"), "#1"); Assert.IsTrue(builder.Contains("foo"), "#2"); Assert.IsFalse(builder.Contains("bar"), "#3"); }
public void CaseInsensitiveTest() { var builder = new UriQueryBuilder("http://www.example.com?first=1&second=2&third=4"); Assert.IsTrue(builder.Contains("FiRsT")); Assert.AreEqual(builder["FiRst"], "1"); }
Uri CreateAnnounceString(AnnounceParameters parameters) { var b = new UriQueryBuilder(Uri); b.Add("info_hash", parameters.InfoHash.UrlEncode()) .Add("peer_id", parameters.PeerId.UrlEncode()) .Add("port", parameters.Port) .Add("uploaded", parameters.BytesUploaded) .Add("downloaded", parameters.BytesDownloaded) .Add("left", parameters.BytesLeft) .Add("compact", 1) .Add("numwant", 100); if (parameters.SupportsEncryption) { b.Add("supportcrypto", 1); } if (parameters.RequireEncryption) { b.Add("requirecrypto", 1); } if (!b.Contains("key") && Key != null) { b.Add("key", Key.UrlEncode()); } if (!string.IsNullOrEmpty(parameters.IPAddress)) { b.Add("ip", parameters.IPAddress); } // If we have not successfully sent the started event to this tier, override the passed in started event // Otherwise append the event if it is not "none" //if (!parameters.Id.Tracker.Tier.SentStartedEvent) //{ // sb.Append("&event=started"); // parameters.Id.Tracker.Tier.SendingStartedEvent = true; //} if (parameters.ClientEvent != TorrentEvent.None) { b.Add("event", parameters.ClientEvent.ToString().ToLower()); } if (!BEncodedString.IsNullOrEmpty(TrackerId)) { b.Add("trackerid", TrackerId.UrlEncode()); } return(b.ToUri()); }