Class TransportImpl
- java.lang.Object
-
- com.biglybt.core.networkmanager.impl.TransportImpl
-
- All Implemented Interfaces:
Transport
,TransportBase
- Direct Known Subclasses:
TCPTransportImpl
,UDPTransport
public abstract class TransportImpl extends java.lang.Object implements Transport
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.biglybt.core.networkmanager.Transport
Transport.ConnectListener
-
-
Field Summary
Fields Modifier and Type Field Description private java.nio.ByteBuffer
data_already_read
private TransportHelperFilter
filter
private boolean
is_ready_for_read
private boolean
is_ready_for_write
private long
last_ready_for_read
private java.lang.Throwable
read_select_failure
private EventWaiter
read_waiter
private static TransportStats
stats
private boolean
trace
private java.lang.Throwable
write_select_failure
private EventWaiter
write_waiter
-
Fields inherited from interface com.biglybt.core.networkmanager.Transport
TRANSPORT_MODE_FAST, TRANSPORT_MODE_NORMAL, TRANSPORT_MODE_TURBO
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
TransportImpl()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
bindConnection(NetworkConnection connection)
void
connectedInbound()
Indicate that inbound connection is completevoid
connectedOutbound()
java.lang.String
getEncryption(boolean verbose)
Return a textual description of the encryption for this transportTransportHelperFilter
getFilter()
java.lang.String
getProtocol()
TransportStartpoint
getTransportStartpoint()
java.lang.Object
getUserData(java.lang.Object key)
boolean
isEncrypted()
long
isReadyForRead(EventWaiter waiter)
Is the transport ready to read, i.e.boolean
isReadyForWrite(EventWaiter waiter)
Is the transport ready to write, i.e.boolean
isSOCKS()
long
read(java.nio.ByteBuffer[] buffers, int array_offset, int length)
Read data from the transport into the given buffers.protected void
readFailed(java.lang.Throwable msg)
protected boolean
readyForRead(boolean ready)
protected boolean
readyForWrite(boolean ready)
private void
registerSelectHandling()
private void
requestReadSelect()
private void
requestWriteSelect()
void
setAlreadyRead(java.nio.ByteBuffer bytes_already_read)
Inject the given already-read data back into the read stream.void
setFilter(TransportHelperFilter _filter)
void
setReadyForRead()
fake a wakeup so that a read cycle is attemptedvoid
setTrace(boolean on)
void
setUserData(java.lang.Object key, java.lang.Object value)
void
unbindConnection(NetworkConnection connection)
long
write(java.nio.ByteBuffer[] buffers, int array_offset, int length)
Write data to the transport from the given buffers.protected void
writeFailed(java.lang.Throwable msg)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.biglybt.core.networkmanager.Transport
close, connectOutbound, getMssSize, getTransportEndpoint, getTransportMode, setTransportMode
-
Methods inherited from interface com.biglybt.core.networkmanager.TransportBase
getDescription, isTCP
-
-
-
-
Field Detail
-
filter
private TransportHelperFilter filter
-
stats
private static final TransportStats stats
-
data_already_read
private java.nio.ByteBuffer data_already_read
-
read_waiter
private volatile EventWaiter read_waiter
-
write_waiter
private volatile EventWaiter write_waiter
-
is_ready_for_write
private volatile boolean is_ready_for_write
-
is_ready_for_read
private volatile boolean is_ready_for_read
-
write_select_failure
private java.lang.Throwable write_select_failure
-
read_select_failure
private java.lang.Throwable read_select_failure
-
last_ready_for_read
private long last_ready_for_read
-
trace
private boolean trace
-
-
Method Detail
-
getTransportStartpoint
public TransportStartpoint getTransportStartpoint()
- Specified by:
getTransportStartpoint
in interfaceTransport
-
setFilter
public void setFilter(TransportHelperFilter _filter)
-
getFilter
public TransportHelperFilter getFilter()
-
setAlreadyRead
public void setAlreadyRead(java.nio.ByteBuffer bytes_already_read)
Description copied from interface:Transport
Inject the given already-read data back into the read stream.- Specified by:
setAlreadyRead
in interfaceTransport
- Parameters:
bytes_already_read
- data
-
getEncryption
public java.lang.String getEncryption(boolean verbose)
Description copied from interface:Transport
Return a textual description of the encryption for this transport- Specified by:
getEncryption
in interfaceTransport
- Returns:
-
getProtocol
public java.lang.String getProtocol()
- Specified by:
getProtocol
in interfaceTransport
-
isEncrypted
public boolean isEncrypted()
- Specified by:
isEncrypted
in interfaceTransport
-
isReadyForWrite
public boolean isReadyForWrite(EventWaiter waiter)
Is the transport ready to write, i.e. will a write request result in >0 bytes written.- Specified by:
isReadyForWrite
in interfaceTransportBase
- Returns:
- true if the transport is write ready, false if not yet ready
-
readyForWrite
protected boolean readyForWrite(boolean ready)
-
writeFailed
protected void writeFailed(java.lang.Throwable msg)
-
isReadyForRead
public long isReadyForRead(EventWaiter waiter)
Is the transport ready to read, i.e. will a read request result in >0 bytes read.- Specified by:
isReadyForRead
in interfaceTransportBase
- Returns:
- 0 if the transport is read ready, millis since last ready or -1 if never ready
-
readyForRead
protected boolean readyForRead(boolean ready)
-
setReadyForRead
public void setReadyForRead()
Description copied from interface:Transport
fake a wakeup so that a read cycle is attempted- Specified by:
setReadyForRead
in interfaceTransport
-
readFailed
protected void readFailed(java.lang.Throwable msg)
-
write
public long write(java.nio.ByteBuffer[] buffers, int array_offset, int length) throws java.io.IOException
Write data to the transport from the given buffers. NOTE: Works like GatheringByteChannel.- Specified by:
write
in interfaceTransport
- Parameters:
buffers
- from which bytes are to be retrievedarray_offset
- offset within the buffer array of the first buffer from which bytes are to be retrievedlength
- maximum number of buffers to be accessed- Returns:
- number of bytes written
- Throws:
java.io.IOException
- on write error
-
read
public long read(java.nio.ByteBuffer[] buffers, int array_offset, int length) throws java.io.IOException
Read data from the transport into the given buffers. NOTE: Works like ScatteringByteChannel.- Specified by:
read
in interfaceTransport
- Parameters:
buffers
- into which bytes are to be placedarray_offset
- offset within the buffer array of the first buffer into which bytes are to be placedlength
- maximum number of buffers to be accessed- Returns:
- number of bytes read
- Throws:
java.io.IOException
- on read error
-
requestWriteSelect
private void requestWriteSelect()
-
requestReadSelect
private void requestReadSelect()
-
connectedInbound
public void connectedInbound()
Description copied from interface:Transport
Indicate that inbound connection is complete- Specified by:
connectedInbound
in interfaceTransport
-
connectedOutbound
public void connectedOutbound()
-
bindConnection
public void bindConnection(NetworkConnection connection)
- Specified by:
bindConnection
in interfaceTransport
-
unbindConnection
public void unbindConnection(NetworkConnection connection)
- Specified by:
unbindConnection
in interfaceTransport
-
getUserData
public java.lang.Object getUserData(java.lang.Object key)
- Specified by:
getUserData
in interfaceTransport
-
setUserData
public void setUserData(java.lang.Object key, java.lang.Object value)
- Specified by:
setUserData
in interfaceTransport
-
registerSelectHandling
private void registerSelectHandling()
-
-