net.i2p.router.update

## Class PluginUpdateRunner

- java.lang.Object
- - java.lang.Thread
  - - net.i2p.util.I2PThread
    - - net.i2p.util.I2PAppThread
      - - net.i2p.router.update.UpdateRunner
        - - net.i2p.router.update.PluginUpdateRunner

- All Implemented Interfaces:
    Runnable, UpdateTask, EepGet.StatusListener

      class PluginUpdateRunner
      extends UpdateRunner

  Check for an updated version of a plugin. A plugin is a standard .sud file with a 40-byte signature, a 16-byte version, and a .zip file. So we get the current version and update URL for the installed plugin, then fetch the first 56 bytes of the URL, extract the version, and compare. uri list must not be empty. Moved from web/ and turned into an UpdateTask.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class net.i2p.util.I2PThread

      `I2PThread.OOMEventListener`

    - ### Nested classes/interfaces inherited from class java.lang.Thread

      `Thread.State, Thread.UncaughtExceptionHandler`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `PLUGIN_DIR`

    - ### Fields inherited from class net.i2p.router.update.UpdateRunner

      `_baos, _context, _currentURI, _get, _isPartial, _isRunning, _log, _method, _mgr, _newVersion, _type, _updateFile, _urls, CONNECT_TIMEOUT, done, INACTIVITY_TIMEOUT, NOPROXY_INACTIVITY_TIMEOUT`

    - ### Fields inherited from class java.lang.Thread

      `MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PluginUpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, List<URI> uris, String appName, String oldVersion)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)` Overridden to change the "Updating I2P" text in super
    `String` | `getID()` Valid for plugins
    `URI` | `getURI()` The current URI being checked or downloaded from.
    `void` | `transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified)` subclasses should override
    `void` | `transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)` subclasses should override
    `protected void` | `update()` Loop through the entire list of update URLs.

    - ### Methods inherited from class net.i2p.router.update.UpdateRunner

      `_t, _t, attemptFailed, attempting, getMethod, getType, headerReceived, isRunning, linkify, run, shutdown, toString, updateStatus`

    - ### Methods inherited from class net.i2p.util.I2PAppThread

      `addOOMEventThreadListener, fireOOM, removeOOMEventThreadListener`

    - ### Methods inherited from class net.i2p.util.I2PThread

      `addOOMEventListener, removeOOMEventListener, start`

    - ### Methods inherited from class java.lang.Thread

      `activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, stop, stop, suspend, yield`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface net.i2p.update.UpdateTask

      `start`

- - ### Field Detail

    - #### PLUGIN_DIR

          public static final String PLUGIN_DIR

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### PluginUpdateRunner

          public PluginUpdateRunner(RouterContext ctx,
                                    ConsoleUpdateManager mgr,
                                    List<URI> uris,
                                    String appName,
                                    String oldVersion)

  - ### Method Detail

    - #### bytesTransferred

          public void bytesTransferred(long alreadyTransferred,
                                       int currentWrite,
                                       long bytesTransferred,
                                       long bytesRemaining,
                                       String url)

      Overridden to change the "Updating I2P" text in super
      Specified by:
        `bytesTransferred` in interface `EepGet.StatusListener`
      Overrides:
        `bytesTransferred` in class `UpdateRunner`
      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

    - #### getID

          public String getID()

      Description copied from interface: `UpdateTask`
      Valid for plugins
      Specified by:
        `getID` in interface `UpdateTask`
      Overrides:
        `getID` in class `UpdateRunner`
      Returns:
        plugin ID

    - #### 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`
      Overrides:
        `getURI` in class `UpdateRunner`
      Returns:
        current URI

    - #### transferComplete

          public void transferComplete(long alreadyTransferred,
                                       long bytesTransferred,
                                       long bytesRemaining,
                                       String url,
                                       String outputFile,
                                       boolean notModified)

      Description copied from class: `UpdateRunner`
      subclasses should override
      Specified by:
        `transferComplete` in interface `EepGet.StatusListener`
      Overrides:
        `transferComplete` in class `UpdateRunner`
        `outputFile` - null if unknown (output stream constructor)
      See Also:
        `EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)`

    - #### transferFailed

          public void transferFailed(String url,
                                     long bytesTransferred,
                                     long bytesRemaining,
                                     int currentAttempt)

      Description copied from class: `UpdateRunner`
      subclasses should override
      Specified by:
        `transferFailed` in interface `EepGet.StatusListener`
      Overrides:
        `transferFailed` in class `UpdateRunner`
      See Also:
        `EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)`

    - #### update

          protected void update()

      Description copied from class: `UpdateRunner`
      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.
      Overrides:
        `update` in class `UpdateRunner`