Package net.i2p.sam
Class SAMStreamSession
- java.lang.Object
-
- net.i2p.sam.SAMStreamSession
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,SAMMessageSess
- Direct Known Subclasses:
SAMv2StreamSession
,SAMv3StreamSession
class SAMStreamSession extends Object implements SAMMessageSess
SAM STREAM session class.- Author:
- human
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
SAMStreamSession.DisconnectListener
class
SAMStreamSession.SAMStreamSessionServer
SAM STREAM session server, running in its own thread.class
SAMStreamSession.SAMStreamSessionSocketReader
SAM STREAM socket reader, running in its own thread.class
SAMStreamSession.SAMv1StreamSessionSocketReader
protected static class
SAMStreamSession.StreamSender
Lets us push data through the stream without blocking, (even after exceeding the I2PSocket's buffer)
-
Field Summary
Fields Modifier and Type Field Description protected boolean
_isOwnSession
protected Log
_log
protected boolean
canCreate
static String
DEFAULT_FORCE_FLUSH
protected boolean
forceFlush
should we flush every time we get a STREAM SEND, or leave that up to the streaming lib to decide?static String
PROP_FORCE_FLUSH
protected SAMStreamReceiver
recv
protected SAMStreamSession.SAMStreamSessionServer
server
protected static int
SOCKET_HANDLER_BUF_SIZE
protected I2PSocketManager
socketMgr
-
Constructor Summary
Constructors Modifier Constructor Description protected
SAMStreamSession(InputStream destStream, String dir, Properties props, SAMStreamReceiver recv)
Create a new SAM STREAM session.SAMStreamSession(String dest, String dir, Properties props, SAMStreamReceiver recv)
Create a new SAM STREAM session.protected
SAMStreamSession(I2PSocketManager mgr, Properties props, SAMStreamReceiver recv, int listenport)
Create a new SAM STREAM session on an existing socket manager.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
checkSocketHandlerId(int id)
Check whether a SAM STREAM session socket handler id is still in use.void
close()
Close a SAM STREAM session.boolean
closeConnection(int id)
Close a connection managed by the SAM STREAM session.boolean
connect(int id, String dest, Properties props)
Connect the SAM STREAM session to the specified Destinationprotected int
createSocketHandler(I2PSocket s, int id)
Create a new SAM STREAM session socket handler, detaching its thread.Destination
getDestination()
Get the SAM STREAM session Destination.int
getListenPort()
int
getListenProtocol()
protected SAMStreamSession.SAMStreamSessionSocketReader
getSocketReader(int id)
Get a SAM STREAM session socket handler.protected SAMStreamSession.SAMStreamSessionSocketReader
newSAMStreamSessionSocketReader(I2PSocket s, int id)
protected SAMStreamSession.StreamSender
newStreamSender(I2PSocket s, int id)
protected void
removeSocketHandler(int id)
Remove and gracefully close a SAM STREAM session socket handler.boolean
sendBytes(int id, InputStream in, int size)
Send bytes through a SAM STREAM session.boolean
sendBytes(String s, byte[] b, int pr, int fp, int tp)
Unsupportedboolean
sendBytes(String s, byte[] b, int pr, int fp, int tp, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration)
Unsupported(package private) boolean
setReceiveLimit(int id, long limit, boolean nolimit)
void
start()
Start a SAM message-based session.
-
-
-
Field Detail
-
_log
protected final Log _log
-
SOCKET_HANDLER_BUF_SIZE
protected static final int SOCKET_HANDLER_BUF_SIZE
- See Also:
- Constant Field Values
-
recv
protected final SAMStreamReceiver recv
-
server
protected final SAMStreamSession.SAMStreamSessionServer server
-
socketMgr
protected final I2PSocketManager socketMgr
-
canCreate
protected final boolean canCreate
-
_isOwnSession
protected final boolean _isOwnSession
-
forceFlush
protected final boolean forceFlush
should we flush every time we get a STREAM SEND, or leave that up to the streaming lib to decide?
-
PROP_FORCE_FLUSH
public static final String PROP_FORCE_FLUSH
- See Also:
- Constant Field Values
-
DEFAULT_FORCE_FLUSH
public static final String DEFAULT_FORCE_FLUSH
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SAMStreamSession
public SAMStreamSession(String dest, String dir, Properties props, SAMStreamReceiver recv) throws IOException, DataFormatException, SAMException
Create a new SAM STREAM session. Caller MUST call start().- Parameters:
dest
- Base64-encoded destination and private keys, and optional offline signature section (same format as PrivateKeyFile)dir
- Session direction ("RECEIVE", "CREATE" or "BOTH") or "__v3__" if extended by SAMv3StreamSessionprops
- Properties to setup the I2P sessionrecv
- Object that will receive incoming data- Throws:
IOException
DataFormatException
SAMException
-
SAMStreamSession
protected SAMStreamSession(InputStream destStream, String dir, Properties props, SAMStreamReceiver recv) throws IOException, DataFormatException, SAMException
Create a new SAM STREAM session. Caller MUST call start().- Parameters:
destStream
- Input stream containing the binary destination and private keys, and optional offline signature section (same format as PrivateKeyFile)dir
- Session direction ("RECEIVE", "CREATE" or "BOTH") or "__v3__" if extended by SAMv3StreamSessionprops
- Properties to setup the I2P sessionrecv
- Object that will receive incoming data- Throws:
IOException
DataFormatException
SAMException
-
SAMStreamSession
protected SAMStreamSession(I2PSocketManager mgr, Properties props, SAMStreamReceiver recv, int listenport) throws IOException, DataFormatException, SAMException
Create a new SAM STREAM session on an existing socket manager. v3 only.- Parameters:
props
- Properties to setup the I2P sessionrecv
- Object that will receive incoming data- Throws:
IOException
DataFormatException
SAMException
- Since:
- 0.9.25
-
-
Method Detail
-
start
public void start()
Description copied from interface:SAMMessageSess
Start a SAM message-based session. MUST be called after constructor.- Specified by:
start
in interfaceSAMMessageSess
-
getListenProtocol
public int getListenProtocol()
- Specified by:
getListenProtocol
in interfaceSAMMessageSess
-
getListenPort
public int getListenPort()
- Specified by:
getListenPort
in interfaceSAMMessageSess
-
getDestination
public Destination getDestination()
Get the SAM STREAM session Destination.- Specified by:
getDestination
in interfaceSAMMessageSess
- Returns:
- The SAM STREAM session Destination.
-
connect
public boolean connect(int id, String dest, Properties props) throws I2PException, ConnectException, NoRouteToHostException, DataFormatException, InterruptedIOException, SAMInvalidDirectionException, IOException
Connect the SAM STREAM session to the specified Destination- Parameters:
id
- Unique id for the connectiondest
- Base64-encoded Destination to connect toprops
- Options to be used for connection- Returns:
- true if successful
- Throws:
DataFormatException
- if the destination is not validSAMInvalidDirectionException
- if trying to connect through a receive-only sessionConnectException
- if the destination refuses connectionsNoRouteToHostException
- if the destination can't be reachedInterruptedIOException
- if the connection timeoutsI2PException
- if there's another I2P-related errorIOException
-
sendBytes
public boolean sendBytes(int id, InputStream in, int size) throws IOException
Send bytes through a SAM STREAM session.- Parameters:
id
- Stream Idin
- Datastream inputsize
- Count of bytes to send- Returns:
- True if the data was queued for sending, false otherwise
- Throws:
IOException
-
close
public void close()
Close a SAM STREAM session.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceSAMMessageSess
-
closeConnection
public boolean closeConnection(int id)
Close a connection managed by the SAM STREAM session.- Parameters:
id
- Connection id- Returns:
- true on success
-
sendBytes
public boolean sendBytes(String s, byte[] b, int pr, int fp, int tp) throws I2PSessionException
Unsupported- Specified by:
sendBytes
in interfaceSAMMessageSess
- Parameters:
s
- Destinationb
- Bytes to be sent- Returns:
- True if the data was sent, false otherwise
- Throws:
I2PSessionException
- always- Since:
- 0.9.25 moved from subclass SAMv3StreamSession to implement SAMMessageSess
-
sendBytes
public boolean sendBytes(String s, byte[] b, int pr, int fp, int tp, boolean sendLeaseSet, int sendTags, int tagThreshold, int expiration) throws I2PSessionException
Unsupported- Specified by:
sendBytes
in interfaceSAMMessageSess
- Throws:
I2PSessionException
- always- Since:
- 0.9.25
-
createSocketHandler
protected int createSocketHandler(I2PSocket s, int id)
Create a new SAM STREAM session socket handler, detaching its thread.- Parameters:
s
- Socket to be handledid
- Socket id, or 0 if it must be auto-generated- Returns:
- An id associated to the socket handler
-
getSocketReader
protected SAMStreamSession.SAMStreamSessionSocketReader getSocketReader(int id)
Get a SAM STREAM session socket handler.- Parameters:
id
- Handler id- Returns:
- SAM StreamSender handler
-
checkSocketHandlerId
protected boolean checkSocketHandlerId(int id)
Check whether a SAM STREAM session socket handler id is still in use.- Parameters:
id
- Handler id- Returns:
- True if in use
-
removeSocketHandler
protected void removeSocketHandler(int id)
Remove and gracefully close a SAM STREAM session socket handler.- Parameters:
id
- Handler id to be removed
-
setReceiveLimit
boolean setReceiveLimit(int id, long limit, boolean nolimit)
-
newSAMStreamSessionSocketReader
protected SAMStreamSession.SAMStreamSessionSocketReader newSAMStreamSessionSocketReader(I2PSocket s, int id) throws IOException
- Throws:
IOException
-
newStreamSender
protected SAMStreamSession.StreamSender newStreamSender(I2PSocket s, int id) throws IOException
- Throws:
IOException
-
-