diff --git a/router/java/src/net/i2p/router/ClientMessage.java b/router/java/src/net/i2p/router/ClientMessage.java index 8a247f5f1844033ef933d492bd5dbbb4ca1c083f..42dd8fb77797af21d74876c3ee50bf0503086f59 100644 --- a/router/java/src/net/i2p/router/ClientMessage.java +++ b/router/java/src/net/i2p/router/ClientMessage.java @@ -16,60 +16,83 @@ import net.i2p.data.i2cp.SessionConfig; /** * Wrap a message either destined for a local client or received from one. + * Note that an outbound message may get routed as an inbound message + * for local-local communication. * * @author jrandom */ public class ClientMessage { - private Payload _payload; - private Destination _destination; - private Destination _fromDestination; + private final Payload _payload; + private final Destination _destination; + private final Destination _fromDestination; //private MessageReceptionInfo _receptionInfo; - private SessionConfig _senderConfig; - private Hash _destinationHash; - private MessageId _messageId; - private long _expiration; + private final SessionConfig _senderConfig; + private final Hash _destinationHash; + private final MessageId _messageId; + private final long _expiration; /** only for outbound messages */ - private int _flags; + private final int _flags; - public ClientMessage() { + /** + * For outbound (locally originated) + * @since 0.9.9 + */ + public ClientMessage(Destination toDest, Payload payload, SessionConfig config, Destination fromDest, + MessageId msgID, long expiration, int flags) { + _destination = toDest; + _destinationHash = null; + _payload = payload; + _senderConfig = config; + _fromDestination = fromDest; + _messageId = msgID; + _expiration = expiration; + _flags = flags; + } + + /** + * For inbound (from remote dest) + * @since 0.9.9 + */ + public ClientMessage(Hash toDestHash, Payload payload) { + _destination = null; + _destinationHash = toDestHash; + _payload = payload; + _senderConfig = null; + _fromDestination = null; + _messageId = null; + _expiration = 0; + _flags = 0; } /** * Retrieve the payload of the message. All ClientMessage objects should have * a payload - * */ public Payload getPayload() { return _payload; } - public void setPayload(Payload payload) { _payload = payload; } /** - * Retrieve the destination to which this message is directed. All ClientMessage - * objects should have a destination. - * + * Retrieve the destination to which this message is directed. + * Valid for outbound; null for inbound. + * If null, use getDestinationHash() */ public Destination getDestination() { return _destination; } - public void setDestination(Destination dest) { _destination = dest; } /** - * - * + * Valid for outbound; null for inbound. */ public Destination getFromDestination() { return _fromDestination; } - public void setFromDestination(Destination dest) { _fromDestination = dest; } /** - * Retrieve the destination to which this message is directed. All ClientMessage - * objects should have a destination. - * + * Retrieve the destination to which this message is directed. + * Valid for inbound; null for outbound. + * If null, use getDestination() */ public Hash getDestinationHash() { return _destinationHash; } - public void setDestinationHash(Hash dest) { _destinationHash = dest; } /** - * + * Valid for outbound; null for inbound. */ public MessageId getMessageId() { return _messageId; } - public void setMessageId(MessageId id) { _messageId = id; } /** * Retrieve the information regarding how the router received this message. Only @@ -83,18 +106,14 @@ public class ClientMessage { /** * Retrieve the session config of the client that sent the message. This will only be available * if the client was local - * */ public SessionConfig getSenderConfig() { return _senderConfig; } - public void setSenderConfig(SessionConfig config) { _senderConfig = config; } /** * Expiration requested by the client that sent the message. This will only be available * for locally originated messages. - * */ public long getExpiration() { return _expiration; } - public void setExpiration(long e) { _expiration = e; } /** * Flags requested by the client that sent the message. This will only be available @@ -103,9 +122,4 @@ public class ClientMessage { * @since 0.8.4 */ public int getFlags() { return _flags; } - - /** - * @since 0.8.4 - */ - public void setFlags(int f) { _flags = f; } } diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java index 21cac726ad9b0c81a79100b576efbbb917196f22..e259c91aba647add67a4936438b3168795962869 100644 --- a/router/java/src/net/i2p/router/client/ClientManager.java +++ b/router/java/src/net/i2p/router/client/ClientManager.java @@ -244,14 +244,9 @@ class ClientManager { // sender went away return; } - ClientMessage msg = new ClientMessage(); - msg.setDestination(toDest); - msg.setPayload(payload); - msg.setSenderConfig(runner.getConfig()); - msg.setFromDestination(runner.getConfig().getDestination()); - msg.setMessageId(msgId); - msg.setExpiration(expiration); - msg.setFlags(flags); + ClientMessage msg = new ClientMessage(toDest, payload, runner.getConfig(), + runner.getConfig().getDestination(), msgId, + expiration, flags); _ctx.clientMessagePool().add(msg, true); } } diff --git a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java index cbcc1887d5da513ccaadba6cbb9b4f398f1e89df..d886d61927c4b719c67f458ccad3995d4ba33d6b 100644 --- a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java +++ b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java @@ -223,9 +223,7 @@ class InboundMessageDistributor implements GarlicMessageReceiver.CloveReceiver { DataMessage dm = (DataMessage)data; Payload payload = new Payload(); payload.setEncryptedData(dm.getData()); - ClientMessage m = new ClientMessage(); - m.setDestinationHash(_client); - m.setPayload(payload); + ClientMessage m = new ClientMessage(_client, payload); _context.clientManager().messageReceived(m); } else { if (_log.shouldLog(Log.ERROR))