SSU2: Prep for more padding in handshake

This commit is contained in:
zzz
2022-11-01 09:25:44 -04:00
parent f3f669dc2e
commit 5947275aae
2 changed files with 18 additions and 3 deletions

View File

@@ -871,7 +871,7 @@ class PacketBuilder2 {
blocks.add(block);
}
// plenty of room
block = getPadding(len, 1280);
block = getPadding(len, 1280, PADDING_MAX_SESSION_REQUEST);
len += block.getTotalLength();
blocks.add(block);
@@ -930,7 +930,7 @@ class PacketBuilder2 {
blocks.add(block);
}
// plenty of room
block = getPadding(len, 1280);
block = getPadding(len, 1280, PADDING_MAX_SESSION_CREATED);
len += block.getTotalLength();
blocks.add(block);
@@ -1160,7 +1160,20 @@ class PacketBuilder2 {
* @return null if no room
*/
private Block getPadding(int len, int max) {
int maxpadlen = Math.min(max - len, PADDING_MAX) - SSU2Payload.BLOCK_HEADER_SIZE;
return getPadding(len, max, PADDING_MAX);
}
/**
* @param len current length of the packet including IP/UDP header
* (unless header subtracted from max)
* If len == 0 ensure 8 byte block minimum
* @param max max length of the packet
* @param maxPadding max length of the padding (not including block header)
* @return null if no room
* @since 0.9.56
*/
private Block getPadding(int len, int max, int maxPadding) {
int maxpadlen = Math.min(max - len, maxPadding) - SSU2Payload.BLOCK_HEADER_SIZE;
if (maxpadlen < 0)
return null;
int padlen;

View File

@@ -57,6 +57,8 @@ final class SSU2Util {
public static final int HEADER_PROT_2_OFFSET = PKT_NUM_OFFSET;
public static final int PADDING_MAX = 32;
public static final int PADDING_MAX_SESSION_REQUEST = 32;
public static final int PADDING_MAX_SESSION_CREATED = 32;
// data size minimums, not including IP/UDP headers