Ë
    aQbj^  ã            	      óœ  ‡ — d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZmZ erddlmZ dd	lmZ  ed
«      D � ‡ cg c]  Š  eˆ fd„ ed
«      D «       «      ‘Œ c} Z G d„ d«      Z G d„ d«      ZdZdZdZdZdZeZdZdZdZdZ dZ!dZ"dZ# G d„ de
«      Z$ G d„ de
«      Z%e%jL                  e%jN                  e%jP                  fZ)dZ*dZ+dZ,d Z-d!Z.d"Z/d#Z0d#Z1 ejd                  d$d«      Z3 G d%„ d&e4«      Z5 G d'„ d(e«      Z6 G d)„ d*e«      Z7 G d+„ d,e«      Z8d6d-„Z9 G d.„ d/«      Z: G d0„ d1«      Z; G d2„ d3«      Z< G d4„ d5«      Z=yc c} w )7zY
wsproto/frame_protocol
~~~~~~~~~~~~~~~~~~~~~~

WebSocket frame protocol implementation.
é    )ÚannotationsN)ÚIncrementalDecoderÚgetincrementaldecoder)ÚIntEnum)ÚTYPE_CHECKINGÚ
NamedTuple)Ú	Generatoré   )Ú	Extensioné   c              3  ó(   •K  — | ]	  }|‰z  –— Œ y ­w©N© )Ú.0ÚaÚbs     €úI/var/www/html/venv/lib/python3.12/site-packages/wsproto/frame_protocol.pyú	<genexpr>r      s   øè ø€ Ò.˜a�A˜•EÑ.ùs   ƒc                  ó   — e Zd Zdd„Zdd„Zy)ÚXorMaskerSimplec                ó   — || _         y r   )Ú_masking_key)ÚselfÚmasking_keys     r   Ú__init__zXorMaskerSimple.__init__   s
   € Ø'ˆÕó    c                ó¤  — t        |«      }|rÂ|}d„ | j                  D «       \  }}}}|d d d…   j                  |«      |d d d…<   |dd d…   j                  |«      |dd d…<   |dd d…   j                  |«      |dd d…<   |dd d…   j                  |«      |dd d…<   t        |«      dz  }| j                  |d  | j                  d | z   | _        |S |S )Nc              3  ó.   K  — | ]  }t         |   –— Œ y ­wr   )Ú
_XOR_TABLE)r   Úns     r   r   z*XorMaskerSimple.process.<locals>.<genexpr>!   s   è ø€ ÒC¨Aœ* Q�-ÑCùs   ‚é   r
   é   é   )Ú	bytearrayr   Ú	translateÚlen)r   ÚdataÚ
data_arrayr   r   ÚcÚdÚkey_rotations           r   ÚprocesszXorMaskerSimple.process   s  € Ü˜‹ˆÙØˆJÙC°×1BÑ1BÔC‰JˆAˆq�!�QØ(©¨1¨™o×7Ñ7¸Ó:ˆJ‘s˜�s‰OØ)¨!¨$¨Q¨$Ñ/×9Ñ9¸!Ó<ˆJ�q�t˜!�tÑØ)¨!¨$¨Q¨$Ñ/×9Ñ9¸!Ó<ˆJ�q�t˜!�tÑØ)¨!¨$¨Q¨$Ñ/×9Ñ9¸!Ó<ˆJ�q�t˜!�tÑô ˜t›9 q™=ˆLà×!Ñ! , -Ð0°4×3DÑ3DÀ]ÀlÐ3SÑSð Ôð ÐØˆr   N)r   zbytearray | bytesÚreturnÚNone©r'   r$   r-   r$   )Ú__name__Ú
__module__Ú__qualname__r   r,   r   r   r   r   r      s   „ ó(ôr   r   c                  ó   — e Zd Zdd„Zy)ÚXorMaskerNullc                ó   — |S r   r   ©r   r'   s     r   r,   zXorMaskerNull.process3   s   € Øˆr   Nr/   )r0   r1   r2   r,   r   r   r   r4   r4   2   s   „ ôr   r4   é~   é   é}   iÿÿ  l   ÿÿÿÿ é€   é@   é    é   é   c                  ó0   — e Zd ZdZdZdZdZdZdZdZ	d
d„Z
y	)ÚOpcodez7
    RFC 6455, Section 5.2 - Base Framing Protocol
    r   r
   r"   é   é	   é
   c                ó   — t        | dz  «      S )NrA   )Úbool©r   s    r   Ú	iscontrolzOpcode.iscontrold   s   € Ü�D˜4‘KÓ Ð r   N©r-   rE   )r0   r1   r2   Ú__doc__ÚCONTINUATIONÚTEXTÚBINARYÚCLOSEÚPINGÚPONGrG   r   r   r   r@   r@   M   s6   „ ñð
 €Lð €Dð €Fð €Eð €Dð €Dô!r   r@   c                  óH   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZy)ÚCloseReasonz8
    RFC 6455, Section 7.4.1 - Defined Status Codes
    éè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  i÷  N)r0   r1   r2   rI   ÚNORMAL_CLOSUREÚ
