DeliveryInstructions:

- Comment out unused encryption fields to save space
  - New static immutable LOCAL instruction to reduce object churn
This commit is contained in:
zzz
2013-11-08 14:39:43 +00:00
parent 4382def62f
commit d1b93e0705
5 changed files with 110 additions and 47 deletions

View File

@@ -33,8 +33,8 @@ import net.i2p.data.TunnelId;
*/
public class DeliveryInstructions extends DataStructureImpl {
//private final static Log _log = new Log(DeliveryInstructions.class);
private boolean _encrypted;
private SessionKey _encryptionKey;
//private boolean _encrypted;
//private SessionKey _encryptionKey;
private int _deliveryMode;
public final static int DELIVERY_MODE_LOCAL = 0;
public final static int DELIVERY_MODE_DESTINATION = 1;
@@ -56,6 +56,13 @@ public class DeliveryInstructions extends DataStructureImpl {
private final static long FLAG_MODE = 96;
private final static long FLAG_DELAY = 16;
/**
* Immutable local instructions, no options
*
* @since 0.9.9
*/
public static final DeliveryInstructions LOCAL = new LocalInstructions();
public DeliveryInstructions() {
_deliveryMode = -1;
}
@@ -64,25 +71,25 @@ public class DeliveryInstructions extends DataStructureImpl {
* For cloves only (not tunnels), default false, unused
* @deprecated unused
*/
public boolean getEncrypted() { return _encrypted; }
public boolean getEncrypted() { return /* _encrypted */ false; }
/**
* For cloves only (not tunnels), default false, unused
* @deprecated unused
*/
public void setEncrypted(boolean encrypted) { _encrypted = encrypted; }
public void setEncrypted(boolean encrypted) { /* _encrypted = encrypted; */ }
/**
* For cloves only (not tunnels), default null, unused
* @deprecated unused
*/
public SessionKey getEncryptionKey() { return _encryptionKey; }
public SessionKey getEncryptionKey() { return /* _encryptionKey */ null; }
/**
* For cloves only (not tunnels), default null, unused
* @deprecated unused
*/
public void setEncryptionKey(SessionKey key) { _encryptionKey = key; }
public void setEncryptionKey(SessionKey key) { /* _encryptionKey = key; */ }
/** default -1 */
public int getDeliveryMode() { return _deliveryMode; }
@@ -121,7 +128,7 @@ public class DeliveryInstructions extends DataStructureImpl {
public void setDelayRequested(boolean req) { _delayRequested = req; }
/**
* default 0, unusedx
* default 0, unused
* @deprecated unused
*/
public long getDelaySeconds() { return _delaySeconds; }
@@ -252,20 +259,20 @@ public class DeliveryInstructions extends DataStructureImpl {
* @deprecated unused
*/
/****
private boolean flagEncrypted(long flags) {
private static boolean flagEncrypted(long flags) {
return (0 != (flags & FLAG_ENCRYPTED));
}
****/
/** high bits */
private int flagMode(long flags) {
private static int flagMode(long flags) {
long v = flags & FLAG_MODE;
v >>>= 5;
return (int)v;
}
/** unused */
private boolean flagDelay(long flags) {
private static boolean flagDelay(long flags) {
return (0 != (flags & FLAG_DELAY));
}
@@ -492,4 +499,90 @@ public class DeliveryInstructions extends DataStructureImpl {
return buf.toString();
}
/**
* An immutable local delivery instructions with no options
* for efficiency.
*
* @since 0.9.9
*/
private static final class LocalInstructions extends DeliveryInstructions {
//private static final byte flag = DELIVERY_MODE_LOCAL << 5; // 0
@Override
public void setEncrypted(boolean encrypted) {
throw new RuntimeException("immutable");
}
@Override
public void setEncryptionKey(SessionKey key) {
throw new RuntimeException("immutable");
}
@Override
public int getDeliveryMode() { return DELIVERY_MODE_LOCAL; }
@Override
public void setDeliveryMode(int mode) {
throw new RuntimeException("immutable");
}
@Override
public void setDestination(Hash dest) {
throw new RuntimeException("immutable");
}
@Override
public void setRouter(Hash router) {
throw new RuntimeException("immutable");
}
@Override
public void setTunnelId(TunnelId id) {
throw new RuntimeException("immutable");
}
@Override
public void setDelayRequested(boolean req) {
throw new RuntimeException("immutable");
}
@Override
public void setDelaySeconds(long seconds) {
throw new RuntimeException("immutable");
}
@Override
public void readBytes(InputStream in) throws DataFormatException, IOException {
throw new RuntimeException("immutable");
}
@Override
public int readBytes(byte data[], int offset) throws DataFormatException {
throw new RuntimeException("immutable");
}
@Override
public void writeBytes(OutputStream out) throws DataFormatException, IOException {
out.write((byte) 0);
}
@Override
public int writeBytes(byte target[], int offset) {
target[offset] = 0;
return 1;
}
@Override
public int getSize() {
return 1;
}
@Override
public String toString() {
return "[DeliveryInstructions: " +
"\n\tDelivery mode: " +
"local]";
}
}
}

View File

@@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */
public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 22;
public final static long BUILD = 23;
/** for example "-test" */
public final static String EXTRA = "";

View File

@@ -122,18 +122,8 @@ class OutboundClientMessageJobHelper {
// and get the leaseset stored before handling the data
config.addClove(dataClove);
DeliveryInstructions instructions = new DeliveryInstructions();
instructions.setDeliveryMode(DeliveryInstructions.DELIVERY_MODE_LOCAL);
// defaults
//instructions.setDelayRequested(false);
//instructions.setDelaySeconds(0);
//instructions.setEncrypted(false);
//instructions.setEncryptionKey(null);
//instructions.setRouter(null);
//instructions.setTunnelId(null);
config.setCertificate(Certificate.NULL_CERT);
config.setDeliveryInstructions(instructions);
config.setDeliveryInstructions(DeliveryInstructions.LOCAL);
config.setId(ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE));
config.setExpiration(expiration); // +2*Router.CLOCK_FUDGE_FACTOR);
config.setRecipientPublicKey(recipientPK);
@@ -233,16 +223,8 @@ class OutboundClientMessageJobHelper {
*/
static PayloadGarlicConfig buildLeaseSetClove(RouterContext ctx, long expiration, LeaseSet replyLeaseSet) {
PayloadGarlicConfig clove = new PayloadGarlicConfig();
DeliveryInstructions instructions = new DeliveryInstructions();
instructions.setDeliveryMode(DeliveryInstructions.DELIVERY_MODE_LOCAL);
// defaults
//instructions.setDelayRequested(false);
//instructions.setDelaySeconds(0);
//instructions.setEncrypted(false);
clove.setCertificate(Certificate.NULL_CERT);
clove.setDeliveryInstructions(instructions);
clove.setDeliveryInstructions(DeliveryInstructions.LOCAL);
clove.setExpiration(expiration);
clove.setId(ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE));
DatabaseStoreMessage msg = new DatabaseStoreMessage(ctx);

View File

@@ -43,15 +43,12 @@ public class MessageWrapper {
* @return null on encrypt failure
*/
static WrappedMessage wrap(RouterContext ctx, I2NPMessage m, Hash from, RouterInfo to) {
DeliveryInstructions instructions = new DeliveryInstructions();
instructions.setDeliveryMode(DeliveryInstructions.DELIVERY_MODE_LOCAL);
PayloadGarlicConfig payload = new PayloadGarlicConfig();
payload.setCertificate(Certificate.NULL_CERT);
payload.setId(ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE));
payload.setPayload(m);
payload.setRecipient(to);
payload.setDeliveryInstructions(instructions);
payload.setDeliveryInstructions(DeliveryInstructions.LOCAL);
payload.setExpiration(m.getMessageExpiration());
SessionKeyManager skm;
@@ -127,15 +124,12 @@ public class MessageWrapper {
* @since 0.9.5
*/
static GarlicMessage wrap(RouterContext ctx, I2NPMessage m, RouterInfo to) {
DeliveryInstructions instructions = new DeliveryInstructions();
instructions.setDeliveryMode(DeliveryInstructions.DELIVERY_MODE_LOCAL);
PayloadGarlicConfig payload = new PayloadGarlicConfig();
payload.setCertificate(Certificate.NULL_CERT);
payload.setId(ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE));
payload.setPayload(m);
payload.setRecipient(to);
payload.setDeliveryInstructions(instructions);
payload.setDeliveryInstructions(DeliveryInstructions.LOCAL);
payload.setExpiration(m.getMessageExpiration());
SessionKey sentKey = ctx.keyGenerator().generateSessionKey();
@@ -215,14 +209,11 @@ public class MessageWrapper {
* @since 0.9.7
*/
public static GarlicMessage wrap(RouterContext ctx, I2NPMessage m, SessionKey encryptKey, SessionTag encryptTag) {
DeliveryInstructions instructions = new DeliveryInstructions();
instructions.setDeliveryMode(DeliveryInstructions.DELIVERY_MODE_LOCAL);
PayloadGarlicConfig payload = new PayloadGarlicConfig();
payload.setCertificate(Certificate.NULL_CERT);
payload.setId(ctx.random().nextLong(I2NPMessage.MAX_ID_VALUE));
payload.setPayload(m);
payload.setDeliveryInstructions(instructions);
payload.setDeliveryInstructions(DeliveryInstructions.LOCAL);
payload.setExpiration(m.getMessageExpiration());
GarlicMessage msg = GarlicMessageBuilder.buildMessage(ctx, payload, null, null,

View File

@@ -115,15 +115,12 @@ class TestJob extends JobImpl {
// can't tell its a test. to simplify this, we encrypt it with a random key and tag,
// remembering that key+tag so that we can decrypt it later. this means we can do the
// garlic encryption without any ElGamal (yay)
DeliveryInstructions instructions = new DeliveryInstructions();
instructions.setDeliveryMode(DeliveryInstructions.DELIVERY_MODE_LOCAL);
PayloadGarlicConfig payload = new PayloadGarlicConfig();
payload.setCertificate(Certificate.NULL_CERT);
payload.setId(getContext().random().nextLong(I2NPMessage.MAX_ID_VALUE));
payload.setPayload(m);
payload.setRecipient(getContext().router().getRouterInfo());
payload.setDeliveryInstructions(instructions);
payload.setDeliveryInstructions(DeliveryInstructions.LOCAL);
payload.setExpiration(m.getMessageExpiration());
SessionKey encryptKey = getContext().keyGenerator().generateSessionKey();