Author: alanmc
Date: 2008-01-27 14:16:55 -0500 (Sun, 27 Jan 2008)
New Revision: 94077
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/Message.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceResponseMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectResponseMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ErrorMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/Extensions/AuthenticationMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeMessage.cs
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeResponseMessage.cs
Log:
Finished implementing message Encoding and Decoding for Udp tracker support
Modified: trunk/bitsharp/src/MonoTorrent/Client/Messages/Message.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/Messages/Message.cs 2008-01-27
19:16:10 UTC (rev 94076)
+++ trunk/bitsharp/src/MonoTorrent/Client/Messages/Message.cs 2008-01-27
19:16:55 UTC (rev 94077)
@@ -44,6 +44,12 @@
return 1;
}
+ protected int Write(byte[] buffer, int offset, byte[] value)
+ {
+ Buffer.BlockCopy(value, 0, buffer, offset, value.Length);
+ return value.Length;
+ }
+
protected int Write(byte[] buffer, int offset, short value)
{
byte[] temp =
BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value));
@@ -58,11 +64,21 @@
return temp.Length;
}
+ protected int Write(byte[] buffer, int offset, uint value)
+ {
+ return Write(buffer, offset, (int)value);
+ }
+
protected int Write(byte[] buffer, int offset, long value)
{
byte[] temp =
BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value));
Buffer.BlockCopy(temp, 0, buffer, offset, temp.Length);
return temp.Length;
}
+
+ protected int Write(byte[] buffer, int offset, ulong value)
+ {
+ return Write(buffer, offset, (long)value);
+ }
}
}
\ No newline at end of file
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -2,24 +2,83 @@
using System.Collections.Generic;
using System.Text;
using MonoTorrent.Client.Messages;
+using MonoTorrent.Common;
namespace MonoTorrent.Client.Tracker.UdpTrackerMessages
{
class AnnounceMessage : Message
{
+ private long connectionId;
+ private int action;
+ private int transactionId;
+ private byte[] infoHash; // 20
+ private string peerId; //20
+ private long downloaded;
+ private long left;
+ private long uploaded;
+ private TorrentEvent torrentEvent;
+ private uint ip;
+ private uint key;
+ private int numWanted;
+ private ushort port;
+ private ushort extensions;
+
public override int ByteLength
{
- get { throw new Exception("The method or operation is not
implemented."); }
+ get { return 8 + 4 + 4 + 20 + 20 + 8 + 8 + 8 + 4 + 4 + 4 + 4 + 2 +
2; }
}
public override void Decode(byte[] buffer, int offset, int length)
{
- throw new Exception("The method or operation is not implemented.");
+ connectionId = ReadLong(buffer, offset);
+ offset += 8;
+ action = ReadInt(buffer, offset + 8);
+ offset += 4;
+ transactionId = ReadInt(buffer, offset + 12);
+ offset += 4;
+ infoHash = new byte[20];
+ Buffer.BlockCopy(buffer, offset, infoHash, 0, 20);
+ offset += 20;
+ peerId = Encoding.ASCII.GetString(buffer, offset, 20);
+ offset += 20;
+ downloaded = ReadLong(buffer, offset);
+ offset += 8;
+ left = ReadLong(buffer, offset);
+ offset += 8;
+ uploaded = ReadLong(buffer, offset);
+ offset += 8;
+ torrentEvent = (TorrentEvent)ReadInt(buffer, offset);
+ offset += 4;
+ ip = (uint)ReadInt(buffer, offset);
+ offset += 4;
+ key = (uint)ReadInt(buffer, offset);
+ offset += 4;
+ numWanted = ReadInt(buffer, offset);
+ offset += 4;
+ port = (ushort)ReadShort(buffer, offset);
+ offset += 2;
+ extensions = (ushort)ReadShort(buffer, offset);
+ offset += 2;
}
public override int Encode(byte[] buffer, int offset)
{
- throw new Exception("The method or operation is not implemented.");
+ int origOffset = offset;
+ offset += Write(buffer, offset, connectionId);
+ offset += Write(buffer, offset, action);
+ offset += Write(buffer, offset, infoHash);
+ offset += Write(buffer, offset, Encoding.ASCII.GetBytes(peerId));
+ offset += Write(buffer, offset, downloaded);
+ offset += Write(buffer, offset, left);
+ offset += Write(buffer, offset, uploaded);
+ offset += Write(buffer, offset, (int)torrentEvent);
+ offset += Write(buffer, offset, ip);
+ offset += Write(buffer, offset, key);
+ offset += Write(buffer, offset, numWanted);
+ offset += Write(buffer, offset, port);
+ offset += Write(buffer, offset, extensions);
+
+ return offset - origOffset;
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceResponseMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceResponseMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/AnnounceResponseMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -7,19 +7,35 @@
{
class AnnounceResponseMessage : Message
{
+ int action;
+ int transactionId;
+ int interval;
+ int leechers;
+ int seeders;
+
public override int ByteLength
{
- get { throw new Exception("The method or operation is not
implemented."); }
+ get { return (4 * 5); }
}
public override void Decode(byte[] buffer, int offset, int length)
{
- throw new Exception("The method or operation is not implemented.");
+ action = ReadInt(buffer, offset);
+ transactionId = ReadInt(buffer, offset + 4);
+ interval = ReadInt(buffer, offset + 8);
+ leechers = ReadInt(buffer, offset + 12);
+ seeders = ReadInt(buffer, offset + 16);
}
public override int Encode(byte[] buffer, int offset)
{
- throw new Exception("The method or operation is not implemented.");
+ offset += Write(buffer, offset, action);
+ offset += Write(buffer, offset, transactionId);
+ offset += Write(buffer, offset, interval);
+ offset += Write(buffer, offset, leechers);
+ offset += Write(buffer, offset, seeders);
+
+ return ByteLength;
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -48,10 +48,11 @@
public override int Encode(byte[] buffer, int offset)
{
- int count = Write(buffer, offset, connectionId);
- count += Write(buffer, offset, action);
- count += Write(buffer, offset, transactionId);
- return count;
+ Write(buffer, offset, connectionId);
+ Write(buffer, offset + 8, action);
+ Write(buffer, offset + 12, transactionId);
+
+ return ByteLength;
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectResponseMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectResponseMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ConnectResponseMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -5,8 +5,17 @@
using MonoTorrent.Client.Messages;
namespace MonoTorrent.Client.Tracker.UdpTrackerMessages
{
- class ConnectResponseMessage : MonoTorrent.Client.Messages.Message
+ class ConnectResponseMessage : Message
{
+ int action;
+ long connectionId;
+ int transactionId;
+
+ public ConnectResponseMessage()
+ {
+
+ }
+
public override int ByteLength
{
get { return 8 + 4 + 4; }
@@ -14,11 +23,18 @@
public override void Decode(byte[] buffer, int offset, int length)
{
+ action = ReadInt(buffer, offset);
+ transactionId = ReadInt(buffer, offset + 4);
+ connectionId = ReadInt(buffer, offset + 8);
}
public override int Encode(byte[] buffer, int offset)
{
- throw new NotImplementedException();
+ Write(buffer, offset, action);
+ Write(buffer, offset + 4, transactionId);
+ Write(buffer, offset + 8, connectionId);
+
+ return ByteLength;
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ErrorMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ErrorMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ErrorMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -7,19 +7,30 @@
{
class ErrorMessage : Message
{
+ int action;
+ int transactionId;
+ string errorMessage;
+
+
public override int ByteLength
{
- get { throw new Exception("The method or operation is not
implemented."); }
+ get { return 8 + Encoding.ASCII.GetByteCount(errorMessage); }
}
public override void Decode(byte[] buffer, int offset, int length)
{
- throw new Exception("The method or operation is not implemented.");
+ action = ReadInt(buffer, offset); offset += 4;
+ transactionId = ReadInt(buffer, offset); offset += 4;
+ errorMessage = Encoding.ASCII.GetString(buffer, offset, length -
offset);
}
public override int Encode(byte[] buffer, int offset)
{
- throw new Exception("The method or operation is not implemented.");
+ offset += Write(buffer, offset, action);
+ offset += Write(buffer, offset, transactionId);
+ offset += Encoding.ASCII.GetBytes(errorMessage, 0,
errorMessage.Length, buffer, offset);
+
+ return ByteLength;
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/Extensions/AuthenticationMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/Extensions/AuthenticationMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/Extensions/AuthenticationMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -8,20 +8,30 @@
{
class AuthenticationMessage : Message
{
+ byte usernameLength;
+ string username;
+ byte[] password;
public override int ByteLength
{
- get { throw new Exception("The method or operation is not
implemented."); }
+ get { return 4 + usernameLength + 8; }
}
public override void Decode(byte[] buffer, int offset, int length)
{
- throw new Exception("The method or operation is not implemented.");
+ usernameLength = buffer[offset]; offset++;
+ username = Encoding.ASCII.GetString(buffer, offset,
usernameLength); offset += usernameLength;
+ password = new byte[8];
+ Buffer.BlockCopy(buffer, offset, password, 0, password.Length);
}
public override int Encode(byte[] buffer, int offset)
{
- throw new Exception("The method or operation is not implemented.");
+ offset += Write(buffer, offset, usernameLength);
+ offset += Write(buffer, offset, Encoding.ASCII.GetBytes(username));
+ offset += Write(buffer, offset, password);
+
+ return ByteLength;
}
}
}
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -7,19 +7,35 @@
{
class ScrapeMessage : Message
{
+ long connectionId;
+ int action;
+ int transactionId;
+ short numberOfHashes;
+ ushort extensions;
+
public override int ByteLength
{
- get { throw new Exception("The method or operation is not
implemented."); }
+ get { return 8 + 4 + 4 + 2 + 2; }
}
public override void Decode(byte[] buffer, int offset, int length)
{
- throw new Exception("The method or operation is not implemented.");
+ connectionId = ReadLong(buffer, offset); offset += 8;
+ action = ReadInt(buffer, offset); offset += 4;
+ transactionId = ReadInt(buffer, offset); offset += 4;
+ numberOfHashes = ReadShort(buffer, offset); offset += 2;
+ extensions = (ushort)ReadShort(buffer, offset); offset += 2;
}
public override int Encode(byte[] buffer, int offset)
{
- throw new Exception("The method or operation is not implemented.");
+ offset += Write(buffer, offset, connectionId);
+ offset += Write(buffer, offset, action);
+ offset += Write(buffer, offset, transactionId);
+ offset += Write(buffer, offset, numberOfHashes);
+ offset += Write(buffer, offset, extensions);
+
+ return ByteLength;
}
}
-}
+}
\ No newline at end of file
Modified:
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeResponseMessage.cs
===================================================================
---
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeResponseMessage.cs
2008-01-27 19:16:10 UTC (rev 94076)
+++
trunk/bitsharp/src/MonoTorrent/Client/Messages/UdpTrackerMessages/ScrapeResponseMessage.cs
2008-01-27 19:16:55 UTC (rev 94077)
@@ -7,19 +7,26 @@
{
class ScrapeResponseMessage : Message
{
+ int action;
+ int transactionId;
+
public override int ByteLength
{
- get { throw new Exception("The method or operation is not
implemented."); }
+ get { return 8; }
}
public override void Decode(byte[] buffer, int offset, int length)
{
- throw new Exception("The method or operation is not implemented.");
+ action = ReadInt(buffer, offset); offset += 4;
+ transactionId = ReadInt(buffer, offset); offset += 4;
}
public override int Encode(byte[] buffer, int offset)
{
- throw new Exception("The method or operation is not implemented.");
+ Write(buffer, offset, action);
+ Write(buffer, offset, transactionId);
+
+ return ByteLength;
}
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches