diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java
index 3029f96c39..ac64e7d42b 100644
--- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java
+++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java
@@ -57,10 +57,11 @@ to the various messages - a one byte flag and a four byte sending
timestamp (*seconds* since the unix epoch). The flag byte contains
the following bitfields:
- bits 0-3: payload type
- bit 4: rekey?
- bit 5: extended options included
- bits 6-7: reserved
+Bit order: 76543210
+ bits 7-4: payload type
+ bit 3: rekey?
+ bit 2: extended options included
+ bits 1-0: reserved
If the rekey flag is set, 64 bytes of keying material follow the
@@ -166,6 +167,19 @@ class PacketBuilder {
private static final String PROP_PADDING = "i2np.udp.padding";
private static final boolean DEFAULT_ENABLE_PADDING = true;
+ /**
+ * The nine message types, 0-8, shifted to bits 7-4 for convenience
+ */
+ private static final byte SESSION_REQUEST_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_SESSION_REQUEST << 4;
+ private static final byte SESSION_CREATED_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_SESSION_CREATED << 4;
+ private static final byte SESSION_CONFIRMED_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_SESSION_CONFIRMED << 4;
+ private static final byte PEER_RELAY_REQUEST_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_RELAY_REQUEST << 4;
+ private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4;
+ private static final byte PEER_RELAY_INTRO_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4;
+ private static final byte DATA_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_DATA << 4;
+ private static final byte PEER_TEST_FLAG_BYTE = UDPPacket.PAYLOAD_TYPE_TEST << 4;
+ private static final byte SESSION_DESTROY_FLAG_BYTE = (byte) (UDPPacket.PAYLOAD_TYPE_SESSION_DESTROY << 4);
+
/**
* @param transport may be null for unit testing only
*/
@@ -332,7 +346,7 @@ class PacketBuilder {
int availableForExplicitAcks = availableForAcks;
// make the packet
- UDPPacket packet = buildPacketHeader((byte)(UDPPacket.PAYLOAD_TYPE_DATA << 4));
+ UDPPacket packet = buildPacketHeader(DATA_FLAG_BYTE);
DatagramPacket pkt = packet.getPacket();
byte data[] = pkt.getData();
int off = HEADER_SIZE;
@@ -573,7 +587,7 @@ class PacketBuilder {
* @param ackBitfields list of ACKBitfield instances to either fully or partially ACK
*/
public UDPPacket buildACK(PeerState peer, List ackBitfields) {
- UDPPacket packet = buildPacketHeader((byte)(UDPPacket.PAYLOAD_TYPE_DATA << 4));
+ UDPPacket packet = buildPacketHeader(DATA_FLAG_BYTE);
DatagramPacket pkt = packet.getPacket();
byte data[] = pkt.getData();
int off = HEADER_SIZE;
@@ -667,12 +681,6 @@ class PacketBuilder {
return packet;
}
- /**
- * full flag info for a sessionCreated message. this can be fixed,
- * since we never rekey on startup, and don't need any extended options
- */
- private static final byte SESSION_CREATED_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_SESSION_CREATED << 4);
-
/**
* Build a new SessionCreated packet for the given peer, encrypting it
* as necessary.
@@ -768,12 +776,6 @@ class PacketBuilder {
return packet;
}
- /**
- * full flag info for a sessionRequest message. this can be fixed,
- * since we never rekey on startup, and don't need any extended options
- */
- private static final byte SESSION_REQUEST_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_SESSION_REQUEST << 4);
-
/**
* Build a new SessionRequest packet for the given peer, encrypting it
* as necessary.
@@ -854,13 +856,6 @@ class PacketBuilder {
return packets;
}
-
- /**
- * full flag info for a sessionConfirmed message. this can be fixed,
- * since we never rekey on startup, and don't need any extended options
- */
- private static final byte SESSION_CONFIRMED_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_SESSION_CONFIRMED << 4);
-
/**
* Build a new SessionConfirmed packet for the given peer
*
@@ -1018,7 +1013,7 @@ class PacketBuilder {
* @since 0.9.2
*/
private UDPPacket buildSessionDestroyPacket(SessionKey cipherKey, SessionKey macKey, InetAddress addr, int port) {
- UDPPacket packet = buildPacketHeader((byte)(UDPPacket.PAYLOAD_TYPE_SESSION_DESTROY << 4));
+ UDPPacket packet = buildPacketHeader(SESSION_DESTROY_FLAG_BYTE);
int off = HEADER_SIZE;
// no body in this message
@@ -1034,12 +1029,6 @@ class PacketBuilder {
return packet;
}
- /**
- * full flag info for a peerTest message. this can be fixed,
- * since we never rekey on test, and don't need any extended options
- */
- private static final byte PEER_TEST_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_TEST << 4);
-
/**
* Build a packet as if we are Alice and we either want Bob to begin a
* peer test or Charlie to finish a peer test.
@@ -1197,12 +1186,6 @@ class PacketBuilder {
packet.setMessageType(TYPE_TCB);
return packet;
}
-
- /**
- * full flag info for a relay request message. this can be fixed,
- * since we never rekey on relay request, and don't need any extended options
- */
- private static final byte PEER_RELAY_REQUEST_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_REQUEST << 4);
// specify these if we know what our external receive ip/port is and if its different
// from what bob is going to think
@@ -1330,12 +1313,6 @@ class PacketBuilder {
return packet;
}
- /**
- * full flag info for a relay intro message. this can be fixed,
- * since we never rekey on relay request, and don't need any extended options
- */
- private static final byte PEER_RELAY_INTRO_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4);
-
UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {
UDPPacket packet = buildPacketHeader(PEER_RELAY_INTRO_FLAG_BYTE);
DatagramPacket pkt = packet.getPacket();
@@ -1370,12 +1347,6 @@ class PacketBuilder {
packet.setMessageType(TYPE_INTRO);
return packet;
}
-
- /**
- * full flag info for a relay response message. this can be fixed,
- * since we never rekey on relay response, and don't need any extended options
- */
- private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4);
UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce,
SessionKey cipherKey, SessionKey macKey) {