Guest User

Untitled

a guest
Feb 18th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.44 KB | None | 0 0
  1. package com.runescape.net.packet.encryption;
  2.  
  3. import java.nio.ByteBuffer;
  4.  
  5. import org.jboss.netty.buffer.BigEndianHeapChannelBuffer;
  6. import org.jboss.netty.buffer.ChannelBuffer;
  7. import org.jboss.netty.buffer.ChannelBuffers;
  8. import org.jboss.netty.channel.Channel;
  9. import org.jboss.netty.channel.ChannelHandlerContext;
  10. import org.jboss.netty.handler.codec.frame.FrameDecoder;
  11.  
  12. import com.runescape.net.packet.RSCPacket;
  13.  
  14. public final class PacketDecoder extends FrameDecoder {
  15.  
  16.     @Override
  17.     protected Object decode(ChannelHandlerContext chc, Channel channel,
  18.             ChannelBuffer channelBuffer) throws Exception {
  19.  
  20.         if (channelBuffer instanceof BigEndianHeapChannelBuffer) {
  21.             BigEndianHeapChannelBuffer buffer = (BigEndianHeapChannelBuffer) channelBuffer;
  22.             ByteBuffer in = ByteBuffer.wrap(buffer.array());
  23.             if (in.remaining() >= 2) {
  24.                 byte[] buf = new byte[] { in.get(), in.get() };
  25.                 int length = ((short) ((buf[0] & 0xff) << 8) | (short) (buf[1] & 0xff));
  26.                 if (length <= in.remaining()) {
  27.                     if (length - 1 < 0) {
  28.                         chc.getChannel().close();
  29.                         return true;
  30.                     }
  31.                     byte[] payload = new byte[length - 1];
  32.                     int id = in.get() & 0xff;
  33.                     in.get(payload);
  34.                     in.rewind();
  35.                     channelBuffer.readByte();
  36.                     return new RSCPacket(chc, id, payload);
  37.                 } else {
  38.                     in.rewind();
  39.                     channelBuffer.readByte();
  40.                     return ChannelBuffers.EMPTY_BUFFER;
  41.                 }
  42.             }
  43.         }
  44.         return channelBuffer;
  45.     }
  46.  
  47. }
Add Comment
Please, Sign In to add comment