Class I2PTunnelConnectClient

  • All Implemented Interfaces:
    Runnable, EventDispatcher

    public class I2PTunnelConnectClient
    extends I2PTunnelHTTPClientBase
    implements Runnable
    Supports the following:
       (where protocol is generally HTTP/1.1 but is ignored)
       (where host is one of:
          example.i2p
          52chars.b32.i2p
          516+charsbase64
          example.com (sent to one of the configured proxies)
       )
    
       (protocol is ignored for i2p destinations)
       CONNECT host
       CONNECT host protocol
       CONNECT host:port
       CONNECT host:port protocol (this is the standard)
    
    Additional lines after the CONNECT line but before the blank line are ignored and stripped. The CONNECT line is removed for .i2p accesses but passed along for outproxy accesses. Ref:
      INTERNET-DRAFT                                              Ari Luotonen
      Expires: September 26, 1997          Netscape Communications Corporation
      draft-luotonen-ssl-tunneling-03.txt                       March 26, 1997
                         Tunneling SSL Through a WWW Proxy
    
    Author:
    zzz a stripped-down I2PTunnelHTTPClient
    • Constructor Detail

      • I2PTunnelConnectClient

        public I2PTunnelConnectClient​(int localPort,
                                      Logging l,
                                      boolean ownDest,
                                      String wwwProxy,
                                      EventDispatcher notifyThis,
                                      I2PTunnel tunnel)
                               throws IllegalArgumentException
        As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket. You MUST call startRunning() for that.
        Throws:
        IllegalArgumentException - if the I2PTunnel does not contain valid config to contact the router
    • Method Detail

      • getDefaultOptions

        protected I2PSocketOptions getDefaultOptions()
        Create the default options (using the default timeout, etc). Warning, this does not make a copy of I2PTunnel's client options, it modifies them directly.
        Overrides:
        getDefaultOptions in class I2PTunnelClientBase
      • startRunning

        public void startRunning()
        Description copied from class: I2PTunnelClientBase
        Actually open the local socket and start working on incoming connections. *Must* be called by derived classes after initialization. (this wasn't actually true until 0.9.20) This will be fast if i2cp.delayOpen is true, but could take a LONG TIME if it is false, as it connects to the router and builds tunnels. Extending classes must check the value of boolean open after calling super.startRunning(), if false then something went wrong.
        Overrides:
        startRunning in class I2PTunnelClientBase
      • close

        public boolean close​(boolean forced)
        Description copied from class: I2PTunnelClientBase
        Note that the tunnel can be reopened after this by calling startRunning(). This may not release all resources. In particular, the I2PSocketManager remains and it may have timer threads that continue running. To release all resources permanently, call destroy(). Does nothing if open is already false. Sets open = false but does not notifyAll().
        Overrides:
        close in class I2PTunnelClientBase
        Returns:
        success
      • clientConnectionRun

        protected void clientConnectionRun​(Socket s)
        Description copied from class: I2PTunnelClientBase
        Manage a connection in a separate thread. This only works if you do not override manageConnection(). This is run in a thread from an unlimited-size thread pool, so it may block or run indefinitely.
        Specified by:
        clientConnectionRun in class I2PTunnelClientBase