Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package testNettyServer;
- import java.util.List;
- import io.netty.buffer.ByteBuf;
- import io.netty.buffer.Unpooled;
- import io.netty.channel.ChannelFutureListener;
- import io.netty.channel.ChannelHandlerContext;
- import io.netty.channel.ChannelPipeline;
- import io.netty.handler.codec.ByteToMessageDecoder;
- import io.netty.util.CharsetUtil;
- import static io.netty.buffer.Unpooled.*;
- public class PacketDecoder extends ByteToMessageDecoder
- {
- int readd = 0;
- boolean isFlashPolicy = true;
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out)
- {
- if (in.writerIndex()-readd<2)
- {
- return;
- }
- if(isFlashPolicy)
- {
- isFlashPolicy=false;
- final int magic1 = in.getUnsignedByte(in.readerIndex());
- final int magic2 = in.getUnsignedByte(in.readerIndex() + 1);
- boolean isFlashPolicyRequest = (magic1 == '<' && magic2 == 'p');
- if (isFlashPolicyRequest)
- {
- String XML = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>";
- ByteBuf policyResponse = Unpooled.copiedBuffer(XML, CharsetUtil.UTF_8);
- in.skipBytes(in.readableBytes());
- removeAllPipelineHandlers(ctx.pipeline());
- ctx.writeAndFlush(policyResponse).addListener(ChannelFutureListener.CLOSE);
- return;
- }
- }
- while((in.writerIndex()-readd>=2)&&((in.getShort(readd)>0 && in.writerIndex()-readd >= in.getShort(readd))||in.getShort(readd)<0))
- {
- ByteBuf bbf;
- if(in.getShort(readd)<=0)
- {
- bbf = buffer(2);
- in.getBytes(readd,bbf);
- readd+=2;
- out.add(new PacketRequest(bbf));
- }
- else
- {
- bbf = buffer(in.getShort(readd));
- in.getBytes(readd,bbf);
- readd+=in.getShort(readd);
- out.add(new PacketRequest(bbf));
- }
- }
- if(readd-in.readerIndex()>100 && readd==in.writerIndex())
- {
- in.clear();
- readd=0;
- }
- }
- private void removeAllPipelineHandlers(ChannelPipeline pipeline)
- {
- while (pipeline.first() != null)
- {
- pipeline.removeFirst();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement