protected void resetBufferPosition() { buffer.position( DirectByteBuffer.SS_CACHE, buffer_pos ); }
protected String getString() { return( "[" + offset + " - " + (offset+size-1) + ":" + buffer.position(DirectByteBuffer.SS_CACHE)+"/"+buffer.limit(DirectByteBuffer.SS_CACHE)+"]" ); } }
@Override protected void readSupport( DirectByteBuffer buffer, long offset ) throws FMFileManagerException { if ( AEDiagnostics.CHECK_DUMMY_FILE_DATA ){ offset += file_offset_in_torrent; while( buffer.hasRemaining( DirectByteBuffer.SS_FILE )){ buffer.put( DirectByteBuffer.SS_FILE, (byte)offset++ ); } }else{ buffer.position( DirectByteBuffer.SS_FILE, buffer.limit( DirectByteBuffer.SS_FILE )); } }
buffer.position( DirectByteBuffer.SS_FILE, buffer.limit( DirectByteBuffer.SS_FILE ));
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 ); }
public PooledByteBufferImpl( byte[] data ) { buffer = DirectByteBufferPool.getBuffer( DirectByteBuffer.AL_EXTERNAL, data.length ); buffer.put( DirectByteBuffer.AL_EXTERNAL, data ); buffer.position( DirectByteBuffer.AL_EXTERNAL, 0 ); }
private byte[] computeMd5Hash(DirectByteBuffer buffer) { BrokenMd5Hasher md5 = new BrokenMd5Hasher(); md5.reset(); final int position = buffer.position(DirectByteBuffer.SS_DW); md5.update(buffer.getBuffer(DirectByteBuffer.SS_DW)); buffer.position(DirectByteBuffer.SS_DW, position); ByteBuffer md5Result = ByteBuffer.allocate(16); md5Result.position(0); md5.finalDigest( md5Result ); final byte[] result =new byte[16]; md5Result.position(0); for (int i =0; i <result.length; i++ ) { result[i] = md5Result.get(); } return result; }
RawMessage raw = it.next(); int pos = raw.getRawData()[0].position(DirectByteBuffer.SS_NET); int length = raw.getRawData()[0].limit( DirectByteBuffer.SS_NET );
protected void doRequest( DiskAccessRequestListener l ) { Object[] stuff = (Object[])chunks.get( chunk_index++ ); if ( chunk_index > 0 ){ buffer.position( DirectByteBuffer.SS_DR, chunk_limit ); } chunk_limit = ((Integer)stuff[2]).intValue(); buffer.limit( DirectByteBuffer.SS_DR, chunk_limit ); short cache_policy = dm_request.getUseCache()?CacheFile.CP_READ_CACHE:CacheFile.CP_NONE; if ( dm_request.getFlush()){ cache_policy |= CacheFile.CP_FLUSH; } disk_access.queueReadRequest( (CacheFile)stuff[0], ((Long)stuff[1]).longValue(), buffer, cache_policy, l ); }
@Override public Message deserialize( DirectByteBuffer data, byte version ) throws MessageException { int pos = data.position( DirectByteBuffer.SS_MSG ); byte[] dict_bytes = new byte[ Math.min( 128, data.remaining( DirectByteBuffer.SS_MSG )) ]; data.get( DirectByteBuffer.SS_MSG, dict_bytes ); try{ Map root = BDecoder.decode( dict_bytes ); data.position( DirectByteBuffer.SS_MSG, pos + BEncoder.encode( root ).length ); return( new AZMetaData( root, data, version )); }catch( Throwable e ){ e.printStackTrace(); throw( new MessageException( "decode failed", e )); } }
@Override public Message deserialize( DirectByteBuffer data, byte version ) throws MessageException { int pos = data.position( DirectByteBuffer.SS_MSG ); byte[] dict_bytes = new byte[ Math.min( 128, data.remaining( DirectByteBuffer.SS_MSG )) ]; data.get( DirectByteBuffer.SS_MSG, dict_bytes ); try{ Map root = BDecoder.decode( dict_bytes ); data.position( DirectByteBuffer.SS_MSG, pos + BEncoder.encode( root ).length ); return( new UTMetaData( root, data, version )); }catch( Throwable e ){ e.printStackTrace(); throw( new MessageException( "decode failed", e )); } }
@Override public void write( RandomAccessFile raf, DirectByteBuffer[] buffers, long position ) throws FMFileManagerException { for (int i=0;i<buffers.length;i++){ DirectByteBuffer buffer = buffers[i]; int len = buffers[i].limit(SS) - buffers[i].position(SS); write( raf, buffer, position ); position += len; } if ( position > current_length ){ setLength( raf, position ); } }
@Override public void read( DirectByteBuffer buffer, long position, short policy ) throws CacheFileManagerException { boolean read_cache = ( policy & CP_READ_CACHE ) != 0; boolean flush = ( policy & CP_FLUSH ) != 0; if ( flush ){ int file_buffer_position = buffer.position(DirectByteBuffer.SS_CACHE); int file_buffer_limit = buffer.limit(DirectByteBuffer.SS_CACHE); int read_length = file_buffer_limit - file_buffer_position; flushCache( position, read_length, false, -1, 0, -1 ); } readCache( buffer, position, false, !read_cache ); }
protected CacheEntry( int _entry_type, CacheFileWithCache _file, DirectByteBuffer _buffer, long _offset, int _size ) { entry_type = _entry_type; file = _file; buffer = _buffer; offset = _offset; size = _size; buffer_pos = buffer.position(DirectByteBuffer.SS_CACHE); buffer_limit = buffer.limit(DirectByteBuffer.SS_CACHE); if ( size != buffer_limit - buffer_pos ){ Debug.out( "CacheEntry: initial size incorrect - size =" + size + ", pos = " + buffer_pos + ", lim = " + buffer_limit ); } dirty = true; last_used = SystemTime.getCurrentTime(); }
@Override public void read( RandomAccessFile raf, DirectByteBuffer[] buffers, long position ) throws FMFileManagerException { for (int i=0;i<buffers.length;i++){ DirectByteBuffer buffer = buffers[i]; int len = buffers[i].limit(SS) - buffers[i].position(SS); read( raf, buffer, position ); int rem = buffers[i].remaining( SS ); position += len - rem; if ( rem > 0 ){ break; } } if ( position > current_length ){ setLength( raf, position ); } }
@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 ( buffer.limit(SS_CACHE) - buffer.position(SS_CACHE) != entry.getLength()){
@Override protected Message createMessage(DirectByteBuffer ref_buff) throws MessageException { int old_position = ref_buff.position(DirectByteBuffer.SS_MSG); byte id = ref_buff.get(DirectByteBuffer.SS_MSG); if (id != 20) { ref_buff.position(DirectByteBuffer.SS_MSG, old_position); return super.createMessage(ref_buff);