
     f+                         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          Z G 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                   d   e Zd ZU eed<   defdZdeeef         fdZdede	eeef                  fdZ
deddfdZd	eeef         d
edededeeef         f
dZd	eeef         dedeeef         fdZd	eeef         dedeeedf         fdZd	eeef         d
ededededeeef         fdZdS )	Extensionnamereturnc                     dS NF selfs    U/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/wsproto/extensions.pyenabledzExtension.enabled   s    u    c                     d S Nr   r   s    r   offerzExtension.offer       r   r   c                     d S r   r   r   r   s     r   acceptzExtension.accept   r   r   Nc                     d S r   r   r   s     r   finalizezExtension.finalize   r   r   protoopcodersvpayload_lengthc                 $    t          ddd          S r   )r   )r   r!   r"   r#   r$   s        r   frame_inbound_headerzExtension.frame_inbound_header   s     ueU+++r   datac                     |S r   r   r   r!   r'   s      r   frame_inbound_payload_dataz$Extension.frame_inbound_payload_data&   s	     r   finc                     d S r   r   )r   r!   r+   s      r   frame_inbound_completez Extension.frame_inbound_complete+   s	     	r   c                 
    ||fS r   r   )r   r!   r"   r#   r'   r+   s         r   frame_outboundzExtension.frame_outbound0   s     T{r   )__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      s        
III    uT3Y'    C HU49-=$>    c d    ,\=01, , 	,
 , 
{G#	$, , , ,<67?D	uk!	"   
<67>B	uk4'	(   
\=01  	
   
w~	     r   r   c                   x   e Zd ZdZdZdZ	 	 	 	 d#dedee         dedee         d	df
d
Z	e
d	efd            Zej        ded	dfd            Ze
d	efd            Zej        ded	dfd            Zded	efdZd	efdZd	eeef         fdZded	dfdZded	eee         ee         f         fdZded	eedef         fdZdeeef         dededed	eeef         f
dZdeeef         ded	eeef         fdZdeeef         ded	eeedf         fd Zdeeef         dedededed	eeef         fd!Z d	efd"Z!dS )$PerMessageDeflatezpermessage-deflate   FNclient_no_context_takeoverclient_max_window_bitsserver_no_context_takeoverserver_max_window_bitsr   c                     || _         || _        | j        | _        | j        | _        ||| _        ||| _        d | _        d | _	        d | _
        d | _        d| _        d S r   )r;   r=   DEFAULT_CLIENT_MAX_WINDOW_BITS_client_max_window_bitsDEFAULT_SERVER_MAX_WINDOW_BITS_server_max_window_bitsr<   r>   _compressor_decompressor_inbound_is_compressible_inbound_compressed_enabled)r   r;   r<   r=   r>   s        r   __init__zPerMessageDeflate.__init__A   st     +E'*D''+'J$'+'J$!-*@D'!-*@D'599=8<% 48 r   c                     | j         S r   )rA   r   s    r   r<   z(PerMessageDeflate.client_max_window_bits\       ++r   valuec                 J    |dk     s|dk    rt          d          || _        d S N	   r:   z.Window size must be between 9 and 15 inclusive)
