diff --git a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java index 2bcff8f74..908e2dbea 100644 --- a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java +++ b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java @@ -48,6 +48,7 @@ import net.i2p.data.SimpleDataStructure; import net.i2p.data.i2cp.I2CPMessage; import net.i2p.data.i2cp.RequestLeaseSetMessage; import net.i2p.util.Log; +import net.i2p.util.OrderedProperties; /** * Handle I2CP RequestLeaseSetMessage from the router by granting all leases, @@ -144,6 +145,25 @@ class RequestLeaseSetMessageHandler extends HandlerImpl { } if (Boolean.parseBoolean(session.getOptions().getProperty("i2cp.dontPublishLeaseSet"))) ls2.setUnpublished(); + + // Service records, proposal 167 + String k = "i2cp.leaseSetOption.0"; + Properties props = null; + for (int i = 0; i < 10; i++) { + String v = session.getOptions().getProperty(k); + if (v == null) + break; + String[] vs = DataHelper.split(v, "=", 2); + if (vs.length < 2) + continue; + if (props == null) + props = new OrderedProperties(); + props.setProperty(vs[0], vs[1]); + k = "i2cp.leaseSetOption." + (i + 1); + } + if (props != null) + ls2.setOptions(props); + // ensure 1-second resolution timestamp is higher than last one long now = Math.max(_context.clock().now(), session.getLastLS2SignTime() + 1000); ls2.setPublished(now); diff --git a/core/java/src/net/i2p/client/impl/RequestVariableLeaseSetMessageHandler.java b/core/java/src/net/i2p/client/impl/RequestVariableLeaseSetMessageHandler.java index dcec4dfef..7dc462f1e 100644 --- a/core/java/src/net/i2p/client/impl/RequestVariableLeaseSetMessageHandler.java +++ b/core/java/src/net/i2p/client/impl/RequestVariableLeaseSetMessageHandler.java @@ -9,8 +9,11 @@ package net.i2p.client.impl; * */ +import java.util.Properties; + import net.i2p.I2PAppContext; import net.i2p.data.DatabaseEntry; +import net.i2p.data.DataHelper; import net.i2p.data.EncryptedLeaseSet; import net.i2p.data.Lease; import net.i2p.data.Lease2; @@ -21,6 +24,7 @@ import net.i2p.data.MetaLeaseSet; import net.i2p.data.i2cp.I2CPMessage; import net.i2p.data.i2cp.RequestVariableLeaseSetMessage; import net.i2p.util.Log; +import net.i2p.util.OrderedProperties; /** * Handle I2CP RequestVariableLeaseSetMessage from the router by granting all leases, @@ -56,6 +60,25 @@ class RequestVariableLeaseSetMessageHandler extends RequestLeaseSetMessageHandle } if (Boolean.parseBoolean(session.getOptions().getProperty("i2cp.dontPublishLeaseSet"))) ls2.setUnpublished(); + + // Service records, proposal 167 + String k = "i2cp.leaseSetOption.0"; + Properties props = null; + for (int i = 0; i < 10; i++) { + String v = session.getOptions().getProperty(k); + if (v == null) + break; + String[] vs = DataHelper.split(v, "=", 2); + if (vs.length < 2) + continue; + if (props == null) + props = new OrderedProperties(); + props.setProperty(vs[0], vs[1]); + k = "i2cp.leaseSetOption." + (i + 1); + } + if (props != null) + ls2.setOptions(props); + // ensure 1-second resolution timestamp is higher than last one long now = Math.max(_context.clock().now(), session.getLastLS2SignTime() + 1000); ls2.setPublished(now);