net.i2p.client.streaming
Class I2PSocketEepGet

java.lang.Object
  extended by net.i2p.util.EepGet
      extended by net.i2p.client.streaming.I2PSocketEepGet

public class I2PSocketEepGet
extends EepGet

Fetch a URL using a socket from the supplied I2PSocketManager. Hostname must resolve to an i2p destination - no routing to an outproxy. Does not support response gzip decompression (unlike I2PTunnelHTTPProxy) (yet), but of course there is still gzip at the I2CP layer. This is designed for Java apps such as bittorrent clients that wish to do HTTP fetches and use other protocols on a single set of tunnels. This may provide anonymity benefits over using the shared clients HTTP proxy, preventing inadvertent outproxy usage, reduce resource usage by eliminating a second set of tunnels, and eliminate the requirement to to separately configure the proxy host and port. For additional documentation see the superclass. Supports http://example.i2p/blah Supports http://B32KEY.b32.i2p/blah Supports http://i2p/B64KEY/blah for compatibility with the eepproxy Supports http://B64KEY/blah for compatibility with the eepproxy Warning - does not support /eepproxy/blah, address helpers, http://B64KEY.i2p/blah, or other odd things that may be found in the HTTP proxy.

Author:
zzz

Nested Class Summary
 
Nested classes/interfaces inherited from class net.i2p.util.EepGet
EepGet.CLIStatusListener, EepGet.StatusListener
 
Field Summary
 
Fields inherited from class net.i2p.util.EepGet
_aborted, _actualURL, _alreadyTransferred, _bytesRemaining, _bytesTransferred, _context, _currentAttempt, _encodingChunked, _fetchInactivityTimeout, _headersRead, _keepFetching, _listeners, _log, _notModified, _numRetries, _out, _outputFile, _outputStream, _proxy, _proxyIn, _proxyOut, _redirectLocation, _redirects, _shouldProxy, _transferFailed, _url, CONNECT_TIMEOUT, INACTIVITY_TIMEOUT, MAX_COMPLETE_FAILS, USER_AGENT
 
Constructor Summary
I2PSocketEepGet(I2PAppContext ctx, I2PSocketManager mgr, int numRetries, long minSize, long maxSize, java.lang.String outputFile, java.io.OutputStream outputStream, java.lang.String url)
           
I2PSocketEepGet(I2PAppContext ctx, I2PSocketManager mgr, int numRetries, java.lang.String outputFile, java.lang.String url)
           
 
Method Summary
 boolean fetch(long fetchHeaderTimeout, long totalTimeout, long inactivityTimeout)
          We have to override this to close _socket, since we can't use _proxy in super as the I2PSocket.
protected  java.lang.String getRequest()
          Guess we have to override this since super doesn't strip the http://host from the GET line which hoses some servers (opentracker) HTTP proxy was kind enough to do this for us
static void main(java.lang.String[] args)
          I2PSocketEepGet [-n #retries] [-t timeout] url Uses I2CP at localhost:7654 with a single 1-hop tunnel each direction.
protected  void sendRequest(SocketTimeout timeout)
          Look up the address, get a socket from the I2PSocketManager supplied in the constructor, and send the request.
 
Methods inherited from class net.i2p.util.EepGet
addStatusListener, doFetch, fetch, fetch, getContentType, getETag, getLastModified, getNotModified, readChunkLength, readHeaders, stopFetching, suggestName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

I2PSocketEepGet

public I2PSocketEepGet(I2PAppContext ctx,
                       I2PSocketManager mgr,
                       int numRetries,
                       java.lang.String outputFile,
                       java.lang.String url)

I2PSocketEepGet

public I2PSocketEepGet(I2PAppContext ctx,
                       I2PSocketManager mgr,
                       int numRetries,
                       long minSize,
                       long maxSize,
                       java.lang.String outputFile,
                       java.io.OutputStream outputStream,
                       java.lang.String url)
Method Detail

fetch

public boolean fetch(long fetchHeaderTimeout,
                     long totalTimeout,
                     long inactivityTimeout)
We have to override this to close _socket, since we can't use _proxy in super as the I2PSocket.

Overrides:
fetch in class EepGet

sendRequest

protected void sendRequest(SocketTimeout timeout)
                    throws java.io.IOException
Look up the address, get a socket from the I2PSocketManager supplied in the constructor, and send the request.

Overrides:
sendRequest in class EepGet
Parameters:
timeout - ignored
Throws:
java.io.IOException

getRequest

protected java.lang.String getRequest()
                               throws java.io.IOException
Guess we have to override this since super doesn't strip the http://host from the GET line which hoses some servers (opentracker) HTTP proxy was kind enough to do this for us

Overrides:
getRequest in class EepGet
Throws:
java.io.IOException

main

public static void main(java.lang.String[] args)
I2PSocketEepGet [-n #retries] [-t timeout] url Uses I2CP at localhost:7654 with a single 1-hop tunnel each direction. Tunnel build time not included in the timeout. This is just for testing, it will be commented out someday. Real command line apps should use EepGet.main(), which has more options, and you don't have to wait for tunnels to be built.