ValueErrorrA   r   rL   s     r   r<   z(PerMessageDeflate.client_max_window_bits`   0    199

MNNN',$$$r   c                     | j         S r   )rC   r   s    r   r>   z(PerMessageDeflate.server_max_window_bitsf   rK   r   c                 J    |dk     s|dk    rt          d          || _        d S rN   )rP   rC   rQ   s     r   r>   z(PerMessageDeflate.server_max_window_bitsj   rR   r   r"   c                 L    |t           j        t           j        t           j        fv S r   )r
   TEXTBINARYCONTINUATION)r   r"   s     r   _compressible_opcodez&PerMessageDeflate._compressible_opcodep   s    &+v}f6IJJJr   c                     | j         S r   )rH   r   s    r   r   zPerMessageDeflate.enableds   s
    }r   c                     d| j         z  d| j        z  g}| j        r|                    d           | j        r|                    d           d                    |          S )Nclient_max_window_bits=%dserver_max_window_bits=%dr;   r=   ; )r<   r>   r;   appendr=   join)r   
parameterss     r   r   zPerMessageDeflate.offerv   ss    '$*EE'$*EE


 * 	<:;;;* 	<:;;;yy$$$r   r   c                 6   d |                     d          D             }|dd          D ]}|                    d          rd| _        |                    d          rd| _        <|                    d          rAt	          |                     dd          d                                                   | _        |                    d	          r@t	          |                     dd          d                                                   | _        d| _        d S )
Nc                 6    g | ]}|                                 S r   strip.0bs     r   
<listcomp>z.PerMessageDeflate.finalize.<locals>.<listcomp>   s     444a		444r   ;r   r;   Tr=   r<   =r>   )	split
startswithr;   r=   r6   re   r<   r>   rH   )r   r   bitsbits       r   r    zPerMessageDeflate.finalize   s   445;;s#3#34448 	P 	PC~~:;; P26// <== P26// 899 P.1#))C2C2CA2F2L2L2N2N.O.O++ 899 P.1#))C2C2CA2F2L2L2N2N.O.O+r   paramsc                 P   d }d }d |                     d          D             }|dd          D ]}|                    d          rd| _        |                    d          rd| _        <|                    d          rHd|v r<t	          |                     dd          d                                                   }| j        }|                    d	          rGd|v r<t	          |                     dd          d                                                   }| j        }||fS )
Nc                 6    g | ]}|                                 S r   rd   rf   s     r   ri   z3PerMessageDeflate._parse_params.<locals>.<listcomp>   s     555a		555r   rj   r   r;   Tr=   r<   rk   r>   )rl   rm   r;   r=   r6   re   r<   r>   )r   rp   r<   r>   rn   ro   s         r   _parse_paramszPerMessageDeflate._parse_params   sH   !%!%556<<#4#45558 	I 	IC~~:;; I26// <== I26// 899 	I#::-031B1B11E1K1K1M1M-N-N**-1-H** 899 I#::-031B1B11E1K1K1M1M-N-N**-1-H*%'===r   c                    |                      |          \  }}g }| j        r|                    d           | j        r|                    d           	 ||                    d|z             || _        ||                    d|z             || _        d| _        d                    |          S # t          $ r Y d S w xY w)Nr;   r=   r\   r]   Tr^   )	rs   r;   r_   r=   r<   r>   rH   r`   rP   )r   r   r<   r>   ra   s        r   r   zPerMessageDeflate.accept   s    9=9K9KE9R9R6 6
* 	<:;;;* 	<:;;;	)%1!!"=@V"VWWW.D+%1!!"=@V"VWWW.D+ !DM99Z(((	  	 	 	44	s   AB2 2
C ?C r!   r#   r$   c                    |j         r |                                rt          j        S |j         r|t          j        u rt          j        S |                     |          | _        | j        `|j         | _        | j        rM| j        sJ |j	        r| j
        }n| j        }| j        't          j        t          |                     | _        t!          ddd          S )NTF)rsv1	iscontrolr   PROTOCOL_ERRORr
   rX   rY   rF   rG   clientr>   r<   rE   zlibdecompressobjr6   r   )r   r!   r"   r#   r$   rn   s         r   r&   z&PerMessageDeflate.frame_inbound_header   s     8 	.((** 	.--8 	.&"555--(,(A(A&(I(I%#+'*xD$' H4444< 76DD6D%-)-);SYYJ)G)GD&tUE***r   r'   c                     | j         r| j        s|S | j        J 	 | j                            t	          |                    S # t
          j        $ r t          j        cY S w xY wr   )	rG   rF   rE   
decompressr7   rz   errorr   INVALID_FRAME_PAYLOAD_DATAr)   s      r   r*   z,PerMessageDeflate.frame_inbound_payload_data   s{     ' 	t/L 	K!---	:%00t===z 	: 	: 	:9999	:s   &A A A r+   c                 ^   |sd S | j         s	d | _        d S | j        s	d | _        d S | j        J 	 | j                            d          }|| j                                        z  }n!# t
          j        $ r t          j        cY S w xY w|j	        r| j
        }n| j        }|rd | _        d | _        |S )Ns     )rF   rG   rE   r}   flushrz   r~   r   r   ry   r=   r;   )r   r!   r+   r'   no_context_takeovers        r   r-   z(PerMessageDeflate.frame_inbound_complete   s      	4, 	'+D$4' 	'+D$4!---	:%001DEEDD&,,...DDz 	: 	: 	:9999	: < 	B"&"A"&"A 	&!%D#' s   6A& &BBc                 H   |                      |          s||fS |t          j        urt          dg|dd          R  }| j        c|t          j        usJ |j        r| j        }n| j        }t          j	        t          j
        t          j        t          |                     | _        | j                            t          |                    }|rP|| j                            t          j                  z  }|d d         }|j        r| j        }n| j        }|rd | _        ||fS )NTr   )rY   r
   rX   r   rD   ry   r<   r>   rz   compressobjZ_DEFAULT_COMPRESSIONDEFLATEDr6   compressr7   r   Z_SYNC_FLUSHr;   r=   )r   r!   r"   r#   r'   r+   rn   r   s           r   r/   z PerMessageDeflate.frame_outbound  s<    ((00 	;,,,$)QRR)))C#!44444| 322#/*DMCII:   D ((t55 
	(D$**4+<===D9D| F&*&E##&*&E#" (#' T{r   c                 (   d| j         z  g}| j        r|                    d           |                    d| j        z             | j        r|                    d           d                    | j        j        d                    |                    S )Nr\   r;   r]   r=   z<{} {}>r^   )	r<   r;   r_   r>   r=   format	__class__r0   r`   )r   descrs     r   __repr__zPerMessageDeflate.__repr__,  s    ,t/JJK* 	7LL5666043NNOOO* 	7LL5666 759I9IJJJr   )FNFN)"r0   r1   r2   r   r@   rB   r5   r   r6   rI   propertyr<   setterr>   r
   rY   r   r   r3   r   r    r   rs   r   r   r	   r   r   r&   r7   r*   r-   r/   r   r   r   r   r9   r9   ;   s~       D%'"%'" ,104+004 $( !) %)	
 !) 
   6 , , , , X, "-C -D - - - #"-
 , , , , X, "-C -D - - - #"-
K6 Kd K K K K    %uT3Y' % % % %c d    >C >E(3-#2N,O > > > >.)C )E$c/$: ) ) ) ),+\=01+ + 	+
 + 
{G#	$+ + + +6
:<67
:?D
:	uk!	"
: 
: 
: 
:<67>B	uk4'	(   >&\=01& & 	&
 & & 
w~	& & & &PK# K K K K K Kr   r9   )__doc__rz   typingr   r   r   frame_protocolr   r   r	   r
   r   r   r9   r   SUPPORTED_EXTENSIONSr   r   r   <module>r      s      ) ) ) ) ) ) ) ) ) ) U U U U U U U U U U U U U U* * * * * * * *ZyK yK yK yK yK	 yK yK yK@ *.0AB   r   