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 ); }
/** * 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 ); }
@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}; }
handshake_data.put( SS, ref_buff ); handshake_data.flip( SS );
public PooledByteBufferImpl( byte[] data ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_EXTERNAL, data.length ); buffer.put( DirectByteBuffer.AL_EXTERNAL, data ); buffer.position( DirectByteBuffer.AL_EXTERNAL, 0 ); }
@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 }); }
public PooledByteBufferImpl( byte[] data, int offset, int length ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_EXTERNAL, length ); buffer.put( DirectByteBuffer.AL_EXTERNAL, data, offset, length ); buffer.position( DirectByteBuffer.AL_EXTERNAL, 0 ); }
@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; }
/** * 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; }
@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; }
long remainingInTargetBuffer = buffer.remaining(DirectByteBuffer.SS_FILE); MappedByteBuffer buf = fc.map(MapMode.READ_ONLY, offset, Math.min(remainingInFile,remainingInTargetBuffer)); buffer.put(DirectByteBuffer.SS_FILE, buf); } else { fc.position(offset);
b.put(DirectByteBuffer.SS_FILE, buf);
cache_buffer.put( SS_CACHE, file_buffer );
buffer.put(DirectByteBuffer.SS_DW, blanks );
file_buffer.put( SS_CACHE, entry_buffer );