net.i2p.util
Class EepGet

java.lang.Object
  extended by net.i2p.util.EepGet
Direct Known Subclasses:
EepHead, I2PSocketEepGet, PartialEepGet, SSLEepGet

public class EepGet
extends Object

EepGet [-p 127.0.0.1:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] url


Nested Class Summary
protected static class EepGet.AUTH_MODE
           
protected  class EepGet.AuthState
          Manage the authentication parameters Ref: RFC 2617 Supports both Basic and Digest, however i2ptunnel HTTP proxy has migrated all previous Basic support to Digest.
protected  class EepGet.CLIStatusListener
           
protected  class EepGet.Gunzipper
          Decompressor thread.
static interface EepGet.StatusListener
           
 
Field Summary
protected  boolean _aborted
           
protected  String _actualURL
          the URL we actually fetch from (may differ from the _url in case of redirect)
protected  long _alreadyTransferred
           
protected  EepGet.AuthState _authState
           
protected  long _bytesRemaining
           
protected  long _bytesTransferred
           
protected  String _contentType
           
protected  I2PAppContext _context
           
protected  int _currentAttempt
           
protected  IOException _decompressException
           
protected  boolean _encodingChunked
           
protected  String _etag
           
protected  String _etagOrig
           
protected  List<String> _extraHeaders
           
protected  int _fetchHeaderTimeout
           
protected  int _fetchInactivityTimeout
           
protected  boolean _headersRead
           
protected  boolean _isGzippedResponse
           
protected  boolean _keepFetching
           
protected  String _lastModified
           
protected  String _lastModifiedOrig
           
protected  List<EepGet.StatusListener> _listeners
           
protected  Log _log
           
protected  boolean _notModified
           
protected  int _numRetries
           
protected  OutputStream _out
           
protected  String _outputFile
           
protected  OutputStream _outputStream
           
protected  Socket _proxy
           
protected  InputStream _proxyIn
           
protected  OutputStream _proxyOut
           
protected  String _redirectLocation
           
protected  int _redirects
           
protected  int _responseCode
           
protected  String _responseText
           
protected  boolean _shouldProxy
           
protected  boolean _shouldWriteErrorToOutput
           
protected  boolean _transferFailed
           
protected  String _url
          url we were asked to fetch
protected static int CONNECT_TIMEOUT
           
protected static int INACTIVITY_TIMEOUT
           
protected static int MAX_COMPLETE_FAILS
          maximum times to try without getting any data at all, even if numRetries is higher @since 0.7.14
protected static String USER_AGENT
          this will be replaced by the HTTP Proxy if we are using it
 
Constructor Summary
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url, boolean allowCaching, String etag, String postData)
           
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url, boolean allowCaching, String etag, String lastModified, String postData)
           
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url)
           
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag)
           
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag, String lastModified)
           
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, String postData)
           
EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url)
           
EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url, boolean allowCaching)
           
EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url)
           
EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching)
           
 
Method Summary
 void addAuthorization(String userName, String password)
          Add basic authorization header for the proxy.
 void addHeader(String name, String value)
          Add an extra header to the request.
 void addStatusListener(EepGet.StatusListener lsnr)
           
protected  void doFetch(SocketTimeout timeout)
          single fetch
 boolean fetch()
          Blocking fetch, returning true if the URL was retrieved, false if all retries failed.
 boolean fetch(long fetchHeaderTimeout)
          Blocking fetch, timing out individual attempts if the HTTP response headers don't come back in the time given.
 boolean fetch(long fetchHeaderTimeout, long totalTimeout, long inactivityTimeout)
          Blocking fetch.
 String getContentType()
          After fetch, the received value from the server, or null if none.
 String getETag()
          After fetch, the received value from the server, or null if none.
 String getLastModified()
          After fetch, the received value from the server, or null if none.
 boolean getNotModified()
           
protected  String getRequest()
           
 int getStatusCode()
          The server response (200, etc).
 String getStatusText()
          The server text ("OK", "Not Found", etc).
