
    &th`                    &   d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZmZ ddlmZmZmZ g d	Zd
Zd  edd          D             Z G d de          Zd*dZd+dZ G d d e          Zd,d$Z G d% d&e          Zd-d)ZdS ).    )annotationsN)AnyDictListOptionalSequenceTupleUnion   )
exceptionsframes)ExtensionNameExtensionParameter   )ClientExtensionFactory	ExtensionServerExtensionFactory)PerMessageDeflateClientPerMessageDeflateFactory enable_client_permessage_deflateServerPerMessageDeflateFactory enable_server_permessage_deflates     c                ,    g | ]}t          |          S  )str).0bitss     |/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/websockets/extensions/permessage_deflate.py
<listcomp>r      s    >>>3t99>>>          c                  R    e Zd ZdZ ed          Z	 dddZddZddddZddZ	dS )r   z)
    Per-Message Deflate extension.

    permessage-deflateNremote_no_context_takeoverboollocal_no_context_takeoverremote_max_window_bitsintlocal_max_window_bitscompress_settingsOptional[Dict[Any, Any]]returnNonec                l   |i }|dv sJ |dv sJ d|cxk    rdk    sn J d|cxk    rdk    sn J d|vsJ || _         || _        || _        || _        || _        | j         s t          j        | j                   | _        | j        s#t          j        dd| j         i| j        | _	        d| _
        dS )	z?
        Configure the Per-Message Deflate extension.

        N)FTr!      wbitsr1   Fr   )r%   r'   r(   r*   r+   zlibdecompressobjdecodercompressobjencoderdecode_cont_data)selfr%   r'   r(   r*   r+   s         r   __init__zPerMessageDeflate.__init__!   s,    $ ")]::::(M9999*0000b000000)////R///////////*D')B&&<#%:"!2. 	R-T5P4PQQQDL- 	+  11595K DL !&r    r   c           	     H    d| j          d| j         d| j         d| j         d	S )Nz-PerMessageDeflate(remote_no_context_takeover=z, local_no_context_takeover=z, remote_max_window_bits=z, local_max_window_bits=))r%   r'   r(   r*   r9   s    r   __repr__zPerMessageDeflate.__repr__J   s_    C*.*IC C)-)GC C '+&AC C &*%?	C C C	
r    )max_sizeframeframes.Framer?   Optional[int]c                  |j         t          j        v r|S |j         t          j        u r| j        s|S |j        rd| _        nT|j        s|S t          j        |d          }|j        sd| _        | j	        r t          j        | j                   | _        |j        }|j        r
|t          z  }|dn|}	 | j                            ||          }n,# t          j        $ r}t%          j        d          |d}~ww xY w| j        j        rt%          j        d| d	          |j        r	| j	        r| `t          j        ||
          S )z,
        Decode an incoming frame.

        Frsv1Tr2   Nr   zdecompression failedzover size limit (? > z bytes)data)opcoder   CTRL_OPCODESOP_CONTr8   finrE   dataclassesreplacer%   r3   r4   r(   r5   rG   _EMPTY_UNCOMPRESSED_BLOCK
decompresserrorr   ProtocolErrorunconsumed_tailPayloadTooBig)r9   r@   r?   rG   
max_lengthexcs         r   decodezPerMessageDeflate.decodeS   s    <6...L
 <6>))( y .(-% : 'E:::E9 -(,% . V#19T8TUUU
 z9 	.--D"*QQ
	L<**4<<DDz 	L 	L 	L*+ABBK	L<' 	V*+T8+T+T+TUUU 9 	8 	"5t4444s   4C C9C44C9c                   |j         t          j        v r|S |j         t          j        ur@t	          j        |d          }| j        r#t          j        dd| j	         i| j
        | _        | j                            |j                  | j                            t          j                  z   }|j        r$|                    t$                    r
|dd         }|j        r	| j        r| `t	          j        ||          S )z,
        Encode an outgoing frame.

        TrD   r1   NrF   r   )rH   r   rI   rJ   rL   rM   r'   r3   r6   r*   r+   r7   compressrG   flushZ_SYNC_FLUSHrK   endswithrN   )r9   r@   rG   s      r   encodezPerMessageDeflate.encode   s	    <6...L
 <v~--'D999E- #/    55 9=9O   
 |$$UZ004<3E3EdFW3X3XX9 	'@AA 	9D 9 	7 	"5t4444r    N)r%   r&   r'   r&   r(   r)   r*   r)   r+   r,   r-   r.   )r-   r   )r@   rA   r?   rB   r-   rA   )r@   rA   r-   rA   )
__name__
__module____qualname____doc__r   namer:   r>   rV   r]   r   r    r   r   r      s         
 =-..D 7;%& %& %& %& %&R
 
 
 
 #'	85 85 85 85 85 85t5 5 5 5 5 5r    r   server_no_context_takeoverr&   client_no_context_takeoverserver_max_window_bitsrB   client_max_window_bitsOptional[Union[int, bool]]r-   List[ExtensionParameter]c                2   g }| r|                     d           |r|                     d           |r$|                     dt          |          f           |du r|                     d           n&|r$|                     dt          |          f           |S )zS
    Build a list of ``(name, value)`` pairs for some compression parameters.

    )rd   N)re   Nrf   T)rg   Nrg   )appendr   )rd   re   rf   rg   paramss        r   _build_parametersrm      s     (*F! <:;;;! <:;;; O/5K1L1LMNNN%%67777	 O/5K1L1LMNNNMr    rl   Sequence[ExtensionParameter]	is_server<Tuple[bool, bool, Optional[int], Optional[Union[int, bool]]]c               d   d}d}d}d}| D ]\  }}|dk    r0|rt          j        |          |d}'t          j        ||          |dk    r0|rt          j        |          |d}]t          j        ||          |dk    rD|t          j        |          |t          v rt	          |          }t          j        ||          |dk    rK|t          j        |          |r|d}|t          v rt	          |          }t          j        ||          t          j        |          ||||fS )z
    Extract compression parameters from a list of ``(name, value)`` pairs.

    If ``is_server`` is :obj:`True`, ``client_max_window_bits`` may be
    provided without a value. This is only allowed in handshake requests.

    FNrd   Tre   rf   rg   )r   DuplicateParameterInvalidParameterValue_MAX_WINDOW_BITS_VALUESr)   InvalidParameterName)rl   ro   rd   re   rf   rg   rc   values           r   _extract_parametersrw      s    (-',,09= %8 %8e///) : 3D999}-1** 6tUCCC111) : 3D999}-1** 6tUCCC---%1 3D999///),U&& 6tUCCC---%1 3D999 DU])-&&111),U&& 6tUCCC 1$777 	#"	 r    c                  L    e Zd ZdZ ed          Z	 	 	 	 	 dddZddZddZdS )r   a  
    Client-side extension factory for the Per-Message Deflate extension.

    Parameters behave as described in `section 7.1 of RFC 7692`_.

    .. _section 7.1 of RFC 7692: https://www.rfc-editor.org/rfc/rfc7692.html#section-7.1

    Set them to :obj:`True` to include them in the negotiation offer without a
    value or to an integer value to include them with this value.

    Args:
        server_no_context_takeover: prevent server from using context takeover.
        client_no_context_takeover: prevent client from using context takeover.
        server_max_window_bits: maximum size of the server's LZ77 sliding window
            in bits, between 8 and 15.
        client_max_window_bits: maximum size of the client's LZ77 sliding window
            in bits, between 8 and 15, or :obj:`True` to indicate support without
            setting a limit.
        compress_settings: additional keyword arguments for :func:`zlib.compressobj`,
            excluding ``wbits``.

    r$   FNTrd   r&   re   rf   rB   rg   rh   r+   Optional[Dict[str, Any]]r-   r.   c                    |d|cxk    rdk    sn t          d          |"|du sd|cxk    rdk    sn t          d          |d|v rt          d          || _        || _        || _        || _        || _        dS )	G
        Configure the Per-Message Deflate extension factory.

        Nr!   r0   /server_max_window_bits must be between 8 and 15T/client_max_window_bits must be between 8 and 15r1   zLcompress_settings must not include wbits, set client_max_window_bits instead)
ValueErrorrd   re   rf   rg   r+   )r9   rd   re   rf   rg   r+   s         r   r:   z'ClientPerMessageDeflateFactory.__init__  s     '.!7M2S2S2S2SQS2S2S2S2SNOOO"*%--*0000b0000NOOO(W8I-I-I5  
 +E'*D'&<#&<#!2r    ri   c                N    t          | j        | j        | j        | j                  S )z,
        Build request parameters.

        )rm   rd   re   rf   rg   r=   s    r   get_request_paramsz1ClientPerMessageDeflateFactory.get_request_params>  s.    
 !++''	
 
 	
r    rl   rn   accepted_extensionsSequence[Extension]r   c                B    t           fd|D                       rt          j        d j                   t	          |d          \  }}}} j        r|st          j        d           j        r|sd} j        n5|t          j        d          | j        k    rt          j        d	           j        |t          j        d
          n3 j        du rn)| j        }n| j        k    rt          j        d          t          |||pd|pd j
                  S )zV
        Process response parameters.

        Return an extension instance.

        c              3  8   K   | ]}|j         j         k    V  d S r^   rc   r   otherr9   s     r   	<genexpr>zIClientPerMessageDeflateFactory.process_response_params.<locals>.<genexpr>U  ,      HH5uzTY&HHHHHHr    zreceived duplicate Fro   z#expected server_no_context_takeoverTNzexpected server_max_window_bitsz"unsupported server_max_window_bitsz!unexpected client_max_window_bitsz"unsupported client_max_window_bitsr0   )anyr   NegotiationErrorrc   rw   rd   re   rf   rg   r   r+   r9   rl   r   rd   re   rf   rg   s   `      r   process_response_paramsz6ClientPerMessageDeflateFactory.process_response_paramsJ  s    HHHH4GHHHHH 	Q-.ODI.O.OPPP  %888	
&&"" * 	Y- Y 12WXXX * 	2- 2-1* &. &- 12STTT'$*EEE 12VWWW &.%1 12UVVV 2 (D00 &-)-)D&&'$*EEE 12VWWW &&"(b"(b"
 
 	
r    )FFNTN)rd   r&   re   r&   rf   rB   rg   rh   r+   ry   r-   r.   )r-   ri   )rl   rn   r   r   r-   r   )	r_   r`   ra   rb   r   rc   r:   r   r   r   r    r   r   r     s         . =-..D ,1+004=A6:3 3 3 3 3@

 

 

 

g
 g
 g
 g
 g
 g
r    r   
extensions*Optional[Sequence[ClientExtensionFactory]] Sequence[ClientExtensionFactory]c                    | g } t          d | D                       s#t          |           t          ddi          gz   } | S )z
    Enable Per-Message Deflate with default settings in client extensions.

    If the extension is already present, perhaps with non-default settings,
    the configuration isn't changed.

    Nc              3  @   K   | ]}|j         t          j         k    V  d S r^   )rc   r   )r   extension_factorys     r   r   z3enable_client_permessage_deflate.<locals>.<genexpr>  sB         	"@"EE     r    memLevel   )r+   )r   listr   r   s    r   r   r     sw     
  !+     
 *%%*#-q/  )
 


 r    c                  F    e Zd ZdZ ed          Z	 	 	 	 	 	 dddZddZdS )r   a  
    Server-side extension factory for the Per-Message Deflate extension.

    Parameters behave as described in `section 7.1 of RFC 7692`_.

    .. _section 7.1 of RFC 7692: https://www.rfc-editor.org/rfc/rfc7692.html#section-7.1

    Set them to :obj:`True` to include them in the negotiation offer without a
    value or to an integer value to include them with this value.

    Args:
        server_no_context_takeover: prevent server from using context takeover.
        client_no_context_takeover: prevent client from using context takeover.
        server_max_window_bits: maximum size of the server's LZ77 sliding window
            in bits, between 8 and 15.
        client_max_window_bits: maximum size of the client's LZ77 sliding window
            in bits, between 8 and 15.
        compress_settings: additional keyword arguments for :func:`zlib.compressobj`,
            excluding ``wbits``.
        require_client_max_window_bits: do not enable compression at all if
            client doesn't advertise support for ``client_max_window_bits``;
            the default behavior is to enable compression without enforcing
            ``client_max_window_bits``.

    r$   FNrd   r&   re   rf   rB   rg   r+   ry   require_client_max_window_bitsr-   r.   c                *   |d|cxk    rdk    sn t          d          |d|cxk    rdk    sn t          d          |d|v rt          d          ||rt          d          || _        || _        || _        || _        || _        || _        dS )	r{   Nr!   r0   r|   r}   r1   zLcompress_settings must not include wbits, set server_max_window_bits insteadzVrequire_client_max_window_bits is enabled, but client_max_window_bits isn't configured)r~   rd   re   rf   rg   r+   r   )r9   rd   re   rf   rg   r+   r   s          r   r:   z'ServerPerMessageDeflateFactory.__init__  s     '.!7M2S2S2S2SQS2S2S2S2SNOOO&.!7M2S2S2S2SQS2S2S2S2SNOOO(W8I-I-I5   ").L)>  
 +E'*D'&<#&<#!2.L+++r    rl   rn   r   r   2Tuple[List[ExtensionParameter], PerMessageDeflate]c                    t           fd|D                       rt          j        d j                   t	          |d          \  }}}} j        r|sd} j        r|sd} j        n| j        }n| j        k    r j        } j        |du r j        }n<| j	        rt          j        d          n|du r j        }n j        |k     r j        }t          ||||          t          |||pd|pd j                  fS )zi
        Process request parameters.

        Return response params and an extension instance.

        c              3  8   K   | ]}|j         j         k    V  d S r^   r   r   s     r   r   zHServerPerMessageDeflateFactory.process_request_params.<locals>.<genexpr>  r   r    zskipped duplicate Tr   Nzrequired client_max_window_bitsr0   )r   r   r   rc   rw   rd   re   rf   rg   r   rm   r   r+   r   s   `      r   process_request_paramsz5ServerPerMessageDeflateFactory.process_request_params  s    HHHH4GHHHHH 	P-.N49.N.NOOO  $777	
