
    tft                     ,   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dS )    N)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dS )r	   z)
    Mixin class for this extension.
    zpermessage-deflate)	   
                  )	                        r   N)__name__
__module____qualname____doc__EXTENSION_NAMEWINDOW_SIZE_PERMISSIBLE_VALUESMEM_LEVEL_PERMISSIBLE_VALUES     b/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/websocket/compress_deflate.pyr	   r	   .   sL          *N &A%@%@"
 $?#>#>  r'   r	   c                   J    e Zd ZdZed             Z	 	 	 	 ddZd Zd Zd	 Z	d
S )r
   zw
    Set of extension parameters for `permessage-deflate` WebSocket extension
    offered by a client to a server.
    c                 T   d}d}d}d}|D ]}t          ||                   dk    rt          d|d| j        d          ||         d         }|dk    ri|durb	 t          |          }|t          j        vrt          d	|d
|d| j        d          d}#  t          d	|d
|d| j        d          xY wd}|dk    r%|durt          d	|d
|d| j        d          d}|dk    rc	 t          |          }|t          j        vrt          d	|d
|d| j        d          |}%#  t          d	|d
|d| j        d          xY w|dk    r&|durt          d	|d
|d| j        d          d}tt          d|d| j        d           | ||||          }|S )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.parseL   ss    "'%)""#&+#  9	q 9	qA6!9~~!!ihihihiknk}k}k} ~)A,C,,, d??
:!#hh &<&[[["+)  ~A  ~A  ~A  CD  CD  CD  FI  FX  FX  FX  -Y  #Z  #Z  Z 6:22V'iy|y|y|~~~  BE  BT  BT  BT  )U  V  V  V .2**222d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R15.....6c((C "8"WWW'iy|y|y|~~~  BE  BT  BT  BT  )U  V  V  V25//R#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R 222d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R26//  iYZYZYZ\_\n\n\n oppp.*/+- - s   B B91D00 ETFr   c                    t          |          t          k    rt          dt          |          z            || _        t          |          t          k    rt          dt          |          z            || _        t          |          t          k    rt          dt          |          z            || _        |dk    r#|| j        vrt          d|d| j                  || _        dS )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 ``[9..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boolr8   r=   r<   r?   r$   r>   )selfr=   r<   r?   r>   s        r(   __init__zPerMessageDeflateOffer.__init__   s   " *++t33LtTnOoOooppp*D'&''4//H4PfKgKgghhh&<#+,,44MPTUpPqPqqrrr+F("a'',C4Kn,n,n)f}f}f}  @D  @c  @c  d  e  e  e'>$$$r'   c                     | j         }| j        r|dz  }| j        r|dz  }| j        r|dz  }| j        dk    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>   rJ   pmce_strings     r(   get_extension_stringz+PerMessageDeflateOffer.get_extension_string   su     )* 	:99K& 	655K+ 	:99K'1,,84;WWWKr'   c                 D    | j         | j        | j        | j        | j        dS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr=   r<   r?   r>   rQ   rJ   s    r(   __json__zPerMessageDeflateOffer.__json__   s4     "0.2.M*.*E/3/O+/+G	I I 	Ir'   c           	      H    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>   rX   s    r(   __repr__zPerMessageDeflateOffer.__repr__   s      jn  jI  jI  jI  KO  Kf  Kf  Kf  hl  hH  hH  hH  JN  Jf  Jf  Jf  g  	gr'   N)TTFr   )
r   r    r!   r"   classmethodrC   rK   rT   rY   r_   r&   r'   r(   r
   r
   E   s         
 R R [Rj -1(,-2)*	#? #? #? #?J  $I I Ig g g g gr'   r
   c                   8    e Zd ZdZ	 	 	 	 	 	 d	dZd Zd Zd ZdS )
r   zm
    Set of parameters with which to accept an `permessage-deflate` offer
    from a client by a server.
    Fr   Nc                    t          |t                    st          dt          |          z            || _        t          |          t
          k    rt          dt          |          z            |r|j        st          d|z            || _        |dk    r#|| j        vrt          d|d| j                  |dk    r|j	        st          d|z            || _
        |Rt          |          t
          k    rt          d	t          |          z            |j        r|st          d
