Package net.i2p.sam

Class SAMBridge

java.lang.Object
net.i2p.sam.SAMBridge
All Implemented Interfaces:
Runnable, ClientApp

public class SAMBridge extends Object implements Runnable, ClientApp
SAM bridge implementation. This is the main entry point for SAM.
Author:
human
  • Field Details

  • Constructor Details

    • 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 null
      args - 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 on
      i2cpProps - set of I2CP properties for finding and communicating with the router
      persistFile - 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 on
      i2cpProps - set of I2CP properties for finding and communicating with the router
      persistFile - location to store/load named keys to/from
      secureSession - 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

      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 destination
      stream - 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 IOException
      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 interface ClientApp
      Throws:
      IOException
      Since:
      0.9.6
    • shutdown

      public void shutdown(String[] args)
      As of 0.9.20, stops running handlers and sessions.
      Specified by:
      shutdown in interface ClientApp
      Parameters:
      args - generally null but could be stopArgs from clients.config
      Since:
      0.9.6
    • getState

      public ClientAppState getState()
      Description copied from interface: ClientApp
      The current state of the ClientApp.
      Specified by:
      getState in interface ClientApp
      Returns:
      non-null
      Since:
      0.9.6
    • getName

      public String getName()
      Description copied from interface: ClientApp
      The generic name of the ClientApp, used for registration, e.g. "console". Do not translate.
      Specified by:
      getName in interface ClientApp
      Returns:
      non-null
      Since:
      0.9.6
    • getDisplayName

      public String getDisplayName()
      Description copied from interface: ClientApp
      The display name of the ClientApp, used in user interfaces. The app must translate.
      Specified by:
      getDisplayName in interface ClientApp
      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 ]* ]
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • saveConfig

      public void saveConfig() throws IOException
      Throws:
      IOException
      Since:
      0.9.24
    • secureSession

      public SAMSecureSessionInterface secureSession()