o
    Rh+                     @   sh   d Z ddlZddlmZmZmZ ddlmZmZm	Z	m
Z
mZ G dd dZG dd	 d	eZejeiZdS )
z>
wsproto/extensions
~~~~~~~~~~~~~~~~~~

WebSocket extensions.
    N)OptionalTupleUnion   )CloseReasonFrameDecoderFrameProtocolOpcodeRsvBitsc                   @   s  e Zd ZU eed< defddZdeeef fddZdede	eeef  fdd	Z
dedd
fddZdeeef dedededeeef f
ddZdeeef dedeeef fddZdeeef dedeeed
f fddZdeeef dededededeeef fddZd
S )	Extensionnamereturnc                 C   s   dS NF selfr   r   T/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/wsproto/extensions.pyenabled      zExtension.enabledc                 C      d S Nr   r   r   r   r   offer   r   zExtension.offerr   c                 C   r   r   r   r   r   r   r   r   accept   r   zExtension.acceptNc                 C   r   r   r   r   r   r   r   finalize   r   zExtension.finalizeprotoopcodersvpayload_lengthc                 C   s   t dddS r   )r
   )r   r   r   r   r   r   r   r   frame_inbound_header   s   zExtension.frame_inbound_headerdatac                 C   s   |S r   r   r   r   r    r   r   r   frame_inbound_payload_data&      z$Extension.frame_inbound_payload_datafinc                 C   r   r   r   )r   r   r$   r   r   r   frame_inbound_complete+   r#   z Extension.frame_inbound_completec                 C   s   ||fS r   r   )r   r   r   r   r    r$   r   r   r   frame_outbound0   s   zExtension.frame_outbound)__name__
__module____qualname__str__annotations__boolr   r   r   r   r   r   r   r   r	   r
   intr   r   bytesr"   r%   r   r&   r   r   r   r   r      sX   
 


	






r   c                   @   s  e Zd ZdZdZdZ				d1dedee dedee d	df
d
dZ	e
d	efddZejded	dfddZe
d	efddZejded	dfddZded	efddZd	efddZd	eeef fddZded	dfddZded	eee ee f fddZded	eedef fd d!Zd"eeef ded#ed$ed	eeef f
d%d&Zd"eeef d'ed	eeef fd(d)Zd"eeef d*ed	eeedf fd+d,Zd"eeef ded#ed'ed*ed	eeef fd-d.Z d	efd/d0Z!dS )2PerMessageDeflatezpermessage-deflate   FNclient_no_context_takeoverclient_max_window_bitsserver_no_context_takeoverserver_max_window_bitsr   c                 C   sZ   || _ || _| j| _| j| _|d ur|| _|d ur|| _d | _d | _	d | _
d | _d| _d S r   )r1   r3   DEFAULT_CLIENT_MAX_WINDOW_BITS_client_max_window_bitsDEFAULT_SERVER_MAX_WINDOW_BITS_server_max_window_bitsr2   r4   _compressor_decompressor_inbound_is_compressible_inbound_compressed_enabled)r   r1   r2   r3   r4   r   r   r   __init__A   s   
zPerMessageDeflate.__init__c                 C      | j S r   )r6   r   r   r   r   r2   \      z(PerMessageDeflate.client_max_window_bitsvaluec                 C   "   |dk s|dkrt d|| _d S N	   r0   z.Window size must be between 9 and 15 inclusive)
ValueErrorr6   r   rA   r   r   r   r2   `      
c                 C   r?   r   )r8   r   r   r   r   r4   f   r@   z(PerMessageDeflate.server_max_window_bitsc                 C   rB   rC   )rE   r8   rF   r   r   r   r4   j   rG   r   c                 C   s   |t jt jt jfv S r   )r	   TEXTBINARYCONTINUATION)r   r   r   r   r   _compressible_opcodep   s   z&PerMessageDeflate._compressible_opcodec                 C   r?   r   )r=   r   r   r   r   r   s   s   zPerMessageDeflate.enabledc                 C   s>   d| j  d| j g}| jr|d | jr|d d|S )Nclient_max_window_bits=%dserver_max_window_bits=%dr1   r3   ; )r2   r4   r1   appendr3   join)r   
parametersr   r   r   r   v   s   


zPerMessageDeflate.offerr   c                 C   s   dd | dD }|dd  D ]9}|drd| _q|dr$d| _q|dr7t| d	dd  | _q|d
rIt| d	dd  | _qd| _d S )Nc                 S      g | ]}|  qS r   strip.0br   r   r   
<listcomp>       z.PerMessageDeflate.finalize.<locals>.<listcomp>;r   r1   Tr3   r2   =r4   )	split
startswithr1   r3   r-   rT   r2   r4   r=   )r   r   bitsbitr   r   r   r      s   




zPerMessageDeflate.finalizeparamsc                 C   s   d }d }dd | dD }|dd  D ]G}|drd| _q|dr(d| _q|drBd	|v r>t| d	dd  }q| j}q|d
r[d	|v rXt| d	dd  }q| j}q||fS )Nc                 S   rR   r   rS   rU   r   r   r   rX      rY   z3PerMessageDeflate._parse_params.<locals>.<listcomp>rZ   r   r1   Tr3   r2   r[   r4   )r\   r]   r1   r3   r-   rT   r2   r4   )r   r`   r2   r4   r^   r_   r   r   r   _parse_params   s$   



zPerMessageDeflate._parse_paramsc                 C   s   |  |\}}g }| jr|d | jr|d z|d ur(|d|  || _|d ur6|d|  || _W n
 tyA   Y d S w d| _d|S )Nr1   r3   rL   rM   TrN   )	ra   r1   rO   r3   r2   r4   rE   r=   rP   )r   r   r2   r4   rQ   r   r   r   r      s&   