|z            || _        |K|| j        vrt          d|d| j                  |j
        dk    r||j
        k    rt          d|z            || _        |#|| j        vrt          d|d| j                  || _        || _        dS )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 ``[9..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 offerrE   zPinvalid value %s for request_no_context_takeover - feature unsupported by clientr   rF   rG   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
   r8   rH   rB   rI   r=   r?   r$   r<   r>   no_context_takeoverwindow_bitsr%   	mem_levelmax_message_size)rJ   rB   r?   r>   rg   rh   ri   rj   s           r(   rK   z%PerMessageDeflateOfferAccept.__init__   s   4 %!788 	G7$u++EFFF
+,,44MPTUpPqPqqrrr& 	Nu/O 	Nn  rM  M  N  N  N+F("a'',C4Kn,n,n)f}f}f}  @D  @c  @c  d  e  e  e"a''0L'j  nE  E  F  F  F'>$*'((D00 IDQdLeLe efff0 }9L } eh{ {|||#6 "$"EEEi^i^i^iko  lO  lO  !P  Q  Q  Q,11kEDa6a6a ilw wxxx&  AAAi\e\e\egk  hI  hI  !J  K  K  K" 0r'   c                     | j         }| j        j        r|dz  }| j        j        dk    r|d| j        j        z  z  }| j        r|dz  }| j        dk    r|d| j        z  z  }|S )rM   rO   r   rP   rN   z; client_max_window_bits=%d)r#   rB   r?   r>   rR   s     r(   rT   z1PerMessageDeflateOfferAccept.get_extension_string>  s     ):1 	:99K:-2284:;]]]K+ 	:99K'1,,84;WWWKr'   c           	          | j         | j                                        | j        | j        | j        | j        | j        | j        dS )rV   )rW   rB   r?   r>   rg   rh   ri   rj   )	r#   rB   rY   r?   r>   rg   rh   ri   rj   rX   s    r(   rY   z%PerMessageDeflateOfferAccept.__json__P  sM     ,Z((**+/+K'+'C#'#;+ $ 5	
 	
 		
r'   c                     d| 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^   )rB   r_   r?   r>   rg   rh   ri   rj   rX   s    r(   r_   z%PerMessageDeflateOfferAccept.__repr__b  s      QU  Q[  Qd  Qd  Qf  Qf  Qf  Qf  hl  hH  hH  hH  JN  Jf  Jf  Jf  hl  h@  h@  h@  BF  BR  BR  BR  TX  Tb  Tb  Tb  dh  dy  dy  dy  z  	zr'   )Fr   NNNN)r   r    r!   r"   rK   rT   rY   r_   r&   r'   r(   r   r      s}          .3)*%)!"&F1 F1 F1 F1P  $
 
 
$z z z z zr'   r   c                   :    e Zd ZdZed             Zd Zd Zd ZdS )r   zI
    Set of parameters for `permessage-deflate` responded by server.
    c                 F   d}d}d}d}|D ]}t          ||                   dk    rt          d|d| j        d          ||         d         }|dk    rb	 t          |          }|t          j        vrt          d|d	|d
