
    8'ht                         d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 dZ G d de      Ze G d d	ee             Ze G d
 dee             Ze G d dee             Ze G d de	e             Z G d de
e      Zy)    )absolute_importN)public)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageDeflateMixinPerMessageDeflateOfferPerMessageDeflateOfferAcceptPerMessageDeflateResponsePerMessageDeflateResponseAcceptPerMessageDeflatec                   (    e Zd ZdZdZ	 g dZ	 g dZy)r
   z)
    Mixin class for this extension.
    zpermessage-deflate)   	   
                  )	                     r   r   N)__name__
__module____qualname____doc__EXTENSION_NAMEWINDOW_SIZE_PERMISSIBLE_VALUESMEM_LEVEL_PERMISSIBLE_VALUES     _/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/websocket/compress_deflate.pyr
   r
   0   s.     *N &D"
 $? r(   r
   c                   B    e Zd ZdZed        Z	 	 	 	 ddZd Zd Zd Z	y)	r   zw
    Set of extension parameters for `permessage-deflate` WebSocket extension
    offered by a client to a server.
    c                 <   d}d}d}d}|D ]:  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  rG|dur@	 t        |      }|t        j
                  vrt        d	|d
|d| j                  d      d}d}|dk(  r&|durt        d	|d
|d| j                  d      d}|dk(  r@	 t        |      }|t        j
                  vrt        d	|d
|d| j                  d      |}|dk(  r'|durt        d	|d
|d| j                  d      d}!t        d|d| j                  d        | ||||      }|S #  t        d	|d
|d| j                  d      xY w#  t        d	|d
|d| j                  d      xY w)a_  
        Parses a WebSocket extension offer for `permessage-deflate` provided by a client to a server.

        :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`.
        :type params: list

        :returns: A new instance of :class:`autobahn.compress.PerMessageDeflateOffer`.
        :rtype: obj
        FTr   r   ,multiple occurrence of extension parameter '' for extension ''client_max_window_bits#illegal extension parameter value '' for parameter '' of extension 'client_no_context_takeoverserver_max_window_bitsserver_no_context_takeoverillegal extension parameter 'len	Exceptionr$   intr
   r%   )	clsparamsaccept_max_window_bitsaccept_no_context_takeoverrequest_max_window_bitsrequest_no_context_takeoverpvaloffers	            r)   parsezPerMessageDeflateOffer.parseN   sp    "'%)""#&+#  9	qA6!9~!hiknk}k} ~)A,C,, d?
:!#h &<&[&[["+  ~A  CD  FI  FX  FX  -Y  #Z  Z 6:2-1*22d?#uxz{  ~A  ~P  ~P  %Q  R  R15...6c(C "8"W"WW'y|~  BE  BT  BT  )U  V  V25/22d?#uxz{  ~A  ~P  ~P  %Q  R  R26/  YZ\_\n\n opps9	qv .*/+- YV'y|~  BE  BT  BT  )U  V  V*R#uxz{  ~A  ~P  ~P  %Q  R  Rs   EE:!E7:!Fc                    t        |      t        k7  rt        dt        |      z        || _        t        |      t        k7  rt        dt        |      z        || _        t        |      t        k7  rt        dt        |      z        || _        |dk7  r)|| j                  vrt        d|d| j                        || _        y)a  

        :param accept_no_context_takeover: When ``True``, the client accepts the "no context takeover" feature.
        :type accept_no_context_takeover: bool
        :param accept_max_window_bits: When ``True``, the client accepts setting "max window size".
        :type accept_max_window_bits: bool
        :param request_no_context_takeover: When ``True``, the client request the "no context takeover" feature.
        :type request_no_context_takeover: bool
        :param request_max_window_bits: When non-zero, the client requests the given "max window size" (must be
            and integer from the interval ``[8..15]``).
        :type request_max_window_bits: int
        z.invalid type %s for accept_no_context_takeoverz*invalid type %s for accept_max_window_bits/invalid type %s for request_no_context_takeoverr   invalid value 2 for request_max_window_bits - permissible values N)typeboolr9   r>   r=   r@   r%   r?   )selfr>   r=   r@   r?   s        r)   __init__zPerMessageDeflateOffer.__init__   s    " *+t3LtTnOoopp*D'&'4/H4PfKgghh&<#+,4MPTUpPqqrr+F("a',C4KnKn,nf}  @D  @c  @c  d  e  e'>$r(   c                     | j                   }| j                  r|dz  }| j                  r|dz  }| j                  r|dz  }| j                  dk7  r|d| j                  z  z  }|S )
        Returns the WebSocket extension configuration string as sent to the server.

        :returns: PMCE configuration string.
        :rtype: str
        ; client_no_context_takeoverz; client_max_window_bits; server_no_context_takeoverr   ; server_max_window_bits=%dr$   r>   r=   r@   r?   rK   pmce_strings     r)   get_extension_stringz+PerMessageDeflateOffer.get_extension_string   su     ))**99K&&55K++99K''1,84;W;WWWKr(   c                 v    | j                   | j                  | j                  | j                  | j                  dS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr>   r=   r@   r?   rR   rK   s    r)   __json__zPerMessageDeflateOffer.__json__   s=     "00.2.M.M*.*E*E/3/O/O+/+G+G	I 	Ir(   c           	      p    d| j                   d| j                  d| j                  d| j                  d	S )
        Returns Python object representation that can be eval'ed to reconstruct the object.

        :returns: Python string representation.
        :rtype: str
        z4PerMessageDeflateOffer(accept_no_context_takeover = z, accept_max_window_bits =  , request_no_context_takeover = , request_max_window_bits = ))r>   r=   r@   r?   rY   s    r)   __repr__zPerMessageDeflateOffer.__repr__   sb     jn  jI  jI  KO  Kf  Kf  hl  hH  hH  JN  Jf  Jf  g  	gr(   N)TTFr   )
r    r!   r"   r#   classmethodrD   rL   rU   rZ   r`   r'   r(   r)   r   r   G   sC    
 R Rj -1(,-2)*	#?J$Igr(   r   c                   6    e Zd ZdZ	 	 	 	 	 	 ddZd Zd Zd Zy)r   zm
    Set of parameters with which to accept an `permessage-deflate` offer
    from a client by a server.
    Nc                 j   t        |t              st        dt        |      z        || _        t        |      t
        k7  rt        dt        |      z        |r|j                  st        d|z        || _        |dk7  r)|| j                  vrt        d|d| j                        |dk7  r|j                  st        d|z        || _
        |Et        |      t
        k7  rt        d	t        |      z        |j                  r|st        d
