net.i2p.client.impl
Class I2PSessionMuxedImpl

java.lang.Object
  extended by net.i2p.client.impl.I2PSessionImpl
      extended by net.i2p.client.impl.I2PSessionImpl2
          extended by net.i2p.client.impl.I2PSessionMuxedImpl
All Implemented Interfaces:
I2PSession, I2CPMessageReader.I2CPMessageEventListener
Direct Known Subclasses:
SubSession

 class I2PSessionMuxedImpl
extends I2PSessionImpl2

I2PSession with protocol and ports Streaming lib has been modified to send I2PSession.PROTO_STREAMING but still receives all. It sends with fromPort and toPort = 0, and receives on all ports. No datagram apps have been modified yet. Therefore the compatibility situation is as follows: Compatibility: old streaming -> new streaming: sends proto anything, rcvs proto anything new streaming -> old streaming: sends PROTO_STREAMING, ignores rcvd proto old datagram -> new datagram: sends proto anything, rcvs proto anything new datagram -> old datagram: sends PROTO_DATAGRAM, ignores rcvd proto In all the above cases, streaming and datagram receive traffic for the other protocol, same as before. old datagram -> new muxed: doesn't work because the old sends proto 0 but the udp side of the mux registers with PROTO_DATAGRAM, so the datagrams go to the streaming side, same as before. old streaming -> new muxed: works Typical Usage: Streaming + datagrams: I2PSocketManager sockMgr = getSocketManager(); I2PSession session = sockMgr.getSession(); session.addMuxedSessionListener(myI2PSessionMuxedListener, I2PSession.PROTO_DATAGRAM, I2PSession.PORT_ANY); * or * session.addSessionListener(myI2PSessionListener, I2PSession.PROTO_DATAGRAM, I2PSession.PORT_ANY); session.sendMessage(dest, payload, I2PSession.PROTO_DATAGRAM, fromPort, toPort); Datagrams only, with multiple ports: I2PClient client = I2PClientFactory.createClient(); ... I2PSession session = client.createSession(...); session.addMuxedSessionListener(myI2PSessionMuxedListener, I2PSession.PROTO_DATAGRAM, I2PSession.PORT_ANY); * or * session.addSessionListener(myI2PSessionListener, I2PSession.PROTO_DATAGRAM, I2PSession.PORT_ANY); session.sendMessage(dest, payload, I2PSession.PROTO_DATAGRAM, fromPort, toPort); Multiple streaming ports: Needs some streaming lib hacking

Since:
0.7.1
Author:
zzz

Nested Class Summary
protected  class I2PSessionMuxedImpl.MuxedAvailabilityNotifier
           
 
Nested classes/interfaces inherited from class net.i2p.client.impl.I2PSessionImpl
I2PSessionImpl.AvailabilityNotifier, I2PSessionImpl.State
 
Field Summary
 
Fields inherited from class net.i2p.client.impl.I2PSessionImpl2
_noEffort, _sendingStates, _sendMessageNonce
 
Fields inherited from class net.i2p.client.impl.I2PSessionImpl
_availabilityNotifier, _availableMessages, _bwLimits, _bwReceivedLock, _context, _handlerMap, _hostname, _leaseSet, _leaseSetWait, _log, _pendingLookups, _portNum, _producer, _queue, _reader, _sessionListener, _socket, _state, _stateLock, _writer, LISTEN_PORT, PROP_DOMAIN_SOCKET, PROP_ENABLE_SSL, PROP_PW, PROP_USER
 
Fields inherited from interface net.i2p.client.I2PSession
PORT_ANY, PORT_UNSPECIFIED, PROTO_ANY, PROTO_DATAGRAM, PROTO_DATAGRAM_RAW, PROTO_STREAMING, PROTO_UNSPECIFIED
 
Constructor Summary
  I2PSessionMuxedImpl(I2PAppContext ctx, InputStream destKeyStream, Properties options)
           
