private byte[] CalcInfoHashBytes(dynamic infoDict) { byte[] encodedInfo = _bencoder.EncodeElement(infoDict); var sha1Algo = SHA1.Create(); return(sha1Algo.ComputeHash(encodedInfo)); }
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; } } }