|z        || _        |U|| j                  vrt        d|d| j                        |j                  dk7  r||j                  kD  rt        d|z        || _        |)|| j                  vrt        d|d| j                        || _        || _        y)a  

        :param offer: The offer being accepted.
        :type offer: Instance of :class:`autobahn.compress.PerMessageDeflateOffer`.
        :param request_no_context_takeover: When ``True``, the server requests the "no context takeover" feature.
        :type request_no_context_takeover: bool
        :param request_max_window_bits: When non-zero, the server requests the given "max window size" (must be
            and integer from the interval ``[8..15]``).
        :param request_max_window_bits: int
        :param no_context_takeover: Override server ("server-to-client direction") context takeover (this must
                be compatible with the offer).
        :type no_context_takeover: bool
        :param window_bits: Override server ("server-to-client direction") window size (this must be
                compatible with the offer).
        :type window_bits: int
        :param mem_level: Set server ("server-to-client direction") memory level.
        :type mem_level: int
        zinvalid type %s for offerrF   zPinvalid value %s for request_no_context_takeover - feature unsupported by clientr   rG   rH   zLinvalid value %s for request_max_window_bits - feature unsupported by clientN'invalid type %s for no_context_takeoverzCinvalid value %s for no_context_takeover - client requested feature& for window_bits - permissible values zGinvalid value %s for window_bits - client requested lower maximum value$ for mem_level - permissible values )
