
    hB                         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y)    N)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageSnappyMixinPerMessageSnappyOfferPerMessageSnappyOfferAcceptPerMessageSnappyResponsePerMessageSnappyResponseAcceptPerMessageSnappyc                       e Zd ZdZdZy)r   z)
    Mixin class for this extension.
    zpermessage-snappyN)__name__
__module____qualname____doc__EXTENSION_NAME     ^/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/websocket/compress_snappy.pyr   r   -   s     )Nr   r   c                   >    e Zd ZdZed        Z	 	 ddZd Zd Zd Z	y)	r	   zv
    Set of extension parameters for `permessage-snappy` WebSocket extension
    offered by a client to a server.
    c           
      z   d}d}|D ]  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  r&|durt        d	|d
|d| j                  d      d}c|dk(  r&|durt        d	|d
|d| j                  d      d}t        d|d| j                  d        | ||      }|S )a]  
        Parses a WebSocket extension offer for `permessage-snappy` 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.PerMessageSnappyOffer`.
        :rtype: obj
        F   ,multiple occurrence of extension parameter '' for extension ''r   client_no_context_takeoverT#illegal extension parameter value '' for parameter '' of extension 'server_no_context_takeoverillegal extension parameter 'len	Exceptionr   )clsparamsaccept_no_context_takeoverrequest_no_context_takeoverpvaloffers          r   parsezPerMessageSnappyOffer.parse>   s    &+"&+# A6!9~!hiknk}k} ~)A,C00d?#uxz{  ~A  ~P  ~P  %Q  R  R15.22d?#uxz{  ~A  ~P  ~P  %Q  R  R26/  YZ\_\n\n opp- 0 ./1r   c                     t        |      t        k7  rt        dt        |      z        || _        t        |      t        k7  rt        dt        |      z        || _        y)a0  

        :param accept_no_context_takeover: Iff true, client accepts "no context takeover" feature.
        :type accept_no_context_takeover: bool
        :param request_no_context_takeover: Iff true, client request "no context takeover" feature.
        :type request_no_context_takeover: bool
        z.invalid type %s for accept_no_context_takeover/invalid type %s for request_no_context_takeoverN)typeboolr%   r(   r)   )selfr(   r)   s      r   __init__zPerMessageSnappyOffer.__init__j   s_     *+t3LtTnOoopp*D'+,4MPTUpPqqrr+F(r   c                 b    | j                   }| j                  r|dz  }| j                  r|dz  }|S )
        Returns the WebSocket extension configuration string as sent to the server.

        :returns: PMCE configuration string.
        :rtype: str
        ; client_no_context_takeover; server_no_context_takeoverr   r(   r)   r2   pmce_strings     r   get_extension_stringz*PerMessageSnappyOffer.get_extension_string~   s=     ))**99K++99Kr   c                 J    | j                   | j                  | j                  dS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr(   r)   r8   r2   s    r   __json__zPerMessageSnappyOffer.__json__   s+     "00.2.M.M/3/O/OQ 	Q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
        z3PerMessageSnappyOffer(accept_no_context_takeover =  , request_no_context_takeover = ))r(   r)   r?   s    r   __repr__zPerMessageSnappyOffer.__repr__   s8     nr  nM  nM  OS  Oo  Oo  p  	pr   N)TF)
r   r   r   r   classmethodr-   r3   r;   r@   rE   r   r   r   r	   r	   8   s;    
 ) )X -1-2G(	Qpr   r	   c                   .    e Zd ZdZ	 	 ddZd Zd Zd Zy)r
   zl
    Set of parameters with which to accept an `permessage-snappy` offer
    from a client by a server.
    Nc                    t        |t              st        dt        |      z        || _        t        |      t
        k7  rt        dt        |      z        |r|j                  st        d|z        || _        |Et        |      t
        k7  rt        dt        |      z        |j                  r|st        d|z        || _        y)a  

        :param offer: The offer being accepted.
        :type offer: Instance of :class:`autobahn.compress.PerMessageSnappyOffer`.
        :param request_no_context_takeover: Iff true, server request "no context takeover" feature.
        :type request_no_context_takeover: bool
        :param no_context_takeover: Override server ("server-to-client direction") context takeover (this must be compatible with offer).
        :type no_context_takeover: bool
        zinvalid type %s for offerr/   zPinvalid value %s for request_no_context_takeover - feature unsupported by clientN'invalid type %s for no_context_takeoverzCinvalid value %s for no_context_takeover - client requested feature)	
isinstancer	   r%   r0   r,   r1   r(   r)   no_context_takeover)r2   r,   r)   rK   s       r   r3   z$PerMessageSnappyOfferAccept.__init__   s     %!677$u+EFF
+,4MPTUpPqqrr&u/O/On  rM  M  N  N+F(*'(D0 IDQdLe eff009L eh{ {||#6 r   c                 v    | j                   }| j                  j                  r|dz  }| j                  r|dz  }|S )r5   r7   r6   )r   r,   r)   r9   s     r   r;   z0PerMessageSnappyOfferAccept.get_extension_string   sA     ))::1199K++99Kr   c                 |    | j                   | j                  j                         | j                  | j                  dS )r=   )r>   r,   r)   rK   )r   r,   r@   r)   rK   r?   s    r   r@   z$PerMessageSnappyOfferAccept.__json__   s;     "00,,./3/O/O'+'?'?A 	Ar   c                 r    d| j                   j                         d| j                  d| j                  dS )rB   zPerMessageSnappyAccept(offer = rC   , no_context_takeover = rD   )r,   rE   r)   rK   r?   s    r   rE   z$PerMessageSnappyOfferAccept.__repr__   sZ     txs}s}  tG  tG  tI  KO  Kk  Kk  mq  mE  mE  F  	Fr   )FN)r   r   r   r   r3   r;   r@   rE   r   r   r   r
   r
      s&     .3%)!7F
AFr   r
   c                   2    e Zd ZdZed        Zd Zd Zd Zy)r   zH
    Set of parameters for `permessage-snappy` responded by server.
    c           
      z   d}d}|D ]  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  r&|durt        d	|d
|d| j                  d      d}c|dk(  r&|durt        d	|d
|d| j                  d      d}t        d|d| j                  d        | ||      }|S )ac  
        Parses a WebSocket extension response for `permessage-snappy` 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.PerMessageSnappyResponse`.
        :rtype: obj
        Fr   r   r   r   r   r   Tr   r   r    r!   r"   r#   )r&   r'   r   r!   r*   r+   responses          r   r-   zPerMessageSnappyResponse.parse   s    &+"%*"A6!9~!hiknk}k} ~)A,C00d?#uxz{  ~A  ~P  ~P  %Q  R  R15.22d?#uxz{  ~A  ~P  ~P  %Q  R  R15.  YZ\_\n\n opp- 0 113r   c                      || _         || _        y Nr   r!   )r2   r   r!   s      r   r3   z!PerMessageSnappyResponse.__init__  s     +E'*D'r   c                 J    | j                   | j                  | j                  dS )r=   )r>   r   r!   )r   r   r!   r?   s    r   r@   z!PerMessageSnappyResponse.__json__#  s+     "00.2.M.M.2.M.MO 	Or   c                 <    d| j                   d| j                  dS )rB   z6PerMessageSnappyResponse(client_no_context_takeover = , server_no_context_takeover = rD   rU   r?   s    r   rE   z!PerMessageSnappyResponse.__repr__.  s8     pt  pO  pO  QU  Qp  Qp  q  	qr   N)	r   r   r   r   rF   r-   r3   r@   rE   r   r   r   r   r      s.     ' 'RE	Oqr   r   c                   &    e Zd ZdZ	 ddZd Zd Zy)r   zo
    Set of parameters with which to accept an `permessage-snappy` 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        || _        y)aN  

        :param response: The response being accepted.
        :type response: Instance of :class:`autobahn.compress.PerMessageSnappyResponse`.
        :param no_context_takeover: Override client ("client-to-server direction") context takeover (this must be compatible with response).
        :type no_context_takeover: bool
        zinvalid type %s for responseNrI   zCinvalid value %s for no_context_takeover - server requested feature)rJ   r   r%   r0   rR   r1   r   rK   )r2   rR   rK   s      r   r3   z'PerMessageSnappyResponseAccept.__init__>  s|     ($<=:T(^KLL *'(D0 IDQdLe eff22;N eh{ {||#6 r   c                 f    | j                   | j                  j                         | j                  dS )r=   )r>   rR   rK   )r   rR   r@   rK   r?   s    r   r@   z'PerMessageSnappyResponseAccept.__json__V  s2     "00 MM224'+'?'?A 	Ar   c                 X    d| j                   j                         d| j                  dS )rB   z*PerMessageSnappyResponseAccept(response = rO   rD   )rR   rE   rK   r?   s    r   rE   z'PerMessageSnappyResponseAccept.__repr__a  s5     ]a\i\i\r\r\tvz  wO  wO  P  	Pr   rT   )r   r   r   r   r3   r@   rE   r   r   r   r   r   8  s     &*70	APr   r   c                   f    e 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y)r   z<
    `permessage-snappy` WebSocket extension processor.
    c                      | ||j                   j                  |j                  |j                        }|S |j                   j                        }|S rT   )rR   r!   rK   r   r&   	is_serveracceptpmces       r   create_from_response_acceptz,PerMessageSnappy.create_from_response_acceptp  sa    9??==171K1K1W6--I  ^d]l]l  ^H  ^HI r   c                      | ||j                   |j                   n|j                  j                  |j                        }|S rT   )rK   r,   r)   r_   s       r   create_from_offer_acceptz)PerMessageSnappy.create_from_offer_acceptw  sI    9171K1K1W6--]c]i]i  ^F  ^F557 r   c                 J    || _         || _        || _        d | _        d | _        y rT   )
