o
    >ht                     @   s   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 de
ZeG dd deeZeG d	d
 d
eeZeG dd deeZeG dd deeZG dd deeZdS )    N)public)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageDeflateMixinPerMessageDeflateOfferPerMessageDeflateOfferAcceptPerMessageDeflateResponsePerMessageDeflateResponseAcceptPerMessageDeflatec                   @   s(   e Zd ZdZdZ	 g dZ	 g dZdS )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 r$   r$   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/websocket/compress_deflate.pyr   .   s    r   c                   @   sF   e Zd ZdZedd Z				dddZd	d
 Zdd Zdd Z	dS )r	   zw
    Set of extension parameters for `permessage-deflate` WebSocket extension
    offered by a client to a server.
    c           	   	   C   st  d}d}d}d}|D ]}t || dkrtd|| jf || d }|dkrT|durQzt|}W n   td||| jf |tjvrNtd||| jf d}q
d}q
|dkri|durftd||| jf d}q
|d	krzt|}W n   td||| jf |tjvrtd||| jf |}q
|d
kr|durtd||| jf d}q
td|| jf | ||||}|S )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   Bmultiple occurrence of extension parameter '%s' for extension '%s'client_max_window_bitsKillegal extension parameter value '%s' for parameter '%s' of extension '%s'client_no_context_takeoverserver_max_window_bitsserver_no_context_takeover3illegal extension parameter '%s' for extension '%s'len	Exceptionr!   intr   r"   )	clsparamsaccept_max_window_bitsaccept_no_context_takeoverrequest_max_window_bitsrequest_no_context_takeoverpvalofferr$   r$   r%   parseL   sR   	

zPerMessageDeflateOffer.parseTFr   c                 C   s   t |tkrtdt | || _t |tkrtdt | || _t |tkr0tdt | || _|dkrE|| jvrEtd|| jf || _dS )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   Dinvalid value %s for request_max_window_bits - permissible values %sN)typeboolr/   r4   r3   r6   r"   r5   )selfr4   r3   r6   r5   r$   r$   r%   __init__   s   
zPerMessageDeflateOffer.__init__c                 C   sL   | j }| jr
|d7 }| jr|d7 }| jr|d7 }| jdkr$|d| j 7 }|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!   r4   r3   r6   r5   r?   pmce_stringr$   r$   r%   get_extension_string   s   
z+PerMessageDeflateOffer.get_extension_stringc                 C      | j | j| j| j| jdS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr4   r3   r6   r5   rE   r?   r$   r$   r%   __json__      zPerMessageDeflateOffer.__json__c                 C      d| j | j| j| jf S )
        Returns Python object representation that can be eval'ed to reconstruct the object.

        :returns: Python string representation.
        :rtype: str
        zPerMessageDeflateOffer(accept_no_context_takeover = %s, accept_max_window_bits = %s, request_no_context_takeover = %s, request_max_window_bits = %s))r4   r3   r6   r5   rL   r$   r$   r%   __repr__      zPerMessageDeflateOffer.__repr__N)TTFr   )
r   r   r   r    classmethodr:   r@   rH   rM   rQ   r$   r$   r$   r%   r	   E   s    
U
%r	   c                   @   s>   e Zd ZdZ						dddZdd Zd	d
 Zdd ZdS )r
   zm
    Set of parameters with which to accept an `permessage-deflate` offer
    from a client by a server.
    Fr   Nc                 C   sZ  t |tstdt| || _t|tkrtdt| |r)|js)td| || _|dkr>|| jvr>td|| jf |dkrK|j	sKtd| || _
