private void OnResponseReceive(object sender, MessageEventArgs e) { fLogger.WriteDebug("Response received: {0} :: {1}", e.EndPoint, e.Data.EncodeAsString()); var pr = FindPeer(e.EndPoint.Address); var resp = e.Data.Get <BDictionary>("r"); var qt = resp.Get <BString>("q"); string queryType = (qt != null) ? qt.ToString() : ""; switch (queryType) { case "handshake": if (pr != null) { pr.State = PeerState.Checked; SendData(e.EndPoint, ProtocolHelper.CreateGetPeerInfoQuery(DHTHelper.GetTransactionId(), fDHTClient.LocalID)); } break; case "get_peer_info": if (pr != null) { pr.Profile.Load(resp); } break; } }
private void OnQueryReceive(object sender, MessageEventArgs e) { fLogger.WriteDebug("Query received: {0} :: {1}", e.EndPoint, e.Data.EncodeAsString()); var pr = FindPeer(e.EndPoint.Address); string queryType = e.Data.Get <BString>("q").ToString(); var args = e.Data.Get <BDictionary>("a"); switch (queryType) { case "handshake": SendData(e.EndPoint, ProtocolHelper.CreateHandshakeResponse(DHTHelper.GetTransactionId(), fDHTClient.LocalID)); break; case "get_peer_info": SendData(e.EndPoint, ProtocolHelper.CreateGetPeerInfoResponse(DHTHelper.GetTransactionId(), fDHTClient.LocalID, fProfile)); break; case "chat": var msgdata = args.Get <BString>("msg").Value; string msg = Encoding.UTF8.GetString(msgdata); fForm.OnMessageReceived(pr, msg); break; } }
public bool CheckPeer(IPEndPoint peerEndPoint) { bool result = false; if (peerEndPoint == null) { return(false); } var peerAddress = peerEndPoint.Address; Peer peer = FindPeer(peerAddress); if (peer == null) { peer = AddPeer(peerAddress, peerEndPoint.Port); result = true; } if (peer.State != PeerState.Checked && !peer.IsLocal) { peer.EndPoint.Port = peerEndPoint.Port; peer.State = PeerState.Checked; result = true; } SendData(peer.EndPoint, ProtocolHelper.CreateGetPeerInfoQuery(DHTHelper.GetTransactionId(), fDHTClient.LocalID)); return(result); }
public static byte[] CreateSignInfoKey() { BDictionary subnetKey = new BDictionary(); subnetKey.Add("info", ProtocolHelper.NETWORK_SIGN); return(DHTHelper.CalculateInfoHashBytes(subnetKey)); }
public void DHTHelper_Tests() { var tid = DHTHelper.GetTransactionId(); Assert.IsNotNull(tid); Assert.AreEqual(2, tid.Length); var randId = DHTHelper.GetRandomID(); Assert.IsNotNull(randId); Assert.AreEqual(20, randId.Length); var randShaId = DHTHelper.GetRandomHashID(); Assert.IsNotNull(randShaId); Assert.AreEqual(20, randShaId.Length); }
public bool CheckLocalAddress(IPAddress peerAddress) { return((fPublicEndPoint != null) && (DHTHelper.PrepareAddress(fPublicEndPoint.Address).Equals(peerAddress))); }
public void SendMessage(Peer peer, string message) { SendData(peer.EndPoint, ProtocolHelper.CreateChatMessage(DHTHelper.GetTransactionId(), fDHTClient.LocalID, message)); }