+
    Dfj                        R t ^ RIt^ RIt^ RIHtHtHtHt ^ RIH	t	 ^ RI
HtHt ^ RIHt ^ RIHt ^ RIHt ^RIHtHt ^R	IHtHtHtHt  ! R
 R]4      t ! R R]4      t^t^tRtRt]	! ]P@                  4       ! R R4      4       t!R# )zD
IProxyParser implementation for version two of the PROXY protocol.
N)CallableTupleTypeUnion)implementer)ValueConstantValues)Literal)address)compat)_info_interfaces)InvalidNetworkProtocolInvalidProxyHeaderMissingAddressDataconvertErrorc                   Z    ] tR t^tRt]! ^ 4      t]! ^4      t]! ^ 4      t]! ^04      t	Rt
R# )	NetFamilyz 
Values for the 'family' field.
 N)__name__
__module____qualname____firstlineno____doc__r   UNSPECINETINET6UNIX__static_attributes__r       E/usr/lib/python3/dist-packages/twisted/protocols/haproxy/_v2parser.pyr   r      s1     4 FD$EDr   r   c                   J    ] tR t^)tRt]! ^ 4      t]! ^4      t]! ^4      tRt	R# )NetProtocolz
Values for 'protocol' field.
r   N)
r   r   r   r   r   r   r   STREAMDGRAMr   r   r   r    r"   r"   )   s'     1F1F!Er   r"   LOCALPROXYc                      a  ] tR t^9t o RtRt^ .t^ ]^]/t	^R^R^!R^"R^1R^2R/t
V 3R lR ltV 3R lR	 lt]V 3R
 lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV tR# )V2Parserzb
PROXY protocol version two header parser.

Version two of the PROXY protocol is a binary format.
s   

 
QUIT
z!4s4s2Hz	!16s16s2Hz	!108s108sc                   < V ^8  d   QhRR/# )   returnNr   )format__classdict__s   "r    __annotate__V2Parser.__annotate__P   s      $ r   c                    R V n         R# )r   Nbuffer)selfs   &r    __init__V2Parser.__init__P   s	    r   c                t   < V ^8  d   QhRS[ RS[S[S[P                  S[ 3,          S[R,          3,          /# )r*   datar+   NN)bytesr   r   r   	ProxyInfo)r,   r-   s   "r    r.   r/   S   s:     ! !!	uU__e+,eJ.??	@!r   c                   V ;P                   V,          un         \        V P                   4      ^8  d   \        4       h\        P                  ! RV P                   R,          4      ^ ,          ^,           p\        V P                   4      V8  d   R# V P                   RV V P                   VR rCRV n         V P                  V4      pWT3# )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.
z!H:      NNr   r8   )r2   lenr   structunpackparse)r3   r7   sizeheader	remaininginfos   &&    r    feedV2Parser.feedS   s    " 	tt{{b $&&}}T4;;u#56q9B>t{{d" KK.DE0B	zz&!  r   c                &   < V ^8  d   QhRS[ RS[ /# r*   
bytestringr+   r9   )r,   r-   s   "r    r.   r/   r   s     
 
 
5 
r   c                Z    RP                  R \        P                  ! V 4       4       4      # )z
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}
   .c              3   f   "   T F'  pR \        V4      3,          P                  R4      x  K)  	  R# 5i)z%iasciiN)ordencode).0bs   & r    	<genexpr>(V2Parser._bytesToIPv4.<locals>.<genexpr>}   s-      