&&""" * 	2- 2-1* * 	2- 2-1* &. &-)-)D&&'$*EEE)-)D& &.%--)-)D& &-6 Y$56WXXXY'4//)-)D&&,/EEE)-)D& **&&	  **&,"&,"& 
 	
r    )FFNNNF)rd   r&   re   r&   rf   rB   rg   rB   r+   ry   r   r&   r-   r.   )rl   rn   r   r   r-   r   )r_   r`   ra   rb   r   rc   r:   r   r   r    r   r   r     s}         4 =-..D ,1+004046:/4!M !M !M !M !MFo
 o
 o
 o
 o
 o
r    r   *Optional[Sequence[ServerExtensionFactory]] Sequence[ServerExtensionFactory]c                    | g } t          d | D                       s%t          |           t          ddddi          gz   } | S )z
    Enable Per-Message Deflate with default settings in server extensions.

    If the extension is already present, perhaps with non-default settings,
    the configuration isn't changed.

    Nc              3  @   K   | ]}|j         t          j         k    V  d S r^   )rc   r   )r   ext_factorys     r   r   z3enable_server_permessage_deflate.<locals>.<genexpr>  sB         	:??     r       r   r   )rf   rg   r+   )r   r   r   r   s    r   r   r   ~  s}     
  %     

 *%%*')')#-q/  )
 

 r    )
rd   r&   re   r&   rf   rB   rg   rh   r-   ri   )rl   rn   ro   r&   r-   rp   )r   r   r-   r   )r   r   r-   r   ) 
__future__r   rL   r3   typingr   r   r   r   r   r	   r
    r   r   r   r   baser   r   r   __all__rN   rangert   r   rm   rw   r   r   r   r   r   r    r   <module>r      s   " " " " " "      D D D D D D D D D D D D D D D D D D ! ! ! ! ! ! ! ! 6 6 6 6 6 6 6 6 K K K K K K K K K K   0 >>q">>> R5 R5 R5 R5 R5	 R5 R5 R5j   0; ; ; ;|m
 m
 m
 m
 m
%; m
 m
 m
`   0o
 o
 o
 o
 o
%; o
 o
 o
d     r    