package net.tootallnate.websocket; import java.nio.ByteBuffer; import net.tootallnate.websocket.exeptions.InvalidDataException; import net.tootallnate.websocket.exeptions.InvalidFrameException; public class FramedataImpl1 implements FrameBuilder { protected static byte[] emptyarray = {}; protected boolean fin; protected Opcode optcode; private ByteBuffer unmaskedpayload; protected boolean transferemasked; public FramedataImpl1() { } public FramedataImpl1( Opcode op ) { this.optcode = op; unmaskedpayload = ByteBuffer.wrap( emptyarray ); } public FramedataImpl1( Framedata f ) { fin = f.isFin(); optcode = f.getOpcode(); unmaskedpayload = ByteBuffer.wrap( f.getPayloadData() ); transferemasked = f.getTransfereMasked(); } @Override public boolean isFin() { return fin; } @Override public Opcode getOpcode() { return optcode; } @Override public boolean getTransfereMasked() { return transferemasked; } @Override public byte[] getPayloadData() { return unmaskedpayload.array(); } @Override public void setFin( boolean fin ) { this.fin = fin; } @Override public void setOptcode( Opcode optcode ) { this.optcode = optcode; } @Override public void setPayload( byte[] payload ) throws InvalidDataException { unmaskedpayload = ByteBuffer.wrap( payload ); } @Override public void setTransferemasked( boolean transferemasked ) { this.transferemasked = transferemasked; } @Override public void append( Framedata nextframe ) throws InvalidFrameException { if( unmaskedpayload == null ) { unmaskedpayload = ByteBuffer.wrap( nextframe.getPayloadData() ); } else { // TODO might be inefficient. Cosider a global buffer pool ByteBuffer tmp = ByteBuffer.allocate( nextframe.getPayloadData().length + unmaskedpayload.capacity() ); tmp.put( unmaskedpayload.array() ); tmp.put( nextframe.getPayloadData() ); unmaskedpayload = tmp; } fin = nextframe.isFin(); } @Override public String toString() { return "Framedata{ optcode:" + getOpcode() + ", fin:" + isFin() + ", payloadlength:" + unmaskedpayload.limit() + ", payload:" + Charsetfunctions.utf8Bytes( new String( unmaskedpayload.array() ) ) + "}"; } }