isinstancer   r9   rI   rC   rJ   r>   r@   r%   r=   r?   no_context_takeoverwindow_bitsr&   	mem_levelmax_message_size)rK   rC   r@   r?   rh   ri   rj   rk   s           r)   rL   z%PerMessageDeflateOfferAccept.__init__   s   4 %!787$u+EFF
+,4MPTUpPqqrr&u/O/On  rM  M  N  N+F("a',C4KnKn,nf}  @D  @c  @c  d  e  e"a'0L0Lj  nE  E  F  F'>$*'(D0 IDQdLe eff009L eh{ {||#6 "$"E"EE^iko  lO  lO  !P  Q  Q,,1kEDaDa6a ilw wxx&  A AA\egk  hI  hI  !J  K  K" 0r(   c                 "   | j                   }| j                  j                  r|dz  }| j                  j                  dk7  r|d| j                  j                  z  z  }| j                  r|dz  }| j                  dk7  r|d| j                  z  z  }|S )rN   rP   r   rQ   rO   z; client_max_window_bits=%d)r$   rC   r@   r?   rS   s     r)   rU   z1PerMessageDeflateOfferAccept.get_extension_string@  s     ))::1199K::--284::;];]]]K++99K''1,84;W;WWWKr(   c           	          | j                   | j                  j                         | j                  | j                  | j
                  | j                  | j                  | j                  dS )rW   )rX   rC   r@   r?   rh   ri   rj   rk   )	r$   rC   rZ   r@   r?   rh   ri   rj   rk   rY   s    r)   rZ   z%PerMessageDeflateOfferAccept.__json__R  s[     ,,ZZ((*+/+K+K'+'C'C#'#;#;++ $ 5 5	
 		
r(   c                     d| j                   j                         d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  dS )	r\   z%PerMessageDeflateOfferAccept(offer = r]   r^   , no_context_takeover = , window_bits = , mem_level = z, max_message_size = r_   )rC   r`   r@   r?   rh   ri   rj   rk   rY   s    r)   r`   z%PerMessageDeflateOfferAccept.__repr__d  s     QU  Q[  Q[  Qd  Qd  Qf  hl  hH  hH  JN  Jf  Jf  hl  h@  h@  BF  BR  BR  TX  Tb  Tb  dh  dy  dy  z  	zr(   )Fr   NNNN)r    r!   r"   r#   rL   rU   rZ   r`   r'   r(   r)   r   r      s2     .3)*%)!"&F1P$
$zr(   r   c                   2    e Zd ZdZed        Zd Zd Zd Zy)r   zI
    Set of parameters for `permessage-deflate` responded by server.
    c                 .   d}d}d}d}|D ]3  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  r@	 t        |      }|t        j
                  vrt        d|d	|d
| j                  d      |}~|dk(  r&|durt        d|d	|d
| j                  d      d}|dk(  r@	 t        |      }|t        j
                  vrt        d|d	|d
| j                  d      |}|dk(  r'|durt        d|d	|d
| j                  d      d}t        d|d| j                  d        | ||||      }|S #  t        d|d	|d
| j                  d      xY w#  t        d|d	|d
| j                  d      xY w)ae  
        Parses a WebSocket extension response for `permessage-deflate` provided by a server to a client.

        :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`.
        :type params: list

        :returns: A new instance of :class:`autobahn.compress.PerMessageDeflateResponse`.
        :rtype: obj
        r   Fr   r,   r-   r.   r/   r0   r1   r2   r3   Tr4   r5   r6   r7   )	r;   r<   r/   r3   r4   r5   rA   rB   responses	            r)   rD   zPerMessageDeflateResponse.parset  sU    "#%*"!"%*" ,	qA6!9~!hiknk}k} ~)A,C,,5c(C "8"W"WW'y|~  BE  BT  BT  )U  V  V14.22d?#uxz{  ~A  ~P  ~P  %Q  R  R15...5c(C "8"W"WW'y|~  BE  BT  BT  )U  V  V14.22d?#uxz{  ~A  ~P  ~P  %Q  R  R15.  YZ\_\n\n oppY,	q\ -1-13 QR#uxz{  ~A  ~P  ~P  %Q  R  R"R#uxz{  ~A  ~P  ~P  %Q  R  Rs   
E:E3!E03!Fc                 <    || _         || _        || _        || _        y)ax  

        :param client_max_window_bits: FIXME
        :type client_max_window_bits: int
        :param client_no_context_takeover: FIXME
        :type client_no_context_takeover: bool
        :param server_max_window_bits: FIXME
        :type server_max_window_bits: int
        :param server_no_context_takeover: FIXME
        :type server_no_context_takeover: bool
        Nr/   r3   r4   r5   )rK   r/   r3   r4   r5   s        r)   rL   z"PerMessageDeflateResponse.__init__  s$      '=#*D'&<#*D'r(   c                 v    | j                   | j                  | j                  | j                  | j                  dS )rW   )rX   r/   r3   r4   r5   )r$   r/   r3   r4   r5   rY   s    r)   rZ   z"PerMessageDeflateResponse.__json__  s=     "00*.*E*E.2.M.M*.*E*E.2.M.M	O 	Or(   c           	      p    d| j                   d| j                  d| j                  d| j                  d	S )r\   z3PerMessageDeflateResponse(client_max_window_bits = , client_no_context_takeover = , server_max_window_bits = , server_no_context_takeover = r_   rv   rY   s    r)   r`   z"PerMessageDeflateResponse.__repr__  sb     ko  kF  kF  HL  Hg  Hg  im  iD  iD  FJ  Fe  Fe  f  	fr(   N)	r    r!   r"   r#   ra   rD   rL   rZ   r`   r'   r(   r)   r   r   n  s0     A AFE*Ofr(   r   c                   ,    e Zd ZdZ	 	 	 	 ddZd Zd Zy)r   zp
    Set of parameters with which to accept an `permessage-deflate` response
    from a server by a client.
    Nc                 *   t        |t              st        dt        |      z        || _        |Et        |      t
        k7  rt        dt        |      z        |j                  r|st        d|z        || _        |U|| j                  vrt        d|d| j                        |j                  dk7  r||j                  kD  rt        d|z        || _
        |)|| j                  vrt        d|d	| j                        || _        || _        y)
