merge of '2bb222d33ec817b78fcf506c32da44d10b1eff3b'

and '59e86e3176465259a67927b042c1307cd0a94aa4'
This commit is contained in:
zzz
2013-10-14 17:10:55 +00:00
9 changed files with 74 additions and 63 deletions

View File

@@ -44,7 +44,7 @@ public interface DHT {
* @param max maximum number of peers to return
* @param maxWait the maximum time to wait (ms) must be > 0
* @param annMax the number of peers to announce to
* @param maxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
* @param annMaxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
* @return possibly empty (never null)
*/
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait);

View File

@@ -317,7 +317,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
* @param max maximum number of peers to return
* @param maxWait the maximum time to wait (ms) must be > 0
* @param annMax the number of peers to announce to
* @param maxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
* @param annMaxWait the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
* @return possibly empty (never null)
*/
public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait) {

View File

@@ -108,7 +108,7 @@ public class Destination extends KeysAndCert {
}
/**
* @deprecated, was used only by Packet.java in streaming, now unused
* @deprecated was used only by Packet.java in streaming, now unused
*
* @throws IllegalStateException if data already set
*/

View File

@@ -54,12 +54,12 @@ public class LogSettingsTest extends TestCase {
temp.close();
}
DataHelper.loadProps(p, f);
origMinimumOnScreenLevel = p.getProperty("logger.record.net.i2p.util.LogSettings", Log.STR_ERROR);
origMinimumOnScreenLevel = p.getProperty("logger.record.net.i2p.util.LogSettingsTest", Log.STR_ERROR);
origLogSettings = p.getProperty("logger.minimumOnScreenLevel", Log.STR_CRIT);
}
protected void tearDown() throws IOException{
p.setProperty("logger.record.net.i2p.util.LogSettings", origMinimumOnScreenLevel);
p.setProperty("logger.record.net.i2p.util.LogSettingsTest", origMinimumOnScreenLevel);
p.setProperty("logger.minimumOnScreenLevel", origLogSettings);
DataHelper.storeProps(p, f);
@@ -67,7 +67,7 @@ public class LogSettingsTest extends TestCase {
}
public void testDebug() throws IOException {
p.setProperty("logger.record.net.i2p.util.LogSettings", Log.toLevelString(Log.DEBUG));
p.setProperty("logger.record.net.i2p.util.LogSettingsTest", Log.toLevelString(Log.DEBUG));
p.setProperty("logger.minimumOnScreenLevel", Log.toLevelString(Log.DEBUG));
DataHelper.storeProps(p, f);
@@ -118,7 +118,7 @@ public class LogSettingsTest extends TestCase {
}
public void testInfo() throws IOException {
p.setProperty("logger.record.net.i2p.util.LogSettings", Log.toLevelString(Log.INFO));
p.setProperty("logger.record.net.i2p.util.LogSettingsTest", Log.toLevelString(Log.INFO));
p.setProperty("logger.minimumOnScreenLevel", Log.toLevelString(Log.DEBUG));
DataHelper.storeProps(p, f);
@@ -166,7 +166,7 @@ public class LogSettingsTest extends TestCase {
}
public void testWarn() throws IOException {
p.setProperty("logger.record.net.i2p.util.LogSettings", Log.toLevelString(Log.WARN));
p.setProperty("logger.record.net.i2p.util.LogSettingsTest", Log.toLevelString(Log.WARN));
p.setProperty("logger.minimumOnScreenLevel", Log.toLevelString(Log.DEBUG));
DataHelper.storeProps(p, f);
@@ -211,7 +211,7 @@ public class LogSettingsTest extends TestCase {
}
public void testError() throws IOException{
p.setProperty("logger.record.net.i2p.util.LogSettings", Log.toLevelString(Log.ERROR));
p.setProperty("logger.record.net.i2p.util.LogSettingsTest", Log.toLevelString(Log.ERROR));
p.setProperty("logger.minimumOnScreenLevel", Log.toLevelString(Log.DEBUG));
DataHelper.storeProps(p, f);
@@ -254,7 +254,7 @@ public class LogSettingsTest extends TestCase {
}
public void testCrit() throws IOException {
p.setProperty("logger.record.net.i2p.util.LogSettings", Log.toLevelString(Log.CRIT));
p.setProperty("logger.record.net.i2p.util.LogSettingsTest", Log.toLevelString(Log.CRIT));
p.setProperty("logger.minimumOnScreenLevel", Log.toLevelString(Log.DEBUG));
DataHelper.storeProps(p, f);

View File

@@ -16,60 +16,83 @@ import net.i2p.data.i2cp.SessionConfig;
/**
* Wrap a message either destined for a local client or received from one.
* Note that an outbound message may get routed as an inbound message
* for local-local communication.
*
* @author jrandom
*/
public class ClientMessage {
private Payload _payload;
private Destination _destination;
private Destination _fromDestination;
private final Payload _payload;
private final Destination _destination;
private final Destination _fromDestination;
//private MessageReceptionInfo _receptionInfo;
private SessionConfig _senderConfig;
private Hash _destinationHash;
private MessageId _messageId;
private long _expiration;
private final SessionConfig _senderConfig;
private final Hash _destinationHash;
private final MessageId _messageId;
private final long _expiration;
/** only for outbound messages */
private int _flags;
private final int _flags;
public ClientMessage() {
/**
* For outbound (locally originated)
* @since 0.9.9
*/
public ClientMessage(Destination toDest, Payload payload, SessionConfig config, Destination fromDest,
MessageId msgID, long expiration, int flags) {
_destination = toDest;
_destinationHash = null;
_payload = payload;
_senderConfig = config;
_fromDestination = fromDest;
_messageId = msgID;
_expiration = expiration;
_flags = flags;
}
/**
* For inbound (from remote dest)
* @since 0.9.9
*/
public ClientMessage(Hash toDestHash, Payload payload) {
_destination = null;
_destinationHash = toDestHash;
_payload = payload;
_senderConfig = null;
_fromDestination = null;
_messageId = null;
_expiration = 0;
_flags = 0;
}
/**
* Retrieve the payload of the message. All ClientMessage objects should have
* a payload
*
*/
public Payload getPayload() { return _payload; }
public void setPayload(Payload payload) { _payload = payload; }
/**
* Retrieve the destination to which this message is directed. All ClientMessage
* objects should have a destination.
*
* Retrieve the destination to which this message is directed.
* Valid for outbound; null for inbound.
* If null, use getDestinationHash()
*/
public Destination getDestination() { return _destination; }
public void setDestination(Destination dest) { _destination = dest; }
/**
*
*
* Valid for outbound; null for inbound.
*/
public Destination getFromDestination() { return _fromDestination; }
public void setFromDestination(Destination dest) { _fromDestination = dest; }
/**
* Retrieve the destination to which this message is directed. All ClientMessage
* objects should have a destination.
*
* Retrieve the destination to which this message is directed.
* Valid for inbound; null for outbound.
* If null, use getDestination()
*/
public Hash getDestinationHash() { return _destinationHash; }
public void setDestinationHash(Hash dest) { _destinationHash = dest; }
/**
*
* Valid for outbound; null for inbound.
*/
public MessageId getMessageId() { return _messageId; }
public void setMessageId(MessageId id) { _messageId = id; }
/**
* Retrieve the information regarding how the router received this message. Only
@@ -83,18 +106,14 @@ public class ClientMessage {
/**
* Retrieve the session config of the client that sent the message. This will only be available
* if the client was local
*
*/
public SessionConfig getSenderConfig() { return _senderConfig; }
public void setSenderConfig(SessionConfig config) { _senderConfig = config; }
/**
* Expiration requested by the client that sent the message. This will only be available
* for locally originated messages.
*
*/
public long getExpiration() { return _expiration; }
public void setExpiration(long e) { _expiration = e; }
/**
* Flags requested by the client that sent the message. This will only be available
@@ -103,9 +122,4 @@ public class ClientMessage {
* @since 0.8.4
*/
public int getFlags() { return _flags; }
/**
* @since 0.8.4
*/
public void setFlags(int f) { _flags = f; }
}

View File

@@ -244,14 +244,9 @@ class ClientManager {
// sender went away
return;
}
ClientMessage msg = new ClientMessage();
msg.setDestination(toDest);
msg.setPayload(payload);
msg.setSenderConfig(runner.getConfig());
msg.setFromDestination(runner.getConfig().getDestination());
msg.setMessageId(msgId);
msg.setExpiration(expiration);
msg.setFlags(flags);
ClientMessage msg = new ClientMessage(toDest, payload, runner.getConfig(),
runner.getConfig().getDestination(), msgId,
expiration, flags);
_ctx.clientMessagePool().add(msg, true);
}
}

View File

@@ -131,25 +131,29 @@ public abstract class TransportUtil {
// IPv4 compat ::xxxx:xxxx
if (addr[0] == 0)
return false;
// disallow 2002::/16 (6to4 RFC 3056)
if (addr[0] == 0x20 && addr[1] == 0x02)
return false;
if (addr[0] == 0x20) {
// disallow 2002::/16 (6to4 RFC 3056)
if (addr[1] == 0x02)
return false;
if (addr[1] == 0x01) {
// disallow 2001:0::/32 (Teredo RFC 4380)
if (addr[2] == 0x00 && addr[3] == 0x00)
return false;
// Documenation (example) RFC 3849
if (addr[2] == 0x0d && (addr[3] & 0xff) == 0xb8)
return false;
}
}
// disallow fc00::/8 and fd00::/8 (Unique local addresses RFC 4193)
// not recognized as local by InetAddress
if ((addr[0] & 0xfe) == 0xfc)
return false;
// disallow 2001:0::/32 (Teredo RFC 4380)
if (addr[0] == 0x20 && addr[1] == 0x01 && addr[2] == 0x00 && addr[3] == 0x00)
return false;
// Hamachi IPv6
if (addr[0] == 0x26 && addr[1] == 0x20 && addr[2] == 0x00 && (addr[3] & 0xff) == 0x9b)
return false;
// 6bone RFC 2471
if (addr[0] == 0x3f && (addr[1] & 0xff) == 0xfe)
return false;
// Documenation (example) RFC 3849
if (addr[0] == 0x20 && addr[1] == 0x01 && addr[2] == 0x0d && (addr[3] & 0xff) == 0xb8)
return false;
try {
InetAddress ia = InetAddress.getByAddress(addr);
return

View File

@@ -223,9 +223,7 @@ class InboundMessageDistributor implements GarlicMessageReceiver.CloveReceiver {
DataMessage dm = (DataMessage)data;
Payload payload = new Payload();
payload.setEncryptedData(dm.getData());
ClientMessage m = new ClientMessage();
m.setDestinationHash(_client);
m.setPayload(payload);
ClientMessage m = new ClientMessage(_client, payload);
_context.clientManager().messageReceived(m);
} else {
if (_log.shouldLog(Log.ERROR))