propagate from branch 'i2p.i2p.zzz.i2cp' (head d4ac8162a4ba299ac912640f19076c3c90afdc67)

to branch 'i2p.i2p' (head adc5102c93383e01c74b87f04449dc9c307f6e75)
This commit is contained in:
zzz
2014-01-27 16:47:22 +00:00
24 changed files with 1298 additions and 195 deletions

View File

@ -593,8 +593,9 @@ class ConnectionManager {
Long id = Long.valueOf(_context.random().nextLong(Packet.MAX_STREAM_ID-1)+1);
PacketLocal packet = new PacketLocal(_context, peer);
packet.setSendStreamId(id.longValue());
packet.setFlag(Packet.FLAG_ECHO);
packet.setFlag(Packet.FLAG_SIGNATURE_INCLUDED);
packet.setFlag(Packet.FLAG_ECHO |
Packet.FLAG_NO_ACK |
Packet.FLAG_SIGNATURE_INCLUDED);
packet.setOptionalFrom(_session.getMyDestination());
//if ( (keyToUse != null) && (tagsToSend != null) ) {
// packet.setKeyUsed(keyToUse);

View File

@ -295,8 +295,15 @@ class Packet {
*/
public boolean isFlagSet(int flag) { return 0 != (_flags & flag); }
/**
* @param flag bitmask of any flag(s)
*/
public void setFlag(int flag) { _flags |= flag; }
/**
* @param flag bitmask of any flag(s)
* @param set true to set, false to clear
*/
public void setFlag(int flag, boolean set) {
if (set)
_flags |= flag;
@ -304,7 +311,7 @@ class Packet {
_flags &= ~flag;
}
public void setFlags(int flags) { _flags = flags; }
private void setFlags(int flags) { _flags = flags; }
/** the signature on the packet (only included if the flag for it is set)
* @return signature on the packet if the flag for signatures is set

View File

@ -349,8 +349,7 @@ class PacketHandler {
}
} else {
PacketLocal pong = new PacketLocal(_context, packet.getOptionalFrom());
pong.setFlag(Packet.FLAG_ECHO, true);
pong.setFlag(Packet.FLAG_SIGNATURE_INCLUDED, false);
pong.setFlag(Packet.FLAG_ECHO | Packet.FLAG_NO_ACK);
pong.setReceiveStreamId(packet.getSendStreamId());
_manager.getPacketQueue().enqueue(pong);
}

View File

@ -109,7 +109,13 @@ class PacketQueue {
options.setTagsToSend(INITIAL_TAGS_TO_SEND);
options.setTagThreshold(MIN_TAG_THRESHOLD);
} else if (packet.isFlagSet(FLAGS_FINAL_TAGS)) {
options.setSendLeaseSet(false);
if (packet.isFlagSet(Packet.FLAG_ECHO)) {
// Send LS for PING, not for PONG
if (packet.getSendStreamId() <= 0) // pong
options.setSendLeaseSet(false);
} else {
options.setSendLeaseSet(false);
}
options.setTagsToSend(FINAL_TAGS_TO_SEND);
options.setTagThreshold(FINAL_TAG_THRESHOLD);
} else {