Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.runescape.net.packet.encryption;
- import java.nio.ByteBuffer;
- import org.jboss.netty.buffer.BigEndianHeapChannelBuffer;
- import org.jboss.netty.buffer.ChannelBuffer;
- import org.jboss.netty.buffer.ChannelBuffers;
- import org.jboss.netty.channel.Channel;
- import org.jboss.netty.channel.ChannelHandlerContext;
- import org.jboss.netty.handler.codec.frame.FrameDecoder;
- import com.runescape.net.packet.RSCPacket;
- public final class PacketDecoder extends FrameDecoder {
- @Override
- protected Object decode(ChannelHandlerContext chc, Channel channel,
- ChannelBuffer channelBuffer) throws Exception {
- if (channelBuffer instanceof BigEndianHeapChannelBuffer) {
- BigEndianHeapChannelBuffer buffer = (BigEndianHeapChannelBuffer) channelBuffer;
- ByteBuffer in = ByteBuffer.wrap(buffer.array());
- if (in.remaining() >= 2) {
- byte[] buf = new byte[] { in.get(), in.get() };
- int length = ((short) ((buf[0] & 0xff) << 8) | (short) (buf[1] & 0xff));
- if (length <= in.remaining()) {
- if (length - 1 < 0) {
- chc.getChannel().close();
- return true;
- }
- byte[] payload = new byte[length - 1];
- int id = in.get() & 0xff;
- in.get(payload);
- in.rewind();
- channelBuffer.readByte();
- return new RSCPacket(chc, id, payload);
- } else {
- in.rewind();
- channelBuffer.readByte();
- return ChannelBuffers.EMPTY_BUFFER;
- }
- }
- }
- return channelBuffer;
- }
- }
Add Comment
Please, Sign In to add comment