Package net.i2p.router.update
Class UpdateRunner
java.lang.Object
java.lang.Thread
net.i2p.util.I2PThread
net.i2p.util.I2PAppThread
net.i2p.router.update.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
-
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler -
Field Summary
Fields Modifier and Type Field Description protected ByteArrayOutputStream_baos56 byte header, only used for sudsprotected RouterContext_contextprotected URI_currentURIprotected EepGet_getprotected boolean_isPartialtells the listeners what mode we are in - set to true in extending classes for checksprotected boolean_isRunningprotected Log_logprotected UpdateMethod_methodprotected ConsoleUpdateManager_mgrprotected String_newVersionset by the listeners on completionprotected UpdateType_typeprotected String_updateFileprotected List<URI>_urlsprotected static longCONNECT_TIMEOUTprotected booleandoneprotected static longINACTIVITY_TIMEOUTprotected static longNOPROXY_INACTIVITY_TIMEOUT -
Constructor Summary
Constructors Constructor Description UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, List<URI> uris)Uses router version for partial checksUpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, List<URI> uris, String currentVersion)UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, UpdateMethod method, List<URI> uris)Uses router version for partial checksUpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, UpdateMethod method, List<URI> uris, String currentVersion) -
Method Summary
Modifier and Type Method Description protected String_t(String s)translate a stringprotected String_t(String s, Object o)translate a string with a parametervoidattemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause)voidattempting(String url)voidbytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)subclasses should overrideStringgetID()Valid for pluginsUpdateMethodgetMethod()UpdateTypegetType()URIgetURI()The current URI being checked or downloaded from.voidheaderReceived(String url, int attemptNum, String key, String val)Note: Headers are not processed, and this is not called, for most error response codes, unless setWriteErrorToOutput() is called before fetch().booleanisRunning()protected static Stringlinkify(String url)voidrun()voidshutdown()StringtoString()voidtransferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified)subclasses should overridevoidtransferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)subclasses should overrideprotected voidupdate()Loop through the entire list of update URLs.protected voidupdateStatus(String s)Methods inherited from class net.i2p.util.I2PAppThread
addOOMEventThreadListener, fireOOM, removeOOMEventThreadListenerMethods inherited from class net.i2p.util.I2PThread
addOOMEventListener, removeOOMEventListener, startMethods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, stop, suspend, yield
-
Field Details
-
_context
-
_log
-
_mgr
-
_type
-
_method
-
_urls
-
_updateFile
-
_isRunning
protected volatile boolean _isRunning -
done
protected boolean done -
_get
-
_isPartial
protected boolean _isPartialtells the listeners what mode we are in - set to true in extending classes for checks -
_newVersion
set by the listeners on completion -
_baos
56 byte header, only used for suds -
_currentURI
-
CONNECT_TIMEOUT
protected static final long CONNECT_TIMEOUT- See Also:
- Constant Field Values
-
INACTIVITY_TIMEOUT
protected static final long INACTIVITY_TIMEOUT- See Also:
- Constant Field Values
-
NOPROXY_INACTIVITY_TIMEOUT
protected static final long NOPROXY_INACTIVITY_TIMEOUT- See Also:
- Constant Field Values
-
-
Constructor Details
-
UpdateRunner
Uses router version for partial checks -
UpdateRunner
public UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, UpdateMethod method, List<URI> uris)Uses router version for partial checks- Since:
- 0.9.9
-
UpdateRunner
public UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, List<URI> uris, String currentVersion)- Parameters:
currentVersion- used for partial checks- Since:
- 0.9.7
-
UpdateRunner
public UpdateRunner(RouterContext ctx, ConsoleUpdateManager mgr, UpdateType type, UpdateMethod method, List<URI> uris, String currentVersion)- Parameters:
method- HTTP, HTTP_CLEARNET, or HTTPS_CLEARNETcurrentVersion- used for partial checks- Since:
- 0.9.9
-
-
Method Details
-
isRunning
public boolean isRunning()- Specified by:
isRunningin interfaceUpdateTask
-
shutdown
public void shutdown()- Specified by:
shutdownin interfaceUpdateTask
-
getType
- Specified by:
getTypein interfaceUpdateTask
-
getMethod
- Specified by:
getMethodin interfaceUpdateTask
-
getURI
Description copied from interface:UpdateTaskThe current URI being checked or downloaded from. Can change if there are multiple URIs to try.- Specified by:
getURIin interfaceUpdateTask
-
getID
Description copied from interface:UpdateTaskValid for plugins- Specified by:
getIDin interfaceUpdateTask
-
run
public void run() -
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:
attemptFailedin interfaceEepGet.StatusListener- See Also:
EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
-
bytesTransferred
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)subclasses should override- Specified by:
bytesTransferredin interfaceEepGet.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 listenerbytesTransferred- 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:
transferCompletein interfaceEepGet.StatusListeneroutputFile- 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)subclasses should override- Specified by:
transferFailedin interfaceEepGet.StatusListener- See Also:
EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
-
headerReceived
Description copied from interface:EepGet.StatusListenerNote: 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:
headerReceivedin interfaceEepGet.StatusListener
-
attempting
- Specified by:
attemptingin interfaceEepGet.StatusListener
-
updateStatus
-
linkify
-
_t
translate a string -
_t
translate a string with a parameter -
toString
-