Package net.i2p.client.streaming.impl

Implementation of a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages. This is the streaming implementation (moved for ticket #1135 to here). For the API (which you probably want), see ministreaming. Clients should not need to access anything in this package directly. Use the interfaces and factory in net.i2p.streaming. Note that this class is split across two jars, streaming.jar and ministreaming.jar. The interfaces and some code are in ministreaming.jar, but the real work gets done in streaming.jar. Clients must have both jars in their classpath. Most clients will require (only) streaming.jar, ministreaming.jar, and i2p.jar in their classpath to communicate with the router.

  • Interface Summary 
    Interface Description
    ConnectionManager.PingNotifier
    The callback interface for a pong.
    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 
    Class Description
    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 Use a bounded queue to limit the damage from SYN floods, router overload, or a slow client
    ConnectionManager
    Coordinate all of the connections for a single local destination.
    ConnectionOptions
    Define the current options for the con (and allow custom tweaking midstream) TODO many of these are not per-connection options, and should be migrated somewhere so they aren't copied for every connection
    ConnectionPacketHandler
    Receive a packet for a particular connection - placing the data onto the queue, marking packets as acked, updating various fields, etc.
    ConnThrottler
    Count how often we have received an incoming connection This offers basic DOS protection but is not a complete solution.
    I2PServerSocketFull
    Bridge to allow accepting new connections
    I2PSocketFull
    Bridge between the full streaming lib and the I2PSocket API
    I2PSocketManagerFull
    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
    This contains solely the data that goes out on the wire, including the local and remote port which is embedded in the I2CP overhead, not in the packet itself.
    PacketHandler
    receive a packet and dispatch it correctly to the connection specified, the server socket, or queue a reply RST packet.
    PacketLocal
    This is the class used for outbound packets.
    PacketQueue
    Queue out packets to be sent through the session.
    PcapWriter
    Write a standard pcap file with a "TCP" packet that can be analyzed with standard tools such as wireshark.
    RetransmissionTimer
    Per-destination timer
    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.
    SimpleBandwidthEstimator
    A Westwood+ bandwidth estimator with a first stage anti-aliasing low pass filter based on RTT, and the time-varying Westwood filter based on inter-arrival time.
    StandardServerSocket
    Bridge to I2PServerSocket.
    StandardSocket
    Bridge to I2PSocket.
    TCBShare
    Share important TCP Control Block parameters across Connections to the same remote peer.
  • Exception Summary 
    Exception Description
    TooManyStreamsException
    We attempted to have more open streams than we are willing to put up with