Package net.i2p.client.streaming

Implements a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages.

See:
          Description

Interface Summary
ConnectionManager.PingNotifier  
I2PServerSocket Defines how to listen for streaming peer connections
I2PSocket Minimalistic adapter between the socket api and I2PTunnel's way.
I2PSocket.SocketErrorListener Allow notification of underlying errors communicating across I2P without waiting for any sort of cleanup process.
I2PSocketManager Centralize the coordination and multiplexing of the local client's streaming.
I2PSocketManager.DisconnectListener  
I2PSocketOptions Define the configuration for streaming and verifying data on the socket.
MessageOutputStream.DataReceiver Define a component to receive data flushed from this stream
MessageOutputStream.WriteStatus Define a way to detect the status of a write
TaskScheduler Coordinates what we do 'next'.
 

Class Summary
ByteCollector Like a StringBuffer, but for bytes.
Connection Maintain the state controlling a streaming connection between two destinations.
ConnectionDataReceiver Receive data from the MessageOutputStream, build a packet, and send it through a connection.
ConnectionHandler Receive new connection attempts
ConnectionManager Coordinate all of the connections for a single local destination.
ConnectionOptions Define the current options for the con (and allow custom tweaking midstream)
ConnectionPacketHandler Receive a packet for a particular connection - placing the data onto the queue, marking packets as acked, updating various fields, etc.
I2PServerSocketFull Bridge to allow accepting new connections
I2PServerSocketImpl Server socket implementation, allowing multiple threads to accept I2PSockets and pull from a queue populated by various threads (each of whom have their own timeout)
I2PSocketFull Bridge between the full streaming lib and the I2PSocket API
I2PSocketImpl Initial stub implementation for the socket
I2PSocketManagerFactory Simplify the creation of I2PSession and transient I2P Destination objects if necessary to create a socket manager.
I2PSocketManagerFull Centralize the coordination and multiplexing of the local client's streaming.
I2PSocketManagerImpl Centralize the coordination and multiplexing of the local client's streaming.
I2PSocketOptionsImpl Define the configuration for streaming and verifying data on the socket.
MessageHandler Receive raw information from the I2PSession and turn it into Packets, if we can.
MessageInputStream Stream that can be given messages out of order yet present them in order.
MessageOutputStream A stream that we can shove data into that fires off those bytes on flush or when the buffer is full.
Packet Contain a single packet transferred as part of a streaming connection.
PacketHandler receive a packet and dispatch it correctly to the connection specified, the server socket, or queue a reply RST packet.
PacketLocal coordinate local attributes about a packet - send time, ack time, number of retries, etc.
PacketQueue Queue out packets to be sent through the session.
RetransmissionTimer  
SchedulerChooser Examine a connection's state and pick the right scheduler for it.
SchedulerClosed Scheduler used for after both sides have had their close packets ACKed, but the final timeout hasn't passed.
SchedulerClosing Scheduler used for after both SYNs have been ACKed and both sides have closed the stream, but either we haven't ACKed their close or they haven't ACKed ours.
SchedulerConnectedBulk Scheduler used for after our SYN has been sent and ACKed but one (or more) sides haven't closed the stream yet.
SchedulerConnecting Scheduler used once we've sent our SYN but it hasn't been ACKed yet.
SchedulerDead Scheduler used for after the final timeout has passed or the connection was reset.
SchedulerHardDisconnected Scheduler used after we've locally done a hard disconnect, but the final timeout hasn't passed.
SchedulerImpl Base scheduler
SchedulerPreconnect Scheduler used for locally created connections where we have not yet sent the initial SYN packet.
SchedulerReceived Scheduler used after receiving an inbound connection but before we have sent our own SYN.
StreamSinkClient Simple streaming lib test app that connects to a given destination and sends it a particular amount of random data, then disconnects.
StreamSinkSend Simple streaming lib test app that connects to a given destination and sends the contents of a file, then disconnects.
StreamSinkServer Listen to a destination, receiving any sockets and writing anything they send to a new file.
TestSwarm Sit around on a destination, receiving lots of data and sending lots of data to whomever talks to us.
 

Exception Summary
TooManyStreamsException We attempted to have more open streams than we are willing to put up with
 

Package net.i2p.client.streaming Description

Implements a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages.

When an application wants to use streams, it must fetch an I2PSocketManager from the I2PSocketManagerFactory, which in turn builds its own I2PSession internally. All communication over that I2PSession is handled by the I2PSocketManager, as it imposes its own formatting on the raw messages sent and received. If an application wants to receive streams from other clients on the network, it should access the blocking I2PServerSocket.accept() method, which will provide an I2PSocket when a new one is available. If an application wants to create a new stream to a peer, it should do so with the appropriate I2PSocketManager.connect(net.i2p.data.Destination, net.i2p.client.streaming.I2PSocketOptions) call.

There is a simple pair of demo applications available as well - StreamSinkServer listens to a destination and dumps the data from all sockets it accepts to individual files, while StreamSinkClient connects to a particular destination and sends a specific amount of random data then disconnects.