_is_serverr!   r   _compressor_decompressor)r2   r`   r!   r   s       r   r3   zPerMessageSnappy.__init__~  s+     $*D'*D'!r   c                 J    | j                   | j                  | j                  dS )N)r>   r!   r   )r   r!   r   r?   s    r   r@   zPerMessageSnappy.__json__  s)    !00.2.M.M.2.M.MO 	Or   c                 V    d| j                   d| j                  d| j                  dS )NzPerMessageSnappy(is_server = rX   z, client_no_context_takeover = rD   )rg   r!   r   r?   s    r   rE   zPerMessageSnappy.__repr__  sI    w{  xG  xG  IM  Ih  Ih  jn  jI  jI  J  	Jr   c                     | j                   r3| j                  | j                  rt        j                         | _        y y | j                  | j
                  rt        j                         | _        y y rT   )rg   rh   r!   snappyStreamCompressorr   r?   s    r   start_compress_messagez'PerMessageSnappy.start_compress_message  sa    ??'4+J+J#)#:#:#<  ,K '4+J+J#)#:#:#<  ,Kr   c                 8    | j                   j                  |      S rT   )rh   	add_chunkr2   datas     r   compress_message_dataz&PerMessageSnappy.compress_message_data  s    ))$//r   c                      y)Nr   r   r?   s    r   end_compress_messagez%PerMessageSnappy.end_compress_message  s    r   c                     | j                   r3| j                  | j                  rt        j                         | _        y y | j                  | j
                  rt        j                         | _        y y rT   )rg   ri   r   rm   StreamDecompressorr!   r?   s    r   start_decompress_messagez)PerMessageSnappy.start_decompress_message  sa    ??!!)T-L-L%+%>%>%@" .M !!)T-L-L%+%>%>%@" .Mr   c                 8    | j                   j                  |      S rT   )ri   
decompressrr   s     r   decompress_message_dataz(PerMessageSnappy.decompress_message_data  s    !!,,T22r   c                      y rT   r   r?   s    r   end_decompress_messagez'PerMessageSnappy.end_decompress_message  s    r   N)r   r   r   r   rF   rc   re   r3   r@   rE   ro   rt   rv   ry   r|   r~   r   r   r   r   r   k  s_        	"O
J=0A3r   r   )rm    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr   r	   r
   r   r   r   r   r   r   <module>r      s   6  F fp35J fpRJF"?AV JFZGq9;P GqT0P%EG\ 0Pf@)+@ @r   