@Override public DirectByteBuffer[] getData() { if( buffer == null ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_SUGGEST_PIECE, 4 ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer.flip( DirectByteBuffer.SS_MSG ); } return new DirectByteBuffer[]{ buffer }; }
@Override public DirectByteBuffer[] getData() { if ( buffer == null) { buffer = DirectByteBufferPool.getBuffer(DirectByteBuffer.AL_MSG_LT_HANDSHAKE, 1 ); buffer.put(DirectByteBuffer.SS_MSG, (byte)(upload_only?1:0)); buffer.flip(DirectByteBuffer.SS_MSG); } return( new DirectByteBuffer[]{ buffer }); }
@Override public DirectByteBuffer[] getRawData() { if( buffer == null ) { DirectByteBuffer dbb = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_KEEPALIVE, 4 ); dbb.putInt( DirectByteBuffer.SS_BT, 0 ); dbb.flip( DirectByteBuffer.SS_BT ); buffer = new DirectByteBuffer[]{ dbb }; } return buffer; }
@Override public DirectByteBuffer[] getData() { if( buffer == null ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_ALLOWED_FAST, 4 ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer.flip( DirectByteBuffer.SS_MSG ); } return new DirectByteBuffer[]{ buffer }; }
@Override public DirectByteBuffer[] getData() { if( buffer == null ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_HAVE, 4 ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer.flip( DirectByteBuffer.SS_MSG ); } return new DirectByteBuffer[]{ buffer }; }
@Override public DirectByteBuffer[] getData() { DirectByteBuffer[] orig_data = this.base_message.getData(); DirectByteBuffer[] new_data = new DirectByteBuffer[orig_data.length + 1]; if (buffer_header == null ) { buffer_header = DirectByteBufferPool.getBuffer(DirectByteBuffer.AL_MSG_LT_EXT_MESSAGE, 1); buffer_header.put(DirectByteBuffer.SS_MSG, this.extension_id); buffer_header.flip(DirectByteBuffer.SS_MSG); } new_data[0] = buffer_header; System.arraycopy(orig_data, 0, new_data, 1, orig_data.length); return new_data; }
@Override public DirectByteBuffer[] getData() { if (buffer == null) { buffer = DirectByteBufferPool.getBuffer(DirectByteBuffer.AL_MSG_BT_DHT_PORT, 2); short s_port = (short)port; buffer.put(DirectByteBuffer.SS_MSG, (byte)(s_port >> 8)); buffer.put(DirectByteBuffer.SS_MSG, (byte)(s_port & 0xff)); buffer.flip(DirectByteBuffer.SS_MSG); } return new DirectByteBuffer[] {buffer}; }
@Override public DirectByteBuffer[] getData() { if( buffer[0] == null ) { buffer[0] = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_PIECE, 8 ); buffer[0].putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer[0].putInt( DirectByteBuffer.SS_MSG, piece_offset ); buffer[0].flip( DirectByteBuffer.SS_MSG ); } return buffer; }
/** * Convert the given message payload map to a bencoded byte stream. * @param payload to convert * @return bencoded serialization */ public static DirectByteBuffer convertPayloadToBencodedByteStream( Map payload, byte alloc_id ) { byte[] raw_payload; try { raw_payload = BEncoder.encode( payload ); if ( raw_payload == null || raw_payload.length == 0 ){ throw( new Exception( "Encoding failed" )); } } catch( Throwable t ) { System.err.println( "Payload encoding failed: " + payload ); Debug.out( t ); raw_payload = new byte[0]; } DirectByteBuffer buffer = DirectByteBufferPool.getBuffer( alloc_id, raw_payload.length ); buffer.put( DirectByteBuffer.SS_MSG, raw_payload ); buffer.flip( DirectByteBuffer.SS_MSG ); return buffer; }
private void constructBuffer() { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_HAND, 68 ); buffer.put( DirectByteBuffer.SS_MSG, (byte)PROTOCOL.length() ); buffer.put( DirectByteBuffer.SS_MSG, PROTOCOL.getBytes() ); buffer.put( DirectByteBuffer.SS_MSG, reserved_bytes ); buffer.put( DirectByteBuffer.SS_MSG, datahash_bytes ); buffer.put( DirectByteBuffer.SS_MSG, peer_id_bytes ); buffer.flip( DirectByteBuffer.SS_MSG ); }
@Override public DirectByteBuffer[] getData() { if( buffer == null ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_REJECT_REQUEST, 12 ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_offset ); buffer.putInt( DirectByteBuffer.SS_MSG, length ); buffer.flip( DirectByteBuffer.SS_MSG ); } return new DirectByteBuffer[]{ buffer }; }
@Override public DirectByteBuffer[] getData() { if (buffer_array == null) { buffer_array = new DirectByteBuffer[1]; DirectByteBuffer buffer = DirectByteBufferPool.getBuffer(DirectByteBuffer.AL_MSG_LT_HANDSHAKE, getBencodedData().length); buffer_array[0] = buffer; buffer.put(DirectByteBuffer.SS_MSG, getBencodedData()); buffer.flip(DirectByteBuffer.SS_MSG); } return buffer_array; }
@Override public DirectByteBuffer[] getData() { if( buffer == null ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_CANCEL, 12 ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_offset ); buffer.putInt( DirectByteBuffer.SS_MSG, length ); buffer.flip( DirectByteBuffer.SS_MSG ); } return new DirectByteBuffer[]{ buffer }; }
@Override public DirectByteBuffer[] getData() { if( buffer == null ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_REQUEST, 12 ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_number ); buffer.putInt( DirectByteBuffer.SS_MSG, piece_offset ); buffer.putInt( DirectByteBuffer.SS_MSG, length ); buffer.flip( DirectByteBuffer.SS_MSG ); } return new DirectByteBuffer[]{ buffer }; }
/** * Create the proper BT raw message from the given base message. * @param base_message to create from * @return BT raw message */ public static RawMessage createBTRawMessage( Message base_message ) { if( base_message instanceof RawMessage ) { //used for handshake and keep-alive messages return (RawMessage)base_message; } LegacyData ld = (LegacyData)legacy_data.get( base_message.getID() ); if( ld == null ) { Debug.out( "legacy message type id not found for [" +base_message.getID()+ "]" ); return null; //message id type not found } DirectByteBuffer[] payload = base_message.getData(); int payload_size = 0; for( int i=0; i < payload.length; i++ ) { payload_size += payload[i].remaining( DirectByteBuffer.SS_MSG ); } DirectByteBuffer header = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_MSG_BT_HEADER, 5 ); header.putInt( DirectByteBuffer.SS_MSG, 1 + payload_size ); header.put( DirectByteBuffer.SS_MSG, ld.bt_id ); header.flip( DirectByteBuffer.SS_MSG ); DirectByteBuffer[] raw_buffs = new DirectByteBuffer[ payload.length + 1 ]; raw_buffs[0] = header; System.arraycopy(payload, 0, raw_buffs, 1, payload.length); return new RawMessageImpl( base_message, raw_buffs, ld.priority, ld.is_no_delay, ld.to_remove ); }
header.flip( DirectByteBuffer.SS_MSG );
handshake_data.putInt( SS, HANDSHAKE_FAKE_LENGTH ); handshake_data.put( SS, ref_buff ); handshake_data.flip( SS );
read_buffer.flip(DirectByteBuffer.SS_PROXY);
header.flip( bss );