
    %i                         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)PerMessageCompressPerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAccept)PerMessageDeflatePerMessageDeflateMixinPerMessageDeflateOfferPerMessageDeflateOfferAcceptPerMessageDeflateResponsePerMessageDeflateResponseAcceptc                   (    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/html/navyabakers_fullstack/navyabakers_prod/venv/lib/python3.12/site-packages/autobahn/websocket/compress_deflate.pyr
   r
   0   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.parseN   s    "'%)""#&+#  S	A6!9~!#,,. 
 )A,C,, d?:!#h  #9#X#XY #,#&3+=+=!?#  6:2-1*22d?#3#5#57 
 26...6c(C "8"W"WW'"As'9'9; 
 36/22d?#3#5#57 
 37/  #,,. aS	j &"'#	
 M'"As'9'9; B#3#5#57 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@123 
 +E'&'4/<-./ 
 '=#+,4A234 
 ,G( $q('t/R/RR*D,O,OQ 
 (?$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;     ,,*.*I*I&*&A&A+/+K+K'+'C'C
 	
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__  s2     //++00,,	
r'   N)TTFr   )
r   r    r!   r"   classmethodrC   rK   rT   rY   r_   r&   r'   r(   r   r   G   sA    
 n nd $(#$) !4?l$

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__1  s   8 %!787$u+EFF
+,4A234 
 'u/O/Ob-. 
 ,G( $q('t/R/RR*D,O,OQ 
 #a'0L0L^)* 
 (?$*'(D0=./0 
 009LY)* 
 $7 "$"E"EE"D$G$GI  --2%"?"??]!" 
 '  A AA $"C"CE 
 # 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-

0R0RR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__  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__  sR     

##%00,,((  %%		
r'   )Fr   NNNN)r   r    r!   r"   rK   rT   rY   r_   r&   r'   r(   r   r   (  s1     %* ! i1V(
$
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.parse  s    "#%*"!"%*" C	A6!9~!#,,. 
 )A,C,,5c(C "8"W"WW'"As'9'9; 
 25.22d?#3#5#57 
 26...5c(C "8"W"WW'"As'9'9; 
 25.22d?#3#5#57 
 26.  #,,. AC	J "&"&	
 #3#5#57 4#3#5#57 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__Q  s;     ,,&*&A&A*.*I*I&*&A&A*.*I*I
 	
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__`  s2     ++//++//	
r'   N)	r   r    r!   r"   r`   rC   rK   rY   r_   r&   r'   r(   r   r     s.     Z ZxE.

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__{  sB   & ($=>:T(^KLL *'(D0=./0 
 22;NY)* 
 $7 "$"E"EE"D$G$GI  //14("A"AA]!" 
 '  A AA $"C"CE 
 # 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#'#;#;++
 	
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__  s7     &&(((  	
r'   )NNNN)r   r    r!   r"   rK   rY   r_   r&   r'   r(   r   r   r  s&     !A1F

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_accept  s     OO66 --9 **__??OO22 %%1 ""__;;##
" 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_accept  s      --9 **\\==.. %%1 ""\\99**##
" 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__  s     $*D'*D' &* #)) 	# &* #)) 	# '0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__4  sG    ,,*.*I*I*.*I*I&*&A&A&*&A&A
 	
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__?  s@     ////++++
	
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_messageL  s     ??'4+J+J#'#3#3..MM000NN	$  ,K '4+J+J#'#3#3..MM000NN	$  ,Kr'   c                 8    | j                   j                  |      S r   )r   compressrJ   datas     r(   compress_message_dataz'PerMessageDeflate.compress_message_dataa  s    ((..r'   c                 ^    | j                   j                  t        j                        }|d d S )N)r   flushr   Z_SYNC_FLUSHr   s     r(   end_compress_messagez&PerMessageDeflate.end_compress_messaged  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_messageh  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_datap  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_messageu  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	     ss     .. *  : "@	

*/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 . ]
46L ]
 ]
@ k
!#9k
 k
\ W
 :<R W
 W
t i
$&<i
 i
ZX;*,B X;r'   