
    afG                         d dl Z d dlmZmZmZmZmZ dZ G d de          Z	 G d dee	          Z
 G d d	ee	          Z G d
 dee	          Z G d dee	          Z G d dee	          ZdS )    N)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageBzip2MixinPerMessageBzip2OfferPerMessageBzip2OfferAcceptPerMessageBzip2ResponsePerMessageBzip2ResponseAcceptPerMessageBzip2c                        e Zd ZdZdZ	 g dZdS )r   z)
    Mixin class for this extension.
    zpermessage-bzip2)	                        	   N)__name__
__module____qualname____doc__EXTENSION_NAME!COMPRESS_LEVEL_PERMISSIBLE_VALUES     S/var/www/html/env/lib/python3.11/site-packages/autobahn/websocket/compress_bzip2.pyr   r   -   s9          (N )D(C(C% r   r   c                   F    e Zd ZdZed             Z	 	 d
dZd Zd Zd Z	d	S )r	   zu
    Set of extension parameters for `permessage-bzip2` WebSocket extension
    offered by a client to a server.
    c                    d}d}|D ]}t          ||                   dk    rt          d|d| j        d          ||         d         }|dk    r%|durt          d	|d
|d| j        d          d}o|dk    rc	 t          |          }n##  t          d	|d
|d| j        d          xY w|t          j        vrt          d	|d
|d| j        d          |}t          d|d| j        d           | ||          }|S )aQ  
        Parses a WebSocket extension offer for `permessage-bzip2` provided by a client to a server.

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

        :returns: object -- A new instance of :class:`autobahn.compress.PerMessageBzip2Offer`.
        Fr   r   ,multiple occurrence of extension parameter '' for extension ''client_max_compress_levelT#illegal extension parameter value '' for parameter '' of extension 'server_max_compress_levelillegal extension parameter 'len	Exceptionr   intr   r   )clsparamsaccept_max_compress_levelrequest_max_compress_levelpvaloffers          r    parsezPerMessageBzip2Offer.parseC   s    %*!%&"  	q 	qA6!9~~!!ihihihiknk}k}k} ~)A,C///d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R04--111Rc((CCR#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R2TTT#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R14..  iYZYZYZ\_\n\n\n oppp-.0 0s   =B B-Tr   c                     t          |          t          k    rt          dt          |          z            || _        |dk    r#|| j        vrt          d|d| j                  || _        dS )a_  
        Constructor.

        :param accept_max_compress_level: Iff true, client accepts "maximum compression level" parameter.
        :type accept_max_compress_level: bool
        :param request_max_compress_level: Iff non-zero, client requests given "maximum compression level" - must be 1-9.
        :type request_max_compress_level: int
        z-invalid type %s for accept_max_compress_levelr   invalid value 5 for request_max_compress_level - permissible values N)typeboolr.   r2   r   r3   )selfr2   r3   s      r    __init__zPerMessageBzip2Offer.__init__q   s     )**d22KdSlNmNmmnnn)B&%**/IQUQw/w/w)  jD  jD  jD  FJ  Fl  Fl  m  n  n  n*D'''r   c                 \    | j         }| 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
        z; client_max_compress_levelr   ; server_max_compress_level=%dr   r2   r3   r=   pmce_strings     r    get_extension_stringz)PerMessageBzip2Offer.get_extension_string   sI     )) 	988K*a//;d>]]]Kr   c                 ,    | j         | j        | j        dS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr2   r3   rB   r=   s    r    __json__zPerMessageBzip2Offer.__json__   s(     "0-1-K.2.MO O 	Or   c                 (    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
        z1PerMessageBzip2Offer(accept_max_compress_level = , request_max_compress_level = ))r2   r3   rI   s    r    __repr__zPerMessageBzip2Offer.__repr__   sH      ko  kI  kI  kI  KO  Kj  Kj  Kj  k  	kr   N)Tr   )
r   r   r   r   classmethodr7   r>   rE   rJ   rO   r   r   r    r	   r	   =   s         
 + + [+\ ,0,-E E E E*  	O 	O 	Ok k k k kr   r	   c                   0    e Zd ZdZ	 	 ddZd Zd Zd ZdS )	r
   zk
    Set of parameters with which to accept an `permessage-bzip2` offer
    from a client by a server.
    r   Nc                    t          |t                    st          dt          |          z            || _        |dk    r#|| j        vrt          d|d| j                  |dk    r|j        st          d|z            || _        |K|| j        vrt          d|d| j                  |j        dk    r||j        k    rt          d|z            || _        dS )	a  
        Constructor.

        :param offer: The offer being accepted.
        :type offer: Instance of :class:`autobahn.compress.PerMessageBzip2Offer`.
        :param request_max_compress_level: Iff non-zero, server requests given "maximum compression level" - must be 1-9.
        :type request_max_compress_level: int
        :param compress_level: Override server ("server-to-client direction") compress level (this must be compatible with offer).
        :type compress_level: int
        zinvalid type %s for offerr   r9   r:   zOinvalid value %s for request_max_compress_level - feature unsupported by clientN) for compress_level - permissible values zJinvalid value %s for compress_level - client requested lower maximum value)	
isinstancer	   r.   r;   r6   r   r2   r3   compress_level)r=   r6   r3   rU   s       r    r>   z#PerMessageBzip2OfferAccept.__init__   sc    %!566 	G7$u++EFFF
%**/IQUQw/w/w)  jD  jD  jD  FJ  Fl  Fl  m  n  n  n%**53R*m  qK  K  L  L  L*D'%T%KKKiaoaoaoqu  rX  rX  !Y  Z  Z  Z/144%Jj9j9j lo} }~~~,r   c                     | j         }| j        j        dk    r|d| j        j        z  z  }| j        dk    r|d| j        z  z  }|S )r@   r   rA   z; client_max_compress_level=%d)r   r6   r3   rC   s     r    rE   z/PerMessageBzip2OfferAccept.get_extension_string   sX     ):0A55;dj>cccK*a//;d>]]]Kr   c                 \    | j         | j                                        | j        | j        dS )rG   )rH   r6   r3   rU   )r   r6   rJ   r3   rU   rI   s    r    rJ   z#PerMessageBzip2OfferAccept.__json__   s6     "0,,...2.M"&"57 7 	7r   c                 \    d| j                                         d| j        d| j        dS )rL   zPerMessageBzip2Accept(offer = rM   , compress_level = rN   )r6   rO   r3   rU   rI   s    r    rO   z#PerMessageBzip2OfferAccept.__repr__   st      mqlvll  mB  mB  mB  mB  DH  Dc  Dc  Dc  ei  ex  ex  ex  y  	yr   )r   N)r   r   r   r   r>   rE   rJ   rO   r   r   r    r
   r
      sm          -. $"- "- "- "-H  
7 
7 
7y y y y yr   r
   c                   :    e Zd ZdZed             Zd Zd Zd ZdS )r   zG
    Set of parameters for `permessage-bzip2` responded by server.
    c                    d}d}|D ]1}t          ||                   dk    rt          d|d| j        d          ||         d         }|dk    rc	 t          |          }n##  t          d|d|d	| j        d          xY w|t          j        vrt          d|d|d	| j        d          |}|d
k    rd	 t          |          }n##  t          d|d|d	| j        d          xY w|t          j        vrt          d|d|d	| j        d          |}t          d|d| j        d           | ||          }|S )aa  
        Parses a WebSocket extension response for `permessage-bzip2` 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.PerMessageBzip2Response`.
        :rtype: obj
        r   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   )r0   r1   r&   r*   r4   r5   responses          r    r7   zPerMessageBzip2Response.parse   s[    %&!$%! 	q 	qA6!9~~!!ihihihiknk}k}k} ~)A,C///Rc((CCR#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R2TTT#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R03--111Rc((CCR#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R2TTT#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R03--  iYZYZYZ\_\n\n\n oppp3002 2s   A## B<C C,c                 "    || _         || _        d S Nr&   r*   )r=   r&   r*   s      r    r>   z PerMessageBzip2Response.__init__,  s     *C&)B&&&r   c                 ,    | j         | j        | j        dS )rG   )rH   r&   r*   )r   r&   r*   rI   s    r    rJ   z PerMessageBzip2Response.__json__2  s(     "0-1-K-1-KM M 	Mr   c                 (    d| j         d| j        dS )rL   z4PerMessageBzip2Response(client_max_compress_level = , server_max_compress_level = rN   r_   rI   s    r    rO   z PerMessageBzip2Response.__repr__=  sH      mq  mK  mK  mK  MQ  Mk  Mk  Mk  l  	lr   N)	r   r   r   r   rP   r7   r>   rJ   rO   r   r   r    r   r      sr          - - [-^C C C	M 	M 	Ml l l l lr   r   c                   (    e Zd ZdZ	 ddZd Zd ZdS )r   zn
    Set of parameters with which to accept an `permessage-bzip2` response
    from a server by a client.
    Nc                 $   t          |t                    st          dt          |          z            || _        |K|| j        vrt          d|d| j                  |j        dk    r||j        k    rt          d|z            || _        dS )a@  

        :param response: The response being accepted.
        :type response: Instance of :class:`autobahn.compress.PerMessageBzip2Response`.
        :param compress_level: Override client ("client-to-server direction") compress level (this must be compatible with response).
        :type compress_level: int
        zinvalid type %s for responseNr9   rS   r   zJinvalid value %s for compress_level - server requested lower maximum value)rT   r   r.   r;   r\   r   r&   rU   )r=   r\   rU   s      r    r>   z&PerMessageBzip2ResponseAccept.__init__M  s     ($;<< 	M:T(^^KLLL %T%KKKiaoaoaoqu  rX  rX  !Y  Z  Z  Z1Q66>HLn;n;n lo} }~~~,r   c                 P    | j         | j                                        | j        dS )rG   )rH   r\   rU   )r   r\   rJ   rU   rI   s    r    rJ   z&PerMessageBzip2ResponseAccept.__json__e  s0     "0 M2244"&"57 7 	7r   c                 L    d| j                                         d| j        dS )rL   z)PerMessageBzip2ResponseAccept(response = rY   rN   )r\   rO   rU   rI   s    r    rO   z&PerMessageBzip2ResponseAccept.__repr__p  sD      W[VcVlVlVnVnVnVnpt  qD  qD  qD  E  	Er   r^   )r   r   r   r   r>   rJ   rO   r   r   r    r   r   G  sZ          !%- - - -0	7 	7 	7E E E E Er   r   c                   x    e Zd ZdZdZed             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd ZdS )r   z;
    `permessage-bzip2` WebSocket extension processor.
    r   c                 d     | ||j         j        |j        |j        n|j         j                  }|S r^   )r\   r*   rU   r&   r0   	is_serveracceptpmces       r    create_from_response_acceptz+PerMessageBzip2.create_from_response_accept  s@    s9?<,2,A,M6((SYSbS|~ ~ r   c                 Z     | ||j         |j         n|j        j        |j                  }|S r^   )rU   r6   r3   ri   s       r    create_from_offer_acceptz(PerMessageBzip2.create_from_offer_accept  s<    s9,2,A,M6((SYS_Sz46 6 r   c                     || _         d | _        d | _        |dk    r|n| j        | _        |dk    r|n| j        | _        d S )Nr   )	_isServer_compressor_decompressorDEFAULT_COMPRESS_LEVELr*   r&   )r=   rj   r*   r&   s       r    r>   zPerMessageBzip2.__init__  sc     #!F_cdFdFd)B)Bjn  kF&F_cdFdFd)B)Bjn  kF&&&r   c                 8    | j         | j        | j        | j        dS )N)rH   isServerr*   r&   )r   rq   r*   r&   rI   s    r    rJ   zPerMessageBzip2.__json__  s+    !0 N-1-K-1-KM M 	Mr   c                 8    d| j         d| j        d| j        dS )NzPerMessageBzip2(isServer = rb   z, client_max_compress_level = rN   )rq   r*   r&   rI   s    r    rO   zPerMessageBzip2.__repr__  s`     sw  tB  tB  tB  DH  Db  Db  Db  dh  dB  dB  dB  C  	Cr   c                     | j         r)| j         t          j        | j                  | _        d S d S | j         t          j        | j                  | _        d S d S r^   )rq   rr   bz2BZ2Compressorr*   r&   rI   s    r    start_compress_messagez&PerMessageBzip2.start_compress_message  si    > 	U'#&#4T5S#T#T    (' '#&#4T5S#T#T    ('r   c                 6    | j                             |          S r^   )rr   compressr=   datas     r    compress_message_dataz%PerMessageBzip2.compress_message_data  s    ((...r   c                 F    | j                                         }d | _         |S r^   )rr   flushr~   s     r    end_compress_messagez$PerMessageBzip2.end_compress_message  s%    %%''  r   c                 H    | j         t          j                    | _         d S d S r^   )rs   ry   BZ2DecompressorrI   s    r    start_decompress_messagez(PerMessageBzip2.start_decompress_message  s*    %!$!4!6!6D &%r   c                 6    | j                             |          S r^   )rs   
decompressr~   s     r    decompress_message_dataz'PerMessageBzip2.decompress_message_data  s    !,,T222r   c                     d | _         d S r^   )rs   rI   s    r    end_decompress_messagez&PerMessageBzip2.end_decompress_message  s    !r   N)r   r   r   r   rt   rP   rm   ro   r>   rJ   rO   r{   r   r   r   r   r   r   r   r    r   r   z  s            [   [	F 	F 	FM M MC C CU U U/ / /  7 7 73 3 3" " " " "r   r   )ry    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr   r	   r
   r   r   r   r   r   r    <module>r      s  6 


                 6    ik ik ik ik ik24H ik ik ikXKy Ky Ky Ky Ky!>@T Ky Ky Ky\Ml Ml Ml Ml Ml8:N Ml Ml Ml`0E 0E 0E 0E 0E$DFZ 0E 0E 0EfD" D" D" D" D"(*> D" D" D" D" D"r   