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

WebSocket extensions.
    )annotationsN)ABCabstractmethod)Optional   )CloseReasonFrameDecoderFrameProtocolOpcodeRsvBitsc                  j    e Zd ZU ded<   d!dZed"d            Zd#d
Zd$dZd%dZ	d&dZ
d'dZd(dZd S ))	Extensionstrnamereturnboolc                    dS NF selfs    =/usr/local/lib/python3.11/dist-packages/wsproto/extensions.pyenabledzExtension.enabled   s    u    
bool | strc                    d S Nr   r   s    r   offerzExtension.offer   s    r   r   bool | str | Nonec                    d S r   r   r   r   s     r   acceptzExtension.accept       r   Nonec                    d S r   r   r!   s     r   finalizezExtension.finalize   r#   r   protoFrameDecoder | FrameProtocolopcoder   rsvr   payload_lengthintCloseReason | RsvBitsc                $    t          ddd          S r   )r   )r   r'   r)   r*   r+   s        r   frame_inbound_headerzExtension.frame_inbound_header    s     ueU+++r   databytesbytes | CloseReasonc                    |S r   r   r   r'   r0   s      r   frame_inbound_payload_dataz$Extension.frame_inbound_payload_data)   s	     r   finbytes | CloseReason | Nonec                    d S r   r   )r   r'   r6   s      r   frame_inbound_completez Extension.frame_inbound_complete.   s	     	r   tuple[RsvBits, bytes]c                
    ||fS r   r   )r   r'   r)   r*   r0   r6   s         r   frame_outboundzExtension.frame_outbound3   s     T{r   Nr   r   r   r   )r   r   r   r   r   r   r   r$   
r'   r(   r)   r   r*   r   r+   r,   r   r-   r'   r(   r0   r1   r   r2   r'   r(   r6   r   r   r7   r'   r(   r)   r   r*   r   r0   r1   r6   r   r   r:   )__name__
__module____qualname____annotations__r   r   r   r"   r&   r/   r5   r9   r<   r   r   r   r   r      s         III       ^      , , , ,   
   
     r   r   c                      e Zd ZdZdZdZ	 	 	 	 d3d4dZed5d            Zej	        d6d            Zed5d            Z
e
j	        d6d            Z
d7dZd8dZd9dZd:dZd;dZd<d!Zd=d(Zd>d,Zd?d/Zd@d1ZdAd2ZdS )BPerMessageDeflatezpermessage-deflate   FNclient_no_context_takeoverr   client_max_window_bits
int | Noneserver_no_context_takeoverserver_max_window_bitsr   r$   c                    || _         || _        | j        | _        | j        | _        ||| _        ||| _        d | _        d | _	        d | _
        d | _        d| _        d S r   )rK   rN   DEFAULT_CLIENT_MAX_WINDOW_BITS_client_max_window_bitsDEFAULT_SERVER_MAX_WINDOW_BITS_server_max_window_bitsrL   rO   _compressor_decompressor_inbound_is_compressible_inbound_compressed_enabled)r   rK   rL   rN   rO   s        r   __init__zPerMessageDeflate.__init__D   st     +E'*D''+'J$'+'J$!-*@D'!-*@D'599=59% 15 r   r,   c                    | j         S r   )rR   r   s    r   rL   z(PerMessageDeflate.client_max_window_bits_       ++r   valuec                N    |dk     s|dk    rd}t          |          || _        d S N	   rJ   z.Window size must be between 9 and 15 inclusive)
ValueErrorrR   r   r]   msgs      r   rL   z(PerMessageDeflate.client_max_window_bitsc   2    199

BCS//!',$$$r   c                    | j         S r   )rT   r   s    r   rO   z(PerMessageDeflate.server_max_window_bitsj   r\   r   c                N    |dk     s|dk    rd}t          |          || _        d S r_   )ra   rT   rb   s      r   rO   z(PerMessageDeflate.server_max_window_bitsn   rd   r   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_opcodeu   s    &+v}f6IJJJr   c                    | j         S r   )rY   r   s    r   r   zPerMessageDeflate.enabledx   s
    }r   r   c                    d| j          d| j         g}| j        r|                    d           | j        r|                    d           d                    |          S )Nclient_max_window_bits=server_max_window_bits=rK   rN   ; )rL   rO   rK   appendrN   join)r   
