All Implemented Interfaces:
Runnable, UpdateTask, EepGet.StatusListener

class PluginUpdateCheckerextends 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.

Moved from web/ and turned into an UpdateTask.

  • Field Details

    • _appName

      private final String _appName
      Name of the plugin being checked.
    • _oldVersion

      private final String _oldVersion
      Version currently installed.
  • Constructor Details

    • PluginUpdateChecker

      public PluginUpdateChecker(RouterContext ctx, ConsoleUpdateManager mgr, List<URI> uris, String appName, String oldVersion)
      Prepare a plugin update check. The first of the update URIs is the one actually fetched; the rest are kept only for display, and update() fetches just the leading TrustedUpdate.HEADER_BYTES to compare versions rather than the whole plugin.
      Parameters:
      ctx - the router context
      mgr - the update manager
      uris - update source URIs
      appName - the plugin name
      oldVersion - current installed version
  • Method Details

    • getID

      public String getID()
      Identify this task in the update manager's status lists and logs.
      Specified by:
      getID in interface UpdateTask
      Overrides:
      getID in class UpdateRunner
      Returns:
      the i d
    • update

      protected void update()
      Start the check: fetch only the plugin's version header over the HTTP proxy and let the manager report whether anything newer appeared.
      Overrides:
      update in class UpdateRunner
    • bytesTransferred

      public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)
      Progress callback during the header fetch; the version bytes are not inspected here, only their arrival is reported.
      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
      url - the URL being fetched
    • 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
      Parameters:
      alreadyTransferred - total bytes transferred
      bytesTransferred - total incl headers
      bytesRemaining - bytes still owed by the server, or -1 if chunked encoding or no Content-Length was returned
      url - the address the transfer was reading
      outputFile - null if unknown (output stream constructor)
      notModified - whether 304
      See Also:
    • transferFailed

      public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)
      The header fetch failed: drop the partial download and report the check as unsuccessful rather than as merely up to date.
      Specified by:
      transferFailed in interface EepGet.StatusListener
      Overrides:
      transferFailed in class UpdateRunner
      Parameters:
      url - the address whose transfer failed
      bytesTransferred - bytes received so far, counted across every attempt and including response headers
      bytesRemaining - bytes still owed, or -1 if unknown
      currentAttempt - zero-based index of the attempt that failed
      See Also: