Example #1
0
        private void OnRecvMessage(IPEndPoint ipinfo, byte[] data)
        {
            try {
                DHTMessage msg = DHTMessage.ParseBuffer(data);
                if (msg == null)
                {
                    return;
                }

                if (msg.IsSimilarTo(fClientVer))
                {
                    fLogger.WriteDebug(">>>> Received a message from a similar client from {0}", ipinfo);
                }

                switch (msg.Type)
                {
                case MessageType.Response:
                    OnRecvResponseX(ipinfo, msg as DHTResponseMessage);
                    break;

                case MessageType.Query:
                    OnRecvQueryX(ipinfo, msg as DHTQueryMessage);
                    break;

                case MessageType.Error:
                    OnRecvErrorX(ipinfo, msg as DHTErrorMessage);
                    break;
                }
            } catch (Exception ex) {
                fLogger.WriteError("DHTClient.OnRecvMessage(): ", ex);
            }
        }
Example #2
0
        protected override void OnRecvMessage(IPEndPoint ipinfo, byte[] data)
        {
            try {
                DHTMessage msg = DHTMessage.ParseBuffer(data);
                if (msg == null)
                {
                    return;
                }

                if (msg.IsSimilarTo(fClientVer))
                {
                    // Received a message from a similar client
                    // many false positives, client version is not unique
                }

                switch (msg.Type)
                {
                case MessageType.Response:
                    OnRecvResponseX(ipinfo, msg as DHTResponseMessage);
                    break;

                case MessageType.Query:
                    OnRecvQueryX(ipinfo, msg as DHTQueryMessage);
                    break;

                case MessageType.Error:
                    OnRecvErrorX(ipinfo, msg as DHTErrorMessage);
                    break;
                }
            } catch (Exception ex) {
                fLogger.WriteError("OnRecvMessage()", ex);
            }
        }
Example #3
0
        public void Test_ParseBuffer_FindNodeResponse()
        {
            var msg = DHTMessage.ParseBuffer("d1:rd2:id20:0123456789abcdefghij5:nodes9:def456...e1:t2:aa1:y1:re");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Response, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            // TODO: test contents
        }
Example #4
0
        public void Test_ParseBuffer_PingResponse()
        {
            var msg = DHTMessage.ParseBuffer("d1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:re");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Response, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            // TODO: test contents
        }
Example #5
0
        public void Test_ParseBuffer_GetPeersResponse2()
        {
            var msg = DHTMessage.ParseBuffer("d1:rd2:id20:abcdefghij01234567895:nodes9:def456...5:token8:aoeusnthe1:ti0e1:y1:re");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Response, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            // TODO: test contents
        }
Example #6
0
        public void Test_ParseBuffer_GetPeersQuery()
        {
            var msg = DHTMessage.ParseBuffer("d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz123456e1:q9:get_peers1:t2:aa1:y1:qe");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Query, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            Assert.AreEqual(QueryType.GetPeers, msg.QueryType);
            // TODO: test contents
        }
Example #7
0
        public void Test_ParseBuffer_FindNodeQuery()
        {
            var msg = DHTMessage.ParseBuffer("d1:ad2:id20:abcdefghij01234567896:target20:mnopqrstuvwxyz123456e1:q9:find_node1:t2:aa1:y1:qe");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Query, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            Assert.AreEqual(QueryType.FindNode, msg.QueryType);
            // TODO: test contents
        }
Example #8
0
        public void Test_ParseBuffer_PingQuery()
        {
            var msg = DHTMessage.ParseBuffer("d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Query, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            Assert.AreEqual(QueryType.Ping, msg.QueryType);
            // TODO: test contents
        }
Example #9
0
        public void Test_ParseBuffer_AnnouncePeerQuery()
        {
            var msg = DHTMessage.ParseBuffer("d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz1234564:porti6881e5:token8:aoeusnthe1:q13:announce_peer1:t2:aa1:y1:qe");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Query, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);
            Assert.AreEqual(QueryType.AnnouncePeer, msg.QueryType);
            // TODO: test contents
        }
Example #10
0
        public void Test_ParseBuffer_Empty()
        {
            byte[] buffer = null;
            var    msg    = DHTMessage.ParseBuffer(buffer);

            Assert.IsNull(msg);

            buffer = new byte[] {};
            msg    = DHTMessage.ParseBuffer(buffer);
            Assert.IsNull(msg);
        }
Example #11
0
        public void Test_ParseBuffer_ErrorMsg()
        {
            var msg = DHTMessage.ParseBuffer("d1:eli201e23:A Generic Error Ocurrede1:t2:aa1:y1:ee");

            Assert.IsNotNull(msg);
            Assert.AreEqual(MessageType.Error, msg.Type);
            Assert.AreEqual(string.Empty, msg.ClientVer);

            var errMsg = msg as DHTErrorMessage;

            Assert.AreEqual(201, errMsg.ErrCode);
            Assert.AreEqual("A Generic Error Ocurred", errMsg.ErrText);
        }
Example #12
0
        private static DHTMessage ParseMessage(string bencodedString)
        {
            var buffer = Encoding.UTF8.GetBytes(bencodedString);

            return(DHTMessage.ParseBuffer(buffer));
        }