GOING_AWAYÚPROTOCOL_ERRORÚUNSUPPORTED_DATAÚNO_STATUS_RCVDÚABNORMAL_CLOSUREÚINVALID_FRAME_PAYLOAD_DATAÚPOLICY_VIOLATIONÚMESSAGE_TOO_BIGÚMANDATORY_EXTÚINTERNAL_ERRORÚSERVICE_RESTARTÚTRY_AGAIN_LATERÚTLS_HANDSHAKE_FAILEDr   r   r   rQ   rQ   h   sn   „ ñð €Nð €Jð €Nð Ðð €Nð Ðð "&Ðð Ðð
 €Oð €Mð
 €Nð €Oð €Oð  Ñr   rQ   rR   i·  i¸  iŸ  i   i‡  z!Ic                  óB   ‡ — e Zd Zej                  f	 	 	 	 	 dˆ fd„Zˆ xZS )ÚParseFailedc                ó2   •— t         ‰| �  |«       || _        y r   )Úsuperr   Úcode)r   Úmsgre   Ú	__class__s      €r   r   zParseFailed.__init__Ö   s   ø€ ô 	‰Ñ˜ÔØˆ�	r   )rf   Ústrre   rQ   r-   r.   )r0   r1   r2   rQ   rU   r   Ú__classcell__)rg   s   @r   rb   rb   Õ   s.   ø„ à,7×,FÑ,FðØðØ)ðà	÷ñ r   rb   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)ÚRsvBitsrE   Úrsv1Úrsv2Úrsv3N©r0   r1   r2   Ú__annotations__r   r   r   rk   rk   Ý   s   … Ø
ƒJØ
ƒJØ
„Jr   rk   c                  ó@   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   y)ÚHeaderrE   Úfinrk   Úrsvr@   ÚopcodeÚintÚpayload_lenúbytes | Noner   Nro   r   r   r   rr   rr   ã   s   … Ø	ƒIØ	ƒLØƒNØÓØÔr   rr   c                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)	ÚFramer@   ru   zbytes | str | tuple[int, str]ÚpayloadrE   Úframe_finishedÚmessage_finishedNro   r   r   r   rz   rz   ë   s   … ØƒNØ*Ó*ØÓØÔr   rz   c                óp   — t        | «      |k  r| S | d | } | j                  dd¬«      j                  d«      S )Núutf-8Úignore)Úerrors)r&   ÚdecodeÚencode)r'   Únbytess     r   Ú_truncate_utf8r…   ò   s@   € Ü
ˆ4ƒy�FÒØˆð ��ˆ=€Dð �;‰;�w xˆ;Ó0×7Ñ7¸Ó@Ð@r   c                  óF   — e Zd Zd	d
d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	y)ÚBufferNc                óX   — t        «       | _        d| _        |r| j                  |«       y y ©Nr   )r$   ÚbufferÚ
bytes_usedÚfeed)r   Úinitial_bytess     r   r   zBuffer.__init__  s&   € Ü“kˆŒØˆŒÙØ�I‰I�mÕ$ð r   c                ó.   — | xj                   |z  c_         y r   )rŠ   )r   Ú	new_bytess     r   rŒ   zBuffer.feed  s   € Ø�Š�yÑ Žr   c                ó¦   — |s
t        «       S | j                  | j                  | j                  |z    }| xj                  t        |«      z  c_        |S r   )r$   rŠ   r‹   r&   )r   r„   r'   s      r   Úconsume_at_mostzBuffer.consume_at_most  sA   € ÙÜ“;Ðà�{‰{˜4Ÿ?™?¨T¯_©_¸vÑ-EÐFˆØ�Šœ3˜t›9Ñ$�Øˆr   c                óp   — t        | j                  «      | j                  z
  |k  ry | j                  |«      S r   )r&   rŠ   r‹   r‘   )r   r„   s     r   Úconsume_exactlyzBuffer.consume_exactly  s0   € Üˆt�{‰{Ó˜dŸo™oÑ-°Ò6Øà×#Ñ# FÓ+Ð+r   c                óD   — | j                   d | j                  …= d| _        y r‰   )rŠ   r‹   rF   s    r   ÚcommitzBuffer.commit  s   € à�K‰KÐ)˜$Ÿ/™/Ð)Ð*Øˆ�r   c                ó   — d| _         y r‰   )r‹   rF   s    r   ÚrollbackzBuffer.rollback  s	   € Øˆ�r   c                ó,   — t        | j                  «      S r   )r&   rŠ   rF   s    r   Ú__len__zBuffer.__len__!  s   € Ü�4—;‘;ÓÐr   r   )r�   rx   r-   r.   )r�   Úbytesr-   r.   )r„   rv   r-   r$   )r„   rv   r-   zbytearray | None©r-   r.   )r-   rv   )
r0   r1   r2   r   rŒ   r‘   r“   r•   r—   r™   r   r   r   r‡   r‡     s%   „ ô%ó!óó,óó
ô r   r‡   c                  ó   — e Zd Zdd„Zdd„Zy)ÚMessageDecoderc                ó    — d | _         d | _        y r   )ru   ÚdecoderrF   s    r   r   zMessageDecoder.__init__&  s   € Ø%)ˆŒØ26ˆ�r   c                ó^  — |j                   j                  «       rJ ‚| j                   €;|j                   t        j                  u rd}t	        |«      ‚|j                   | _         n6|j                   t        j                  urd|j                   ›�}t	        |«      ‚|j                   t        j
                  u r t        d«      «       | _        |j                  xr |j                  }| j                  €|j                  }nIt        |j                  t        t        f«      sJ ‚	 | j                  j                  |j                  |«      }t'        | j                   ||j                  |«      }|rd | _         d | _        |S # t        $ r(}t	        t!        |«      t"        j$                  «      ‚d }~ww xY w)Nzunexpected CONTINUATIONzexpected CONTINUATION, got r   )ru   rG   r@   rJ   rb   rK   r   rŸ   r|   r}   r{   Ú
