Compare commits

...

2 Commits

Author SHA1 Message Date
zzz
5c828fa116 Merge pull request 'I2CP: Add support for service records (proposal 167)' (#501) from zzz/i2p.i2p:prop167 into master
Some checks failed
Java CI / build (push) Has been cancelled
Java CI / javadoc-latest (push) Has been cancelled
Java CI / build-java7 (push) Has been cancelled
Dockerhub / docker (push) Has been cancelled
Java with IzPack Snapshot Setup / setup (push) Has been cancelled
Sync Primary Repository to GitHub Mirror / sync (push) Has been cancelled
Reviewed-on: #501
Reviewed-by: idk <idki2p@mail.i2p>
2025-06-15 08:04:08 -04:00
zzz
76be323557 I2CP: Add support for service records (proposal 167) 2025-04-26 14:26:47 -04:00
2 changed files with 43 additions and 0 deletions

View File

@ -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);

View File

@ -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);