forked from I2P_Developers/i2p.i2p
I2CP: Stub out client-side creation of meta and enc. LS2
This commit is contained in:
@ -25,11 +25,14 @@ import net.i2p.data.DatabaseEntry;
|
|||||||
import net.i2p.data.DataFormatException;
|
import net.i2p.data.DataFormatException;
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.data.Destination;
|
import net.i2p.data.Destination;
|
||||||
|
import net.i2p.data.EncryptedLeaseSet;
|
||||||
import net.i2p.data.Hash;
|
import net.i2p.data.Hash;
|
||||||
import net.i2p.data.Lease;
|
import net.i2p.data.Lease;
|
||||||
import net.i2p.data.Lease2;
|
import net.i2p.data.Lease2;
|
||||||
import net.i2p.data.LeaseSet;
|
import net.i2p.data.LeaseSet;
|
||||||
import net.i2p.data.LeaseSet2;
|
import net.i2p.data.LeaseSet2;
|
||||||
|
import net.i2p.data.MetaLease;
|
||||||
|
import net.i2p.data.MetaLeaseSet;
|
||||||
import net.i2p.data.PrivateKey;
|
import net.i2p.data.PrivateKey;
|
||||||
import net.i2p.data.PublicKey;
|
import net.i2p.data.PublicKey;
|
||||||
import net.i2p.data.SessionKey;
|
import net.i2p.data.SessionKey;
|
||||||
@ -48,6 +51,7 @@ import net.i2p.util.Log;
|
|||||||
*/
|
*/
|
||||||
class RequestLeaseSetMessageHandler extends HandlerImpl {
|
class RequestLeaseSetMessageHandler extends HandlerImpl {
|
||||||
private final Map<Destination, LeaseInfo> _existingLeaseSets;
|
private final Map<Destination, LeaseInfo> _existingLeaseSets;
|
||||||
|
protected int _ls2Type = DatabaseEntry.KEY_TYPE_LS2;
|
||||||
|
|
||||||
// LS 1
|
// LS 1
|
||||||
private static final String PROP_LS_ENCRYPT = "i2cp.encryptLeaseSet";
|
private static final String PROP_LS_ENCRYPT = "i2cp.encryptLeaseSet";
|
||||||
@ -74,9 +78,12 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Do we send a LeaseSet or a LeaseSet2?
|
* Do we send a LeaseSet or a LeaseSet2?
|
||||||
|
*
|
||||||
|
* Side effect: sets _ls2Type
|
||||||
|
*
|
||||||
* @since 0.9.38
|
* @since 0.9.38
|
||||||
*/
|
*/
|
||||||
protected static boolean requiresLS2(I2PSessionImpl session) {
|
protected boolean requiresLS2(I2PSessionImpl session) {
|
||||||
if (!session.supportsLS2())
|
if (!session.supportsLS2())
|
||||||
return false;
|
return false;
|
||||||
if (session.isOffline())
|
if (session.isOffline())
|
||||||
@ -91,9 +98,13 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
|
|||||||
if (s != null) {
|
if (s != null) {
|
||||||
try {
|
try {
|
||||||
int type = Integer.parseInt(s);
|
int type = Integer.parseInt(s);
|
||||||
|
_ls2Type = type;
|
||||||
if (type != DatabaseEntry.KEY_TYPE_LEASESET)
|
if (type != DatabaseEntry.KEY_TYPE_LEASESET)
|
||||||
return true;
|
return true;
|
||||||
} catch (NumberFormatException nfe) {}
|
} catch (NumberFormatException nfe) {
|
||||||
|
session.propogateError("Bad LS2 type", nfe);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -103,11 +114,34 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
|
|||||||
_log.debug("Handle message " + message);
|
_log.debug("Handle message " + message);
|
||||||
RequestLeaseSetMessage msg = (RequestLeaseSetMessage) message;
|
RequestLeaseSetMessage msg = (RequestLeaseSetMessage) message;
|
||||||
boolean isLS2 = requiresLS2(session);
|
boolean isLS2 = requiresLS2(session);
|
||||||
LeaseSet leaseSet = isLS2 ? new LeaseSet2() : new LeaseSet();
|
LeaseSet leaseSet;
|
||||||
|
if (isLS2) {
|
||||||
|
if (_ls2Type == DatabaseEntry.KEY_TYPE_LS2) {
|
||||||
|
leaseSet = new LeaseSet2();
|
||||||
|
} else if (_ls2Type == DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2) {
|
||||||
|
leaseSet = new EncryptedLeaseSet();
|
||||||
|
} else if (_ls2Type == DatabaseEntry.KEY_TYPE_META_LS2) {
|
||||||
|
leaseSet = new MetaLeaseSet();
|
||||||
|
} else {
|
||||||
|
session.propogateError("Unsupported LS2 type", new Exception());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
leaseSet = new LeaseSet();
|
||||||
|
}
|
||||||
|
// Full Meta and Encrypted support TODO
|
||||||
for (int i = 0; i < msg.getEndpoints(); i++) {
|
for (int i = 0; i < msg.getEndpoints(); i++) {
|
||||||
Lease lease = isLS2 ? new Lease2() : new Lease();
|
Lease lease;
|
||||||
|
if (_ls2Type == DatabaseEntry.KEY_TYPE_META_LS2) {
|
||||||
|
lease = new MetaLease();
|
||||||
|
} else if (isLS2) {
|
||||||
|
lease = new Lease2();
|
||||||
|
lease.setTunnelId(msg.getTunnelId(i));
|
||||||
|
} else {
|
||||||
|
lease = new Lease();
|
||||||
|
lease.setTunnelId(msg.getTunnelId(i));
|
||||||
|
}
|
||||||
lease.setGateway(msg.getRouter(i));
|
lease.setGateway(msg.getRouter(i));
|
||||||
lease.setTunnelId(msg.getTunnelId(i));
|
|
||||||
lease.setEndDate(msg.getEndDate());
|
lease.setEndDate(msg.getEndDate());
|
||||||
//lease.setStartDate(msg.getStartDate());
|
//lease.setStartDate(msg.getStartDate());
|
||||||
leaseSet.addLease(lease);
|
leaseSet.addLease(lease);
|
||||||
@ -218,7 +252,8 @@ class RequestLeaseSetMessageHandler extends HandlerImpl {
|
|||||||
+ dest);
|
+ dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
leaseSet.setEncryptionKey(li.getPublicKey());
|
if (_ls2Type != DatabaseEntry.KEY_TYPE_META_LS2)
|
||||||
|
leaseSet.setEncryptionKey(li.getPublicKey());
|
||||||
leaseSet.setSigningKey(li.getSigningPublicKey());
|
leaseSet.setSigningKey(li.getSigningPublicKey());
|
||||||
// SubSession options aren't updated via the gui, so use the primary options
|
// SubSession options aren't updated via the gui, so use the primary options
|
||||||
Properties opts;
|
Properties opts;
|
||||||
|
@ -10,10 +10,14 @@ package net.i2p.client.impl;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.data.DatabaseEntry;
|
||||||
|
import net.i2p.data.EncryptedLeaseSet;
|
||||||
import net.i2p.data.Lease;
|
import net.i2p.data.Lease;
|
||||||
import net.i2p.data.Lease2;
|
import net.i2p.data.Lease2;
|
||||||
import net.i2p.data.LeaseSet;
|
import net.i2p.data.LeaseSet;
|
||||||
import net.i2p.data.LeaseSet2;
|
import net.i2p.data.LeaseSet2;
|
||||||
|
import net.i2p.data.MetaLease;
|
||||||
|
import net.i2p.data.MetaLeaseSet;
|
||||||
import net.i2p.data.i2cp.I2CPMessage;
|
import net.i2p.data.i2cp.I2CPMessage;
|
||||||
import net.i2p.data.i2cp.RequestVariableLeaseSetMessage;
|
import net.i2p.data.i2cp.RequestVariableLeaseSetMessage;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
@ -36,15 +40,34 @@ class RequestVariableLeaseSetMessageHandler extends RequestLeaseSetMessageHandle
|
|||||||
_log.debug("Handle message " + message);
|
_log.debug("Handle message " + message);
|
||||||
RequestVariableLeaseSetMessage msg = (RequestVariableLeaseSetMessage) message;
|
RequestVariableLeaseSetMessage msg = (RequestVariableLeaseSetMessage) message;
|
||||||
boolean isLS2 = requiresLS2(session);
|
boolean isLS2 = requiresLS2(session);
|
||||||
LeaseSet leaseSet = isLS2 ? new LeaseSet2() : new LeaseSet();
|
LeaseSet leaseSet;
|
||||||
|
if (isLS2) {
|
||||||
|
if (_ls2Type == DatabaseEntry.KEY_TYPE_LS2) {
|
||||||
|
leaseSet = new LeaseSet2();
|
||||||
|
} else if (_ls2Type == DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2) {
|
||||||
|
leaseSet = new EncryptedLeaseSet();
|
||||||
|
} else if (_ls2Type == DatabaseEntry.KEY_TYPE_META_LS2) {
|
||||||
|
leaseSet = new MetaLeaseSet();
|
||||||
|
} else {
|
||||||
|
session.propogateError("Unsupported LS2 type", new Exception());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
leaseSet = new LeaseSet();
|
||||||
|
}
|
||||||
|
// Full Meta and Encrypted support TODO
|
||||||
for (int i = 0; i < msg.getEndpoints(); i++) {
|
for (int i = 0; i < msg.getEndpoints(); i++) {
|
||||||
Lease lease;
|
Lease lease;
|
||||||
if (isLS2) {
|
if (isLS2) {
|
||||||
// convert Lease to Lease2
|
// convert Lease to Lease2
|
||||||
Lease old = msg.getEndpoint(i);
|
Lease old = msg.getEndpoint(i);
|
||||||
lease = new Lease2();
|
if (_ls2Type == DatabaseEntry.KEY_TYPE_META_LS2) {
|
||||||
|
lease = new MetaLease();
|
||||||
|
} else {
|
||||||
|
lease = new Lease2();
|
||||||
|
lease.setTunnelId(old.getTunnelId());
|
||||||
|
}
|
||||||
lease.setGateway(old.getGateway());
|
lease.setGateway(old.getGateway());
|
||||||
lease.setTunnelId(old.getTunnelId());
|
|
||||||
lease.setEndDate(old.getEndDate());
|
lease.setEndDate(old.getEndDate());
|
||||||
} else {
|
} else {
|
||||||
lease = msg.getEndpoint(i);
|
lease = msg.getEndpoint(i);
|
||||||
|
Reference in New Issue
Block a user