Advertisement
Guest User

TransformiceHandler.cs

a guest
Apr 4th, 2020
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.75 KB | None | 0 0
  1. using Transformice.Game;
  2. using Transformice.Utils;
  3.  
  4. using System;
  5. using System.Text;
  6.  
  7. using DotNetty.Buffers;
  8. using DotNetty.Transport.Channels;
  9.  
  10. /**
  11.  * Transformice sucks.
  12.  *
  13.  * @author Macaco <shcnedi@gmail.com>
  14.  */
  15.  
  16. namespace Transformice.Network
  17. {
  18.     class NetworkHandler : ChannelHandlerAdapter
  19.     {
  20.         private Client _client;
  21.         private byte[] _lastPacket;
  22.  
  23.         public override void ChannelRead(IChannelHandlerContext context, object message)
  24.         {
  25.             IByteBuffer buffer = message as IByteBuffer;
  26.             if (buffer.ReadableBytes < 2) return;
  27.  
  28.             byte[] buff = new byte[buffer.ReadableBytes];
  29.             buffer.ReadBytes(buff);
  30.  
  31.             string content = Encoding.ASCII.GetString(buff);
  32.             if (content.StartsWith("<policy-file-request/>"))
  33.             {
  34.                 byte[] policy = Encoding.Default.GetBytes("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>");
  35.                 context.WriteAndFlushAsync(Unpooled.CopiedBuffer(policy));
  36.             }
  37.  
  38.             if (_lastPacket != null) _lastPacket = null;
  39.  
  40.             var packet = new DataInputStream(new ByteArrayInputStream(buff));
  41.             ParsePacket(packet, buff);
  42.         }
  43.  
  44.         public void ParsePacket(DataInputStream packet, byte[] buff)
  45.         {
  46.             sbyte sizeBytes = packet.ReadByte();
  47.             int length = sizeBytes == 1 ? packet.ReadUnsignedByte() : sizeBytes == 2 ? packet.ReadUnsignedShort() : sizeBytes == 3 ? ((packet.ReadUnsignedByte() & 0xFF) << 16) | ((packet.ReadUnsignedByte() & 0xFF) << 8) | (packet.ReadUnsignedByte() & 0xFF) : 0;
  48.  
  49.             if (length == 0) return;
  50.  
  51.             sbyte packetId = packet.ReadByte();
  52.             if (packet.Available() == length)
  53.             {
  54.                 if (packet.Available() == length)
  55.                 {
  56.                     byte[] strBuff = new byte[packet.Available()];
  57.                     packet.ReadFully(strBuff);
  58.  
  59.                 }
  60.             }
  61.             else if (packet.Available() < length)
  62.             {
  63.                 _lastPacket = buff;
  64.             }
  65.             else if (packet.Available() < length)
  66.             {
  67.                 byte[] realPacket = new byte[length];
  68.                 packet.Read(realPacket, 0, length);
  69.  
  70.                 if (length >= 2) _client.ParsePacket(new DataInputStream(new ByteArrayInputStream(realPacket)), realPacket, packetId);
  71.  
  72.                 if (packet.Available() >= 2)
  73.                 {
  74.                     byte[] rest = new byte[packet.Available()];
  75.                     packet.ReadFully(rest);
  76.                     ParsePacket(new DataInputStream(new ByteArrayInputStream(rest)), rest);
  77.                 }
  78.             }
  79.         }
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement