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

Reply via email to