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); } }
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); } }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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); }
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); }
private static DHTMessage ParseMessage(string bencodedString) { var buffer = Encoding.UTF8.GetBytes(bencodedString); return(DHTMessage.ParseBuffer(buffer)); }