Ejemplo n.º 1
0
 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());
 }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }