Package net.i2p.sam
Class SAMBridge
- java.lang.Object
-
- net.i2p.sam.SAMBridge
-
-
Field Summary
Fields Modifier and Type Field Description protected static StringDEFAULT_DATAGRAM_HOSTprotected static StringDEFAULT_DATAGRAM_PORTprotected static intDEFAULT_DATAGRAM_PORT_INT(package private) static StringDEFAULT_SAM_CONFIGFILEstatic StringDEFAULT_SAM_KEYFILEprotected static StringDEFAULT_TCP_HOSTprotected static StringDEFAULT_TCP_PORTstatic StringPROP_AUTHstatic StringPROP_DATAGRAM_HOSTstatic StringPROP_DATAGRAM_PORTstatic StringPROP_PW_PREFIXstatic StringPROP_PW_SUFFIXstatic StringPROP_TCP_HOSTstatic StringPROP_TCP_PORT
-
Constructor Summary
Constructors Constructor Description SAMBridge(String listenHost, int listenPort, boolean isSSL, Properties i2cpProps, String persistFile, File configFile)Build a new SAM bridge.SAMBridge(I2PAppContext context, ClientAppManager mgr, String[] args)For ClientApp interface.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddKeystream(String name, String stream)Specify that the given keystream should be used for the given nameStringgetDisplayName()The display name of the ClientApp, used in user interfaces.StringgetKeystream(String name)Retrieve the I2P private keystream for the given name, formatted as a base64 string (Destination+PrivateKey+SessionPrivateKey, as I2CP stores it).StringgetName()The generic name of the ClientApp, used for registration, e.g.ClientAppStategetState()The current state of the ClientApp.(package private) SAMv3DatagramServergetV3DatagramServer(Properties props)Was a static singleton, now a singleton for this bridge.static voidmain(String[] args)Usage:voidregister(Handler handler)Handlers must call on startupvoidrun()voidsaveConfig()voidshutdown(String[] args)As of 0.9.20, stops running handlers and sessions.voidstartup()Do not take a long time.voidunregister(Handler handler)Handlers must call on stop
-
-
-
Field Detail
-
DEFAULT_SAM_KEYFILE
public static final String DEFAULT_SAM_KEYFILE
- See Also:
- Constant Field Values
-
DEFAULT_SAM_CONFIGFILE
static final String DEFAULT_SAM_CONFIGFILE
- See Also:
- Constant Field Values
-
PROP_TCP_HOST
public static final String PROP_TCP_HOST
- See Also:
- Constant Field Values
-
PROP_TCP_PORT
public static final String PROP_TCP_PORT
- See Also:
- Constant Field Values
-
PROP_AUTH
public static final String PROP_AUTH
- See Also:
- Constant Field Values
-
PROP_PW_PREFIX
public static final String PROP_PW_PREFIX
- See Also:
- Constant Field Values
-
PROP_PW_SUFFIX
public static final String PROP_PW_SUFFIX
- See Also:
- Constant Field Values
-
DEFAULT_TCP_HOST
protected static final String DEFAULT_TCP_HOST
- See Also:
- Constant Field Values
-
DEFAULT_TCP_PORT
protected static final String DEFAULT_TCP_PORT
- See Also:
- Constant Field Values
-
PROP_DATAGRAM_HOST
public static final String PROP_DATAGRAM_HOST
- See Also:
- Constant Field Values
-
PROP_DATAGRAM_PORT
public static final String PROP_DATAGRAM_PORT
- See Also:
- Constant Field Values
-
DEFAULT_DATAGRAM_HOST
protected static final String DEFAULT_DATAGRAM_HOST
- See Also:
- Constant Field Values
-
DEFAULT_DATAGRAM_PORT_INT
protected static final int DEFAULT_DATAGRAM_PORT_INT
- See Also:
- Constant Field Values
-
DEFAULT_DATAGRAM_PORT
protected static final String DEFAULT_DATAGRAM_PORT
-
-
Constructor Detail
-
SAMBridge
public SAMBridge(I2PAppContext context, ClientAppManager mgr, String[] args) throws Exception
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
-
-
Method Detail
-
getKeystream
public String getKeystream(String name)
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
public void addKeystream(String name, String stream)
Specify that the given keystream should be used for the given name- Parameters:
name- Name of the destinationstream- Name of the stream
-
register
public void register(Handler handler)
Handlers must call on startup- Since:
- 0.9.20
-
unregister
public void unregister(Handler handler)
Handlers must call on stop- Since:
- 0.9.20
-
getV3DatagramServer
SAMv3DatagramServer getV3DatagramServer(Properties props) throws IOException
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
public void startup() throws IOExceptionDescription copied from interface:ClientAppDo 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:
startupin interfaceClientApp- Throws:
IOException- Since:
- 0.9.6
-
shutdown
public void shutdown(String[] args)
As of 0.9.20, stops running handlers and sessions.
-
getState
public ClientAppState getState()
Description copied from interface:ClientAppThe current state of the ClientApp.
-
getName
public String getName()
Description copied from interface:ClientAppThe generic name of the ClientApp, used for registration, e.g. "console". Do not translate.
-
getDisplayName
public String getDisplayName()
Description copied from interface:ClientAppThe display name of the ClientApp, used in user interfaces. The app must translate.- Specified by:
getDisplayNamein interfaceClientApp- Returns:
- non-null
- Since:
- 0.9.6
-
main
public static void main(String[] args)
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 ]* ]
-
saveConfig
public void saveConfig() throws IOException- Throws:
IOException- Since:
- 0.9.24
-
-