OCMOSJ: Bundle unwrapped ack with LS for ratchet dest

This commit is contained in:
zzz
2019-10-27 12:21:22 +00:00
parent 135e9ad31f
commit 591b994b75

View File

@ -27,6 +27,7 @@ import net.i2p.data.i2np.DeliveryInstructions;
import net.i2p.data.i2np.DeliveryStatusMessage; import net.i2p.data.i2np.DeliveryStatusMessage;
import net.i2p.data.i2np.GarlicMessage; import net.i2p.data.i2np.GarlicMessage;
import net.i2p.data.i2np.I2NPMessage; import net.i2p.data.i2np.I2NPMessage;
import net.i2p.router.LeaseSetKeys;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.router.TunnelInfo; import net.i2p.router.TunnelInfo;
import net.i2p.router.networkdb.kademlia.MessageWrapper; import net.i2p.router.networkdb.kademlia.MessageWrapper;
@ -156,8 +157,8 @@ class OutboundClientMessageJobHelper {
ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE), ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE),
expiration, DeliveryInstructions.LOCAL); expiration, DeliveryInstructions.LOCAL);
// for now, skip this for ratchet // for now, skip this for ratchet if there's no LS to bundle
if (requireAck && recipientPK.getType() == EncType.ELGAMAL_2048) { if (requireAck && (bundledReplyLeaseSet != null || recipientPK.getType() == EncType.ELGAMAL_2048)) {
// extend the expiration of the return message // extend the expiration of the return message
PayloadGarlicConfig ackClove = buildAckClove(ctx, from, replyTunnel, replyToken, PayloadGarlicConfig ackClove = buildAckClove(ctx, from, replyTunnel, replyToken,
expiration + ACK_EXTRA_EXPIRATION, skm); expiration + ACK_EXTRA_EXPIRATION, skm);
@ -219,11 +220,18 @@ class OutboundClientMessageJobHelper {
//ackInstructions.setEncrypted(false); //ackInstructions.setEncrypted(false);
DeliveryStatusMessage dsm = buildDSM(ctx, replyToken); DeliveryStatusMessage dsm = buildDSM(ctx, replyToken);
GarlicMessage msg = wrapDSM(ctx, skm, dsm); // wrap the DSM if we can
if (msg == null) { LeaseSetKeys lsk = ctx.keyManager().getKeys(from);
if (log.shouldLog(Log.WARN)) I2NPMessage msg;
log.warn("Failed to wrap ack clove"); if (lsk == null || lsk.isSupported(EncType.ELGAMAL_2048)) {
return null; msg = wrapDSM(ctx, skm, dsm);
if (msg == null) {
if (log.shouldLog(Log.WARN))
log.warn("Failed to wrap ack clove");
return null;
}
} else {
msg = dsm;
} }
PayloadGarlicConfig ackClove = new PayloadGarlicConfig(Certificate.NULL_CERT, PayloadGarlicConfig ackClove = new PayloadGarlicConfig(Certificate.NULL_CERT,
ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE), ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE),