Exemple #1
0
        private void OnRecvQueryX(IPEndPoint ipinfo, DHTQueryMessage msg)
        {
            if (msg == null)
            {
                return;
            }

            BDictionary data = msg.Data;

            switch (msg.QueryType)
            {
            case QueryType.Ping:
                OnRecvPingQuery(ipinfo, data);
                break;

            case QueryType.FindNode:
                OnRecvFindNodeQuery(ipinfo, data);
                break;

            case QueryType.GetPeers:
                OnRecvGetPeersQuery(ipinfo, data);
                break;

            case QueryType.AnnouncePeer:
                OnRecvAnnouncePeerQuery(ipinfo, data);
                break;

            default:
                OnRecvCustomQuery(ipinfo, data);
                break;
            }
        }
        public static DHTMessage ParseBuffer(byte[] buffer)
        {
            if (buffer == null || buffer.Length == 0 || buffer[0] != 'd')
            {
                return(null);
            }

            var data = fParser.Parse <BDictionary>(buffer);

            var bsY = data.Get <BString>("y");

            if (bsY == null)
            {
                return(null);
            }

            string      strMsgType = bsY.ToString();
            MessageType msgType    = DHTMessage.GetMessageType(strMsgType);

            DHTMessage result;

            switch (msgType)
            {
            case MessageType.Response:
                result = new DHTResponseMessage(msgType, QueryType.None, data);
                break;

            case MessageType.Query:
                result = new DHTQueryMessage(msgType, QueryType.None, data);
                break;

            case MessageType.Error:
                result = new DHTErrorMessage(msgType, QueryType.None, data);
                break;

            default:
                result = new DHTMessage(msgType, QueryType.None, data);
                break;
            }

            result.Parse();
            return(result);
        }
Exemple #3
0
        private void OnRecvQueryX(IPEndPoint ipinfo, DHTQueryMessage msg)
        {
            if (msg == null)
            {
                return;
            }

            BDictionary data = msg.Data;

            switch (msg.QueryType)
            {
            case QueryType.Ping:
                OnRecvPingQuery(ipinfo, data);
                break;

            case QueryType.FindNode:
                OnRecvFindNodeQuery(ipinfo, data);
                break;

            case QueryType.GetPeers:
                OnRecvGetPeersQuery(ipinfo, data);
                break;

            case QueryType.AnnouncePeer:
                OnRecvAnnouncePeerQuery(ipinfo, data);
                break;

            default:
                var args = data.Get <BDictionary>("a");
                if (args != null)
                {
                    var    id    = args.Get <BString>("id");
                    byte[] idVal = (id != null) ? id.Value : null;
                    RaiseQueryReceived(ipinfo, idVal, data);
                }
                break;
            }
        }