a]  

        :param response: The response being accepted.
        :type response: Instance of :class:`autobahn.compress.PerMessageDeflateResponse`.
        :param no_context_takeover: Override client ("client-to-server direction") context takeover (this must be compatible with response).
        :type no_context_takeover: bool
        :param window_bits: Override client ("client-to-server direction") window size (this must be compatible with response).
        :type window_bits: int
        :param mem_level: Set client ("client-to-server direction") memory level.
        :type mem_level: int
        zinvalid type %s for responseNrd   zCinvalid value %s for no_context_takeover - server requested featurerG   re   r   zGinvalid value %s for window_bits - server requested lower maximum valuerf   )rg   r   r9   rI   rt   rJ   r3   rh   r%   r/   ri   r&   rj   rk   )rK   rt   rh   ri   rj   rk   s         r)   rL   z(PerMessageDeflateResponseAccept.__init__  s:   " ($=>:T(^KLL *'(D0 IDQdLe eff22;N eh{ {||#6 "$"E"EE^iko  lO  lO  !P  Q  Q..!3hFeFe8e ilw wxx&  A AA\egk  hI  hI  !J  K  K" 0r(   c                     | j                   | j                  j                         | j                  | j                  | j
                  dS )rW   )rX   rt   rh   ri   rj   )r$   rt   rZ   rh   ri   rj   rY   s    r)   rZ   z(PerMessageDeflateResponseAccept.__json__  s@     "00 MM224'+'?'?#//!^^	- 	-r(   c           	          d| j                   j                         d| j                  d| j                  d| j                  d	S )r\   z+PerMessageDeflateResponseAccept(response = ro   rp   rq   r_   )rt   r`   rh   ri   rj   rY   s    r)   r`   z(PerMessageDeflateResponseAccept.__repr__'  sw     @D  @M  @M  @V  @V  @X  Z^  Zr  Zr  tx  tD  tD  FJ  FT  FT  U  	Ur(   )NNNN)r    r!   r"   r#   rL   rZ   r`   r'   r(   r)   r   r     s&     &*!"&-1^-Ur(   r   c                       e Zd ZdZej
                  ZdZed        Z	ed        Z
	 ddZd Zd Zd	 Zd
 Zd Zd Zd Zd Zy)r   z=
    `permessage-deflate` WebSocket extension processor.
    r   c           	      J    | ||j                   j                  |j                  |j                  n|j                   j                  |j                   j                  |j
                  |j
                  n|j                   j                  |j                  |j                        }|S N)	rt   r5   rh   r3   r4   ri   r/   rj   rk   r;   	is_serveracceptpmces       r)   create_from_response_acceptz-PerMessageDeflate.create_from_response_accept9  s     OO66*0*D*D*PF&&V\VeVe  WA  WAOO22"("4"4"@FfooFlFl##
 r(   c           	      "    | ||j                   |j                   n|j                  j                  |j                  |j                  |j                  n|j                  j                  |j                  |j
                  |j                        }|S r   )rh   rC   r@   ri   r?   rj   rk   r   s       r)   create_from_offer_acceptz*PerMessageDeflate.create_from_offer_acceptG  s     9171K1K1W6--]c]i]i  ^F  ^F55)/););)G6%%V\\MqMq11##**- r(   Nc                     || _         || _        || _        |dk7  r|n| j                  | _        |dk7  r|n| j                  | _        |r|n| j                  | _        || _        d | _	        d | _
        y )Nr   )
