public static UdpTrackerMessage DecodeMessage(byte[] buffer, int offset, int count, MessageType type) { UdpTrackerMessage m = null; int action = type == MessageType.Request ? ReadInt(buffer, offset + 8) : ReadInt(buffer, offset); switch (action) { case 0: if (type == MessageType.Request) { m = new ConnectMessage(); } else { m = new ConnectResponseMessage(); } break; case 1: if (type == MessageType.Request) { m = new AnnounceMessage(); } else { m = new AnnounceResponseMessage(); } break; case 2: if (type == MessageType.Request) { m = new ScrapeMessage(); } else { m = new ScrapeResponseMessage(); } break; case 3: m = new ErrorMessage(); break; default: throw new ProtocolException(string.Format("Invalid udp message received: {0}", buffer[offset])); } try { m.Decode(buffer, offset, count); } catch { m = new ErrorMessage(0, "Couldn't decode the tracker response"); } return(m); }
public static UdpTrackerMessage DecodeMessage(byte[] buffer, int offset, int count, MessageType type) { UdpTrackerMessage m = null; int action = type == MessageType.Request ? ReadInt(buffer, offset + 8) : ReadInt(buffer, offset); switch (action) { case 0: if (type == MessageType.Request) m = new ConnectMessage(); else m = new ConnectResponseMessage(); break; case 1: if (type == MessageType.Request) m = new AnnounceMessage(); else m = new AnnounceResponseMessage(); break; case 2: if (type == MessageType.Request) m = new ScrapeMessage(); else m = new ScrapeResponseMessage(); break; case 3: m = new ErrorMessage(); break; default: throw new ProtocolException(string.Format("Invalid udp message received: {0}", buffer[offset])); } try { m.Decode(buffer, offset, count); } catch { m = new ErrorMessage(0, "Couldn't decode the tracker response"); } return m; }
protected virtual void ReceiveConnect(ConnectMessage connectMessage) { UdpTrackerMessage m = new ConnectResponseMessage(connectMessage.TransactionId, CreateConnectionID()); var data = m.Encode(); listener.Send(data, data.Length, endpoint); }
public void ConnectResponseTest() { ConnectResponseMessage m = new ConnectResponseMessage(5371, 12345); ConnectResponseMessage d = (ConnectResponseMessage)UdpTrackerMessage.DecodeMessage(m.Encode(), 0, m.ByteLength, MessageType.Response); Check(m, MessageType.Response); Assert.AreEqual(0, m.Action, "#0"); Assert.AreEqual(m.Action, d.Action, "#1"); Assert.AreEqual(m.ConnectionId, d.ConnectionId, "#2"); Assert.AreEqual(m.TransactionId, d.TransactionId, "#3"); Assert.IsTrue(Toolbox.ByteMatch(m.Encode(), d.Encode()), "#4"); Assert.AreEqual(12345, d.ConnectionId); Assert.AreEqual(5371, d.TransactionId); }
public void ConnectResponseTest() { var m = new ConnectResponseMessage(5371, 12345); var d = (ConnectResponseMessage) UdpTrackerMessage.DecodeMessage(m.Encode(), 0, m.ByteLength, MessageType.Response); Check(m, MessageType.Response); Assert.Equal(0, m.Action); Assert.Equal(m.Action, d.Action); Assert.Equal(m.ConnectionId, d.ConnectionId); Assert.Equal(m.TransactionId, d.TransactionId); Assert.True(Toolbox.ByteMatch(m.Encode(), d.Encode())); Assert.Equal(12345, d.ConnectionId); Assert.Equal(5371, d.TransactionId); }