
    ht                         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)    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y)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     _/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/websocket/compress_deflate.pyr	   r	   .   s.     *N &A"
 $? 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.parseL   si    "'%)""#&+# 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 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 ``[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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>   rJ   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>   rQ   rJ   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>   rX   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"   classmethodrC   rK   rT   rY   r_   r&   r'   r(   r
   r
   E   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 ``[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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 )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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 )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  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^   )rB   r_   r?   r>   rg   rh   ri   rj   rX   s    r(   r_   z%PerMessageDeflateOfferAccept.__repr__b  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"   rK   rT   rY   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.   r/   r0   r1   r2   Tr3   r4   r5   r6   )	r:   r;   r.   r2   r3   r4   r@   rA   responses	            r(   rC   zPerMessageDeflateResponse.parser  sN    "#%*"!"%*"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 \ -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.   r2   r3   r4   )rJ   r.   r2   r3   r4   s        r(   rK   z"PerMessageDeflateResponse.__init__  s$      '=#*D'&<#*D'r'   c                 v    | 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__  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^   ru   rX   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"   r`   rC   rK   rY   r_   r&   r'   r(   r   r   l  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 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:   " ($=>: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 )rV   )rW   rs   rg   rh   ri   )r#   rs   rY   rg   rh   ri   rX   s    r(   rY   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 = rn   ro   rp   r^   )rs   r_   rg   rh   ri   rX   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"   rK   rY   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)	rs   r4   rg   r2   r3   rh   r.   ri   rj   r:   	is_serveracceptpmces       r(   create_from_response_acceptz-PerMessageDeflate.create_from_response_accept7  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   )rg   rB   r?   rh   r>   ri   rj   r   s       r(   create_from_offer_acceptz*PerMessageDeflate.create_from_offer_acceptE  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_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  sx     $*D'*D'@VZ[@[&<aeayay#@VZ[@[&<aeayay#&/T5K5K 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  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 = 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  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   r4   zlibcompressobjZ_DEFAULT_COMPRESSIONDEFLATEDr3   ri   r2   r.   rX   s    r(   start_compress_messagez(PerMessageDeflate.start_compress_messages  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rJ   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   r2   r   decompressobjr.   r4   r3   rX   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   )rj   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   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  st     ..  	 	$ #'",-_	M/V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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'   