§
    Ètºf‹  ã                   ó    — d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZmZmZ  ee
j        ¦  «         G d„ d	¦  «        ¦   «         Zd
S )zD
IProxyParser implementation for version one of the PROXY protocol.
é    )ÚTupleÚUnion)Úimplementer)Úaddressé   )Ú_infoÚ_interfaces)ÚInvalidNetworkProtocolÚInvalidProxyHeaderÚMissingAddressDataÚconvertErrorc                   ó¨   — e Zd ZdZdZdZdZdZeeefZdZ	dd	„Z
d
edeeej        ef         ed         f         fd„Zededej        fd„¦   «         ZdS )ÚV1Parserzõ
    PROXY protocol version one header parser.

    Version one of the PROXY protocol is a human readable format represented
    by a single, newline delimited binary string that contains all of the
    relevant source and destination data.
    s   PROXYs   UNKNOWNs   TCP4s   TCP6s   
ÚreturnNc                 ó   — d| _         d S )Nó    )Úbuffer)Úselfs    úb/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/protocols/haproxy/_v1parser.pyÚ__init__zV1Parser.__init__,   s   € ØˆŒˆˆr   Údata©NNc                 ó„  — | xj         |z  c_         t          | j         ¦  «        dk    r| j        | j         vrt          ¦   «         ‚| j                              | j        d¦  «        }t          |¦  «        dk    sdS d| _         |                     ¦   «         }|                     ¦   «         }|                      |¦  «        }||fS )aî  
        Consume a chunk of data and attempt to parse it.

        @param data: A bytestring.
        @type data: L{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.
        ék   r   r   r   )r   ÚlenÚNEWLINEr   ÚsplitÚpopÚparse)r   r   ÚlinesÚ	remainingÚheaderÚinfos         r   ÚfeedzV1Parser.feed/   s­   € ð" 	ˆŒ�tÑˆŒÝˆtŒ{ÑÔ˜cÒ!Ð! d¤l¸$¼+Ð&EÐ&EÝ$Ñ&Ô&Ð&Ø”×#Ò# D¤L°!Ñ4Ô4ˆÝ�5‰zŒz˜AŠ~ˆ~Ø�<ØˆŒØ—I’I‘K”Kˆ	Ø—’‘”ˆØ�zŠz˜&Ñ!Ô!ˆØ�iÐ Ð r   Úlinec                 óN  — |}d}d}d}d}d}d}t          t          t          ¦  «        5  |                     dd¦  «        \  }}ddd¦  «         n# 1 swxY w Y   || j        k    rt          ¦   «         ‚t          t          t
          ¦  «        5  |                     dd¦  «        \  }}ddd¦  «         n# 1 swxY w Y   || j        vrt          ¦   «         ‚|| j        k    rt          j	        |dd¦  «        S t          t          t          ¦  «        5  |                     dd¦  «        \  }}ddd¦  «         n# 1 swxY w Y   t          t          t          ¦  «        5  |                     dd¦  «        \  }}ddd¦  «         n# 1 swxY w Y   t          t          t          ¦  «        5  |                     dd¦  «        \  }}ddd¦  «         n# 1 swxY w Y   t          t          t          ¦  «        5  |                     d¦  «        d         }ddd¦  «         n# 1 swxY w Y   || j        k    r|t          j	        |t          j        d|                     ¦   «         t          |¦  «        ¦  «        t          j        d|                     ¦   «         t          |¦  «        ¦  «        ¦  «        S t          j	        |t          j        d|                     ¦   «         t          |¦  «        ¦  «        t          j        d|                     ¦   «         t          |¦  «        ¦  «        ¦  «        S )a�  
        Parse a bytestring as a full PROXY protocol header line.

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

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

        @raises InvalidProxyHeader: If the bytestring does not represent a
            valid PROXY header.

        @raises InvalidNetworkProtocol: When no protocol can be parsed or is
            not one of the allowed values.

        @raises MissingAddressData: When the protocol is TCP* but the header
            does not contain a complete set of addresses and ports.
        Nó    r   r   ÚTCP)r   Ú
ValueErrorr   r   ÚPROXYSTRr
   ÚALLOWED_NET_PROTOSÚUNKNOWN_PROTOr   Ú	ProxyInfor   Ú
TCP4_PROTOr   ÚIPv4AddressÚdecodeÚintÚIPv6Address)	Úclsr%   ÚoriginalLineÚproxyStrÚnetworkProtocolÚ
sourceAddrÚ
sourcePortÚdestAddrÚdestPorts	            r   r   zV1Parser.parseL   sA  € ð( ˆØˆØˆØˆ
Øˆ
ØˆØˆå�*Õ&8Ñ9Ô9ð 	1ð 	1Ø!ŸZšZ¨¨aÑ0Ô0‰NˆH�dð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð �s”|Ò#Ð#Ý$Ñ&Ô&Ð&å�*Õ&<Ñ=Ô=ð 	8ð 	8Ø$(§J¢J¨t°QÑ$7Ô$7Ñ!ˆO˜Tð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð  #Ô"8Ð8Ð8Ý(Ñ*Ô*Ð*à˜cÔ/Ò/Ð/Ý”? <°°tÑ<Ô<Ð<å�*Õ&8Ñ9Ô9ð 	3ð 	3Ø#Ÿzšz¨$°Ñ2Ô2ÑˆJ˜ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3õ �*Õ&8Ñ9Ô9ð 	1ð 	1Ø!ŸZšZ¨¨aÑ0Ô0‰NˆH�dð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1õ �*Õ&8Ñ9Ô9ð 	3ð 	3Ø#Ÿzšz¨$°Ñ2Ô2ÑˆJ˜ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3õ �*Õ&8Ñ9Ô9ð 	+ð 	+Ø—z’z $Ñ'Ô'¨Ô*ˆHð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð ˜cœnÒ,Ð,Ý”?ØÝÔ# E¨:×+<Ò+<Ñ+>Ô+>ÅÀJÁÄÑPÔPÝÔ# E¨8¯?ª?Ñ+<Ô+<½cÀ(¹m¼mÑLÔLñô ð õ ŒØÝÔ  z×'8Ò'8Ñ':Ô':½CÀ
¹O¼OÑLÔLÝÔ  x§¢Ñ'8Ô'8½#¸h¹-¼-ÑHÔHñ
ô 
ð 	
sk   ©AÁAÁAÂB3Â3B7Â:B7ÄD6Ä6D:Ä=D:ÅFÆFÆFÆ&GÇGÇGÇ1HÈHÈ H)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   r,   r.   Ú
TCP6_PROTOr+   r   r   Úbytesr   r   r   r-   r$   Úclassmethodr   © r   r   r   r      s×   € € € € € ðð ð €HØ€MØ€JØ€JàØØðÐð
 €Gðð ð ð ð!Øð!à	ˆu�U”_ eÐ+Ô,¨e°JÔ.?Ð?Ô	@ð!ð !ð !ð !ð: ðA
˜ð A
 5¤?ð A
ð A
ð A
ñ „[ðA
ð A
ð A
r   r   N)r>   Útypingr   r   Úzope.interfacer   Útwisted.internetr   Ú r   r	   Ú_exceptionsr
   r   r   r   ÚIProxyParserr   rB   r   r   ú<module>rI      s÷   ððð ð  Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &à $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð ð ð €ˆ[Ô%Ñ&Ô&ðv
ð v
ð v
ð v
ð v
ñ v
ô v
ñ 'Ô&ðv
ð v
ð v
r   