isinstancerš   r$   r‚   ÚUnicodeDecodeErrorrh   rQ   rY   rz   )r   Úframerf   Úfinishedr'   Úexcs         r   Úprocess_framezMessageDecoder.process_frame*  s^  € Ø—<‘<×)Ñ)Ô+Ð+Ð+à�;‰;ÐØ�|‰|œv×2Ñ2Ñ2Ø/�Ü! #Ó&Ð&ØŸ,™,ˆD�KØ�\‰\¤×!4Ñ!4Ñ4Ø/°·±Ð/?Ð@ˆCÜ˜cÓ"Ð"à�<‰<œ6Ÿ;™;Ñ&Ø9Ô0°Ó9Ó;ˆDŒLà×'Ñ'ÒB¨E×,BÑ,Bˆà�<‰<ÐØ—=‘=‰Dä˜eŸm™m¬e´YÐ-?Ô@Ð@Ð@ðTØ—|‘|×*Ñ*¨5¯=©=¸(ÓC�ô �d—k‘k 4¨×)=Ñ)=¸xÓHˆáØˆDŒKØˆDŒLàˆøô &ò TÜ!¤# c£(¬K×,RÑ,RÓSÐSûðTús   Ä!&E; Å;	F,Æ#F'Æ'F,Nr›   ©r£   rz   r-   rz   )r0   r1   r2   r   r¦   r   r   r   r�   r�   %  s   „ ó7ô r   r�   c                  óf   — e Zd Z	 d	 	 	 	 	 d	d„Zd
d„Zdd„Zdd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zy)ÚFrameDecoderNc                óŒ   — || _         |xs g | _        t        «       | _        d | _        d | _        d | _        d| _        d| _        y r‰   )	ÚclientÚ
extensionsr‡   rŠ   ÚheaderÚeffective_opcodeÚmaskerÚpayload_requiredÚpayload_consumed)r   r«   r¬   s      r   r   zFrameDecoder.__init__N  sF   € ð ˆŒØ$Ò*¨ˆŒä“hˆŒà%)ˆŒØ/3ˆÔØ>BˆŒØ !ˆÔØ !ˆÕr   c                ó:   — | j                   j                  |«       y r   )rŠ   rŒ   r6   s     r   Úreceive_byteszFrameDecoder.receive_bytes\  s   € Ø�‰×Ñ˜Õr   c                óÆ  — | j                   s| j                  «       sy | j                   €J ‚| j                  €J ‚| j                  €J ‚t	        | j
                  «      | j                  k  ry | j                   j                  | j                  z
  }| j
                  j                  |«      }|s| j                   j                  dkD  ry | j
                  j                  «        | xj                  t	        |«      z  c_        | j                  | j                   j                  k(  }| j                  j                  |«      }| j                  D ]F  }|j                  | t        |«      «      }t        |t         «      rd}t#        ||«      ‚t%        |«      }ŒH |rlt%        «       }| j                  D ]N  }|j'                  | | j                   j(                  «      }t        |t         «      rd}t#        ||«      ‚|€ŒJ||z  }ŒP ||z  }t+        | j                  t        |«      || j                   j(                  «      }	|rd | _         d | _        d | _        |	S t,        j.                  | _        |	S )Nr   úerror in extension)r­   Úparse_headerr¯   r®   r&   rŠ   r°   rw   r±   r‘   r•   r,   r¬   Úframe_inbound_payload_datarš   r¡   rQ   rb   r$   Úframe_inbound_completers   rz   r@   rJ   )
