55package net .airvantage .proxysocket .core .v2 ;
66
77import 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+
812import java .net .InetAddress ;
913import java .net .InetSocketAddress ;
1014import 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