示例#1
0
        private byte[] CalcInfoHashBytes(dynamic infoDict)
        {
            byte[] encodedInfo = _bencoder.EncodeElement(infoDict);
            var    sha1Algo    = SHA1.Create();

            return(sha1Algo.ComputeHash(encodedInfo));
        }
示例#2
0
        private void InvokeGetPeers(byte[] infohash, bool fast, bool nocache)
        {
            lock (__peersSearchLck) {
                Dictionary <string, Object> argsDict = new Dictionary <string, object>();
                List <Object> args = new List <Object> {
                    GETPEERS_KEY, new System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary(infohash).ToString()
                };

                if (fast)
                {
                    args.Add("-fast");
                }
                if (nocache)
                {
                    args.Add("-nocache");
                }

                argsDict["arguments"] = args;
                argsDict["cwd"]       = ".";

                Bencoder beEncoder    = new Bencoder();
                byte[]   bencodedArgs = beEncoder.EncodeElement(argsDict);
                while (!_myCancelTokenSrc.IsCancellationRequested)
                {
                    try {
                        _extMnlClientStream.Write(GetInt(bencodedArgs.Length), 0, 4);
                        _extMnlClientStream.Write(bencodedArgs, 0, bencodedArgs.Length);
                        _extMnlClientStream.Flush();
                    } catch (SocketException se) {
                        Debug.WriteLine($"Can't connect to remote table {se}, waiting 10 secs and trying once more");
                        Thread.Sleep(10000);
                        continue;
                    }

                    break;
                }
            }
        }