| j        d          |}#  t          d|d	|d
| j        d          xY w|dk    r%|durt          d|d	|d
| j        d          d}|dk    rc	 t          |          }|t          j        vrt          d|d	|d
| j        d          |}#  t          d|d	|d
| j        d          xY w|dk    r&|durt          d|d	|d
| j        d          d}mt          d|d| j        d           | ||||          }|S )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.   r/   r0   r1   r2   Tr3   r4   r5   r6   )	r:   r;   r.   r2   r3   r4   r@   rA   responses	            r(   rC   zPerMessageDeflateResponse.parser  sC    "#%*"!"%*" ,	q ,	qA6!9~~!!ihihihiknk}k}k} ~)A,C,,,5c((C "8"WWW'iy|y|y|~~~  BE  BT  BT  BT  )U  V  V  V14..R#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R 222d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R15.....5c((C "8"WWW'iy|y|y|~~~  BE  BT  BT  BT  )U  V  V  V14..R#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R 222d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R15..  iYZYZYZ\_\n\n\n oppp3-1-13 3 s   B B5*D)) E	c                 >    || _         || _        || _        || _        dS )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.   r2   r3   r4   )rJ   r.   r2   r3   r4   s        r(   rK   z"PerMessageDeflateResponse.__init__  s*      '=#*D'&<#*D'''r'   c                 D    | j         | j        | j        | j        | j        dS )rV   )rW   r.   r2   r3   r4   )r#   r.   r2   r3   r4   rX   s    r(   rY   z"PerMessageDeflateResponse.__json__  s4     "0*.*E.2.M*.*E.2.M	O O 	Or'   c           	      H    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^   ru   rX   s    r(   r_   z"PerMessageDeflateResponse.__repr__  s      ko  kF  kF  kF  HL  Hg  Hg  Hg  im  iD  iD  iD  FJ  Fe  Fe  Fe  f  	fr'   N)	r   r    r!   r"   r`   rC   rK   rY   r_   r&   r'   r(   r   r   l  su          A A [AFE E E*O O Of f f f fr'   r   c                   .    e Zd ZdZ	 	 	 	 ddZd Zd ZdS )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            || _        |Rt          |          t
          k    rt          dt          |          z            |j        r|st          d|z            || _        |K|| j        vrt          d|d| j                  |j	        dk    r||j	        k    rt          d|z            || _
        |#|| j        vrt          d|d	| j                  || _        || _        dS )
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 responseNrc   zCinvalid value %s for no_context_takeover - server requested featurerF   rd   r   zGinvalid value %s for window_bits - server requested lower maximum valuere   )rf   r   r8   rH   rs   rI   r2   rg   r$   r.   rh   r%   ri   rj   )rJ   rs   rg   rh   ri   rj   s         r(   rK   z(PerMessageDeflateResponseAccept.__init__  s   " ($=>> 	M:T(^^KLLL *'((D00 IDQdLeLe efff2 };N } eh{ {|||#6 "$"EEEi^i^i^iko  lO  lO  !P  Q  Q  Q.!33hFe8e8e ilw wxxx&  AAAi\e\e\egk  hI  hI  !J  K  K  K" 0r'   c                 h    | j         | j                                        | j        | j        | j        dS )rV   )rW   rs   rg   rh   ri   )r#   rs   rY   rg   rh   ri   rX   s    r(   rY   z(PerMessageDeflateResponseAccept.__json__  s;     "0 M2244'+'?#/!^	- - 	-r'   c           	      l    d| j                                         d| j        d| j        d| j        d	S )r[   z+PerMessageDeflateResponseAccept(response = rn   ro   rp   r^   )rs   r_   rg   rh   ri   rX   s    r(   r_   z(PerMessageDeflateResponseAccept.__repr__%  s      @D  @M  @V  @V  @X  @X  @X  @X  Z^  Zr  Zr  Zr  tx  tD  tD  tD  FJ  FT  FT  FT  U  	Ur'   )NNNN)r   r    r!   r"   rK   rY   r_   r&   r'   r(   r   r     sd          &*!"&-1 -1 -1 -1^- - -U U U U 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dS )r   z=
    `permessage-deflate` WebSocket extension processor.
    r   c           	           | ||j         j        |j        |j        n|j         j        |j         j        |j        |j        n|j         j        |j        |j                  }|S N)	rs   r4   rg   r2   r3   rh   r.   ri   rj   r:   	is_serveracceptpmces       r(   create_from_response_acceptz-PerMessageDeflate.create_from_response_accept7  sq     sO6*0*D*PF&&V\Ve  WAO2"("4"@FfoFl#
 
 r'   c           	           | ||j         |j         n|j        j        |j        |j        |j        n|j        j        |j        |j        |j                  }|S r   )rg   rB   r?   rh   r>   ri   rj   r   s       r(   create_from_offer_acceptz*PerMessageDeflate.create_from_offer_acceptE  sl     s9171K1W6--]c]i  ^F5)/);)G6%%V\Mq1#*- - r'   Nc                     || _         || _        || _        |dk    r|n| j        | _        |dk    r|n| j        | _        |r|n| j        | _        || _        d | _	        d | _
        d S )Nr   )
_is_serverr4   r2   DEFAULT_WINDOW_BITSr3   r.   DEFAULT_MEM_LEVELri   rj   _compressor_decompressor)rJ   r   r4   r2   r3   r.   ri   rj   s           r(   rK   zPerMessageDeflate.__init__Q  s     $*D'*D'@VZ[@[@[&<&<aeay#@VZ[@[@[&<&<aeay#&/KT5K 0!r'   c                 \    | j         | j        | j        | j        | j        | j        | j        dS )N)rW   r   r4   r2   r3   r.   ri   )r#   r   r4   r2   r3   r.   ri   rX   s    r(   rY   zPerMessageDeflate.__json__g  s9    !0!_.2.M.2.M*.*E*.*E!^- - 	-r'   c                 h    d| j         d| j        d| j        d| j        d| j        d| j        dS )NzPerMessageDeflate(is_server = rz   rx   ry   z, client_max_window_bits = rp   r^   )r   r4   r2   r3   r.   ri   rX   s    r(   r_   zPerMessageDeflate.__repr__p  s      CG  CR  CR  CR  TX  Ts  Ts  Ts  uy  uT  uT  uT  VZ  Vq  Vq  Vq  sw  sN  sN  sN  PT  P^  P^  P^  _  	_r'   c                 D   | j         rM| j        | j        r=t          j        t          j        t          j        | j         | j                  | _        d S d S | j        | j	        r=t          j        t          j        t          j        | j
         | j                  | _        d S d S r   )r   r   r4   zlibcompressobjZ_DEFAULT_COMPRESSIONDEFLATEDr3   ri   r2   r.   rX   s    r(   start_compress_messagez(PerMessageDeflate.start_compress_messages  s     ? 	M'4+J'#'#3D4NPTP]`d`{_{  ~B  ~L  $M  $M    (' '4+J'#'#3D4NPTP]`d`{_{  ~B  ~L  $M  $M    ('r'   c                 6    | j                             |          S r   )r   compressrJ   datas     r(   compress_message_dataz'PerMessageDeflate.compress_message_data~  s    ((...r'   c                 ^    | j                             t          j                  }|d d         S )N)r   flushr   Z_SYNC_FLUSHr   s     r(   end_compress_messagez&PerMessageDeflate.end_compress_message  s)    %%d&788CRCyr'   c                     | j         r1| j        | j        r!t          j        | j                   | _        d S d S | j        | j        r!t          j        | j                   | _        d S d S r   )r   r   r2   r   decompressobjr.   r4   r3   rX   s    r(   start_decompress_messagez*PerMessageDeflate.start_decompress_message  s    ? 	V!)T-L)%)%79T8T%U%U""" *) !)T-L)%)%79T8T%U%U""" *)r'   c                     | j          | j                            || j                   S | j                            |          S r   )rj   r   
decompressr   s     r(   decompress_message_dataz)PerMessageDeflate.decompress_message_data  s>     ,%00t7LMMM!,,T222r'   c                 :    | j                             d           d S )Ns     )r   r   rX   s    r(   end_decompress_messagez(PerMessageDeflate.end_decompress_message  s"     	%%&9:::::r'   r   )r   r    r!   r"   r   	MAX_WBITSr   r   r`   r   r   rK   rY   r_   r   r   r   r   r   r   r&   r'   r(   r   r   0  s          .  [ 	 	 [	$ #'" " " ",- - -_ _ _	M 	M 	M/ / /  V V V3 3 3
; ; ; ; ;r'   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 fg fg fg fg46L fg fg fgR yz yz yz yz yz#@BX yz yz yzx rf rf rf rf rf :<R rf rf rfj IU IU IU IU IU&FH^ IU IU IUZe; e; e; e; e;*,B e; e; e; e; e;r'   