net.i2p.i2ptunnel
Class I2PTunnelHTTPServer

java.lang.Object
  extended by net.i2p.util.EventDispatcherImpl
      extended by net.i2p.i2ptunnel.I2PTunnelTask
          extended by net.i2p.i2ptunnel.I2PTunnelServer
              extended by net.i2p.i2ptunnel.I2PTunnelHTTPServer
All Implemented Interfaces:
Runnable, EventDispatcher
Direct Known Subclasses:
I2PTunnelHTTPBidirServer

public class I2PTunnelHTTPServer
extends I2PTunnelServer

Simple extension to the I2PTunnelServer that filters the HTTP headers sent from the client to the server, replacing the Host header with whatever this instance has been configured with, and if the browser set Accept-encoding: x-i2p-gzip, gzip the http message body and set Content-encoding: x-i2p-gzip.


Field Summary
static int DEFAULT_POST_BAN_TIME
           
static int DEFAULT_POST_MAX
           
static int DEFAULT_POST_TOTAL_BAN_TIME
           
static int DEFAULT_POST_TOTAL_MAX
           
static int DEFAULT_POST_WINDOW
           
static String OPT_POST_BAN_TIME
           
static String OPT_POST_MAX
           
static String OPT_POST_TOTAL_BAN_TIME
           
static String OPT_POST_TOTAL_MAX
           
static String OPT_POST_WINDOW
          all of these in SECONDS
static String OPT_REJECT_INPROXY
           
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelServer
__serverId, _clientExecutor, _log, bidir, i2pss, l, localPort, PROP_UNIQUE_LOCAL, PROP_USE_SSL, readTimeout, remoteHost, remotePort, slock, sockMgr, sslLock, task
 
Fields inherited from class net.i2p.i2ptunnel.I2PTunnelTask
open
 
Constructor Summary
I2PTunnelHTTPServer(InetAddress host, int port, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
           
I2PTunnelHTTPServer(InetAddress host, int port, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
           
I2PTunnelHTTPServer(InetAddress host, int port, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)
           
 
Method Summary
protected  void blockingHandle(I2PSocket socket)
          Called by the thread pool of I2PSocket handlers
 boolean close(boolean forced)
          Note that the tunnel can be reopened after this by calling startRunning().
protected static String formatHeaders(Map<String,List<String>> headers, StringBuilder command)
           
 void optionsUpdated(I2PTunnel tunnel)
          Update the I2PSocketManager.
(package private) static Map<String,List<String>> readHeaders(I2PSocket socket, InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx)
          From I2P to server: socket non-null, in null.
 void startRunning()
          Start running the I2PTunnelServer.
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelServer
destroy, getHandlerCount, getReadTimeout, getSocket, getSocket, run, setReadTimeout, shouldUsePool
 
Methods inherited from class net.i2p.i2ptunnel.I2PTunnelTask
connected, disconnected, errorOccurred, getId, getTunnel, isOpen, reportAbuse, routerDisconnected, setId, setName, setTunnel, toString
 
Methods inherited from class net.i2p.util.EventDispatcherImpl
attachEventDispatcher, detachEventDispatcher, getEventDispatcher, getEvents, getEventValue, ignoreEvents, notifyEvent, unIgnoreEvents, waitEventValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

OPT_POST_WINDOW

public static final String OPT_POST_WINDOW
all of these in SECONDS

See Also:
Constant Field Values

OPT_POST_BAN_TIME

public static final String OPT_POST_BAN_TIME
See Also:
Constant Field Values

OPT_POST_TOTAL_BAN_TIME

public static final String OPT_POST_TOTAL_BAN_TIME
See Also:
Constant Field Values

OPT_POST_MAX

public static final String OPT_POST_MAX
See Also:
Constant Field Values

OPT_POST_TOTAL_MAX

public static final String OPT_POST_TOTAL_MAX
See Also:
Constant Field Values

OPT_REJECT_INPROXY

public static final String OPT_REJECT_INPROXY
See Also:
Constant Field Values

DEFAULT_POST_WINDOW

public static final int DEFAULT_POST_WINDOW
See Also:
Constant Field Values

DEFAULT_POST_BAN_TIME

public static final int DEFAULT_POST_BAN_TIME
See Also:
Constant Field Values

DEFAULT_POST_TOTAL_BAN_TIME

public static final int DEFAULT_POST_TOTAL_BAN_TIME
See Also:
Constant Field Values

DEFAULT_POST_MAX

public static final int DEFAULT_POST_MAX
See Also:
Constant Field Values

DEFAULT_POST_TOTAL_MAX

public static final int DEFAULT_POST_TOTAL_MAX
See Also:
Constant Field Values
Constructor Detail

I2PTunnelHTTPServer

public I2PTunnelHTTPServer(InetAddress host,
                           int port,
                           String privData,
                           String spoofHost,
                           Logging l,
                           EventDispatcher notifyThis,
                           I2PTunnel tunnel)

I2PTunnelHTTPServer

public I2PTunnelHTTPServer(InetAddress host,
                           int port,
                           File privkey,
                           String privkeyname,
                           String spoofHost,
                           Logging l,
                           EventDispatcher notifyThis,
                           I2PTunnel tunnel)

I2PTunnelHTTPServer

public I2PTunnelHTTPServer(InetAddress host,
                           int port,
                           InputStream privData,
                           String privkeyname,
                           String spoofHost,
                           Logging l,
                           EventDispatcher notifyThis,
                           I2PTunnel tunnel)
Method Detail

startRunning

public void startRunning()
Description copied from class: I2PTunnelServer
Start running the I2PTunnelServer. Warning, blocks while connecting to router and building tunnels;

Overrides:
startRunning in class I2PTunnelServer

close

public boolean close(boolean forced)
Description copied from class: I2PTunnelServer
Note that the tunnel can be reopened after this by calling startRunning(). This does 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().

Overrides:
close in class I2PTunnelServer
Returns:
success
Since:
0.9.9

optionsUpdated

public void optionsUpdated(I2PTunnel tunnel)
Description copied from class: I2PTunnelServer
Update the I2PSocketManager. And since 0.9.15, the target host and port.

Overrides:
optionsUpdated in class I2PTunnelServer
Since:
0.9.9

blockingHandle

protected void blockingHandle(I2PSocket socket)
Called by the thread pool of I2PSocket handlers

Overrides:
blockingHandle in class I2PTunnelServer

formatHeaders

protected static String formatHeaders(Map<String,List<String>> headers,
                                      StringBuilder command)
Returns:
the command followed by the header lines

readHeaders

static Map<String,List<String>> readHeaders(I2PSocket socket,
                                            InputStream in,
                                            StringBuilder command,
                                            String[] skipHeaders,
                                            I2PAppContext ctx)
                                     throws IOException
From I2P to server: socket non-null, in null. From server to I2P: socket null, in non-null.

Parameters:
socket - if null, use in as InputStream
in - if null, use socket.getInputStream() as InputStream
command - out parameter, first line
Throws:
SocketTimeoutException - if timeout is reached before newline
EOFException - if EOF is reached before newline
LineTooLongException - if one header too long, or too many headers, or total size too big
RequestTooLongException - if too long
BadRequestException - on bad headers
IOException - on other errors in the underlying stream