_is_serverr5   r3   DEFAULT_WINDOW_BITSr4   r/   DEFAULT_MEM_LEVELrj   rk   _compressor_decompressor)rK   r   r5   r3   r4   r/   rj   rk   s           r)   rL   zPerMessageDeflate.__init__S  sx     $*D'*D'@VZ[@[&<aeayay#@VZ[@[&<aeayay#&/T5K5K 0!r(   c                     | j                   | j                  | j                  | j                  | j                  | j
                  | j                  dS )N)rX   r   r5   r3   r4   r/   rj   )r$   r   r5   r3   r4   r/   rj   rY   s    r)   rZ   zPerMessageDeflate.__json__i  sG    !00!__.2.M.M.2.M.M*.*E*E*.*E*E!^^- 	-r(   c                     d| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  dS )NzPerMessageDeflate(is_server = r{   ry   rz   z, client_max_window_bits = rq   r_   )r   r5   r3   r4   r/   rj   rY   s    r)   r`   zPerMessageDeflate.__repr__r  s     CG  CR  CR  TX  Ts  Ts  uy  uT  uT  VZ  Vq  Vq  sw  sN  sN  PT  P^  P^  _  	_r(   c                    | j                   rh| j                  | j                  rOt        j                  t        j
                  t        j                  | j                   | j                        | _        y y | j                  | j                  rOt        j                  t        j
                  t        j                  | j                   | j                        | _        y y r   )r   r   r5   zlibcompressobjZ_DEFAULT_COMPRESSIONDEFLATEDr4   rj   r3   r/   rY   s    r)   start_compress_messagez(PerMessageDeflate.start_compress_messageu  s     ??'4+J+J#'#3#3D4N4NPTP]P]`d`{`{_{  ~B  ~L  ~L  $M  ,K '4+J+J#'#3#3D4N4NPTP]P]`d`{`{_{  ~B  ~L  ~L  $M  ,Kr(   c                 8    | j                   j                  |      S r   )r   compressrK   datas     r)   compress_message_dataz'PerMessageDeflate.compress_message_data  s    ((..r(   c                 ^    | j                   j                  t        j                        }|d d S )N)r   flushr   Z_SYNC_FLUSHr   s     r)   end_compress_messagez&PerMessageDeflate.end_compress_message  s*    %%d&7&78CRyr(   c                    | j                   r?| j                  | j                  r&t        j                  | j
                         | _        y y | j                  | j                  r&t        j                  | j                         | _        y y r   )r   r   r3   r   decompressobjr/   r5   r4   rY   s    r)   start_decompress_messagez*PerMessageDeflate.start_decompress_message  sw    ??!!)T-L-L%)%7%79T9T8T%U" .M !!)T-L-L%)%7%79T9T8T%U" .Mr(   c                     | j                   &| j                  j                  || j                         S | j                  j                  |      S r   )rk   r   
decompressr   s     r)   decompress_message_dataz)PerMessageDeflate.decompress_message_data  sD      ,%%00t7L7LMM!!,,T22r(   c                 :    | j                   j                  d       y )Ns     )r   r   rY   s    r)   end_decompress_messagez(PerMessageDeflate.end_decompress_message  s     	%%&9:r(   r   )r    r!   r"   r#   r   	MAX_WBITSr   r   ra   r   r   rL   rZ   r`   r   r   r   r   r   r   r'   r(   r)   r   r   2  st     ..  	 	$ #'",-_	M/V3
;r(   r   )
__future__r   r   autobahn.utilr    autobahn.websocket.compress_baser   r   r   r   r	   __all__objectr
   r   r   r   r   r   r'   r(   r)   <module>r      s   6 '    V . fg46L fg fgR yz#@BX yz yzx rf :<R rf rfj IU&FH^ IU IUZe;*,B e;r(   