a
    kÄ#dÙ)  ã                   @   sò  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
m  mZ g d¢Zz2ddlZddlmZ e	jdd… dkrŽe‚dZW n ey®   d	ZdZY n0 G d
d„ deƒZefdd„Ze�sDddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 núdd„ Z/edƒZedƒZedƒZedej1ƒZedƒZede2ƒZedƒZedƒZedƒZ ede3ƒZ!edƒZ"edƒZ#edƒZ$edƒZ%ede3ƒZ&ed e4ƒZ'ed!ƒZ)ed"ƒZ*ed#eƒZ+ed$ƒZ,ed%ƒZ-ede3ƒZ.G d&d'„ d'eƒZ(e 5e¡G d(d)„ d)eƒƒZd*d+„ Z0e	jd,k�rXdd-lm6Z6 nd.d/„ Z7d0d1„ Z6e	jd2k�r‚dd3lm8Z8 ned4ƒZ8e	jd5k�r¤dd6lm9Z9 nG d7d8„ d8ƒZ9e,d9ed:ef d;�Z:d<d=„ Z;e�ràdd>l<m=Z= ej>�re? Z@ZAeBZCd?d@„ ZDdAdB„ ZEnFdCdB„ ZEdDdE„ Z@e	jdd… d5k�r4dFdG„ ZAndHdG„ ZAdId@„ ZDdJdK„ ZCdLdM„ ZFdNdO„ ZGej>�rvdPdQ„ ZHdRdS„ ZIndTdQ„ ZHdUdS„ ZIdVdW„ ZJdXdY„ ZKej>�r®ddlLZLeLjMZNnddlOZOeOjMZNej>�râddZlPmPZP d[d\„ ZQd]d^„ ZRnejSZQejTZRdS )_z
Python 2 and 3 link classes.
é    )Úabsolute_importN),ÚAnyÚAnyStrÚCallableÚDefaultDictÚDequeÚDictÚGenericÚIOÚIterabler   ÚIteratorÚListÚLiteralÚ
NamedTupleÚNewTypeÚNoReturnÚOptionalÚPatternÚSequenceÚSetÚSizedÚTextIOÚTupleÚTypeÚTypeVarÚUnionÚ
ValuesViewÚcastÚoverloadÚFAKE_TYPINGÚTYPE_CHECKINGÚAddressFamilyÚbase64_bytesÚbytes_base64Úbytes_encodeÚ	bytes_hexÚchbÚgzip_compressÚgzip_decompressÚ	hex_bytesÚlambda_tuple_converterÚorbÚ	plain_strÚraw)r    é   )é   é   FTc                   @   s   e Zd Zerdd„ ZdS )Ú_Generic_metaclassc                 C   s   | S ©N© )ÚselfÚtypr3   r3   úC/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/compat.pyÚ__getitem__f   s    z_Generic_metaclass.__getitem__N)Ú__name__Ú
__module__Ú__qualname__r   r7   r3   r3   r3   r6   r1   d   s   r1   c                    s   G ‡ fdd„dt ƒ}|| ƒS )Nc                       s0   e Zd Zdd„ Z‡ fdd„Zdd„ Zdd„ Zd	S )
z_FakeType.<locals>._FTc                 S   s
   || _ d S r2   ©Úname)r4   r<   r3   r3   r6   Ú__init__n   s    z_FakeType.<locals>._FT.__init__c                    s   ˆ S r2   r3   )r4   Úitem©Úclsr3   r6   r7   s   s    z"_FakeType.<locals>._FT.__getitem__c                 _   s   t |d tƒr|d | _| S )Nr   )Ú
isinstanceÚstrr<   )r4   ÚargsZkargsr3   r3   r6   Ú__call__v   s    
z_FakeType.<locals>._FT.__call__c                 S   s
   d| j  S )Nz<Fake typing.%s>r;   ©r4   r3   r3   r6   Ú__repr__|   s    z_FakeType.<locals>._FT.__repr__N)r8   r9   r:   r=   r7   rD   rF   r3   r?   r3   r6   Ú_FTm   s   rG   )Úobject)r<   r@   rG   r3   r?   r6   Ú	_FakeTypek   s    rI   )r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 C   s   |S r2   r3   )Ú_typeÚobjr3   r3   r6   r   ¢   s    r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                   @   s   e Zd ZdS )r   N©r8   r9   r:   r3   r3   r3   r6   r   ½   s   r   c                   @   s   e Zd ZdS )r	   NrL   r3   r3   r3   r6   r	   À   s   r	   c                 C   s   | S r2   r3   ©Úxr3   r3   r6   Ú<lambda>Ä   ó    rO   )r/   é   )r   c                 G   s    t  | |d |… ¡||d … Ž S r2   )ÚcollectionsÚ
