I2CP: Synch fixes

Synch fields in the data messages both directions,
after one report of zero session ID in MessagePayloadMessage
to an external client on fast hardware with Java 18.
Add new constructors for efficiency.
Deprecated setters, unit tests not changed, TODO.
Should fix all the other messages also, TODO.
This commit is contained in:
zzz
2022-03-23 07:25:01 -04:00
parent 0154a87cbf
commit 631a6dd2b2
6 changed files with 132 additions and 51 deletions

View File

@@ -512,10 +512,6 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi
if (_runner.isDead()) return;
if (_log.shouldLog(Log.DEBUG))
_log.debug("Handling receive begin: id = " + message.getMessageId());
MessagePayloadMessage msg = new MessagePayloadMessage();
msg.setMessageId(message.getMessageId());
// TODO validate session id
msg.setSessionId(message.getSessionId());
Payload payload = _runner.getPayload(new MessageId(message.getMessageId()));
if (payload == null) {
if (_log.shouldLog(Log.WARN))
@@ -523,7 +519,8 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi
+ "] is null! Dropped or Unknown message id");
return;
}
msg.setPayload(payload);
// TODO validate session id
MessagePayloadMessage msg = new MessagePayloadMessage(message.getSessionId(), message.getMessageId(), payload);
try {
_runner.doSend(msg);
} catch (I2CPMessageException ime) {

View File

@@ -110,16 +110,13 @@ class MessageReceivedJob extends JobImpl {
* @since 0.9.4
*/
private void sendMessage(long id) throws I2CPMessageException {
MessagePayloadMessage msg = new MessagePayloadMessage();
msg.setMessageId(id);
SessionId sid = _runner.getSessionId(_toDest.calculateHash());
if (sid == null) {
if (_log.shouldLog(Log.WARN))
_log.warn("No session for " + _toDest.toBase32());
return;
}
msg.setSessionId(sid.getSessionId());
msg.setPayload(_payload);
MessagePayloadMessage msg = new MessagePayloadMessage(sid.getSessionId(), id, _payload);
_runner.doSend(msg);
}
}