public void GetEncodedInfoHash() { Torrent torrent = new Torrent(Tools.GetTestDataFilePath("ubuntu-15.04-desktop-amd64.iso.torrent")); Assert.AreEqual("%fc%8a%15%a2%fa%f2sM%bb%1d%c5%f7%af%dc%5c%9b%ea%eb%1fY", torrent.GetEncodedInfoHash()); }
public void GetEncodedInfoHash() { Torrent torrent = new Torrent(Tools.GetTestDataFilePath("ubuntu-15.04-desktop-amd64.iso.torrent")); Assert.AreEqual("%fc%8a%15%a2%fa%f2sM%bb%1d%c5%f7%af%dc%5c%9b%ea%eb%1fY", torrent.GetEncodedInfoHash()); }
/// <summary> /// /// </summary> public void Request() { string encoded_hash = Torrent.GetEncodedInfoHash(); //construction de la requête vers le tracker StringBuilder builder = new StringBuilder(Tracker.Url); builder.AppendFormat("?info_hash={0}", encoded_hash); builder.Append("&peer_id=adkiepeycosozpsngtoi"); builder.Append("&uploaded=0"); builder.Append("&downloaded=0"); builder.AppendFormat("&compact={0}", Compact ? 1 : 0); builder.Append("&left=120000"); builder.Append("&event=started"); builder.Append("&port=6881"); //création de la requête GET HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.ToString()); request.Method = "GET"; //envoi de la requête using (WebResponse response = request.GetResponse()) { //récupération de la réponse using (Stream stream = response.GetResponseStream()) { using (var reader = new StreamReader(stream, Encoding.Default)) { string responseText = reader.ReadToEnd(); byte[] data = Encoding.Default.GetBytes(responseText); BEncoding encoding = new BEncoding(data); BEncodedDictionary dictionary = (BEncodedDictionary)encoding.Decode(); Complete = (BEncodedInteger)dictionary["complete"]; Incomplete = (BEncodedInteger)dictionary["incomplete"]; Interval = (BEncodedInteger)dictionary["interval"]; // la liste des peers peut être soit une liste, soit une chaine simplifiée en big endian if (dictionary["peers"] is BEncodedList) { BEncodedList peers = (BEncodedList)dictionary["peers"]; } else if (dictionary["peers"] is BEncodedString) { byte[] peers = Encoding.Default.GetBytes((BEncodedString)dictionary["peers"]); for (int i = 0; i < peers.Length; i = i + 6) { byte[] ip = new byte[4]; byte[] port = new byte[2]; Array.Copy(peers, i, ip, 0, 4); Array.Copy(peers, i + 4, port, 0, 2); Array.Reverse(port); IPEndPoint ipEndPoint = new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)); Peer peer = new Peer(ipEndPoint); Peers.Add(peer); } } } } } }