forked from I2P_Developers/i2p.i2p
SSU2: Drop short session request messages in packet handler
both before and after retry, before passing to IES2 log tweaks
This commit is contained in:
@@ -883,6 +883,13 @@ class PacketHandler {
|
||||
// can't have session confirmed with null state, avoid NPE below
|
||||
return false;
|
||||
}
|
||||
if (type == SSU2Util.SESSION_REQUEST_FLAG_BYTE &&
|
||||
packet.getPacket().getLength() == SSU2Util.MIN_HANDSHAKE_DATA_LEN - 1) {
|
||||
// i2pd short 87 byte session request thru 0.9.56, drop packet
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Short Session Request len 87 on " + state);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
type = SSU2Util.SESSION_REQUEST_FLAG_BYTE;
|
||||
}
|
||||
@@ -900,11 +907,18 @@ class PacketHandler {
|
||||
header.getNetID() != _networkID) {
|
||||
// possibly token-request-after-retry? let's see...
|
||||
header = SSU2Header.trialDecryptLongHeader(packet, k1, k2);
|
||||
if (header != null && header.getType() == SSU2Util.SESSION_REQUEST_FLAG_BYTE &&
|
||||
header.getVersion() == 2 && header.getNetID() == _networkID &&
|
||||
packet.getPacket().getLength() == 87) {
|
||||
// i2pd short 87 byte session request thru 0.9.56, drop packet
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Short Session Request after Retry len 87 on " + state);
|
||||
return true;
|
||||
}
|
||||
if (header == null ||
|
||||
header.getType() != SSU2Util.TOKEN_REQUEST_FLAG_BYTE ||
|
||||
header.getVersion() != 2 ||
|
||||
header.getNetID() != _networkID) {
|
||||
// i2pd short 87 byte session request thru 0.9.56
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Failed decrypt Session/Token Request after Retry: " + header +
|
||||
" len " + packet.getPacket().getLength() + " on " + state);
|
||||
@@ -914,15 +928,18 @@ class PacketHandler {
|
||||
}
|
||||
if (header.getSrcConnID() != state.getSendConnID()) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Bad Source Conn id " + header + " on " + state);
|
||||
_log.warn("Bad Source Conn id " + header +
|
||||
" len " + packet.getPacket().getLength() + " on " + state);
|
||||
// TODO could be a retransmitted Session Request,
|
||||
// tell establisher?
|
||||
return false;
|
||||
}
|
||||
if (header.getDestConnID() != state.getRcvConnID()) {
|
||||
// i2pd bug changing after retry, thru 0.9.56, drop packet
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Bad Dest Conn id " + header + " on " + state);
|
||||
return false;
|
||||
_log.warn("Bad Dest Conn id " + header +
|
||||
" len " + packet.getPacket().getLength() + " on " + state);
|
||||
return true;
|
||||
}
|
||||
type = header.getType();
|
||||
} else {
|
||||
@@ -944,7 +961,7 @@ class PacketHandler {
|
||||
if (header.getPacketNumber() != 0 ||
|
||||
header.getType() != SSU2Util.SESSION_CONFIRMED_FLAG_BYTE) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("Queue possible data packet with header " + header + " on: " + state);
|
||||
_log.warn("Queue possible data packet " + header + " on: " + state);
|
||||
// TODO either attempt to decrypt as a retransmitted
|
||||
// Session Request or Token Request,
|
||||
// or just tell establisher so it can retransmit Session Created or Retry
|
||||
|
||||
Reference in New Issue
Block a user