namedtuple)r<   Z
len_paramsrC   r3   r3   r6   Ú_unpickleNamedTupleÌ   s    
þ
ýrT   c                    s@   t dd„ |D ƒƒ‰t ˆ ˆ¡}G ‡ ‡fdd„d|ƒ}|j|_|S )Nc                 s   s   | ]}|d  V  qdS )r   Nr3   )Ú.0rN   r3   r3   r6   Ú	<genexpr>Ó   rP   zNamedTuple.<locals>.<genexpr>c                       s   e Zd Z‡ ‡fdd„ZdS )zNamedTuple.<locals>._NTc                    s   t ˆ tˆƒfˆ t| ƒ fS )zUsed by pickling methods)rT   ÚlenÚtuplerE   ©r<   Z
tup_paramsr3   r6   Ú
__reduce__×   s    ÿz"NamedTuple.<locals>._NT.__reduce__N)r8   r9   r:   rZ   r3   rY   r3   r6   Ú_NTÖ   s   r[   )rX   rR   rS   r8   )r<   Úparamsr@   r[   r3   rY   r6   r   Ò   s
    r   )r/   é   )r   r   )r/   é   )r!   c                   @   s   e Zd ZejZejZejZdS )r!   N)r8   r9   r:   ÚsocketÚAF_INETÚAF_INET6Ú	AF_UNSPECr3   r3   r3   r6   r!   è   s   r!   ÚDecoratorCallable.)Úboundc                    s(   ˆ dur ˆ j jdkr ‡ fdd„S ˆ S dS )zx
    Converts a Python 2 function as
      lambda (x,y): x + y
    In the Python 3 format:
      lambda x,y : x + y
    Né   c                     s   ˆ t | ƒdkr| d n| ƒS )Nre   r   )rW   )rC   ©Úfuncr3   r6   rO   ÿ   s   ÿz(lambda_tuple_converter.<locals>.<lambda>)Ú__code__Úco_argcountrf   r3   rf   r6   r*   ö   s    r*   )ÚPacketc                 C   s   t | tƒr| S t| ƒS r2   )rA   rB   ÚchrrM   r3   r3   r6   r&     s    
r&   c                 C   s   t | dƒr|  ¡ S t| ƒS )úŒ
        Builds a packet and returns its bytes representation.
        This function is and will always be cross-version compatible
        Ú	__bytes__)Úhasattrrm   ÚbytesrM   r3   r3   r6   r-     s    
r-   c                 C   s   t | ƒS )rl   )ro   rM   r3   r3   r6   r-      s    c                 C   s   t | tƒr|  ¡ S t| ƒS )zpEnsure that the given object is bytes.
        If the parameter is a packet, raw() should be preferred.
        )rA   rB   Úencodero   rM   r3   r3   r6   r$   (  s    
r$   c                 C   s   t | tƒr| jdd�S t| ƒS )ú!Convert basic byte objects to strÚignore©Úerrors©rA   ro   ÚdecoderB   rM   r3   r3   r6   r,   2  s    
r,   c                 C   s   t | tƒr| jdd�S t| ƒS )rq   Úbackslashreplacers   ru   rM   r3   r3   r6   r,   :  s    
c                 C   s   t  d| ¡S )z$Same than chr() but encode as bytes.z!B)ÚstructÚpackrM   r3   r3   r6   r&   A  s    c                 C   s   t | tƒr| S t| ƒS )z&Return ord(x) when not already an int.)rA   ÚintÚordrM   r3   r3   r6   r+   F  s    
r+   c                 C   s   t  t| ƒ¡S )zHexify a str or a bytes object)ÚbinasciiÚb2a_hexr$   rM   r3   r3   r6   r%   N  s    r%   c                 C   s   t  t| ƒ¡S )z De-hexify a str or a byte object)r|   Úa2b_hexr$   rM   r3   r3   r6   r)   T  s    r)   c                 C   s4   t | ƒdd…  d¡}t d|d t|ƒ  | ¡S )ú1Convert an int to an arbitrary sized bytes stringr.   NÚLÚ0)ÚhexÚstripr|   Ú	unhexlifyrW   )rN   ÚsizeZ_hxr3   r3   r6   Ú	int_bytes[  s    r†   c                 C   s   t |  d¡dƒS )ú1Convert an arbitrary sized bytes string to an intr‚   é   )rz   rp   rM   r3   r3   r6   Ú	bytes_inta  s    r‰   c                 C   s   | j |dd�S )r   Úbig)Ú	byteorder)Úto_bytes)rN   r…   r3   r3   r6   r†   f  s    c                 C   s   t  | d¡S )r‡   rŠ   )rz   Ú
from_bytesrM   r3   r3   r6   r‰   k  s    c                 C   s   t jrt | ¡S t t| ƒ¡S )zTurn base64 into bytes)ÚsixÚPY2Úbase64ÚdecodestringÚdecodebytesr$   rM   r3   r3   r6   r"   q  s    
r"   c                 C   s.   t jrt | ¡ dd¡S t t| ƒ¡ dd¡S )zTurn bytes into base64Ú
Ú ó   
rP   )rŽ   r�   r�   ÚencodestringÚreplaceÚencodebytesr$   rM   r3   r3   r6   r#   y  s    r#   )ÚStringIOc                 C   s>   t jt| ƒdd��}| ¡ W  d  ƒ S 1 s00    Y  dS )zDecompress using gzipÚrb©ÚfileobjÚmodeN)ÚgzipÚGzipFiler™   Úread)rN   Úfdescr3   r3   r6   r(   Œ  s    r(   c                 C   sF   t ƒ }tj|dd��}| | ¡ W d  ƒ n1 s40    Y  | ¡ S )zCompress using gzipÚwbr›   N)r™   rž   rŸ   ÚwriteÚgetvalue)rN   Úbufr¡   r3   r3   r6   r'   ’  s    (r'   )UÚ__doc__Ú
__future__r   r�   r|   rR   rž   r_   rx   ÚsysZscapy.libs.sixZlibsrŽ   Ú__all__Útypingr    Úversion_infoÚImportErrorr   Útyper1   rH   rI   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚdefaultdictÚdictÚlistÚsetÚadd_metaclassr   rT   r   r!   rc   r*   Zscapy.packetrj   r�   rB   r$   r,   r{   r+   r&   r-   r%   r)   r†   r‰   r"   r#   ÚcgiÚescapeZhtml_escapeÚhtmlr™   r(   r'   Ú
decompressÚcompressr3   r3   r3   r6   Ú<module>   sÄ   =
rÿ







	


