I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit de41cab0 authored by zzz's avatar zzz
Browse files

GarlicClove: Store time as long rather than Date to save space

parent 3606a42e
No related branches found
No related tags found
No related merge requests found
......@@ -11,7 +11,6 @@ package net.i2p.data.i2np;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import net.i2p.I2PAppContext;
import net.i2p.data.Certificate;
......@@ -35,7 +34,7 @@ public class GarlicClove extends DataStructureImpl {
private DeliveryInstructions _instructions;
private I2NPMessage _msg;
private long _cloveId;
private Date _expiration;
private long _expiration;
private Certificate _certificate;
public GarlicClove(I2PAppContext context) {
......@@ -49,8 +48,8 @@ public class GarlicClove extends DataStructureImpl {
public void setData(I2NPMessage msg) { _msg = msg; }
public long getCloveId() { return _cloveId; }
public void setCloveId(long id) { _cloveId = id; }
public Date getExpiration() { return _expiration; }
public void setExpiration(Date exp) { _expiration = exp; }
public long getExpiration() { return _expiration; }
public void setExpiration(long exp) { _expiration = exp; }
public Certificate getCertificate() { return _certificate; }
public void setCertificate(Certificate cert) { _certificate = cert; }
......@@ -79,7 +78,7 @@ public class GarlicClove extends DataStructureImpl {
}
_cloveId = DataHelper.fromLong(source, cur, 4);
cur += 4;
_expiration = DataHelper.fromDate(source, cur);
_expiration = DataHelper.fromLong(source, cur, 8);
cur += DataHelper.DATE_LENGTH;
_certificate = Certificate.create(source, cur);
cur += _certificate.size();
......@@ -99,7 +98,7 @@ public class GarlicClove extends DataStructureImpl {
I2NPMessageHandler handler = new I2NPMessageHandler(_context);
_msg = I2NPMessageImpl.fromRawByteArrayNTCP2(_context, source, offset + isz, len - isz, handler);
_cloveId = _msg.getUniqueId();
_expiration = new Date(_msg.getMessageExpiration());
_expiration = _msg.getMessageExpiration();
_certificate = Certificate.NULL_CERT;
} catch (I2NPMessageException ime) {
throw new DataFormatException("Unable to read the message from a garlic clove", ime);
......@@ -125,7 +124,7 @@ public class GarlicClove extends DataStructureImpl {
offset = _msg.toByteArray(rv, offset);
DataHelper.toLong(rv, offset, 4, _cloveId);
offset += 4;
DataHelper.toDate(rv, offset, _expiration.getTime());
DataHelper.toLong(rv, offset, 8, _expiration);
offset += DataHelper.DATE_LENGTH;
offset += _certificate.writeBytes(rv, offset);
if (offset != rv.length) {
......@@ -173,7 +172,7 @@ public class GarlicClove extends DataStructureImpl {
return DataHelper.eq(_certificate, clove._certificate) &&
_cloveId == clove._cloveId &&
DataHelper.eq(_msg, clove._msg) &&
DataHelper.eq(_expiration, clove._expiration) &&
_expiration == clove._expiration &&
DataHelper.eq(_instructions, clove._instructions);
}
......@@ -182,7 +181,7 @@ public class GarlicClove extends DataStructureImpl {
return DataHelper.hashCode(_certificate) ^
(int) _cloveId ^
DataHelper.hashCode(_msg) ^
DataHelper.hashCode(_expiration) ^
(int) _expiration ^
DataHelper.hashCode(_instructions);
}
......@@ -193,7 +192,7 @@ public class GarlicClove extends DataStructureImpl {
buf.append("\n\tInstructions: ").append(_instructions);
buf.append("\n\tCertificate: ").append(_certificate);
buf.append("\n\tClove ID: ").append(_cloveId);
buf.append("\n\tExpiration: ").append(_expiration);
buf.append("\n\tExpiration: ").append(DataHelper.formatTime(_expiration));
buf.append("\n\tData: ").append(_msg);
buf.append("]");
return buf.toString();
......
......@@ -467,7 +467,7 @@ public class GarlicMessageBuilder {
private static byte[] buildCommonClove(GarlicClove clove, GarlicConfig config) {
clove.setCertificate(config.getCertificate());
clove.setCloveId(config.getId());
clove.setExpiration(new Date(config.getExpiration()));
clove.setExpiration(config.getExpiration());
clove.setInstructions(config.getDeliveryInstructions());
return clove.toByteArray();
}
......@@ -514,7 +514,7 @@ public class GarlicMessageBuilder {
clove.setData(config.getPayload());
clove.setCertificate(Certificate.NULL_CERT);
clove.setCloveId(0);
clove.setExpiration(new Date(config.getExpiration()));
clove.setExpiration(config.getExpiration());
clove.setInstructions(config.getDeliveryInstructions());
return clove;
}
......
......@@ -134,11 +134,11 @@ public class GarlicMessageReceiver {
// is no longer a separate field for the clove ID in the transmission format.
//String invalidReason = _context.messageValidator().validateMessage(clove.getCloveId(),
// clove.getExpiration().getTime());
String invalidReason = _context.messageValidator().validateMessage(clove.getExpiration().getTime());
String invalidReason = _context.messageValidator().validateMessage(clove.getExpiration());
boolean rv = invalidReason == null;
if (!rv) {
String howLongAgo = DataHelper.formatDuration(_context.clock().now()-clove.getExpiration().getTime());
String howLongAgo = DataHelper.formatDuration(_context.clock().now()-clove.getExpiration());
if (_log.shouldInfo())
_log.info("Clove is NOT valid: id=" + clove.getCloveId()
+ " expiration " + howLongAgo + " ago", new Exception("Invalid within..."));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment