Class UpdateRunner

All Implemented Interfaces:
Runnable, UpdateTask, EepGet.StatusListener
Direct Known Subclasses:
DevSU3UpdateChecker, DevSU3UpdateRunner, NewsFetcher, PluginUpdateChecker, PluginUpdateRunner, UnsignedUpdateChecker, UnsignedUpdateRunner

class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusListener
The downloader for router signed updates, and the base class for all the other Checkers and Runners.
Since:
0.9.4 moved from UpdateHandler
  • Field Details

    • _context

      protected final RouterContext _context
    • _log

      protected final Log _log
    • _mgr

      protected final ConsoleUpdateManager _mgr
    • _type

      protected final UpdateType _type
    • _method

      protected final UpdateMethod _method
    • _urls

      protected final List<URI> _urls
    • _updateFile

      protected final String _updateFile
    • _isRunning

      protected volatile boolean _isRunning
    • done

      protected boolean done
    • _get

      protected EepGet _get
    • _isPartial

      protected boolean _isPartial
      tells the listeners what mode we are in - set to true in extending classes for checks
    • _newVersion

      protected String _newVersion
      set by the listeners on completion
    • _baos

      protected final ByteArrayOutputStream _baos
      56 byte header, only used for suds
    • _currentURI

      protected URI _currentURI
    • CONNECT_TIMEOUT

      protected static final long CONNECT_TIMEOUT
      See Also:
    • INACTIVITY_TIMEOUT

      protected static final long INACTIVITY_TIMEOUT
      See Also:
    • NOPROXY_INACTIVITY_TIMEOUT

      protected static final long NOPROXY_INACTIVITY_TIMEOUT
      See Also:
  • Constructor Details

  • Method Details

    • isRunning

      public boolean isRunning()
      Specified by:
      isRunning in interface UpdateTask
    • shutdown

      public void shutdown()
      Specified by:
      shutdown in interface UpdateTask
    • getType

      public UpdateType getType()
      Specified by:
      getType in interface UpdateTask
    • getMethod

      public UpdateMethod getMethod()
      Specified by:
      getMethod in interface UpdateTask
    • getURI

      public URI getURI()
      Description copied from interface: UpdateTask
      The current URI being checked or downloaded from. Can change if there are multiple URIs to try.
      Specified by:
      getURI in interface UpdateTask
    • getID

      public String getID()
      Description copied from interface: UpdateTask
      Valid for plugins
      Specified by:
      getID in interface UpdateTask
    • run

      public void run()
      Specified by:
      run in interface Runnable
      Overrides:
      run in class I2PThread
    • update

      protected void update()
      Loop through the entire list of update URLs. For each one, first get the version from the first 56 bytes and see if it is newer than what we are running now. If it is, get the whole thing.
    • attemptFailed

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

      public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)
      subclasses should override
      Specified by:
      bytesTransferred in interface EepGet.StatusListener
      Parameters:
      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
    • transferComplete

      public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified)
      subclasses should override
      Specified by:
      transferComplete in interface EepGet.StatusListener
      Parameters:
      outputFile - null if unknown (output stream constructor)
      See Also:
    • transferFailed

      public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)
      subclasses should override
      Specified by:
      transferFailed in interface EepGet.StatusListener
      See Also:
    • headerReceived

      public void headerReceived(String url, int attemptNum, String key, String val)
      Description copied from interface: EepGet.StatusListener
      Note: Headers are not processed, and this is not called, for most error response codes, unless setWriteErrorToOutput() is called before fetch(). To be changed?
      Specified by:
      headerReceived in interface EepGet.StatusListener
    • attempting

      public void attempting(String url)
      Specified by:
      attempting in interface EepGet.StatusListener
    • updateStatus

      protected void updateStatus(String s)
    • linkify

      protected static String linkify(String url)
    • _t

      protected String _t(String s)
      translate a string
    • _t

      protected String _t(String s, Object o)
      translate a string with a parameter
    • toString

      public String toString()
      Overrides:
      toString in class Thread