parameterss     r   r   zPerMessageDeflate.offer{   sy    Cd&ACCCd&ACC


 * 	<:;;;* 	<:;;;yy$$$r   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   rK   TrN   rL   =rO   )	split
startswithrK   rN   r,   rw   rL   rO   rY   )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   paramstuple[int | None, int | None]c                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   rv   rx   s     r   r{   z3PerMessageDeflate._parse_params.<locals>.<listcomp>   s     555a		555r   r|   r   rK   TrN   rL   r}   rO   )r~   r   rK   rN   r,   rw   rL   rO   )r   r   rL   rO   r   r   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   bool | None | strc                   |                      |          \  }}g }| j        r|                    d           | j        r|                    d           	 ||                    d|            || _        ||                    d|            || _        d| _        d                    |          S # t          $ r Y d S w xY w)NrK   rN   rn   ro   Trp   )	r   rK   rq   rN   rL   rO   rY   rr   ra   )r   r   rL   rO   rs   s        r   r"   zPerMessageDeflate.accept   s    9=9K9KE9R9R6 6
* 	<:;;;* 	<:;;;	)%1!!"T<R"T"TUUU.D+%1!!"T<R"T"TUUU.D+ !DM99Z(((	  	 	 	44	s   AB2 2
C ?C r'   r(   r*   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   rj   rk   rW   rX   clientrO   rL   rV   zlibdecompressobjr,   r   )r   r'   r)   r*   r+   r   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   r0   r1   r2   c                    | j         r| j        s|S | j        J 	 | j                            t	          |                    S # t
          j        $ r t          j        cY S w xY wr   )	rX   rW   rV   
decompressr1   r   errorr   INVALID_FRAME_PAYLOAD_DATAr4   s      r   r5   z,PerMessageDeflate.frame_inbound_payload_data   s{     ' 	t/L 	K!---	:%00t===z 	: 	: 	:9999	:s   &A A A r6   r7   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     )rW   rX   rV   r   flushr   r   r   r   r   rN   rK   )r   r'   r6   r0   no_context_takeovers        r   r9   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r:   c                X   |                      |          s||fS |t          j        urt          d|d         |d                   }| 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      )rk   r   rj   r   rU   r   rL   rO   r   compressobjZ_DEFAULT_COMPRESSIONDEFLATEDr,   compressr1   r   Z_SYNC_FLUSHrK   rN   )r   r'   r)   r*   r0   r6   r   r   s           r   r<   z PerMessageDeflate.frame_outbound	  s8    ((00 	;,,,$AA//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          g}| j        r|                    d           |                    d| j                    | j        r|                    d           d                    | j        j        d                    |                    S )Nrn   rK   ro   rN   z<{} {}>rp   )	rL   rK   rq   rO   rN   format	__class__rD   rr   )r   descrs     r   __repr__zPerMessageDeflate.__repr__1  s    H4+FHHI* 	7LL5666Lt/JLLMMM* 	7LL5666 759I9IJJJr   )FNFN)
rK   r   rL   rM   rN   r   rO   rM   r   r$   )r   r,   )r]   r,   r   r$   )r)   r   r   r   r=   r>   r?   )r   r   r   r   )r   r   r   r   r@   rA   rB   rC   )r   r   )rD   rE   rF   r   rQ   rS   rZ   propertyrL   setterrO   rk   r   r   r&   r   r"   r/   r5   r9   r<   r   r   r   r   rI   rI   >   s       D%'"%'" ,1-1+0-1    6 , , , X, "- - - #"- , , , X, "- - - #"-K K K K   % % % %   > > > >.) ) ) ),+ + + +6
: 
: 
: 
:   >& & & &PK K K K K Kr   rI   )__doc__
__future__r   r   abcr   r   typingr   frame_protocolr   r	   r
   r   r   r   rI   r   SUPPORTED_EXTENSIONSr   r   r   <module>r      s     # " " " " "  # # # # # # # #       U U U U U U U U U U U U U U+ + + + + + + +\{K {K {K {K {K	 {K {K {KD *.0AB   r   