Package org.klomp.snark
Class WebPeer
java.lang.Object
org.klomp.snark.Peer
org.klomp.snark.WebPeer
- All Implemented Interfaces:
Comparable<Peer>,EepGet.StatusListener
BEP 19.
Does not have an associated PeerState.
All request tracking is done here.
- Since:
- 0.9.49
-
Field Summary
FieldsFields inherited from class org.klomp.snark.Peer
_log, CHECK_PERIOD, magnetState, metainfo, RATE_DEPTH, state -
Constructor Summary
ConstructorsConstructorDescriptionWebPeer(PeerCoordinator coord, URI uri, PeerID peerID, MetaInfo metainfo) Outgoing connection. -
Method Summary
Modifier and TypeMethodDescriptionvoidattemptFailed(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) Total length should be == alreadyTransferred + currentWrite + bytesRemaining for all calls(package private) voidcancel(int piece) Tell the other side that we are no longer interested in any of the outstanding requests (if any) for this piece.intReturn how much the peer has(package private) voidbooleanTwo Peers are equal when they have the same PeerID.longlongintinthashCode()The hash code of a Peer is the hash code of the peerID.voidhave(int piece) Tell the peer we have another piece.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().booleanisChoked()Whether or not the peer choked us.booleanWhether or not we are choking the peer.booleanReturn if a peer is a seederbooleanbooleanWhether or not the peer is interested in pieces we have.booleanWhether or not the peer has pieces we want from it.booleanvoidSend keepalive(package private) voidrequest()Update the request queue.voidRetransmit outstanding requests if necessaryvoidrunConnection(I2PSnarkUtil util, PeerListener listener, BitField ignore, MagnetState mState, boolean uploadOnly) Runs the connection to the other peer.voidsetChoking(boolean choke) Sets whether or not we are choking the peer.voidsetInteresting(boolean interest) Deprecated.toString()Returns the String representation of the peerID.voidtransferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) voidtransferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) Methods inherited from class org.klomp.snark.Peer
compareTo, disconnect, downloaded, getDestination, getDownloaded, getDownloadRate, getHandshakeMap, getMagnetState, getPeerID, getTotalCommentsSent, getUploaded, getUploadRate, isIncoming, isRequesting, resetCounters, sendExtension, setHandshakeMap, setMetaInfo, setRateHistory, setTotalCommentsSent, supportsFast, uploaded
-
Field Details
-
IDBytes
public static final byte[] IDBytes
-
-
Constructor Details
-
WebPeer
Outgoing connection. Creates a disconnected peer given a PeerID, your own id and the relevant MetaInfo.- Parameters:
uri- must be http with .i2p hostmetainfo- non-null
-
-
Method Details
-
toString
Description copied from class:PeerReturns the String representation of the peerID. -
getSocket
-
hashCode
public int hashCode()The hash code of a Peer is the hash code of the peerID. -
equals
Two Peers are equal when they have the same PeerID. All other properties are ignored. -
runConnection
public void runConnection(I2PSnarkUtil util, PeerListener listener, BitField ignore, MagnetState mState, boolean uploadOnly) Runs the connection to the other peer. This method does not return until the connection is terminated.- Overrides:
runConnectionin classPeer- Parameters:
ignore- our bitfield, ignoreuploadOnly- if we are complete with skipped files, i.e. a partial seed
-
getMaxPipeline
public int getMaxPipeline()- Overrides:
getMaxPipelinein classPeer- Returns:
- min of PeerState.MIN_PIPELINE, max of PeerState.MAX_PIPELINE
-
isConnected
public boolean isConnected()- Overrides:
isConnectedin classPeer
-
disconnect
void disconnect()- Overrides:
disconnectin classPeer
-
have
public void have(int piece) Description copied from class:PeerTell the peer we have another piece. -
cancel
void cancel(int piece) Description copied from class:PeerTell the other side that we are no longer interested in any of the outstanding requests (if any) for this piece. -
request
void request()Description copied from class:PeerUpdate the request queue. Call after adding wanted pieces. -
isInterested
public boolean isInterested()Description copied from class:PeerWhether or not the peer is interested in pieces we have. Returns false if not connected.- Overrides:
isInterestedin classPeer
-
setInteresting
Deprecated.Description copied from class:PeerSets whether or not we are interested in pieces from this peer. Defaults to false. When interest is true and this peer unchokes us then we start downloading from it. Has no effect when not connected.- Overrides:
setInterestingin classPeer
-
isInteresting
public boolean isInteresting()Description copied from class:PeerWhether or not the peer has pieces we want from it. Returns false if not connected.- Overrides:
isInterestingin classPeer
-
setChoking
public void setChoking(boolean choke) Description copied from class:PeerSets whether or not we are choking the peer. Defaults to true. When choke is false and the peer requests some pieces we upload them, otherwise requests of this peer are ignored.- Overrides:
setChokingin classPeer
-
isChoking
public boolean isChoking()Description copied from class:PeerWhether or not we are choking the peer. Returns true when not connected. -
isChoked
public boolean isChoked()Description copied from class:PeerWhether or not the peer choked us. Returns true when not connected. -
getInactiveTime
public long getInactiveTime()- Overrides:
getInactiveTimein classPeer
-
getMaxInactiveTime
public long getMaxInactiveTime()- Overrides:
getMaxInactiveTimein classPeer
-
keepAlive
public void keepAlive()Description copied from class:PeerSend keepalive -
retransmitRequests
public void retransmitRequests()Description copied from class:PeerRetransmit outstanding requests if necessary- Overrides:
retransmitRequestsin classPeer
-
completed
public int completed()Description copied from class:PeerReturn how much the peer has -
isCompleted
public boolean isCompleted()Description copied from class:PeerReturn if a peer is a seeder- Overrides:
isCompletedin classPeer
-
isWebPeer
public boolean isWebPeer() -
bytesTransferred
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) Description copied from interface:EepGet.StatusListenerTotal length should be == alreadyTransferred + currentWrite + bytesRemaining for all calls- 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
-
attemptFailed
public void attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause) - Specified by:
attemptFailedin interfaceEepGet.StatusListener- See Also:
-
transferComplete
public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) - Specified by:
transferCompletein interfaceEepGet.StatusListener- Parameters:
outputFile- null if unknown (output stream constructor)- See Also:
-
transferFailed
public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) - Specified by:
transferFailedin interfaceEepGet.StatusListener- See Also:
-
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
-