protected I2PSessionMuxedImpl(I2PSessionImpl primary, InputStream destKeyStream, Properties options)
           
 
Method Summary
 void addMuxedSessionListener(I2PSessionMuxedListener l, int proto, int port)
          Listen on specified protocol and port, and receive notification of proto, fromPort, and toPort for every message.
 void addNewMessage(MessagePayloadMessage msg)
          Receive a payload message and let the app know its available
 void addSessionListener(I2PSessionListener lsnr, int proto, int port)
          Listen on specified protocol and port.
 void removeListener(int proto, int port)
          removes the specified listener (only)
 boolean sendMessage(Destination dest, byte[] payload)
          unused, see MuxedImpl override
 boolean sendMessage(Destination dest, byte[] payload, int proto, int fromport, int toport)
          See I2PSessionMuxedImpl for proto/port details.
 boolean sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options)
          See SendMessageOptions for option details.
 long sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options, SendMessageStatusListener listener)
          Send a message and request an asynchronous notification of delivery status.
 boolean sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set tagsSent, int proto, int fromport, int toport)
          See I2PSessionMuxedImpl for proto/port details.
 boolean sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set tagsSent, long expires)
          Unused? see MuxedImpl override
 boolean sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set tagsSent, long expires, int proto, int fromPort, int toPort)
          See I2PSessionMuxedImpl for proto/port details.
 boolean sendMessage(Destination dest, byte[] payload, int offset, int size, SessionKey keyUsed, Set tagsSent, long expires, int proto, int fromPort, int toPort, int flags)
          See I2PSessionMuxedImpl for proto/port details.
 void setSessionListener(I2PSessionListener lsnr)
          listen on all protocols and ports
 
Methods inherited from class net.i2p.client.impl.I2PSessionImpl2
destroySession, getTimeout, receiveMessage, receiveStatus, reconnect, sendBestEffort, sendBestEffort, sendMessage, sendMessage, sendMessage, sendNoEffort, shouldCompress, startVerifyUsage
 
Methods inherited from class net.i2p.client.impl.I2PSessionImpl
addSubsession, bandwidthLimits, bwReceived, changeState, clearCache, connect, dateUpdated, destLookupFailed, destLookupFailed, destReceived, destReceived, destroySession, disconnect, disconnected, getContext, getDecryptionKey, getFastReceive, getHandlerMap, getLeaseSet, getMyDestination, getOptions, getPrefix, getPrivateKey, getProducer, getSessionId, getSubsessions, isClosed, lastActivity, lookupDest, lookupDest, lookupDest, lookupDest, messageReceived, propogateError, readError, removeSubsession, reportAbuse, sendMessage, setLeaseSet, setReduced, setSessionId, shouldReconnect, toString, updateActivity, updateOptions, waitForDate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

I2PSessionMuxedImpl

public I2PSessionMuxedImpl(I2PAppContext ctx,
                           InputStream destKeyStream,
                           Properties options)
                    throws I2PSessionException
Throws:
I2PSessionException

I2PSessionMuxedImpl

protected I2PSessionMuxedImpl(I2PSessionImpl primary,
                              InputStream destKeyStream,
                              Properties options)
                       throws I2PSessionException
Throws:
I2PSessionException
Method Detail

setSessionListener

public void setSessionListener(I2PSessionListener lsnr)
listen on all protocols and ports

Specified by:
setSessionListener in interface I2PSession
Overrides:
setSessionListener in class I2PSessionImpl
Parameters:
lsnr - listener to retrieve events

addSessionListener

public void addSessionListener(I2PSessionListener lsnr,
                               int proto,
                               int port)
Listen on specified protocol and port. An existing listener with the same proto and port is replaced. Only the listener with the best match is called back for each message.

Specified by:
addSessionListener in interface I2PSession
Overrides:
addSessionListener in class I2PSessionImpl2
Parameters:
proto - 1-254 or PROTO_ANY (0) for all; recommended: I2PSession.PROTO_STREAMING I2PSession.PROTO_DATAGRAM 255 disallowed
port - 1-65535 or PORT_ANY (0) for all

addMuxedSessionListener

public void addMuxedSessionListener(I2PSessionMuxedListener l,
                                    int proto,
                                    int port)
Listen on specified protocol and port, and receive notification of proto, fromPort, and toPort for every message.

Specified by:
addMuxedSessionListener in interface I2PSession
Overrides:
addMuxedSessionListener in class I2PSessionImpl2
Parameters:
proto - 1-254 or PROTO_ANY (0) for all; 255 disallowed
port - 1-65535 or PORT_ANY (0) for all

removeListener

public void removeListener(int proto,
                           int port)
removes the specified listener (only)

Specified by:
removeListener in interface I2PSession
Overrides:
removeListener in class I2PSessionImpl2

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload)
                    throws I2PSessionException
Description copied from class: I2PSessionImpl2
unused, see MuxedImpl override

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Parameters:
dest - location to send the message
payload - body of the message to be sent (unencrypted)
Returns:
whether it was accepted by the router for delivery or not
Throws:
I2PSessionException

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload,
                           int proto,
                           int fromport,
                           int toport)
                    throws I2PSessionException
Description copied from interface: I2PSession
See I2PSessionMuxedImpl for proto/port details.

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Returns:
success
Throws:
I2PSessionException

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload,
                           int offset,
                           int size,
                           SessionKey keyUsed,
                           Set tagsSent,
                           long expires)
                    throws I2PSessionException