|durkt|tkr`tdt| |jrk|sktd	| || _|dur|| jvrtd
|| jf |j
dkr||j
krtd| || _|dur|| jvrtd|| jf || _|| _dS )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 offerr;   zPinvalid value %s for request_no_context_takeover - feature unsupported by clientr   r<   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 feature8invalid value %s for window_bits - permissible values %szGinvalid value %s for window_bits - client requested lower maximum value6invalid value %s for mem_level - permissible values %s)
isinstancer	   r/   r=   r9   r>   r4   r6   r"   r3   r5   no_context_takeoverwindow_bitsr#   	mem_levelmax_message_size)r?   r9   r6   r5   rX   rY   rZ   r[   r$   r$   r%   r@      s<   





z%PerMessageDeflateOfferAccept.__init__c                 C   s\   | j }| jjr|d7 }| jjdkr|d| jj 7 }| jr |d7 }| jdkr,|d| j 7 }|S )rA   rC   r   rD   rB   z; client_max_window_bits=%d)r!   r9   r6   r5   rF   r$   r$   r%   rH   >  s   
z1PerMessageDeflateOfferAccept.get_extension_stringc              	   C   s*   | j | j | j| j| j| j| j| jdS )rJ   )rK   r9   r6   r5   rX   rY   rZ   r[   )	r!   r9   rM   r6   r5   rX   rY   rZ   r[   rL   r$   r$   r%   rM   P  s   z%PerMessageDeflateOfferAccept.__json__c                 C   s(   d| j  | j| j| j| j| j| jf S )rP   zPerMessageDeflateOfferAccept(offer = %s, request_no_context_takeover = %s, request_max_window_bits = %s, no_context_takeover = %s, window_bits = %s, mem_level = %s, max_message_size = %s))r9   rQ   r6   r5   rX   rY   rZ   r[   rL   r$   r$   r%   rQ   b  s   (z%PerMessageDeflateOfferAccept.__repr__)Fr   NNNN)r   r   r   r    r@   rH   rM   rQ   r$   r$   r$   r%   r
      s    
Hr
   c                   @   s4   e Zd ZdZedd Zdd Zdd Zdd	 Zd
S )r   zI
    Set of parameters for `permessage-deflate` responded by server.
    c           	   	   C   sf  d}d}d}d}|D ]}t || dkrtd|| jf || d }|dkrMzt|}W n   td||| jf |tjvrJtd||| jf |}q
|dkrb|dur_td||| jf d}q
|d	krzt|}W n   td||| jf |tjvrtd||| jf |}q
|d
kr|durtd||| jf d}q
td|| jf | ||||}|S )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)   Tr*   r+   r,   r-   )	r1   r2   r'   r)   r*   r+   r7   r8   responser$   r$   r%   r:   r  sN   

zPerMessageDeflateResponse.parsec                 C   s   || _ || _|| _|| _dS )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'   r)   r*   r+   )r?   r'   r)   r*   r+   r$   r$   r%   r@     s   
z"PerMessageDeflateResponse.__init__c                 C   rI   )rJ   )rK   r'   r)   r*   r+   )r!   r'   r)   r*   r+   rL   r$   r$   r%   rM     rN   z"PerMessageDeflateResponse.__json__c                 C   rO   )rP   zPerMessageDeflateResponse(client_max_window_bits = %s, client_no_context_takeover = %s, server_max_window_bits = %s, server_no_context_takeover = %s)r]   rL   r$   r$   r%   rQ     rR   z"PerMessageDeflateResponse.__repr__N)	r   r   r   r    rS   r:   r@   rM   rQ   r$   r$   r$   r%   r   l  s    
Cr   c                   @   s2   e Zd ZdZ				d	ddZdd Zdd ZdS )
r   zp
    Set of parameters with which to accept an `permessage-deflate` response
    from a server by a client.
    Nc                 C   s   t |tstdt| || _|dur-t|tkr"tdt| |jr-|s-td| || _|durR|| jvrBtd|| jf |j	dkrR||j	krRtd| || _
|durg|| jvrgtd|| jf || _|| _dS )	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 responseNrT   zCinvalid value %s for no_context_takeover - server requested featurerU   r   zGinvalid value %s for window_bits - server requested lower maximum valuerV   )rW   r   r/   r=   r\   r>   r)   rX   r"   r'   rY   r#   rZ   r[   )r?   r\   rX   rY   rZ   r[   r$   r$   r%   r@     s(   




z(PerMessageDeflateResponseAccept.__init__c                 C   s   | j | j | j| j| jdS )rJ   )rK   r\   rX   rY   rZ   )r!   r\   rM   rX   rY   rZ   rL   r$   r$   r%   rM     s   z(PerMessageDeflateResponseAccept.__json__c                 C   s   d| j  | j| j| jf S )rP   zjPerMessageDeflateResponseAccept(response = %s, no_context_takeover = %s, window_bits = %s, mem_level = %s))r\   rQ   rX   rY   rZ   rL   r$   r$   r%   rQ   %  s   z(PerMessageDeflateResponseAccept.__repr__)NNNN)r   r   r   r    r@   rM   rQ   r$   r$   r$   r%   r     s    
/r   c                   @   s~   e Zd ZdZejZdZedd Z	edd Z
	ddd	Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   z=
    `permessage-deflate` WebSocket extension processor.
    r   c                 C   sL   | ||j j|jd ur|jn|j j|j j|jd ur|jn|j j|j|j}|S N)	r\   r+   rX   r)   r*   rY   r'   rZ   r[   r1   	is_serveracceptpmcer$   r$   r%   create_from_response_accept7  s   	z-PerMessageDeflate.create_from_response_acceptc                 C   sH   | ||j d ur
|j n|jj|j|jd ur|jn|jj|j|j|j}|S r^   )rX   r9   r6   rY   r5   rZ   r[   r_   r$   r$   r%   create_from_offer_acceptE  s   z*PerMessageDeflate.create_from_offer_acceptNc                 C   s`   || _ || _|| _|dkr|n| j| _|dkr|n| j| _|r!|n| j| _|| _d | _	d | _
d S )Nr   )
_is_serverr+   r)   DEFAULT_WINDOW_BITSr*   r'   DEFAULT_MEM_LEVELrZ   r[   _compressor_decompressor)r?   r`   r+   r)   r*   r'   rZ   r[   r$   r$   r%   r@   Q  s   
zPerMessageDeflate.__init__c                 C   s"   | j | j| j| j| j| j| jdS )N)rK   r`   r+   r)   r*   r'   rZ   )r!   re   r+   r)   r*   r'   rZ   rL   r$   r$   r%   rM   g  s   zPerMessageDeflate.__json__c                 C   s    d| j | j| j| j| j| jf S )NzPerMessageDeflate(is_server = %s, server_no_context_takeover = %s, client_no_context_takeover = %s, server_max_window_bits = %s, client_max_window_bits = %s, mem_level = %s))re   r+   r)   r*   r'   rZ   rL   r$   r$   r%   rQ   p  s    zPerMessageDeflate.__repr__c                 C   sn   | j r| jd u s| jrttjtj| j | j| _d S d S | jd u s%| j	r5ttjtj| j
 | j| _d S d S r^   )re   rh   r+   zlibcompressobjZ_DEFAULT_COMPRESSIONDEFLATEDr*   rZ   r)   r'   rL   r$   r$   r%   start_compress_messages  s     z(PerMessageDeflate.start_compress_messagec                 C   s   | j |S r^   )rh   compressr?   datar$   r$   r%   compress_message_data~  s   z'PerMessageDeflate.compress_message_datac                 C   s   | j tj}|d d S )N)rh   flushrj   Z_SYNC_FLUSHrp   r$   r$   r%   end_compress_message  s   z&PerMessageDeflate.end_compress_messagec                 C   sV   | j r| jd u s| jrt| j | _d S d S | jd u s| jr)t| j | _d S d S r^   )re   ri   r)   rj   decompressobjr'   r+   r*   rL   r$   r$   r%   start_decompress_message  s   z*PerMessageDeflate.start_decompress_messagec                 C   s&   | j d ur| j|| j S | j|S r^   )r[   ri   
decompressrp   r$   r$   r%   decompress_message_data  s   
z)PerMessageDeflate.decompress_message_datac                 C   s   | j d d S )Ns     )ri   ry   rL   r$   r$   r%   end_decompress_message  s   z(PerMessageDeflate.end_decompress_messager^   )r   r   r   r    rj   	MAX_WBITSrf   rg   rS   rc   rd   r@   rM   rQ   rn   rr   rv   rx   rz   r{   r$   r$   r$   r%   r   0  s$    


	r   )rj   autobahn.utilr    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr   r	   r
   r   r   r   r$   r$   r$   r%   <module>   s   
 *|uM