r   Úpayload_remainingr{   r¤   Ú	extensionÚpayload_rf   ÚfinalÚresultr£   s
             r   Úprocess_bufferzFrameDecoder.process_buffer_  s  € Ø�{Š{ 4×#4Ñ#4Ô#6Øà�{‰{Ð&Ð&Ð&Ø�{‰{Ð&Ð&Ð&Ø×$Ñ$Ð0Ð0Ð0äˆt�{‰{Ó˜d×3Ñ3Ò3Øà ŸK™K×3Ñ3°d×6KÑ6KÑKÐØ—+‘+×-Ñ-Ð.?Ó@ˆÙ˜4Ÿ;™;×2Ñ2°QÒ6ØØ�‰×ÑÔà×Ò¤ W£Ñ-ÕØ×(Ñ(¨D¯K©K×,CÑ,CÑCˆà—+‘+×%Ñ% gÓ.ˆàŸ™ò 	*ˆIØ ×;Ñ;¸DÄ%ÈÃ.ÓQˆHÜ˜(¤KÔ0Ø*�Ü! # xÓ0Ð0Ü Ó)‰Gð	*ñ Ü“KˆEØ!Ÿ_™_ò $�	Ø"×9Ñ9¸$ÀÇÁÇÁÓP�Ü˜f¤kÔ2Ø.�CÜ% c¨6Ó2Ð2ØÑ%Ø˜V‘O‘Eð$ð �uÑˆGä�d×+Ñ+¬U°7«^¸XÀtÇ{Á{ÇÁÓWˆáØˆDŒKØ$(ˆDÔ!ØˆDŒKð ˆô %+×$7Ñ$7ˆDÔ!àˆr   c                óÎ  — | j                   j                  d«      }|€| j                   j                  «        yt        |d   t        z  «      }t        t        |d   t        z  «      t        |d   t        z  «      t        |d   t        z  «      «      }|d   t        z  }	 t        |«      }|j                  «       r|sd}t        |«      ‚t        |d   t        z  «      }|d   t        z  }| j!                  ||«      }|€| j                   j                  «        y| j#                  |||«       |r| j$                  rd}t        |«      ‚|s| j$                  sd	}t        |«      ‚|rI| j                   j                  d
«      }	|	€| j                   j                  «        yt'        |	«      | _        nt+        «       | _        | j                   j-                  «        t/        ||||d «      | _        | j0                  j2                  | _        | j0                  j2                  j                  «       r|| _        d| _        yd| _        d| _        y# t        $ r d|d›�}t        |«      ‚w xY w)Nr"   Fr   zInvalid opcode z#xz)Invalid attempt to fragment control framer
   z'client received unexpected masked framez)server received unexpected unmasked framer!   T)rŠ   r“   r—   rE   ÚFIN_MASKrk   Ú	RSV1_MASKÚ	RSV2_MASKÚ	RSV3_MASKÚOPCODE_MASKr@   Ú
ValueErrorrb   rG   Ú	MASK_MASKÚPAYLOAD_LEN_MASKÚparse_extended_payload_lengthÚextension_processingr«   r   r¯   r4   r•   rr   r­   ru   r®   r°   r±   )
r   r'   rs   rt   ru   rf   Úhas_maskÚpayload_len_shortrw   r   s
             r   r¶   zFrameDecoder.parse_header’  s5  € Ø�{‰{×*Ñ*¨1Ó-ˆØˆ<Ø�K‰K× Ñ Ô"Øä�4˜‘7œXÑ%Ó&ˆÜÜ��a‘œ9Ñ$Ó%Ü��a‘œ9Ñ$Ó%Ü��a‘œ9Ñ$Ó%ó
ˆð
 �a‘œ;Ñ&ˆð	#Ü˜F“^ˆFð
 ×ÑÔ¡cØ=ˆCÜ˜cÓ"Ð"ä˜˜Q™¤)Ñ+Ó,ˆØ  ™GÔ&6Ñ6ÐØ×8Ñ8¸ÐARÓSˆØÐØ�K‰K× Ñ Ô"Øà×!Ñ! &¨#¨{Ô;á˜ŸšØ;ˆCÜ˜cÓ"Ð"Ù §¢Ø=ˆCÜ˜cÓ"Ð"ÙØŸ+™+×5Ñ5°aÓ8ˆKØÐ"Ø—‘×$Ñ$Ô&ØÜ)¨+Ó6ˆD�Kä'›/ˆDŒKà�‰×ÑÔÜ˜S # v¨{¸DÓAˆŒØ $§¡× 2Ñ 2ˆÔØ�;‰;×Ñ×'Ñ'Ô)Ø$/ˆDÔ!ð !"ˆÔØð %&ˆDÔ!Ø !ˆÔØøôQ ò 	#Ø# F¨2 ;Ð/ˆCÜ˜cÓ"Ð"ð	#ús   Â!I	 É	I$c                óÎ  — |j                  «       r|t        kD  rd}t        |«      ‚|t        k(  rN| j                  j                  d«      }|€y t        j                  d|«      \  }|t        k  rd}t        |«      ‚|S |t        k(  r^| j                  j                  d«      }|€y t        j                  d|«      \  }|t        k  rd}t        |«      ‚|dz	  rd	}t        |«      ‚|S )
Nz$Control frame with payload len > 125r"   ú!Hz6Payload length used 2 bytes when 1 would have sufficedrA   ú!Qz6Payload length used 8 bytes when 2 would have sufficedé?   z'8-byte payload length with non-zero MSB)
rG   ÚMAX_PAYLOAD_NORMALrb   ÚPAYLOAD_LENGTH_TWO_BYTErŠ   r“   ÚstructÚunpackÚPAYLOAD_LENGTH_EIGHT_BYTEÚMAX_PAYLOAD_TWO_BYTE)r   ru   rw   rf   r'   s        r   rÈ   z*FrameDecoder.parse_extended_payload_lengthË  sÿ   € ð ×ÑÔ +Ô0BÒ"BØ8ˆCÜ˜cÓ"Ð"ØÔ1Ò1Ø—;‘;×.Ñ.¨qÓ1ˆDØˆ|ØÜ#Ÿ]™]¨4°Ó6‰Nˆ[ØÔ0Ò0ØN�Ü!Øóð ð& Ðð! Ô5Ò5Ø—;‘;×.Ñ.¨qÓ1ˆDØˆ|ØÜ#Ÿ]™]¨4°Ó6‰Nˆ[ØÔ2Ò2ØN�Ü!Øóð ð ˜bÒ ð @�Ü! #Ó&Ð&àÐr   c                ó  — g d¢}| j                   D ]O  }|j                  | |||«      }t        |t        «      rd}t	        ||«      ‚t        |«      D ]  \  }}	|	sŒ	d||<   Œ ŒQ t        ||«      D ]  \  }
}|sŒ	|
rŒd}t	        |«      ‚ y )N)FFFrµ   TzReserved bit set unexpectedly)r¬   Úframe_inbound_headerr¡   rQ   rb   Ú	enumerateÚzip)r   ru   rt   rw   Úrsv_usedrº   r½   rf   ÚbitÚusedÚexpectedÚfounds               r   rÉ   z!FrameDecoder.extension_processingí  s£   € ò )ˆØŸ™ò 	)ˆIØ×3Ñ3°D¸&À#À{ÓSˆFÜ˜&¤+Ô.Ø*�Ü! # vÓ.Ð.Ü& vÓ.ò )‘	��TÚØ$(�H˜S’Mñ)ð	)ô  # 8¨SÓ1ò 	'‰OˆH�eÚšXØ5�Ü! #Ó&Ð&ñ	'r   r   )r«   rE   r¬   zlist[Extension] | Noner-   r.   ©r'   rš   r-   r.   )r-   zFrame | NonerH   )ru   r@   rw   rv   r-   ú
int | None)ru   r@   rt   rk   rw   rv   r-   r.   )	r0   r1   r2   r   r³   r¾   r¶   rÈ   rÉ   r   r   r   r©   r©   M  sv   „ àAEð"Øð"Ø(>ð"à	ó"óó1óf7ðr Øð Ø+.ð à	ó ðD'Øð'Ø#*ð'Ø9<ð'à	ô'r   r©   c                  óŠ   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zddd„Zddd„Z	ddd	„Z
	 d	 	 	 	 	 dd
„Zdd„Z	 d	 	 	 	 	 	 	 dd„Zy)ÚFrameProtocolc                ó  — || _         |D �cg c]  }|j                  «       sŒ|‘Œ c}| _        t        | j                   | j                  «      | _        t        «       | _        | j                  «       | _        d | _	        y c c}w r   )
r«   Úenabledr¬   r©   Ú_frame_decoderr�   Ú_message_decoderÚ_parse_more_genÚ_parse_moreÚ_outbound_opcode)r   r«   r¬   Úexts       r   r   zFrameProtocol.__init__   sf   € ØˆŒØ*4ÖF 3¸¿¹½š3ÒFˆŒô +¨4¯;©;¸¿¹ÓHˆÔÜ .Ó 0ˆÔØ×/Ñ/Ó1ˆÔà/3ˆÕùò Gs
   ŒA?¢A?c                óþ  — |j                   }t        |t        t        f«      sJ ‚|st        j
                  df}nÖt        |«      dk(  rd}t        |«      ‚t        j                  d|d d «      \  }|t        k  s	|t        kD  rd}t        |«      ‚t        j                  t        «      5  t	        |«      }d d d «       |t        v rd}t        |«      ‚t        |t        «      s|t         k  rd}t        |«      ‚	 |dd  j#                  d	«      }||f}t+        |j,                  ||j.                  |j0                  «      S # 1 sw Y   Œ‰xY w# t$        $ r+}t        d
t'        |«      z   t        j(                  «      ‚d }~ww xY w)NÚ r
   zCLOSE with 1 byte payloadrÍ   r"   zCLOSE with invalid codez#remote CLOSE with local-only reasonz CLOSE with unknown reserved coder   zError decoding CLOSE reason: )r{   r¡   rš   r$   rQ   rW   r&   rb   rÒ   rÓ   ÚMIN_CLOSE_REASONÚMAX_CLOSE_REASONÚ
contextlibÚsuppressrÅ   ÚLOCAL_ONLY_CLOSE_REASONSÚMAX_PROTOCOL_CLOSE_REASONr‚   r¢   rh   rY   rz   ru   r|   r}   )r   r£   r'   rf   re   Úreasonr¥   s          r   Ú_process_closezFrameProtocol._process_close  si  € Ø�}‰}ˆÜ˜$¤¬	Ð 2Ô3Ð3Ð3áô  ×.Ñ.°Ð3‰DÜ�‹Y˜!Š^Ø-ˆCÜ˜cÓ"Ð"ä—m‘m D¨$¨r°¨(Ó3‰GˆTØÔ&Ò&¨$Ô1AÒ*AØ/�Ü! #Ó&Ð&Ü×$Ñ$¤ZÓ0ñ )Ü" 4Ó(�÷)àÔ/Ñ/Ø;�Ü! #Ó&Ð&Ü˜d¤KÔ0°TÔ=VÒ5VØ8�Ü! #Ó&Ð&ðØ˜a˜b˜Ÿ™¨Ó1�ð ˜&�>ˆDä�U—\‘\ 4¨×)=Ñ)=¸u×?UÑ?UÓVÐV÷#)ð )ûô &ò Ü!Ø3´c¸#³hÑ>Ü×:Ñ:óð ûðús$   Â(D<Ã8E Ä<EÅ	E<Å&E7Å7E<c              #  ó’  K  — | j                   D �cg c]  }|j                  «       sŒ|‘Œ c}| _         d}|sŠ| j                  j                  «       }|�f|j                  j                  «       s| j                  j                  |«      }n0|j                  t        j                  k(  r| j                  |«      }d}|–— |sŒ‰y y c c}w ­w)NFT)r¬   rä   rå   r¾   ru   rG   ræ   r¦   r@   rM   rô   )r   rê   Úclosedr£   s       r   rç   zFrameProtocol._parse_more_gen.  s£   è ø€ ð +/¯/©/ÖK 3¸S¿[¹[½]š3ÒKˆŒØˆáØ×'Ñ'×6Ñ6Ó8ˆEàÐ Ø—|‘|×-Ñ-Ô/Ø ×1Ñ1×?Ñ?ÀÓF‘EØ—\‘\¤V§\¡\Ò1Ø ×/Ñ/°Ó6�EØ!�FàŠKô ùò Lùs   ‚C‘C§C«BCÃ Cc                ó:   — | j                   j                  |«       y r   )rå   r³   r6   s     r   r³   zFrameProtocol.receive_bytesC  s   € Ø×Ñ×)Ñ)¨$Õ/r   c              #  ó>   K  — | j                   D ]
  }|€ y |–— Œ y ­wr   )rè   )r   Úevents     r   Úreceived_frameszFrameProtocol.received_framesF  s(   è ø€ Ø×%Ñ%ò 	ˆEØˆ}Ùà“ñ		ùs   ‚Nc                óf  — t        «       }|t        j                  u rd }|€|rd}t        |«      ‚|t        v rt        j
                  }|�I|t        t        j                  d|«      «      z  }|�%|t        |j                  d«      t        dz
  «      z  }| j                  t        j                  |«      S )Nz&cannot specify a reason without a coderÍ   r   r"   )r$   rQ   rW   Ú	TypeErrorrñ   rS   rÒ   Úpackr…   rƒ   rÐ   Ú_serialize_framer@   rM   )r   re   ró   r{   rf   s        r   ÚclosezFrameProtocol.closeM  sª   € Ü“+ˆØ”;×-Ñ-Ñ-ØˆDØˆ<™FØ:ˆCÜ˜C“.Ð ØÔ+Ñ+Ü×-Ñ-ˆDØÐØ”y¤§¡¨T°4Ó!8Ó9Ñ9ˆGØÐ!Øœ>Ø—M‘M 'Ó*Ô,>ÀÑ,Bóñ �ð ×$Ñ$¤V§\¡\°7Ó;Ð;r   c                óB   — | j                  t        j                  |«      S r   )rþ   r@   rN   ©r   r{   s     r   ÚpingzFrameProtocol.ping_  ó   € Ø×$Ñ$¤V§[¡[°'Ó:Ð:r   c                óB   — | j                  t        j                  |«      S r   )rþ   r@   rO   r  s     r   ÚpongzFrameProtocol.pongb  r  r   c                óŽ  — t        |t        t        t        f«      rt        j
                  }n?t        |t        «      r"t        j                  }|j                  d«      }nd}t        |«      ‚| j                  €|| _
        n+| j                  |urd}t        |«      ‚t        j                  }|rd | _
        | j                  |||«      S )Nr   zMust provide bytes or textz!Data type mismatch inside message)r¡   rš   r$   Ú
memoryviewr@   rL   rh   rK   rƒ   rü   ré   rJ   rþ   )r   r{   rs   ru   rf   s        r   Ú	send_datazFrameProtocol.send_datae  sª   € ô �g¤¤y´*Ð=Ô>Ü—]‘]‰FÜ˜¤Ô%Ü—[‘[ˆFØ—n‘n WÓ-‰Gà.ˆCÜ˜C“.Ð à× Ñ Ð(Ø$*ˆDÕ!Ø×"Ñ"¨&Ñ0Ø5ˆCÜ˜C“.Ð ä×(Ñ(ˆFáØ$(ˆDÔ!à×$Ñ$ V¨W°cÓ:Ð:r   c                óØ   — t        |«      dz  }t        |j                  «      dz  t        |j                  «      dz  z   t        |j                  «      dz  z   }t        |«      }||z  |z  S )Né   é   é   r!   )rv   rl   rm   rn   )r   rs   rt   ru   Úfin_bitsÚrsv_bitsÚopcode_bitss          r   Ú_make_fin_rsv_opcodez"FrameProtocol._make_fin_rsv_opcode~  s_   € Ü�s“8˜q‘=ˆÜ˜Ÿ™“M QÑ&¬3¨s¯x©x«=¸AÑ+=Ñ>Ä#ÀcÇhÁhÃ-ÐSTÑBTÑUˆÜ˜&“kˆà˜(Ñ" [Ñ0Ð0r   c           	     ó  — t        |«      }t        ddd«      }t        | j                  «      D ]#  }|j	                  | ||t        |«      |«      \  }}Œ% | j                  |||«      }t        |«      }d}|t        k  r|}	d }
n|t        k  r	t        }	|}
n
t        }	|}
d}| j                  r|	dz  }	t        ||	g«      }|
�d|j                  «       rd}t        |«      ‚|r#|t        t        j                   d|
«      «      z  }n"|t        t        j                   d|
«      «      z  }| j                  rRt        t#        j$                  d«      «      }t'        |«      }t        ||z   |j)                  t        |«      «      z   «      S t        ||z   «      S )NFTr:   z"payload too long for control framerÎ   rÍ   r!   )r$   rk   Úreversedr¬   Úframe_outboundrš   r  r&   rÐ   rÕ   rÑ   rÔ   r«   rG   rÅ   rÒ   rý   ÚosÚurandomr   r,   )r   ru   r{   rs   rt   rº   Úfin_rsv_opcodeÚpayload_lengthÚquad_payloadÚfirst_payloadÚsecond_payloadr­   rf   r   r¯   s                  r   rþ   zFrameProtocol._serialize_frame…  s€  € ô ˜GÓ$ˆä�e˜U EÓ*ˆÜ! $§/¡/Ó2ò 	\ˆIØ$×3Ñ3°D¸&À#ÄuÈWÃ~ÐWZÓ[‰LˆC‘ð	\ð ×2Ñ2°3¸¸VÓDˆä˜W›ˆØˆØÔ/Ò/Ø*ˆMØ!‰NØÔ3Ò3Ü3ˆMØ+‰Nä5ˆMØ+ˆNØˆLà�;Š;Ø˜VÑ#ˆMä˜N¨MÐ:Ó;ˆØÐ%Ø×ÑÔ!Ø:�Ü  “oÐ%ÙØœ)¤F§K¡K°°nÓ$EÓFÑF‘àœ)¤F§K¡K°°nÓ$EÓFÑF�à�;Š;ô $¤B§J¡J¨q£MÓ2ˆKÜ$ [Ó1ˆFÜ˜V kÑ1°F·N±NÄ9ÈWÓCUÓ4VÑVÓWÐWä˜ 'Ñ)Ó*Ð*r   )r«   rE   r¬   zlist[Extension]r-   r.   r§   )r-   z#Generator[Frame | None, None, None]rß   )r-   zGenerator[Frame, None, None])NN)re   rà   ró   z
str | Noner-   r$   )r   )r{   rš   r-   r$   )r   T)r{   zbytes | bytearray | strrs   rE   r-   r$   )rs   rE   rt   rk   ru   r@   r-   rv   )ru   r@   r{   zbytes | bytearrayrs   rE   r-   r$   )r0   r1   r2   r   rô   rç   r³   rú   rÿ   r  r  r  r  rþ   r   r   r   râ   râ   ÿ  s�   „ ó	4ó!WóFó*0óô<ô$;ô;ð CGð;Ø.ð;Ø;?ð;à	ó;ó21ð MQð5+Øð5+Ø'8ð5+ØEIð5+à	ô5+r   râ   )r'   rš   r„   rv   r-   rš   )>rI   Ú
__future__r   rï   r  rÒ   Úcodecsr   r   Úenumr   Útypingr   r   Úcollections.abcr	   r¬   r   Úrangerš   r   r   r4   rÑ   rÔ   rÐ   rÕ   ÚMAX_PAYLOAD_EIGHT_BYTEÚMAX_FRAME_PAYLOADrÆ   rÇ   rÀ   rÁ   rÂ   rÃ   rÄ   r@   rQ   rW   rX   r`   rñ   rí   ÚMIN_PROTOCOL_CLOSE_REASONrò   ÚMIN_LIBRARY_CLOSE_REASONÚMAX_LIBRARY_CLOSE_REASONÚMIN_PRIVATE_CLOSE_REASONÚMAX_PRIVATE_CLOSE_REASONrî   rý   Ú	NULL_MASKÚ	Exceptionrb   rk   rr   rz   r…   r‡   r�   r©   râ   )r   s   pr   ú<module>r*     s¤  øðñõ #ã Û 	Û ß <Ý ß ,áÝ)å%ñ 9>¸c»
×C°1‰eÓ.¡5¨£:Ô.Õ.ÒC€
÷ñ ÷2ñ ð Ð ØÐ ØÐ Ø Ð Ø"Ð Ø*Ð ð €	ØÐ ð €Ø€	Ø€	Ø€	Ø€ô!ˆWô !ô6T �'ô T ðr ×ÑØ× Ñ Ø×$Ñ$ðÐ ð Ð Ø Ð Ø Ð ØÐ ØÐ ØÐ ØÐ ØÐ ð ˆF�K‰K˜˜aÓ €	ô�)ô ôˆjô ôˆZô ôˆJô óA÷! ñ ! ÷H%ñ %÷Po'ñ o'÷d{+ò {+ùòS Ds   ÁE	