net.i2p.sam

## Class SAMv2StreamSession

- java.lang.Object
- - net.i2p.sam.SAMStreamSession
  - - net.i2p.sam.SAMv2StreamSession

    public class SAMv2StreamSession
    extends SAMStreamSession

SAMv2 STREAM session class.

Author:
  mkvore

### Nested Class Summary

Nested Classes
`class` `SAMv2StreamSession.SAMv2StreamSessionSocketReader` SAM STREAM socket reader, running in its own thread.
`class` `SAMv2StreamSession.StreamConnector` SAM STREAM socket connecter, running in its own thread.
`protected class` `SAMv2StreamSession.v2StreamSender`

### Nested classes/interfaces inherited from class net.i2p.sam.SAMStreamSession

`SAMStreamSession.DisconnectListener, SAMStreamSession.SAMStreamSessionServer, SAMStreamSession.SAMStreamSessionSocketReader, SAMStreamSession.SAMv1StreamSessionSocketReader, SAMStreamSession.StreamSender, SAMStreamSession.v1StreamSender`

### Field Summary

### Fields inherited from class net.i2p.sam.SAMStreamSession

`canCreate, DEFAULT_FORCE_FLUSH, forceFlush, PROP_FORCE_FLUSH, recv, server, SOCKET_HANDLER_BUF_SIZE, socketMgr`

### Constructor Summary

Constructors
Constructor and Description
`SAMv2StreamSession(InputStream destStream, String dir, Properties props, SAMStreamReceiver recv)` Create a new SAM STREAM session.
`SAMv2StreamSession(String dest, String dir, Properties props, SAMStreamReceiver recv)` Create a new SAM STREAM session.

### Method Summary

Methods
`boolean` `connect(int id, String dest, Properties props)` Connect the SAM STREAM session to the specified Destination
`protected SAMStreamSession.SAMStreamSessionSocketReader` `newSAMStreamSessionSocketReader(I2PSocket s, int id)`
`protected SAMStreamSession.StreamSender` `newStreamSender(I2PSocket s, int id)` Lets us push data through the stream without blocking, (even after exceeding the I2PSocket's buffer)
`boolean` `setReceiveLimit(int id, long limit, boolean nolimit)` Send bytes through a SAM STREAM session.

### Methods inherited from class net.i2p.sam.SAMStreamSession

`checkSocketHandlerId, close, closeConnection, createSocketHandler, getDestination, getSocketReader, removeSocketHandler, sendBytes`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### SAMv2StreamSession

    public SAMv2StreamSession(String dest,
                      String dir,
                      Properties props,
                      SAMStreamReceiver recv)
                       throws IOException,
                              DataFormatException,
                              SAMException

Create a new SAM STREAM session.

Parameters:
  `dest` - Base64-encoded destination (private key)
  `dir` - Session direction ("RECEIVE", "CREATE" or "BOTH")
  `props` - Properties to setup the I2P session
  `recv` - Object that will receive incoming data
Throws:
  `IOException`
  `DataFormatException`
  `SAMException`

#### SAMv2StreamSession

    public SAMv2StreamSession(InputStream destStream,
                      String dir,
                      Properties props,
                      SAMStreamReceiver recv)
                       throws IOException,
                              DataFormatException,
                              SAMException

Create a new SAM STREAM session.

Parameters:
  `destStream` - Input stream containing the destination keys
  `dir` - Session direction ("RECEIVE", "CREATE" or "BOTH")
  `props` - Properties to setup the I2P session
  `recv` - Object that will receive incoming data
Throws:
  `IOException`
  `DataFormatException`
  `SAMException`

### Method Detail

#### connect

    public boolean connect(int id,
                  String dest,
                  Properties props)
                    throws DataFormatException,
                           SAMInvalidDirectionException

Connect the SAM STREAM session to the specified Destination

Overrides:
  `connect` in class `SAMStreamSession`
Parameters:
  `id` - Unique id for the connection
  `dest` - Base64-encoded Destination to connect to
  `props` - Options to be used for connection
Returns:
  true if the communication with the SAM client is ok
Throws:
  `DataFormatException` - if the destination is not valid
  `SAMInvalidDirectionException` - if trying to connect through a receive-only session

#### newStreamSender

    protected SAMStreamSession.StreamSender newStreamSender(I2PSocket s,
                                                int id)
                                                     throws IOException

Lets us push data through the stream without blocking, (even after exceeding the I2PSocket's buffer)

Overrides:
  `newStreamSender` in class `SAMStreamSession`
Parameters:
  `s` - I2PSocket
  `id` - Socket ID
Returns:
  v2StreamSender
Throws:
  `IOException`

#### newSAMStreamSessionSocketReader

    protected SAMStreamSession.SAMStreamSessionSocketReader newSAMStreamSessionSocketReader(I2PSocket s,
                                                                                int id)
                                                                                     throws IOException

Overrides:
  `newSAMStreamSessionSocketReader` in class `SAMStreamSession`
Throws:
  `IOException`

#### setReceiveLimit

    public boolean setReceiveLimit(int id,
                          long limit,
                          boolean nolimit)

Send bytes through a SAM STREAM session.

Overrides:
  `setReceiveLimit` in class `SAMStreamSession`
Parameters:
  `id` - Stream ID
  `limit` - limitation
  `nolimit` - true to limit
Returns:
  True if the data was queued for sending, false otherwise