Skip to content

Commit 236e1ab

Browse files
committed
Use java 16 records
1 parent 77c6d8b commit 236e1ab

1 file changed

Lines changed: 21 additions & 27 deletions

File tree

proxy-socket-core/src/main/java/net/airvantage/proxysocket/core/v2/ProxyProtocolV2Decoder.java

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
package net.airvantage.proxysocket.core.v2;
66

77
import net.airvantage.proxysocket.core.ProxyProtocolParseException;
8+
import net.airvantage.proxysocket.core.v2.ProxyHeader.TransportProtocol;
9+
import net.airvantage.proxysocket.core.v2.ProxyHeader.AddressFamily;
10+
import net.airvantage.proxysocket.core.v2.ProxyHeader.Command;
11+
812
import java.net.InetAddress;
913
import java.net.InetSocketAddress;
1014
import java.net.UnknownHostException;
@@ -25,6 +29,8 @@ private ProxyProtocolV2Decoder() {}
2529
private static final int PORT_LEN = 2;
2630
private static final int TLV_HEADER_LEN = 3;
2731

32+
private record AddressPair(InetSocketAddress src, InetSocketAddress dst, int bytesConsumed) {}
33+
2834
public static ProxyHeader parse(byte[] data, int offset, int length) throws ProxyProtocolParseException, IllegalArgumentException {
2935
return parse(data, offset, length, false);
3036
}
@@ -59,13 +65,13 @@ public static ProxyHeader parse(byte[] data, int offset, int length, boolean par
5965
throw new ProxyProtocolParseException("Invalid version");
6066
}
6167

62-
ProxyHeader.Command command;
68+
Command command;
6369
switch (cmd) {
6470
case 0x00:
6571
// Early return for LOCAL command
66-
return new ProxyHeader(ProxyHeader.Command.LOCAL, ProxyHeader.AddressFamily.AF_UNSPEC, ProxyHeader.TransportProtocol.UNSPEC, null, null, null, PROTOCOL_SIGNATURE_FIXED_LENGTH);
72+
return new ProxyHeader(Command.LOCAL, AddressFamily.AF_UNSPEC, TransportProtocol.UNSPEC, null, null, null, PROTOCOL_SIGNATURE_FIXED_LENGTH);
6773
case 0x01:
68-
command = ProxyHeader.Command.PROXY;
74+
command = Command.PROXY;
6975
break;
7076
default:
7177
throw new ProxyProtocolParseException("Invalid command");
@@ -76,8 +82,8 @@ public static ProxyHeader parse(byte[] data, int offset, int length, boolean par
7682
int fam = famProto & 0xF0;
7783
int proto = famProto & 0x0F;
7884

79-
ProxyHeader.AddressFamily af = parseAddressFamily(fam);
80-
ProxyHeader.TransportProtocol tp = parseTransportProtocol(proto);
85+
AddressFamily af = parseAddressFamily(fam);
86+
TransportProtocol tp = parseTransportProtocol(proto);
8187

8288
// Byte 15, 16: Length of address part of the header, including TLVs
8389
int variableLength = ((data[pos++] & 0xFF) << 8) | (data[pos++] & 0xFF);
@@ -89,7 +95,7 @@ public static ProxyHeader parse(byte[] data, int offset, int length, boolean par
8995
}
9096

9197
AddressPair addresses = null;
92-
if (af != ProxyHeader.AddressFamily.AF_UNSPEC) {
98+
if (af != AddressFamily.AF_UNSPEC) {
9399
addresses = switch (af) {
94100
case AF_INET -> parseIPv4Addresses(data, pos, variableLength);
95101
case AF_INET6 -> parseIPv6Addresses(data, pos, variableLength);
@@ -111,39 +117,27 @@ public static ProxyHeader parse(byte[] data, int offset, int length, boolean par
111117
return new ProxyHeader(command, af, tp, src, dst, tlvs, headerLen);
112118
}
113119

114-
private static ProxyHeader.AddressFamily parseAddressFamily(int fam)
120+
private static AddressFamily parseAddressFamily(int fam)
115121
throws ProxyProtocolParseException {
116122
return switch (fam) {
117-
case 0x00 -> ProxyHeader.AddressFamily.AF_UNSPEC;
118-
case 0x10 -> ProxyHeader.AddressFamily.AF_INET;
119-
case 0x20 -> ProxyHeader.AddressFamily.AF_INET6;
120-
case 0x30 -> ProxyHeader.AddressFamily.AF_UNIX;
123+
case 0x00 -> AddressFamily.AF_UNSPEC;
124+
case 0x10 -> AddressFamily.AF_INET;
125+
case 0x20 -> AddressFamily.AF_INET6;
126+
case 0x30 -> AddressFamily.AF_UNIX;
121127
default -> throw new ProxyProtocolParseException("Invalid address family");
122128
};
123129
}
124130

125-
private static ProxyHeader.TransportProtocol parseTransportProtocol(int proto)
131+
private static TransportProtocol parseTransportProtocol(int proto)
126132
throws ProxyProtocolParseException {
127133
return switch (proto) {
128-
case 0x00 -> ProxyHeader.TransportProtocol.UNSPEC;
129-
case 0x01 -> ProxyHeader.TransportProtocol.STREAM;
130-
case 0x02 -> ProxyHeader.TransportProtocol.DGRAM;
134+
case 0x00 -> TransportProtocol.UNSPEC;
135+
case 0x01 -> TransportProtocol.STREAM;
136+
case 0x02 -> TransportProtocol.DGRAM;
131137
default -> throw new ProxyProtocolParseException("Invalid transport protocol");
132138
};
133139
}
134140

135-
private static class AddressPair {
136-
final InetSocketAddress src;
137-
final InetSocketAddress dst;
138-
final int bytesConsumed;
139-
140-
AddressPair(InetSocketAddress src, InetSocketAddress dst, int bytesConsumed) {
141-
this.src = src;
142-
this.dst = dst;
143-
this.bytesConsumed = bytesConsumed;
144-
}
145-
}
146-
147141
private static final int IPV4_ADDR_PAIR_LEN = 2*(IPV4_ADDR_LEN + PORT_LEN);
148142
private static AddressPair parseIPv4Addresses(byte[] data, int pos, int variableLength)
149143
throws ProxyProtocolParseException {

0 commit comments

Comments
 (0)