static void main(String[] args)
          EepGet [-p 127.0.0.1:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url
static Map<String,String> parseAuthArgs(String args)
          Parse the args in an authentication header.
protected  long readChunkLength()
           
protected  void readHeaders()
           
protected  void sendRequest(SocketTimeout timeout)
           
 void setWriteErrorToOutput()
          If called (before calling fetch()), data from the server or proxy will be written to the output file or stream even on an error response code (4xx, 5xx, etc).
 void stopFetching()
           
static String suggestName(String url)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_context

protected final I2PAppContext _context

_log

protected final Log _log

_shouldProxy

protected final boolean _shouldProxy

_numRetries

protected final int _numRetries

_outputFile

protected final String _outputFile

_outputStream

protected final OutputStream _outputStream

_url

protected final String _url
url we were asked to fetch


_actualURL

protected String _actualURL
the URL we actually fetch from (may differ from the _url in case of redirect)


_listeners

protected final List<EepGet.StatusListener> _listeners

_extraHeaders

protected List<String> _extraHeaders

_keepFetching

protected boolean _keepFetching

_proxy

protected Socket _proxy

_proxyOut

protected OutputStream _proxyOut

_proxyIn

protected InputStream _proxyIn

_out

protected OutputStream _out

_alreadyTransferred

protected long _alreadyTransferred

_bytesTransferred

protected long _bytesTransferred

_bytesRemaining

protected long _bytesRemaining

_currentAttempt

protected int _currentAttempt

_responseCode

protected int _responseCode

_responseText

protected String _responseText

_shouldWriteErrorToOutput

protected boolean _shouldWriteErrorToOutput

_etag

protected String _etag

_lastModified

protected String _lastModified

_etagOrig

protected final String _etagOrig

_lastModifiedOrig

protected final String _lastModifiedOrig

_encodingChunked

protected boolean _encodingChunked

_notModified

protected boolean _notModified

_contentType

protected String _contentType

_transferFailed

protected boolean _transferFailed

_headersRead

protected boolean _headersRead

_aborted

protected boolean _aborted

_fetchHeaderTimeout

protected int _fetchHeaderTimeout

_fetchInactivityTimeout

protected int _fetchInactivityTimeout

_redirects

protected int _redirects

_redirectLocation

protected String _redirectLocation

_isGzippedResponse

protected boolean _isGzippedResponse

_decompressException

protected IOException _decompressException

_authState

protected EepGet.AuthState _authState

USER_AGENT

protected static final String USER_AGENT
this will be replaced by the HTTP Proxy if we are using it

See Also:
Constant Field Values

CONNECT_TIMEOUT

protected static final int CONNECT_TIMEOUT
See Also:
Constant Field Values

INACTIVITY_TIMEOUT

protected static final int INACTIVITY_TIMEOUT
See Also:
Constant Field Values

MAX_COMPLETE_FAILS

protected static final int MAX_COMPLETE_FAILS
maximum times to try without getting any data at all, even if numRetries is higher @since 0.7.14

See Also:
Constant Field Values
Constructor Detail

EepGet

public EepGet(I2PAppContext ctx,
              String proxyHost,
              int proxyPort,
              int numRetries,
              String outputFile,
              String url)

EepGet

public EepGet(I2PAppContext ctx,
              String proxyHost,
              int proxyPort,
              int numRetries,
              String outputFile,
              String url,
              boolean allowCaching)

EepGet

public EepGet(I2PAppContext ctx,
              int numRetries,
              String outputFile,
              String url)

EepGet

public EepGet(I2PAppContext ctx,
              int numRetries,
              String outputFile,
              String url,
              boolean allowCaching)

EepGet

public EepGet(I2PAppContext ctx,
              boolean shouldProxy,
              String proxyHost,
              int proxyPort,
              int numRetries,
              String outputFile,
              String url)

EepGet

public EepGet(I2PAppContext ctx,
              boolean shouldProxy,
              String proxyHost,
              int proxyPort,
              int numRetries,
              String outputFile,
              String url,
              String postData)

EepGet

public EepGet(I2PAppContext ctx,
              boolean shouldProxy,
              String proxyHost,
              int proxyPort,
              int numRetries,
              String outputFile,
              String url,
              boolean allowCaching,
              String etag)

EepGet

public EepGet(I2PAppContext ctx,
              boolean shouldProxy,
              String proxyHost,
              int proxyPort,
              int numRetries,
              String outputFile,
              String url,
              boolean allowCaching,
              String etag,
              String lastModified)

EepGet

public EepGet(I2PAppContext ctx,
              boolean shouldProxy,
              String proxyHost,
              int proxyPort,
              int numRetries,
              long minSize,
              long maxSize,
              String outputFile,
              OutputStream outputStream,
              String url,
              boolean allowCaching,
              String etag,
              String postData)

EepGet

public EepGet(I2PAppContext ctx,
              boolean shouldProxy,
              String proxyHost,
              int proxyPort,
              int numRetries,
              long minSize,
              long maxSize,
              String outputFile,
              OutputStream outputStream,
              String url,
              boolean allowCaching,
              String etag,
              String lastModified,
              String postData)
Method Detail

main

public static void main(String[] args)
EepGet [-p 127.0.0.1:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url


suggestName

public static String suggestName(String url)

addStatusListener

public void addStatusListener(EepGet.StatusListener lsnr)

stopFetching

public void stopFetching()

fetch

public boolean fetch()
Blocking fetch, returning true if the URL was retrieved, false if all retries failed. Header timeout default 45 sec, total timeout default none, inactivity timeout default 60 sec.


fetch

public boolean fetch(long fetchHeaderTimeout)
Blocking fetch, timing out individual attempts if the HTTP response headers don't come back in the time given. If the timeout is zero or less, this will wait indefinitely. Total timeout default none, inactivity timeout default 60 sec.


fetch

public boolean fetch(long fetchHeaderTimeout,
                     long totalTimeout,
                     long inactivityTimeout)
Blocking fetch.

Parameters:
fetchHeaderTimeout - <= 0 for none (proxy will timeout if none, none isn't recommended if no proxy)
totalTimeout - <= 0 for default none
inactivityTimeout - <= 0 for default 60 sec

doFetch

protected void doFetch(SocketTimeout timeout)
                throws IOException
single fetch

Parameters:
timeout - may be null
Throws:
IOException

readHeaders

protected void readHeaders()
                    throws IOException
Throws:
IOException

readChunkLength

protected long readChunkLength()
                        throws IOException
Throws:
IOException

sendRequest

protected void sendRequest(SocketTimeout timeout)
                    throws IOException
Parameters:
timeout - may be null
Throws:
IOException

getRequest

protected String getRequest()
                     throws IOException
Throws:
IOException

getETag

public String getETag()
After fetch, the received value from the server, or null if none. Before fetch, and after some errors, may be the value passed in the constructor.


getLastModified

public String getLastModified()
After fetch, the received value from the server, or null if none. Before fetch, and after some errors, may be the value passed in the constructor.


getNotModified

public boolean getNotModified()
Returns:
true if the server returned 304

getContentType

public String getContentType()
After fetch, the received value from the server, or null if none.


getStatusCode

public int getStatusCode()
The server response (200, etc).

Returns:
-1 if invalid, or if the proxy never responded, or if no proxy was used and the server never responded. If a non-proxied request partially succeeded (for example a redirect followed by a fail, or a partial fetch followed by a fail), this will be the last status code received. Note that fetch() may return false even if this returns 200.
Since:
0.8.8

getStatusText

public String getStatusText()
The server text ("OK", "Not Found", etc). Note that the text may contain % encoding.

Returns:
null if invalid, or if the proxy never responded, or if no proxy was used and the server never responded. If a non-proxied request partially succeeded (for example a redirect followed by a fail, or a partial fetch followed by a fail), this will be the last status code received. Note that fetch() may return false even if this returns "OK".
Since:
0.9.9

setWriteErrorToOutput

public void setWriteErrorToOutput()
If called (before calling fetch()), data from the server or proxy will be written to the output file or stream even on an error response code (4xx, 5xx, etc). The error data will only be written if no previous data was written on an earlier try. Caller must of course check getStatusCode() or the fetch() return value.

Since:
0.8.8

addHeader

public void addHeader(String name,
                      String value)
Add an extra header to the request. Must be called before fetch(). Not supported by EepHead. As of 0.9.10, If name is User-Agent, this will replace the default User-Agent header. As of 0.9.14, If name is If-None-Match or If-Modified-Since, this will replace the etag or last-modified value given in the constructor. Note that headers may be subsequently modified or removed in the I2PTunnel HTTP Client proxy.

Since:
0.8.8

addAuthorization

public void addAuthorization(String userName,
                             String password)
Add basic authorization header for the proxy. Only added if the request is going through a proxy. Must be called before fetch().

Since:
0.8.9

parseAuthArgs

public static Map<String,String> parseAuthArgs(String args)
Parse the args in an authentication header. Modified from LoadClientAppsJob. All keys are mapped to lower case. Double quotes around values are stripped. Ref: RFC 2617 Public for I2PTunnelHTTPClientBase; use outside of tree at own risk, subject to change or removal

Parameters:
args - non-null, starting after "Digest " or "Basic "
Since:
0.9.4, moved from I2PTunnelHTTPClientBase in 0.9.12