8T1TSVI%%g..8Ts   /1)joinr   	iterbytes)rJ   s   &r    _bytesToIPv4V2Parser._bytesToIPv4q   s-     yy 
8>8H8H8T
 
 	
r   c                &   < V ^8  d   QhRS[ RS[ /# rI   rK   )r,   r-   s   "r    r.   r/      s     
 
 
5 
r   c                |   a \         P                  ! V 4      oRP                  V3R l\        ^ ^ ^4       4       4      # )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}
   :c              3   p   <"   T F+  p\        SW^,            ^4      R P                  R4      x  K-  	  R# 5i)   xrO   N)intrQ   )rR   rS   	hexStrings   & r    rT   (V2Parser._bytesToIPv6.<locals>.<genexpr>   s;      
$ Iaa%("-a099'BB$s   36)binasciib2a_hexrV   range)rJ   ra   s   &@r    _bytesToIPv6V2Parser._bytesToIPv6   s;     $$Z0	yy 
1b!_
 
 	
r   c                :   < V ^8  d   QhRS[ RS[P                  /# )r*   liner+   )r9   r   r:   )r,   r-   s   "r    r.   r/      s#     E
 E
 E
5?? E
r   c           
        VR,          pRp\        \        \        4      ;_uu_ 4        \        VR,          4      p\        VR,          4      pRRR4       W P                  8w  d   \        4       hX\
        ,          V\        ,          rvW`P                  9  g   WpP                  9  d   \        4       hV P                  V,          \        8X  d   \        P                  ! VRR4      # X\
        ,          V\        ,          r\        \        \        4      ;_uu_ 4        \        P                  V4      p\         P                  V	4      p	RRR4       V\        P"                  J g   V	\         P"                  J d   \        P                  ! VRR4      # V P$                  V,          p
V^^\&        P(                  ! V
4      ,            pV\        P*                  J d   \        \&        P,                  \.        4      ;_uu_ 4        \&        P0                  ! W4      w  rRRR4       \        P                  ! V\2        P4                  ! XP7                  R4      4      \2        P4                  ! XP7                  R4      4      4      # RpV	\         P8                  J d   Rp\2        P:                  pV P<                  pV\        P>                  J d   \2        P@                  pV PB                  p\        \&        P,                  \.        4      ;_uu_ 4        \&        P0                  ! W4      pVw  rppRRR4       \        P                  ! VV! W! X4      PE                  4       X4      V! W! X4      PE                  4       X4      4      #   + '       g   i     EL3; i  + '       g   i     ELN; i  + '       g   i     EL; i  + '       g   i     L; i)aI  
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   NN:rk      N:rl   r<   N    TCPUDP)#r   
IndexErrorr   rP   PREFIX_HIGH_LOWVERSIONSCOMMANDS_LOCALCOMMANDr   r:   
ValueErrorr   r   lookupByValuer"   r   ADDRESSFORMATSr?   calcsizer   errorr   r@   r
   UNIXAddressrstripr$   IPv4AddressrX   r   IPv6Addressrf   decode)clsri   prefixaddrInfoversionCommandfamilyProtoversioncommandfamilynetprotoaddressFormatsourcedestaddrTypeaddrCls
addrParserrE   sPortdPorts   &&                 r    rA   V2Parser.parse   s    c*&899 !e-Nd5k*K	 : ZZ$&&)E1>D3H,,&'*E$&&<< M1??4t44&.d0B*&<==,,V4F"00:H > Y%%%[5G5G)G??4t44**;7R&//-"@@AY^^#fll,>??%}}]E @??##FMM'$:;##DKK$89  ;@{(((H  	 03/?/?
Y__$))G))J&,,(:;;==9D)-&F% < Hj07795AHj.557?
 	
c :99" >== @??& <;s/   %M7+N;NN37N	N	N0	3O	r1   N)r   r   r   r   r   rq   rt   rv   _PROXYCOMMANDru   ry   r4   rF   staticmethodrX   rf   classmethodrA   r   __classdictcell__)r-   s   @r    r(   r(   9   s      AFtH=!]3H 	I
I
K
K
K
K
N ! !< 
 
 
 
" E
 E
r   r(   )"r   rc   r?   typingr   r   r   r   zope.interfacer   
constantlyr   r   r	   twisted.internetr
   twisted.pythonr    r   r   _exceptionsr   r   r   r   r   r"   rr   rs   rv   r   IProxyParserr(   r   r   r    <module>r      s      / / & ,  $ !    &  	 [%%&_
 _
 '_
r   