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

public class I2PSocketEepGetextends 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 Warning - does not support /eepproxy/blah, address helpers, http://B64KEY.i2p/blah, or other odd things that may be found in the HTTP proxy.
  • Constructor Details

    • I2PSocketEepGet

      public I2PSocketEepGet(I2PAppContext ctx, I2PSocketManager mgr, int numRetries, String outputFile, String url)
      Creates an I2PSocketEepGet with default size limits.
      Parameters:
      ctx - the I2P app context
      mgr - the socket manager
      numRetries - number of retries on failure
      outputFile - file to write output to
      url - the URL to fetch
    • I2PSocketEepGet

      public I2PSocketEepGet(I2PAppContext ctx, I2PSocketManager mgr, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url)
      Creates an I2PSocketEepGet with full configuration.
      Parameters:
      ctx - the I2P app context
      mgr - the socket manager
      numRetries - number of retries on failure
      minSize - minimum acceptable size
      maxSize - maximum acceptable size
      outputFile - file to write output to
      outputStream - stream to write output to
      url - the URL to fetch
  • Method Details

    • 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
      Parameters:
      fetchHeaderTimeout - <= 0 for none (proxy will timeout if none, none isn't recommended if no proxy) forced to totalTimeout if totalTimeout is set and this is <= 0
      totalTimeout - operation-wide deadline for the whole fetch, including retries and backoff between attempts; <= 0 for default none
      inactivityTimeout - <= 0 for default EepGet.DEFAULT_INACTIVITY_TIMEOUT (5 minutes)
      Returns:
      whether the URL was retrieved; false if every attempt failed
    • readHeaders

      protected void readHeaders() throws IOException
      Overridden to disable inline gunzipping.
      Overrides:
      readHeaders in class EepGet
      Throws:
      IOException - on IO error
    • sendRequest

      protected void sendRequest(SocketTimeout timeout) throws 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 - connect and inactivity timeout, used to detect hung connections
      Throws:
      IOException - on IO error
    • getRequest

      protected String getRequest() throws 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
      Returns:
      the HTTP request line and headers, with the scheme and host stripped from the GET line
      Throws:
      IOException - on bad URL