Package net.i2p.sam
Class SAMBridge
java.lang.Object
net.i2p.sam.SAMBridge
SAM bridge implementation.
This is the main entry point for SAM.
- Author:
- human
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final String
protected static final String
protected static final int
(package private) static final String
static final String
protected static final String
protected static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
-
Constructor Summary
ConstructorDescriptionSAMBridge
(String listenHost, int listenPort, boolean isSSL, Properties i2cpProps, String persistFile, File configFile) Build a new SAM bridge.SAMBridge
(String listenHost, int listenPort, boolean isSSL, Properties i2cpProps, String persistFile, File configFile, SAMSecureSessionInterface secureSession) Build a new SAM bridge.SAMBridge
(I2PAppContext context, ClientAppManager mgr, String[] args) For ClientApp interface. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addKeystream
(String name, String stream) Specify that the given keystream should be used for the given nameThe display name of the ClientApp, used in user interfaces.getKeystream
(String name) Retrieve the I2P private keystream for the given name, formatted as a base64 string (Destination+PrivateKey+SessionPrivateKey, as I2CP stores it).getName()
The generic name of the ClientApp, used for registration, e.g.getState()
The current state of the ClientApp.(package private) SAMv3DatagramServer
getV3DatagramServer
(Properties props) Was a static singleton, now a singleton for this bridge.static void
Usage:void
Handlers must call on startupvoid
run()
void
void
As of 0.9.20, stops running handlers and sessions.void
startup()
Do not take a long time.void
unregister
(Handler handler) Handlers must call on stop
-
Field Details
-
DEFAULT_SAM_KEYFILE
- See Also:
-
DEFAULT_SAM_CONFIGFILE
- See Also:
-
PROP_TCP_HOST
- See Also:
-
PROP_TCP_PORT
- See Also:
-
PROP_AUTH
- See Also:
-
PROP_PW_PREFIX
- See Also:
-
PROP_PW_SUFFIX
- See Also:
-
DEFAULT_TCP_HOST
- See Also:
-
DEFAULT_TCP_PORT
- See Also:
-
PROP_DATAGRAM_HOST
- See Also:
-
PROP_DATAGRAM_PORT
- See Also:
-
DEFAULT_DATAGRAM_HOST
- See Also:
-
DEFAULT_DATAGRAM_PORT_INT
protected static final int DEFAULT_DATAGRAM_PORT_INT- See Also:
-
DEFAULT_DATAGRAM_PORT
-
-
Constructor Details
-
SAMBridge
For ClientApp interface. Recommended constructor for external use. Does NOT open the listener socket or start threads; caller must call startup()- Parameters:
mgr
- may be nullargs
- non-null- Throws:
Exception
- on bad args- Since:
- 0.9.6
-
SAMBridge
public SAMBridge(String listenHost, int listenPort, boolean isSSL, Properties i2cpProps, String persistFile, File configFile) Build a new SAM bridge. NOT recommended for external use. Opens the listener socket but does NOT start the thread, and there's no way to do that externally. Use main(), or use the other constructor and call startup(). Deprecated for external use, to be made private.- Parameters:
listenHost
- hostname to listen for SAM connections on ("0.0.0.0" for all)listenPort
- port number to listen for SAM connections oni2cpProps
- set of I2CP properties for finding and communicating with the routerpersistFile
- location to store/load named keys to/from- Throws:
RuntimeException
- if a server socket can't be opened
-
SAMBridge
public SAMBridge(String listenHost, int listenPort, boolean isSSL, Properties i2cpProps, String persistFile, File configFile, SAMSecureSessionInterface secureSession) Build a new SAM bridge. NOT recommended for external use. Opens the listener socket but does NOT start the thread, and there's no way to do that externally. Use main(), or use the other constructor and call startup(). Deprecated for external use, to be made private.- Parameters:
listenHost
- hostname to listen for SAM connections on ("0.0.0.0" for all)listenPort
- port number to listen for SAM connections oni2cpProps
- set of I2CP properties for finding and communicating with the routerpersistFile
- location to store/load named keys to/fromsecureSession
- an instance of a Secure Session to use- Throws:
RuntimeException
- if a server socket can't be opened- Since:
- 1.8.0
-
-
Method Details
-
getKeystream
Retrieve the I2P private keystream for the given name, formatted as a base64 string (Destination+PrivateKey+SessionPrivateKey, as I2CP stores it).- Parameters:
name
- Name of the destination- Returns:
- null if the name does not exist, else the stream
-
addKeystream
Specify that the given keystream should be used for the given name- Parameters:
name
- Name of the destinationstream
- Name of the stream
-
register
Handlers must call on startup- Since:
- 0.9.20
-
unregister
Handlers must call on stop- Since:
- 0.9.20
-
getV3DatagramServer
Was a static singleton, now a singleton for this bridge. Instantiate and start server if it doesn't exist. We only listen on one host and port, as specified in the sam.udp.host and sam.udp.port properties. TODO we could have multiple servers on different hosts/ports in the future.- Parameters:
props
- non-null instantiate and start server if it doesn't exist- Returns:
- non-null
- Throws:
IOException
- if can't bind to host/port, or if different than existing- Since:
- 0.9.24
-
startup
Description copied from interface:ClientApp
Do not take a long time. Do not block. Start threads here if necessary. Client must call ClientAppManager.notify() at least once within this method to change the state from INITIALIZED to something else. Will not be called multiple times on the same object.- Specified by:
startup
in interfaceClientApp
- Throws:
IOException
- Since:
- 0.9.6
-
shutdown
As of 0.9.20, stops running handlers and sessions. -
getState
Description copied from interface:ClientApp
The current state of the ClientApp. -
getName
Description copied from interface:ClientApp
The generic name of the ClientApp, used for registration, e.g. "console". Do not translate. -
getDisplayName
Description copied from interface:ClientApp
The display name of the ClientApp, used in user interfaces. The app must translate.- Specified by:
getDisplayName
in interfaceClientApp
- Returns:
- non-null
- Since:
- 0.9.6
-
main
Usage:SAMBridge [ keyfile [listenHost ] listenPort [ name=val ]* ]
or:SAMBridge [ name=val ]*
name=val options are passed to the I2CP code to build a session, allowing the bridge to specify an alternate I2CP host and port, tunnel depth, etc.- Parameters:
args
- [ keyfile [ listenHost ] listenPort [ name=val ]* ]
-
run
public void run() -
saveConfig
- Throws:
IOException
- Since:
- 0.9.24
-
secureSession
-