HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/twisted/protocols/haproxy/__pycache__/_v2parser.cpython-38.pyc
U


W[��@s�dZddlZddlZddlmZmZddlmZddlm	Z	ddl
mZddlm
Z
mZmZmZdd	lmZdd
lmZGdd�de�ZGd
d�de�ZdZdZdZdZeej�Gdd�de��ZdS)zD
IProxyParser implementation for version two of the PROXY protocol.
�N)�Values�
ValueConstant)�implementer)�address)�compat�)�convertError�InvalidProxyHeader�InvalidNetworkProtocol�MissingAddressData)�_info)�_interfacesc@s0eZdZdZed�Zed�Zed�Zed�ZdS)�	NetFamilyz(
    Values for the 'family' field.
    r�� �0N)	�__name__�
__module__�__qualname__�__doc__r�UNSPECZINET�INET6�UNIX�rr�E/usr/lib/python3/dist-packages/twisted/protocols/haproxy/_v2parser.pyrs
rc@s(eZdZdZed�Zed�Zed�ZdS)�NetProtocolz&
    Values for 'protocol' field.
    rr�N)rrrrrrZSTREAM�DGRAMrrrrr%sr���ZLOCALZPROXYc@sjeZdZdZdZdgZeed�Zddddddd�Z	d	d
�Z
dd�Zed
d��Z
edd��Zedd��ZdS)�V2Parserzn
    PROXY protocol version two header parser.

    Version two of the PROXY protocol is a binary format.
    s


QUIT
r)rrz!4s4s2Hz	!16s16s2Hz	!108s108s)���!�"�1�2cCs
d|_dS)N�)�buffer)�selfrrr�__init__JszV2Parser.__init__cCs�|j|7_t|j�dkr"t��t�d|jdd��dd}t|j�|krRdS|jd|�|j|d�}}d|_|�|�}||fS)a�
        Consume a chunk of data and attempt to parse it.

        @param data: A bytestring.
        @type data: bytes

        @return: A two-tuple containing, in order, a L{_interfaces.IProxyInfo}
            and any bytes fed to the parser that followed the end of the
            header.  Both of these values are None until a complete header is
            parsed.

        @raises InvalidProxyHeader: If the bytes fed to the parser create an
            invalid PROXY header.
        rz!H�r)NNNr')r(�lenr	�struct�unpack�parse)r)�data�size�headerZ	remaining�inforrr�feedNs
z
V2Parser.feedcCsd�dd�t�|�D��S)a7
        Convert packed 32-bit IPv4 address bytes into a dotted-quad ASCII bytes
        representation of that address.

        @param bytestring: 4 octets representing an IPv4 address.
        @type bytestring: L{bytes}

        @return: a dotted-quad notation IPv4 address.
        @rtype: L{bytes}
        �.css"|]}dt|�f�d�VqdS)z%i�asciiN)�ord�encode��.0�brrr�	<genexpr>ws�z(V2Parser._bytesToIPv4.<locals>.<genexpr>)�joinrZ	iterbytes�Z
bytestringrrr�_bytesToIPv4ks
�zV2Parser._bytesToIPv4cs*t�|��d��fdd�tddd�D��S)a=
        Convert packed 128-bit IPv6 address bytes into a colon-separated ASCII
        bytes representation of that address.

        @param bytestring: 16 octets representing an IPv6 address.
        @type bytestring: L{bytes}

        @return: a dotted-quad notation IPv6 address.
        @rtype: L{bytes}
        �:c3s0|](}dt�||d�d�f�d�VqdS)z%x�rr6N)�intr8r9�Z	hexStringrrr<�s�z(V2Parser._bytesToIPv6.<locals>.<genexpr>rrrA)�binasciiZb2a_hexr=�ranger>rrCr�_bytesToIPv6}s

�zV2Parser._bytesToIPv6c	Cs|dd�}d}ttt��&t|dd��}t|dd��}W5QRX||jkrVt��|t@|t@}}||jks|||jkr�t��|j|t	kr�t
�|dd�S|t@|t@}}	ttt
��t�|�}t�|	�}	W5QRX|tjks�|	tjk�r�t
�|dd�S|j|}
|ddt�|
��}|tjk�rxttjt��t�|
|�\}}W5QRXt
�|t�|�d��t�|�d���Sd}
|	tjk�r�d}
tj}|j}|tjk�r�tj }|j!}ttjt��t�|
|�}|\}}}}W5QRXt
�|||
||�|�||
||�|��S)	a�
        Parse a bytestring as a full PROXY protocol header.

        @param line: A bytestring that represents a valid HAProxy PROXY
            protocol version 2 header.
        @type line: bytes

        @return: A L{_interfaces.IProxyInfo} containing the
            parsed data.

        @raises InvalidProxyHeader: If the bytestring does not represent a
            valid PROXY header.
        N��
r+r�ZTCPZUDP)"r�
IndexErrorr	r7�PREFIX�_HIGH�_LOW�VERSIONS�COMMANDS�
_LOCALCOMMANDrZ	ProxyInfo�
ValueErrorr
rZ
lookupByValuerr�ADDRESSFORMATSr-Zcalcsizer�errorrr.rZUNIXAddress�rstriprZIPv4Addressr?rZIPv6AddressrF)�cls�line�prefixZaddrInfoZversionCommandZfamilyProto�versionZcommandZfamilyZnetprotoZ
addressFormat�source�destZaddrTypeZaddrClsZ
addrParserr3ZsPortZdPortrrrr/�s^

��
��zV2Parser.parseN)rrrrrKrNrP�
_PROXYCOMMANDrOrRr*r4�staticmethodr?rF�classmethodr/rrrrr 3s&
�

r )rrDr-Z
constantlyrrZzope.interfacerZtwisted.internetrZtwisted.pythonr�_exceptionsrr	r
r�rr
rrrLrMrPr[ZIProxyParser�objectr rrrr�<module>s"