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); }
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; } }