zPerMessageDeflate.acceptr   r   r   c                 C   s   |j r
| r
tjS |j r|tju rtjS | || _| jd u rD|j | _| jrD| js,J |j	r3| j
}n| j}| jd u rDtt| | _tdddS )NTF)rsv1	iscontrolr   PROTOCOL_ERRORr	   rJ   rK   r;   r<   clientr4   r2   r:   zlibdecompressobjr-   r
   )r   r   r   r   r   r^   r   r   r   r      s   


z&PerMessageDeflate.frame_inbound_headerr    c                 C   sL   | j r| js|S | jd usJ z	| jt|W S  tjy%   tj Y S w r   )	r<   r;   r:   
decompressr.   rf   errorr   INVALID_FRAME_PAYLOAD_DATAr!   r   r   r   r"      s   
z,PerMessageDeflate.frame_inbound_payload_datar$   c                 C   s   |sd S | j sd | _d S | jsd | _d S | jd usJ z| jd}|| j 7 }W n tjy7   tj Y S w |j	r?| j
}n| j}|rGd | _d | _|S )Ns     )r;   r<   r:   rh   flushrf   ri   r   rj   re   r3   r1   )r   r   r$   r    no_context_takeoverr   r   r   r%      s,   
z(PerMessageDeflate.frame_inbound_completec                 C   s   |  |s	||fS |tjurtdg|dd  R  }| jd u r=|tjus&J |jr-| j}n| j}t	tj
tjt| | _| jt|}|re|| jtj7 }|d d }|jr]| j}n| j}|red | _||fS )NTr   )rK   r	   rJ   r
   r9   re   r2   r4   rf   compressobjZ_DEFAULT_COMPRESSIONDEFLATEDr-   compressr.   rk   Z_SYNC_FLUSHr1   r3   )r   r   r   r   r    r$   r^   rl   r   r   r   r&     s,   


z PerMessageDeflate.frame_outboundc                 C   sR   d| j  g}| jr|d |d| j  | jr|d d| jjd|S )NrL   r1   rM   r3   z<{} {}>rN   )	r2   r1   rO   r4   r3   format	__class__r'   rP   )r   descrr   r   r   __repr__,  s   

zPerMessageDeflate.__repr__)FNFN)"r'   r(   r)   r   r5   r7   r,   r   r-   r>   propertyr2   setterr4   r	   rK   r   r   r*   r   r   r   ra   r   r   r   r
   r   r   r.   r"   r%   r&   rv   r   r   r   r   r/   ;   s    
"










(r/   )__doc__rf   typingr   r   r   frame_protocolr   r   r   r	   r
   r   r/   r   SUPPORTED_EXTENSIONSr   r   r   r   <module>   s    -  