Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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)));
 }
Beispiel #7
0
 public void SendMessage(Peer peer, string message)
 {
     SendData(peer.EndPoint, ProtocolHelper.CreateChatMessage(DHTHelper.GetTransactionId(), fDHTClient.LocalID, message));
 }