|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.i2p.router.client.ClientConnectionRunner
class ClientConnectionRunner
Bridge the router and the client - managing state for a client. As of release 0.9.21, multiple sessions are supported on a single I2CP connection. These sessions share tunnels and some configuration.
Field Summary | |
---|---|
protected RouterContext |
_context
|
protected Log |
_log
|
protected ClientManager |
_manager
|
protected I2CPMessageReader |
_reader
thingy that does stuff |
Constructor Summary | |
---|---|
ClientConnectionRunner(RouterContext context,
ClientManager manager,
Socket socket)
Create a new runner against the given socket |
Method Summary | |
---|---|
(package private) void |
ackSendMessage(SessionId sid,
MessageId id,
long nonce)
Send a notification to the client that their message (id specified) was accepted for delivery (but not necessarily delivered) Doesn't do anything if i2cp.messageReliability = "none" or if the nonce is 0. |
protected I2CPMessageReader.I2CPMessageEventListener |
createListener()
Allow override for testing |
(package private) void |
disconnectClient(String reason)
Send a DisconnectMessage and log with level Log.ERROR. |
(package private) void |
disconnectClient(String reason,
int logLevel)
|
(package private) void |
disconnected()
|
(package private) MessageId |
distributeMessage(SendMessageMessage message)
Distribute the message. |
(package private) void |
doSend(I2CPMessage msg)
Actually send the I2CPMessage to the peer through the socket |
void |
failLeaseRequest(LeaseRequestState req)
|
String |
getClientVersion()
The client version. |
SessionConfig |
getConfig(Hash h)
Current client's config, will be null if session not found IS subsession aware. |
SessionConfig |
getConfig(SessionId id)
Current client's config, will be null if session not found IS subsession aware. |
Hash |
getDestHash()
Equivalent to getConfig().getDestination().calculateHash(); will be null before session is established Not subsession aware. |
Hash |
getDestHash(SessionId id)
Return the hash for the given ID |
Destination |
getDestination(SessionId id)
Return the dest for the given ID |
(package private) List<Destination> |
getDestinations()
Subsession aware. |
(package private) boolean |
getIsDead()
|
(package private) LeaseRequestState |
getLeaseRequest(Hash h)
Data for the current leaseRequest, or null if there is no active leaseSet request. |
LeaseSet |
getLeaseSet(Hash h)
Currently allocated leaseSet. |
int |
getNextMessageId()
|
(package private) Payload |
getPayload(MessageId id)
Only call if _dontSendMSMOnReceive is false, otherwise will always be null |
SessionConfig |
getPrimaryConfig()
Primary client's config, will be null if session not set up |
(package private) SessionId |
getSessionId(Hash h)
Subsession aware. |
(package private) List<SessionId> |
getSessionIds()
Subsession aware. |
SessionKeyManager |
getSessionKeyManager()
current client's sessionkeymanager |
(package private) boolean |
isDead()
already closed? |
(package private) void |
leaseSetCreated(LeaseSet ls)
called after a new leaseSet is granted by the client, the NetworkDb has been updated. |
(package private) void |
receiveMessage(Destination toDest,
Destination fromDest,
Payload payload)
Asynchronously deliver the message to the current runner Note that no failure indication is available. |
(package private) void |
receiveMessage(Hash toHash,
Destination fromDest,
Payload payload)
Asynchronously deliver the message to the current runner Note that no failure indication is available. |
(package private) void |
removePayload(MessageId id)
Only call if _dontSendMSMOnReceive is false |
(package private) void |
removeSession(SessionId id)
Kill the session. |
void |
reportAbuse(Destination dest,
String reason,
int severity)
Send async abuse message to the client |
(package private) void |
requestLeaseSet(Hash h,
LeaseSet set,
long expirationTime,
Job onCreateJob,
Job onFailedJob)
Request that a particular client authorize the Leases contained in the LeaseSet, after which the onCreateJob is queued up. |
int |
sessionEstablished(SessionConfig config)
Caller must send a SessionStatusMessage to the client with the returned code. |
void |
setClientVersion(String version)
The client version. |
(package private) void |
setLeaseSet(LeaseSet ls)
Currently allocated leaseSet. |
(package private) void |
setPayload(MessageId id,
Payload payload)
Only call if _dontSendMSMOnReceive is false |
(package private) void |
setSessionId(Hash hash,
SessionId id)
To be called only by ClientManager. |
void |
startRunning()
Actually run the connection - listen for I2CP messages and respond. |
void |
stopRunning()
Die a horrible death. |
(package private) void |
updateMessageDeliveryStatus(Destination dest,
MessageId id,
long messageNonce,
int status)
Send a notification to the client that their message (id specified) was delivered (or failed delivery) Note that this sends the Guaranteed status codes, even though we only support best effort. |
(package private) void |
writeMessage(I2CPMessage msg)
Not thread-safe. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Log _log
protected final RouterContext _context
protected final ClientManager _manager
protected I2CPMessageReader _reader
Constructor Detail |
---|
public ClientConnectionRunner(RouterContext context, ClientManager manager, Socket socket)
Method Detail |
---|
public void startRunning() throws IOException
I2CPMessageReader
IOException
protected I2CPMessageReader.I2CPMessageEventListener createListener()
public void stopRunning()
public SessionConfig getConfig(Hash h)
public SessionConfig getConfig(SessionId id)
public SessionConfig getPrimaryConfig()
public void setClientVersion(String version)
public String getClientVersion()
public SessionKeyManager getSessionKeyManager()
public LeaseSet getLeaseSet(Hash h)
void setLeaseSet(LeaseSet ls)
public Hash getDestHash()
public Hash getDestHash(SessionId id)
public Destination getDestination(SessionId id)
SessionId getSessionId(Hash h)
h
- the local target
List<SessionId> getSessionIds()
List<Destination> getDestinations()
void setSessionId(Hash hash, SessionId id)
hash
- for the session
IllegalStateException
- if already setvoid removeSession(SessionId id)
LeaseRequestState getLeaseRequest(Hash h)
public void failLeaseRequest(LeaseRequestState req)
req
- non-nullboolean isDead()
Payload getPayload(MessageId id)
void setPayload(MessageId id, Payload payload)
void removePayload(MessageId id)
public int sessionEstablished(SessionConfig config)
void updateMessageDeliveryStatus(Destination dest, MessageId id, long messageNonce, int status)
dest
- the clientid
- the router's ID for this messagemessageNonce
- the client's ID for this messagestatus
- see I2CP MessageStatusMessage for success/failure codesvoid leaseSetCreated(LeaseSet ls)
void disconnectClient(String reason)
reason
- will be truncated to 255 bytesvoid disconnectClient(String reason, int logLevel)
reason
- will be truncated to 255 byteslogLevel
- e.g. Log.WARNMessageId distributeMessage(SendMessageMessage message)
void ackSendMessage(SessionId sid, MessageId id, long nonce)
id
- OUR id for the messagenonce
- HIS id for the messagevoid receiveMessage(Destination toDest, Destination fromDest, Payload payload)
toDest
- non-nullfromDest
- generally null when from remote, non-null if from localvoid receiveMessage(Hash toHash, Destination fromDest, Payload payload)
toHash
- non-nullfromDest
- generally null when from remote, non-null if from localpublic void reportAbuse(Destination dest, String reason, int severity)
void requestLeaseSet(Hash h, LeaseSet set, long expirationTime, Job onCreateJob, Job onFailedJob)
h
- the Destination's hashset
- LeaseSet with requested leases - this object must be updated to contain the
signed version (as well as any changed/added/removed Leases)
The LeaseSet contains Leases and destination only, it is unsigned.expirationTime
- ms to wait before failingonCreateJob
- Job to run after the LeaseSet is authorized, null OKonFailedJob
- Job to run after the timeout passes without receiving authorization, null OKvoid disconnected()
boolean getIsDead()
void writeMessage(I2CPMessage msg)
void doSend(I2CPMessage msg) throws I2CPMessageException
I2CPMessageException
public int getNextMessageId()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |