a
    ê ’hË+  ã                   @   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< edœdd„Zeeef dœdd„Zee	eeef  dœdd	„Z
ed
dœdd„Zeeef eeeeeef dœdd„Zeeef eeeef dœdd„Zeeef eeeed
f dœdd„Zeeef eeeeeeef dœdd„Zd
S )Ú	ExtensionÚname©Úreturnc                 C   s   dS ©NF© ©Úselfr   r   úW/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/wsproto/extensions.pyÚenabled   s    zExtension.enabledc                 C   s   d S ©Nr   r   r   r   r   Úoffer   s    zExtension.offer©r   r   c                 C   s   d S r   r   ©r   r   r   r   r   Úaccept   s    zExtension.acceptNc                 C   s   d S r   r   r   r   r   r   Úfinalize   s    zExtension.finalize©ÚprotoÚopcodeÚrsvÚpayload_lengthr   c                 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©r   Údatar   c                 C   s   |S r   r   ©r   r   r"   r   r   r   Úframe_inbound_payload_data&   s    z$Extension.frame_inbound_payload_data©r   Úfinr   c                 C   s   d S r   r   )r   r   r&   r   r   r   Úframe_inbound_complete+   s    z Extension.frame_inbound_complete©r   r   r   r"   r&   r   c                 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      s0   


ú

þþ

ùr   c                   @   s¨  e Zd ZdZdZdZd-eee eee ddœdd„Z	e
edœd	d
„ƒZejeddœdd
„ƒZe
edœdd„ƒZejeddœdd„ƒZeedœdd„Zedœdd„Zeeef dœdd„Zeddœdd„Zeeee ee f dœdd„Zeeedef dœdd„Zeeef eeeeeef dœd d!„Zeeef eeeef d"œd#d$„Zeeef eeeedf d%œd&d'„Zeeef eeeeeeef d(œd)d*„Z edœd+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                 C   sZ   || _ || _| j| _| j| _|d ur*|| _|d ur8|| _d | _d | _	d | _
d | _d| _d S r   )r4   r6   ÚDEFAULT_CLIENT_MAX_WINDOW_BITSÚ_client_max_window_bitsÚDEFAULT_SERVER_MAX_WINDOW_BITSÚ_server_max_window_bitsr5   r7   Ú_compressorÚ_decompressorÚ_inbound_is_compressibleÚ_inbound_compressedÚ_enabled)r   r4   r5   r6   r7   r   r   r   Ú__init__A   s    zPerMessageDeflate.__init__r   c                 C   s   | j S r   )r9   r   r   r   r   r5   \   s    z(PerMessageDeflate.client_max_window_bits)Úvaluer   c                 C   s"   |dk s|dkrt dƒ‚|| _d S ©Né	   r3   z.Window size must be between 9 and 15 inclusive)Ú
ValueErrorr9   ©r   rB   r   r   r   r5   `   s    c                 C   s   | j S r   )r;   r   r   r   r   r7   f   s    z(PerMessageDeflate.server_max_window_bitsc                 C   s"   |dk s|dkrt dƒ‚|| _d S rC   )rE   r;   rF   r   r   r   r7   j   s    )r   r   c                 C   s   |t jt jt jfv S r   )r	   ZTEXTZBINARYÚCONTINUATION)r   r   r   r   r   Ú_compressible_opcodep   s    z&PerMessageDeflate._compressible_opcodec                 C   s   | j S r   )r@   r   r   r   r   r   s   s    zPerMessageDeflate.enabledc                 C   s>   d| j  d| j g}| jr$| d¡ | jr4| d¡ d |¡S )Núclient_max_window_bits=%dúserver_max_window_bits=%dr4   r6   ú; )r5   r7   r4   Úappendr6   Újoin)r   Ú
parametersr   r   r   r   v   s    þ

zPerMessageDeflate.offerr   c                 C   sž   dd„ |  d¡D ƒ}|dd … D ]r}| d¡r6d| _q | d¡rHd| _q | d¡rnt|  d	d¡d  ¡ ƒ| _q | d
¡r t|  d	d¡d  ¡ ƒ| _q d| _d S )Nc                 S   s   g | ]}|  ¡ ‘qS r   ©Ústrip©Ú.0Úbr   r   r   Ú
<listcomp>„   ó    z.PerMessageDeflate.finalize.<locals>.<listcomp>ú;r   r4   Tr6   r5   ú=r7   )	ÚsplitÚ
startswithr4   r6   r0   rP   r5   r7   r@   )r   r   ÚbitsÚbitr   r   r   r   ƒ   s    



zPerMessageDeflate.finalize)Úparamsr   c                 C   sÀ   d }d }dd„ |  d¡D ƒ}|dd … D ]Ž}| d¡r>d| _q(| d¡rPd| _q(| d¡r„d	|v r|t|  d	d¡d  ¡ ƒ}q¶| j}q(| d
¡r(d	|v r°t|  d	d¡d  ¡ ƒ}q(| j}q(||fS )Nc                 S   s   g | ]}|  ¡ ‘qS r   rO   rQ   r   r   r   rT   •   rU   z3PerMessageDeflate._parse_params.<locals>.<listcomp>rV   r   r4   Tr6   r5   rW   r7   )rX   rY   r4   r6   r0   rP   r5   r7   )r   r\   r5   r7   rZ   r[   r   r   r   Ú_parse_params‘   s"    



zPerMessageDeflate._parse_paramsc                 C   s˜   |   |¡\}}g }| jr"| d¡ | jr2| d¡ z<|d urP| d| ¡ || _|d url| d| ¡ || _W n ty‚   Y d S 0 d| _d |¡S d S )Nr4   r6   rI   rJ   TrK   )	r]   r4   rL   r6   r5   r7   rE   r@   rM   )r   r   r5   r7   rN   r   r   r   r   ¨   s"    


zPerMessageDeflate.acceptr   c                 C   s”   |j r| ¡ rtjS |j r*|tju r*tjS |  |¡| _| jd u rˆ|j | _| jrˆ| jsXJ ‚|j	rf| j
}n| j}| jd u rˆt t|ƒ ¡| _tdddƒS )NTF)Zrsv1Z	iscontrolr   ZPROTOCOL_ERRORr	   rG   rH   r>   r?   Úclientr7   r5   r=   ÚzlibÚdecompressobjr0   r
   )r   r   r   r   r   rZ   r   r   r   r    ¾   s    


z&PerMessageDeflate.frame_inbound_headerr!   c                 C   sP   | j r| js|S | jd usJ ‚z| j t|ƒ¡W S  tjyJ   tj Y S 0 d S r   )	r?   r>   r=   Ú
decompressr1   r_   Ú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s6J ‚z| j d¡}|| j ¡ 7 }W n tjyn   tj Y S 0 |j	r~| j
}n| j}|rŽd | _d | _|S )Ns     ÿÿ)r>   r?   r=   ra   Úflushr_   rb   r   rc   r^   r6   r4   )r   r   r&   r"   Úno_context_takeoverr   r   r   r'   å   s*    z(PerMessageDeflate.frame_inbound_completer(   c                 C   sÒ   |   |¡s||fS |tjur4tdg|dd … ¢R Ž }| jd u rz|tjusLJ ‚|jrZ| j}n| j}t 	tj
tjt|ƒ ¡| _| j t|ƒ¡}|rÊ|| j tj¡7 }|d d… }|jrº| j}n| j}|rÊd | _||fS )NTr   éüÿÿÿ)rH   r	   rG   r
   r<   r^   r5   r7   r_   ÚcompressobjÚZ_DEFAULT_COMPRESSIONÚDEFLATEDr0   Úcompressr1   rd   ÚZ_SYNC_FLUSHr4   r6   )r   r   r   r   r"   r&   rZ   re   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 )NrI   r4   rJ   r6   z<{} {}>rK   )	r5   r4   rL   r7   r6   ÚformatÚ	__class__r*   rM   )r   Údescrr   r   r   Ú__repr__,  s    

zPerMessageDeflate.__repr__)FNFN)"r*   r+   r,   r   r8   r:   r/   r   r0   rA   Úpropertyr5   Úsetterr7   r	   rH   r   r   r-   r   r   r   r]   r   r   r   r
   r   r    r1   r$   r'   r)   ro   r   r   r   r   r2   ;   s`       ûú 

ú
þþ!

ù(r2   )Ú__doc__r_   Útypingr   r   r   Zframe_protocolr   r   r   r	   r
   r   r2   r   ÚSUPPORTED_EXTENSIONSr   r   r   r   Ú<module>   s   -  