net.i2p.router.web
Class NewsFetcher

java.lang.Object
  extended by net.i2p.router.web.NewsFetcher
All Implemented Interfaces:
java.lang.Runnable, EepGet.StatusListener

public class NewsFetcher
extends java.lang.Object
implements java.lang.Runnable, EepGet.StatusListener

Task to periodically look for updates to the news.xml, and to keep track of whether that has an announcement for a new version.


Method Summary
 void attemptFailed(java.lang.String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, java.lang.Exception cause)
           
 void attempting(java.lang.String url)
           
 void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, java.lang.String url)
          alreadyTransferred - total of all attempts, not including currentWrite If nonzero on the first call, a partial file of that length was found, _and_ the server supports resume.
(package private)  boolean dontInstall()
           
 void fetchNews()
           
 void fetchUnsigned()
           
 void fetchUnsignedHead()
          HEAD the update url, and if the last-mod time is newer than the last update we downloaded, as stored in the properties, then we download it using eepget.
static NewsFetcher getInstance(I2PAppContext ctx)
           
 void headerReceived(java.lang.String url, int attemptNum, java.lang.String key, java.lang.String val)
           
static long parse822Date(java.lang.String s)
          new Date(String foo) is deprecated, so let's do this the hard way
 void run()
           
 boolean shouldFetchUnsigned()
           
 java.lang.String status()
           
 void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, java.lang.String url, java.lang.String outputFile, boolean notModified)
           
 void transferFailed(java.lang.String url, long bytesTransferred, long bytesRemaining, int currentAttempt)
           
 boolean unsignedUpdateAvailable()
           
 java.lang.String unsignedUpdateVersion()
           
 boolean updateAvailable()
           
 java.lang.String updateVersion()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getInstance

public static final NewsFetcher getInstance(I2PAppContext ctx)

updateAvailable

public boolean updateAvailable()

updateVersion

public java.lang.String updateVersion()

unsignedUpdateAvailable

public boolean unsignedUpdateAvailable()

unsignedUpdateVersion

public java.lang.String unsignedUpdateVersion()

status

public java.lang.String status()

run

public void run()
Specified by:
run in interface java.lang.Runnable

dontInstall

boolean dontInstall()

fetchNews

public void fetchNews()

shouldFetchUnsigned

public boolean shouldFetchUnsigned()

fetchUnsignedHead

public void fetchUnsignedHead()
HEAD the update url, and if the last-mod time is newer than the last update we downloaded, as stored in the properties, then we download it using eepget.


fetchUnsigned

public void fetchUnsigned()

parse822Date

public static long parse822Date(java.lang.String s)
new Date(String foo) is deprecated, so let's do this the hard way

Parameters:
s - non-null
Returns:
-1 on failure

attemptFailed

public void attemptFailed(java.lang.String url,
                          long bytesTransferred,
                          long bytesRemaining,
                          int currentAttempt,
                          int numRetries,
                          java.lang.Exception cause)
Specified by:
attemptFailed in interface EepGet.StatusListener

bytesTransferred

public void bytesTransferred(long alreadyTransferred,
                             int currentWrite,
                             long bytesTransferred,
                             long bytesRemaining,
                             java.lang.String url)
Description copied from interface: EepGet.StatusListener
alreadyTransferred - total of all attempts, not including currentWrite If nonzero on the first call, a partial file of that length was found, _and_ the server supports resume. If zero on a subsequent call after some bytes are transferred (and presumably after an attemptFailed), the server does _not_ support resume and we had to start over. To track _actual_ transfer if the output file could already exist, the listener should keep its own counter, or subtract the initial alreadyTransferred value. And watch out for alreadyTransferred resetting if a resume failed... currentWrite - since last call to the listener bytesTransferred - includes headers, retries, redirects, discarded partial downloads, ... bytesRemaining - on this attempt only, currentWrite already subtracted - or -1 if chunked encoding or server does not return a length Total length should be == alreadyTransferred + currentWrite + bytesRemaining for all calls

Specified by:
bytesTransferred in interface EepGet.StatusListener

transferComplete

public void transferComplete(long alreadyTransferred,
                             long bytesTransferred,
                             long bytesRemaining,
                             java.lang.String url,
                             java.lang.String outputFile,
                             boolean notModified)
Specified by:
transferComplete in interface EepGet.StatusListener

transferFailed

public void transferFailed(java.lang.String url,
                           long bytesTransferred,
                           long bytesRemaining,
                           int currentAttempt)
Specified by:
transferFailed in interface EepGet.StatusListener

headerReceived

public void headerReceived(java.lang.String url,
                           int attemptNum,
                           java.lang.String key,
                           java.lang.String val)
Specified by:
headerReceived in interface EepGet.StatusListener

attempting

public void attempting(java.lang.String url)
Specified by:
attempting in interface EepGet.StatusListener