Description copied from class: I2PSessionImpl2
Unused? see MuxedImpl override

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Parameters:
keyUsed - unused - no end-to-end crypto
tagsSent - unused - no end-to-end crypto
expires - absolute expiration timestamp, NOT interval from now
Returns:
success
Throws:
I2PSessionException

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload,
                           int offset,
                           int size,
                           SessionKey keyUsed,
                           Set tagsSent,
                           int proto,
                           int fromport,
                           int toport)
                    throws I2PSessionException
Description copied from interface: I2PSession
See I2PSessionMuxedImpl for proto/port details. End-to-End Crypto is disabled, tags and keys are ignored.

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Parameters:
keyUsed - unused - no end-to-end crypto
tagsSent - unused - no end-to-end crypto
proto - 1-254 or 0 for unset; recommended: I2PSession.PROTO_UNSPECIFIED I2PSession.PROTO_STREAMING I2PSession.PROTO_DATAGRAM 255 disallowed
fromport - 1-65535 or 0 for unset
toport - 1-65535 or 0 for unset
Returns:
success
Throws:
I2PSessionException

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload,
                           int offset,
                           int size,
                           SessionKey keyUsed,
                           Set tagsSent,
                           long expires,
                           int proto,
                           int fromPort,
                           int toPort)
                    throws I2PSessionException
Description copied from interface: I2PSession
See I2PSessionMuxedImpl for proto/port details. End-to-End Crypto is disabled, tags and keys are ignored.

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Parameters:
keyUsed - unused - no end-to-end crypto
tagsSent - unused - no end-to-end crypto
proto - 1-254 or 0 for unset; recommended: I2PSession.PROTO_UNSPECIFIED I2PSession.PROTO_STREAMING I2PSession.PROTO_DATAGRAM 255 disallowed
fromPort - 1-65535 or 0 for unset
toPort - 1-65535 or 0 for unset
expires - absolute expiration timestamp, NOT interval from now
Returns:
success
Throws:
I2PSessionException
Since:
0.7.1

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload,
                           int offset,
                           int size,
                           SessionKey keyUsed,
                           Set tagsSent,
                           long expires,
                           int proto,
                           int fromPort,
                           int toPort,
                           int flags)
                    throws I2PSessionException
Description copied from interface: I2PSession
See I2PSessionMuxedImpl for proto/port details. End-to-End Crypto is disabled, tags and keys are ignored.

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Parameters:
keyUsed - unused - no end-to-end crypto
tagsSent - unused - no end-to-end crypto
proto - 1-254 or 0 for unset; recommended: I2PSession.PROTO_UNSPECIFIED I2PSession.PROTO_STREAMING I2PSession.PROTO_DATAGRAM 255 disallowed
fromPort - 1-65535 or 0 for unset
toPort - 1-65535 or 0 for unset
flags - to be passed to the router
expires - absolute expiration timestamp, NOT interval from now
Returns:
success
Throws:
I2PSessionException
Since:
0.8.4

sendMessage

public boolean sendMessage(Destination dest,
                           byte[] payload,
                           int offset,
                           int size,
                           int proto,
                           int fromPort,
                           int toPort,
                           SendMessageOptions options)
                    throws I2PSessionException
See SendMessageOptions for option details. Always uses sendNoEffort for now.

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
Parameters:
proto - 1-254 or 0 for unset; recommended: I2PSession.PROTO_UNSPECIFIED I2PSession.PROTO_STREAMING I2PSession.PROTO_DATAGRAM 255 disallowed
fromPort - 1-65535 or 0 for unset
toPort - 1-65535 or 0 for unset
options - to be passed to the router
Returns:
success
Throws:
I2PSessionException
Since:
0.9.2

sendMessage

public long sendMessage(Destination dest,
                        byte[] payload,
                        int offset,
                        int size,
                        int proto,
                        int fromPort,
                        int toPort,
                        SendMessageOptions options,
                        SendMessageStatusListener listener)
                 throws I2PSessionException
Send a message and request an asynchronous notification of delivery status. See I2PSessionMuxedImpl for proto/port details. See SendMessageOptions for option details.

Specified by:
sendMessage in interface I2PSession
Overrides:
sendMessage in class I2PSessionImpl2
proto - 1-254 or 0 for unset; recommended: I2PSession.PROTO_UNSPECIFIED I2PSession.PROTO_STREAMING I2PSession.PROTO_DATAGRAM 255 disallowed
fromPort - 1-65535 or 0 for unset
toPort - 1-65535 or 0 for unset
options - to be passed to the router
Returns:
the message ID to be used for later notification to the listener
Throws:
I2PSessionException - on all errors
Since:
0.9.14

addNewMessage

public void addNewMessage(MessagePayloadMessage msg)
Receive a payload message and let the app know its available

Overrides:
addNewMessage in class I2PSessionImpl