@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() +"] decode error: payload not empty" ); } if( data != null ) data.returnToPool(); return new BTUninterested(version); }
@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() +"] decode error: payload not empty" ); } if( data != null ) data.returnToPool(); return new BTUnchoke( version ); }
@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() +"] decode error: payload not empty" ); } if( data != null ) data.returnToPool(); return new BTInterested(version); }
@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() +"] decode error: payload not empty" ); } if( data != null ) data.returnToPool(); return new BTKeepAlive(version); }
} else { fc.position(offset); while (fc.position() < fc.size() && buffer.hasRemaining(DirectByteBuffer.SS_FILE)) buffer.read(DirectByteBuffer.SS_FILE,fc);
@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() + "] decode error: payload not empty [" +data.remaining(DirectByteBuffer.SS_MSG)+ "]" ); } if( data != null ) data.returnToPool(); return new BTHaveNone(version); }
@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() + "] decode error: payload not empty [" +data.remaining(DirectByteBuffer.SS_MSG)+ "]" ); } if( data != null ) data.returnToPool(); return new BTChoke(version); }
@Override public Message deserialize(DirectByteBuffer data, byte version ) throws MessageException { if( data != null && data.hasRemaining( DirectByteBuffer.SS_MSG ) ) { throw new MessageException( "[" +getID() + "] decode error: payload not empty [" +data.remaining(DirectByteBuffer.SS_MSG)+ "]" ); } if( data != null ) data.returnToPool(); return new BTHaveAll(version); }
@Override protected boolean writeSupport( SocketChannel sc ) throws IOException { // socket SX -> SY via BX // so if SX = source_channel then BX is target buffer SocketChannel chan1 = sc; SocketChannel chan2 = sc==source_channel?target_channel:source_channel; DirectByteBuffer read_buffer = sc==source_channel?target_buffer:source_buffer; int written = read_buffer.write( DirectByteBuffer.SS_PROXY, chan1 ); if ( chan1 == target_channel ){ outward_bytes += written; }else{ inward_bytes += written; } if ( read_buffer.hasRemaining(DirectByteBuffer.SS_PROXY)){ connection.requestWriteSelect( chan1 ); }else{ read_buffer.position(DirectByteBuffer.SS_PROXY,0); read_buffer.limit( DirectByteBuffer.SS_PROXY, read_buffer.capacity(DirectByteBuffer.SS_PROXY)); connection.requestReadSelect( chan2 ); } return( written > 0 ); }
if( !payload_buffer.hasRemaining( SS ) && !is_paused ) { //full message received! payload_buffer.position( SS, 0 ); //prepare for use if( !length_buffer.hasRemaining( SS ) ) { //done reading the length reading_length_mode = false; length_buffer.position( SS, 0 );
if( !payload_buffer.hasRemaining( SS ) && !is_paused ) { //full message received! payload_buffer.position( SS, 0 ); if( !length_buffer.hasRemaining( SS ) ) { //done reading the length reading_length_mode = false;
if ( read_buffer.hasRemaining(DirectByteBuffer.SS_PROXY)){
if ( write_block.hasRemaining( SS )){ if ( write_block.hasRemaining( SS )){