forked from I2P_Developers/i2p.i2p
I2CP: Remove client-side-only options from those sent to router
This commit is contained in:
@ -15,6 +15,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.client.I2PClient;
|
||||||
import net.i2p.client.I2PSessionException;
|
import net.i2p.client.I2PSessionException;
|
||||||
import net.i2p.client.SendMessageOptions;
|
import net.i2p.client.SendMessageOptions;
|
||||||
import net.i2p.data.DatabaseEntry;
|
import net.i2p.data.DatabaseEntry;
|
||||||
@ -58,6 +59,16 @@ class I2CPMessageProducer {
|
|||||||
private static final int TYP_SIZE = 1730 + 28 + 23;
|
private static final int TYP_SIZE = 1730 + 28 + 23;
|
||||||
private static final int MIN_RATE = 2 * TYP_SIZE;
|
private static final int MIN_RATE = 2 * TYP_SIZE;
|
||||||
|
|
||||||
|
// http://i2p-projekt.i2p/en/docs/protocol/i2cp
|
||||||
|
// Note that some are listed for both client and server side, don't include those below.
|
||||||
|
private static final String[] CLIENT_SIDE_OPTIONS = new String[] {
|
||||||
|
"i2cp.closeIdleTime", "i2cp.closeOnIdle", "i2cp.encryptLeaseSet",
|
||||||
|
"i2cp.gzip", "i2cp.leaseSetKey", "i2cp.leaseSetPrivateKey",
|
||||||
|
"i2cp.leaseSetSigningPrivateKey", "i2cp.reduceIdleTime", "i2cp.reduceOnIdle",
|
||||||
|
I2PSessionImpl.PROP_ENABLE_SSL, I2PClient.PROP_TCP_HOST, I2PClient.PROP_TCP_PORT
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
public I2CPMessageProducer(I2PAppContext context) {
|
public I2CPMessageProducer(I2PAppContext context) {
|
||||||
_context = context;
|
_context = context;
|
||||||
_log = context.logManager().getLog(I2CPMessageProducer.class);
|
_log = context.logManager().getLog(I2CPMessageProducer.class);
|
||||||
@ -86,6 +97,20 @@ class I2CPMessageProducer {
|
|||||||
_log.debug("Setting " + _maxBytesPerSecond + " BPS max");
|
_log.debug("Setting " + _maxBytesPerSecond + " BPS max");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strip out the client-side options from the session options.
|
||||||
|
* @return a new copy, may be modified
|
||||||
|
* @since 0.9.38
|
||||||
|
*/
|
||||||
|
private static Properties getRouterOptions(I2PSessionImpl session) {
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.putAll(session.getOptions());
|
||||||
|
for (int i = 0; i < CLIENT_SIDE_OPTIONS.length; i++) {
|
||||||
|
props.remove(CLIENT_SIDE_OPTIONS[i]);
|
||||||
|
}
|
||||||
|
return props;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send all the messages that a client needs to send to a router to establish
|
* Send all the messages that a client needs to send to a router to establish
|
||||||
* a new session.
|
* a new session.
|
||||||
@ -94,7 +119,7 @@ class I2CPMessageProducer {
|
|||||||
updateBandwidth(session);
|
updateBandwidth(session);
|
||||||
CreateSessionMessage msg = new CreateSessionMessage();
|
CreateSessionMessage msg = new CreateSessionMessage();
|
||||||
SessionConfig cfg = new SessionConfig(session.getMyDestination());
|
SessionConfig cfg = new SessionConfig(session.getMyDestination());
|
||||||
cfg.setOptions(session.getOptions());
|
cfg.setOptions(getRouterOptions(session));
|
||||||
if (session.isOffline()) {
|
if (session.isOffline()) {
|
||||||
cfg.setOfflineSignature(session.getOfflineExpiration(),
|
cfg.setOfflineSignature(session.getOfflineExpiration(),
|
||||||
session.getTransientSigningPublicKey(),
|
session.getTransientSigningPublicKey(),
|
||||||
@ -365,11 +390,8 @@ class I2CPMessageProducer {
|
|||||||
public void updateTunnels(I2PSessionImpl session, int tunnels) throws I2PSessionException {
|
public void updateTunnels(I2PSessionImpl session, int tunnels) throws I2PSessionException {
|
||||||
ReconfigureSessionMessage msg = new ReconfigureSessionMessage();
|
ReconfigureSessionMessage msg = new ReconfigureSessionMessage();
|
||||||
SessionConfig cfg = new SessionConfig(session.getMyDestination());
|
SessionConfig cfg = new SessionConfig(session.getMyDestination());
|
||||||
Properties props = session.getOptions();
|
Properties props = getRouterOptions(session);
|
||||||
if (tunnels > 0) {
|
if (tunnels > 0) {
|
||||||
Properties newprops = new Properties();
|
|
||||||
newprops.putAll(props);
|
|
||||||
props = newprops;
|
|
||||||
String stunnels = Integer.toString(tunnels);
|
String stunnels = Integer.toString(tunnels);
|
||||||
props.setProperty("inbound.quantity", stunnels);
|
props.setProperty("inbound.quantity", stunnels);
|
||||||
props.setProperty("outbound.quantity", stunnels);
|
props.setProperty("outbound.quantity", stunnels);
|
||||||
|
Reference in New Issue
Block a user