diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index 3acdfdadc96eb8d2d0c18ffd804d129b119e7978..100fe8f764215af9501431ac500173123e9a3fe6 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -698,6 +698,8 @@ class ClientConnectionRunner { * * Note that no failure indication is available. * Fails silently on e.g. queue overflow to client, client dead, etc. + * + * @param toDest non-null * @param fromDest generally null when from remote, non-null if from local */ void receiveMessage(Destination toDest, Destination fromDest, Payload payload) { @@ -708,6 +710,26 @@ class ClientConnectionRunner { j.runJob(); } + /** + * Asynchronously deliver the message to the current runner + * + * Note that no failure indication is available. + * Fails silently on e.g. queue overflow to client, client dead, etc. + * + * @param toHash non-null + * @param fromDest generally null when from remote, non-null if from local + * @since 0.9.20 + */ + void receiveMessage(Hash toHash, Destination fromDest, Payload payload) { + SessionParams sp = _sessions.get(toHash); + if (sp == null) { + if (_log.shouldLog(Log.WARN)) + _log.warn("No session found for receiveMessage()"); + return; + } + receiveMessage(sp.dest, fromDest, payload); + } + /** * Send async abuse message to the client * diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java index 6174973e4690ddf4be3f43dae1d3b85498489db7..f8fc2bb8e35a1e9e0e065f361eebca2ce5fcbee6 100644 --- a/router/java/src/net/i2p/router/client/ClientManager.java +++ b/router/java/src/net/i2p/router/client/ClientManager.java @@ -627,7 +627,10 @@ class ClientManager { if (runner != null) { //_ctx.statManager().addRateData("client.receiveMessageSize", // _msg.getPayload().getSize(), 0); - runner.receiveMessage(dest, null, _msg.getPayload()); + if (dest != null) + runner.receiveMessage(dest, null, _msg.getPayload()); + else + runner.receiveMessage(_msg.getDestinationHash(), null, _msg.getPayload()); } else { // no client connection... // we should pool these somewhere... diff --git a/router/java/src/net/i2p/router/client/MessageReceivedJob.java b/router/java/src/net/i2p/router/client/MessageReceivedJob.java index 7ce5f5cbaeb35b61d25e275147f5d6ebeed98ece..3614d1693077e06f699c8ba194ab71d6d0e75da4 100644 --- a/router/java/src/net/i2p/router/client/MessageReceivedJob.java +++ b/router/java/src/net/i2p/router/client/MessageReceivedJob.java @@ -32,7 +32,7 @@ class MessageReceivedJob extends JobImpl { private final boolean _sendDirect; /** - * @param toDest requred to pick session + * @param toDest non-null, required to pick session * @param fromDest ignored, generally null */ public MessageReceivedJob(RouterContext ctx, ClientConnectionRunner runner, Destination toDest,