
    tf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dS )    N)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageSnappyMixinPerMessageSnappyOfferPerMessageSnappyOfferAcceptPerMessageSnappyResponsePerMessageSnappyResponseAcceptPerMessageSnappyc                       e Zd ZdZdZdS )r   z)
    Mixin class for this extension.
    zpermessage-snappyN)__name__
__module____qualname____doc__EXTENSION_NAME     a/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/websocket/compress_snappy.pyr   r   -   s%          )N 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	   zv
    Set of extension parameters for `permessage-snappy` 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    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    &+"&+#  	q 	qA6!9~~!!ihihihiknk}k}k} ~)A,C000d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R15..222d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R26//  iYZYZYZ\_\n\n\n oppp./1 1r   TFc                     t          |          t          k    rt          dt          |          z            || _        t          |          t          k    rt          dt          |          z            || _        dS )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3LtTnOoOooppp*D'+,,44MPTUpPqPqqrrr+F(((r   c                 D    | 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        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.2.M/3/OQ 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__   sH      nr  nM  nM  nM  OS  Oo  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 G G G(  	Q 	Q 	Qp p p p pr   r	   c                   0    e Zd ZdZ	 	 ddZd Zd Zd ZdS )	r
   zl
    Set of parameters with which to accept an `permessage-snappy` offer
    from a client by a server.
    FNc                    t          |t                    st          dt          |          z            || _        t          |          t
          k    rt          dt          |          z            |r|j        st          d|z            || _        |Rt          |          t
          k    rt          dt          |          z            |j        r|st          d|z            || _        dS )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 	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(*'((D00 IDQdLeLe efff0 }9L } eh{ {|||#6   r   c                 N    | 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   s@     ):1 	:99K+ 	:99Kr   c                 \    | j         | j                                        | j        | j        dS )r=   )r>   r,   r)   rK   )r   r,   r@   r)   rK   r?   s    r   r@   z$PerMessageSnappyOfferAccept.__json__   s9     "0,,../3/O'+'?A A 	Ar   c                 \    d| 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__   s|      txs}  tG  tG  tI  tI  tI  tI  KO  Kk  Kk  Kk  mq  mE  mE  mE  F  	Fr   )FN)r   r   r   r   r3   r;   r@   rE   r   r   r   r
   r
      sp          .3%)!7 !7 !7 !7F  
A 
A 
AF F F F Fr   r
   c                   :    e Zd ZdZed             Zd Zd Zd ZdS )r   zH
    Set of parameters for `permessage-snappy` responded by 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    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    &+"%*" 	q 	qA6!9~~!!ihihihiknk}k}k} ~)A,C000d??#)uxuxuxz{z{z{  ~A  ~P  ~P  ~P  %Q  R  R  R15..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r   c                 "    || _         || _        d S Nr   r!   )r2   r   r!   s      r   r3   z!PerMessageSnappyResponse.__init__  s     +E'*D'''r   c                 ,    | j         | j        | j        dS )r=   )r>   r   r!   )r   r   r!   r?   s    r   r@   z!PerMessageSnappyResponse.__json__#  s(     "0.2.M.2.MO 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__.  sH      pt  pO  pO  pO  QU  Qp  Qp  Qp  q  	qr   N)	r   r   r   r   rF   r-   r3   r@   rE   r   r   r   r   r      sr          ' ' ['RE E E	O 	O 	Oq q q q qr   r   c                   (    e Zd ZdZ	 ddZd Zd ZdS )r   zo
    Set of parameters with which to accept an `permessage-snappy` response
    from a server by a client.
    Nc                 2   t          |t                    st          dt          |          z            || _        |Rt          |          t
          k    rt          dt          |          z            |j        r|st          d|z            || _        dS )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     ($<== 	M:T(^^KLLL *'((D00 IDQdLeLe efff2 };N } eh{ {|||#6   r   c                 P    | j         | j                                        | j        dS )r=   )r>   rR   rK   )r   rR   r@   rK   r?   s    r   r@   z'PerMessageSnappyResponseAccept.__json__V  s3     "0 M2244'+'?A A 	Ar   c                 L    d| j                                         d| j        dS )rB   z*PerMessageSnappyResponseAccept(response = rO   rD   )rR   rE   rK   r?   s    r   rE   z'PerMessageSnappyResponseAccept.__repr__a  sD      ]a\i\r\r\t\t\t\tvz  wO  wO  wO  P  	Pr   rT   )r   r   r   r   r3   r@   rE   r   r   r   r   r   8  s]          &*7 7 7 70	A 	A 	AP P P P Pr   r   c                   t    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dS )r   z<
    `permessage-snappy` WebSocket extension processor.
    c                 d     | ||j         j        |j        |j        n|j         j                  }|S rT   )rR   r!   rK   r   r&   	is_serveracceptpmces       r   create_from_response_acceptz,PerMessageSnappy.create_from_response_acceptp  sD    s9?=171K1W6--]c]l  ^HI I r   c                 Z     | ||j         |j         n|j        j        |j                  }|S rT   )rK   r,   r)   r_   s       r   create_from_offer_acceptz)PerMessageSnappy.create_from_offer_acceptw  s@    s9171K1W6--]c]i  ^F57 7 r   c                 L    || _         || _        || _        d | _        d | _        d S rT   )
_is_serverr!   r   _compressor_decompressor)r2   r`   r!   r   s       r   r3   zPerMessageSnappy.__init__~  s1     $*D'*D'!r   c                 ,    | j         | j        | j        dS )N)r>   r!   r   )r   r!   r   r?   s    r   r@   zPerMessageSnappy.__json__  s&    !0.2.M.2.MO O 	Or   c                 8    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__  s`     w{  xG  xG  xG  IM  Ih  Ih  Ih  jn  jI  jI  jI  J  	Jr   c                     | j         r*| j        | j        rt          j                    | _        d S d S | j        | j        rt          j                    | _        d S d S rT   )rg   rh   r!   snappyStreamCompressorr   r?   s    r   start_compress_messagez'PerMessageSnappy.start_compress_message  sn    ? 	='4+J'#)#:#<#<    (' '4+J'#)#:#<#<    ('r   c                 6    | j                             |          S rT   )rh   	add_chunkr2   datas     r   compress_message_dataz&PerMessageSnappy.compress_message_data  s    ))$///r   c                     dS )Nr   r   r?   s    r   end_compress_messagez%PerMessageSnappy.end_compress_message  s    sr   c                     | j         r*| j        | j        rt          j                    | _        d S d S | j        | j        rt          j                    | _        d S d S rT   )rg   ri   r   rm   StreamDecompressorr!   r?   s    r   start_decompress_messagez)PerMessageSnappy.start_decompress_message  so    ? 	A!)T-L)%+%>%@%@""" *) !)T-L)%+%>%@%@""" *)r   c                 6    | j                             |          S rT   )ri   
decompressrr   s     r   decompress_message_dataz(PerMessageSnappy.decompress_message_data  s    !,,T222r   c                     d S 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 O O
J J J= = =0 0 0  A A A3 3 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 fp fp fp fp35J fp fp fpRJF JF JF JF JF"?AV JF JF JFZGq Gq Gq Gq Gq9;P Gq Gq GqT0P 0P 0P 0P 0P%EG\ 0P 0P 0Pf@ @ @ @ @)+@ @ @ @ @ @r   