diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder2.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder2.java index 19b08c97df1548bfbcdae15cbe224a07621805df..03c7036db5492df222495c08cf01138d56d0aa7f 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder2.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder2.java @@ -320,7 +320,8 @@ class PacketBuilder2 { * @return ready to send packet, or null if there was a problem */ public UDPPacket buildSessionRequestPacket(OutboundEstablishState2 state) { - UDPPacket packet = buildLongPacketHeader(state.getSendConnID(), 0, SESSION_REQUEST_FLAG_BYTE, + long n = _context.random().signedNextInt() & 0xFFFFFFFFL; + UDPPacket packet = buildLongPacketHeader(state.getSendConnID(), n, SESSION_REQUEST_FLAG_BYTE, state.getRcvConnID(), state.getToken()); DatagramPacket pkt = packet.getPacket(); @@ -357,7 +358,8 @@ class PacketBuilder2 { * @return ready to send packet, or null if there was a problem */ public UDPPacket buildSessionCreatedPacket(InboundEstablishState2 state) { - UDPPacket packet = buildLongPacketHeader(state.getSendConnID(), 0, SESSION_CREATED_FLAG_BYTE, + long n = _context.random().signedNextInt() & 0xFFFFFFFFL; + UDPPacket packet = buildLongPacketHeader(state.getSendConnID(), n, SESSION_CREATED_FLAG_BYTE, state.getRcvConnID(), state.getToken()); DatagramPacket pkt = packet.getPacket(); @@ -472,7 +474,7 @@ class PacketBuilder2 { * @return ready to send packet, or null if there was a problem */ private UDPPacket buildSessionConfirmedPacket(OutboundEstablishState2 state, int numFragments, byte ourInfo[], int len, boolean gzip) { - UDPPacket packet = buildShortPacketHeader(state.getSendConnID(), 1, SESSION_CONFIRMED_FLAG_BYTE); + UDPPacket packet = buildShortPacketHeader(state.getSendConnID(), 0, SESSION_CONFIRMED_FLAG_BYTE); DatagramPacket pkt = packet.getPacket(); InetAddress to; diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState2.java b/router/java/src/net/i2p/router/transport/udp/PeerState2.java index 9db55bb9a55c7790764757abf6c292cdc214e0e2..125e444fcf55c73646b894931503dd2feab080ba 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState2.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState2.java @@ -68,6 +68,9 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback _rcvHeaderEncryptKey2 = rcvHdrKey2; _receivedMessages = new SSU2Bitfield(256, 0); _ackedMessages = new SSU2Bitfield(256, 0); + // For outbound, SessionConfirmed is packet 0 + if (!isInbound) + _packetNumber.set(1); } // SSU 1 overrides