/*
 * Copyright 2014 The Netty Project
 *
 * The Netty Project licenses this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */
package io.netty.handler.codec.haproxy;

import static io.netty.handler.codec.haproxy.HAProxyConstants.*;

A protocol proxied by HAProxy which is represented by its transport protocol and address family.
/** * A protocol proxied by HAProxy which is represented by its transport protocol and address family. */
public enum HAProxyProxiedProtocol {
The UNKNOWN represents a connection which was forwarded for an unknown protocol and an unknown address family.
/** * The UNKNOWN represents a connection which was forwarded for an unknown protocol and an unknown address family. */
UNKNOWN(TPAF_UNKNOWN_BYTE, AddressFamily.AF_UNSPEC, TransportProtocol.UNSPEC),
The TCP4 represents a connection which was forwarded for an IPv4 client over TCP.
/** * The TCP4 represents a connection which was forwarded for an IPv4 client over TCP. */
TCP4(TPAF_TCP4_BYTE, AddressFamily.AF_IPv4, TransportProtocol.STREAM),
The TCP6 represents a connection which was forwarded for an IPv6 client over TCP.
/** * The TCP6 represents a connection which was forwarded for an IPv6 client over TCP. */
TCP6(TPAF_TCP6_BYTE, AddressFamily.AF_IPv6, TransportProtocol.STREAM),
The UDP4 represents a connection which was forwarded for an IPv4 client over UDP.
/** * The UDP4 represents a connection which was forwarded for an IPv4 client over UDP. */
UDP4(TPAF_UDP4_BYTE, AddressFamily.AF_IPv4, TransportProtocol.DGRAM),
The UDP6 represents a connection which was forwarded for an IPv6 client over UDP.
/** * The UDP6 represents a connection which was forwarded for an IPv6 client over UDP. */
UDP6(TPAF_UDP6_BYTE, AddressFamily.AF_IPv6, TransportProtocol.DGRAM),
The UNIX_STREAM represents a connection which was forwarded for a UNIX stream socket.
/** * The UNIX_STREAM represents a connection which was forwarded for a UNIX stream socket. */
UNIX_STREAM(TPAF_UNIX_STREAM_BYTE, AddressFamily.AF_UNIX, TransportProtocol.STREAM),
The UNIX_DGRAM represents a connection which was forwarded for a UNIX datagram socket.
/** * The UNIX_DGRAM represents a connection which was forwarded for a UNIX datagram socket. */
UNIX_DGRAM(TPAF_UNIX_DGRAM_BYTE, AddressFamily.AF_UNIX, TransportProtocol.DGRAM); private final byte byteValue; private final AddressFamily addressFamily; private final TransportProtocol transportProtocol;
Creates a new instance.
/** * Creates a new instance. */
HAProxyProxiedProtocol( byte byteValue, AddressFamily addressFamily, TransportProtocol transportProtocol) { this.byteValue = byteValue; this.addressFamily = addressFamily; this.transportProtocol = transportProtocol; }
Returns the HAProxyProxiedProtocol represented by the specified byte.
Params:
  • tpafByte – transport protocol and address family byte
/** * Returns the {@link HAProxyProxiedProtocol} represented by the specified byte. * * @param tpafByte transport protocol and address family byte */
public static HAProxyProxiedProtocol valueOf(byte tpafByte) { switch (tpafByte) { case TPAF_TCP4_BYTE: return TCP4; case TPAF_TCP6_BYTE: return TCP6; case TPAF_UNKNOWN_BYTE: return UNKNOWN; case TPAF_UDP4_BYTE: return UDP4; case TPAF_UDP6_BYTE: return UDP6; case TPAF_UNIX_STREAM_BYTE: return UNIX_STREAM; case TPAF_UNIX_DGRAM_BYTE: return UNIX_DGRAM; default: throw new IllegalArgumentException( "unknown transport protocol + address family: " + (tpafByte & 0xFF)); } }
Returns the byte value of this protocol and address family.
/** * Returns the byte value of this protocol and address family. */
public byte byteValue() { return byteValue; }
Returns the AddressFamily of this protocol and address family.
/** * Returns the {@link AddressFamily} of this protocol and address family. */
public AddressFamily addressFamily() { return addressFamily; }
Returns the TransportProtocol of this protocol and address family.
/** * Returns the {@link TransportProtocol} of this protocol and address family. */
public TransportProtocol transportProtocol() { return transportProtocol; }
The address family of an HAProxy proxy protocol header.
/** * The address family of an HAProxy proxy protocol header. */
public enum AddressFamily {
The UNSPECIFIED address family represents a connection which was forwarded for an unknown protocol.
/** * The UNSPECIFIED address family represents a connection which was forwarded for an unknown protocol. */
AF_UNSPEC(AF_UNSPEC_BYTE),
The IPV4 address family represents a connection which was forwarded for an IPV4 client.
/** * The IPV4 address family represents a connection which was forwarded for an IPV4 client. */
AF_IPv4(AF_IPV4_BYTE),
The IPV6 address family represents a connection which was forwarded for an IPV6 client.
/** * The IPV6 address family represents a connection which was forwarded for an IPV6 client. */
AF_IPv6(AF_IPV6_BYTE),
The UNIX address family represents a connection which was forwarded for a unix socket.
/** * The UNIX address family represents a connection which was forwarded for a unix socket. */
AF_UNIX(AF_UNIX_BYTE);
The highest 4 bits of the transport protocol and address family byte contain the address family
/** * The highest 4 bits of the transport protocol and address family byte contain the address family */
private static final byte FAMILY_MASK = (byte) 0xf0; private final byte byteValue;
Creates a new instance
/** * Creates a new instance */
AddressFamily(byte byteValue) { this.byteValue = byteValue; }
Returns the AddressFamily represented by the highest 4 bits of the specified byte.
Params:
  • tpafByte – transport protocol and address family byte
/** * Returns the {@link AddressFamily} represented by the highest 4 bits of the specified byte. * * @param tpafByte transport protocol and address family byte */
public static AddressFamily valueOf(byte tpafByte) { int addressFamily = tpafByte & FAMILY_MASK; switch((byte) addressFamily) { case AF_IPV4_BYTE: return AF_IPv4; case AF_IPV6_BYTE: return AF_IPv6; case AF_UNSPEC_BYTE: return AF_UNSPEC; case AF_UNIX_BYTE: return AF_UNIX; default: throw new IllegalArgumentException("unknown address family: " + addressFamily); } }
Returns the byte value of this address family.
/** * Returns the byte value of this address family. */
public byte byteValue() { return byteValue; } }
The transport protocol of an HAProxy proxy protocol header
/** * The transport protocol of an HAProxy proxy protocol header */
public enum TransportProtocol {
The UNSPEC transport protocol represents a connection which was forwarded for an unknown protocol.
/** * The UNSPEC transport protocol represents a connection which was forwarded for an unknown protocol. */
UNSPEC(TRANSPORT_UNSPEC_BYTE),
The STREAM transport protocol represents a connection which was forwarded for a TCP connection.
/** * The STREAM transport protocol represents a connection which was forwarded for a TCP connection. */
STREAM(TRANSPORT_STREAM_BYTE),
The DGRAM transport protocol represents a connection which was forwarded for a UDP connection.
/** * The DGRAM transport protocol represents a connection which was forwarded for a UDP connection. */
DGRAM(TRANSPORT_DGRAM_BYTE);
The transport protocol is specified in the lowest 4 bits of the transport protocol and address family byte
/** * The transport protocol is specified in the lowest 4 bits of the transport protocol and address family byte */
private static final byte TRANSPORT_MASK = 0x0f; private final byte transportByte;
Creates a new instance.
/** * Creates a new instance. */
TransportProtocol(byte transportByte) { this.transportByte = transportByte; }
Returns the TransportProtocol represented by the lowest 4 bits of the specified byte.
Params:
  • tpafByte – transport protocol and address family byte
/** * Returns the {@link TransportProtocol} represented by the lowest 4 bits of the specified byte. * * @param tpafByte transport protocol and address family byte */
public static TransportProtocol valueOf(byte tpafByte) { int transportProtocol = tpafByte & TRANSPORT_MASK; switch ((byte) transportProtocol) { case TRANSPORT_STREAM_BYTE: return STREAM; case TRANSPORT_UNSPEC_BYTE: return UNSPEC; case TRANSPORT_DGRAM_BYTE: return DGRAM; default: throw new IllegalArgumentException("unknown transport protocol: " + transportProtocol); } }
Returns the byte value of this transport protocol.
/** * Returns the byte value of this transport protocol. */
public byte byteValue() { return transportByte; } } }