Ë
    _§1h�  ã                   óü   — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZ dd	lmZ  G d
„ de«      Z G d„ de«      Zej:                  Zej<                  Z G d„ d«      Zy)zU
wsproto/connection
~~~~~~~~~~~~~~~~~~

An implementation of a WebSocket connection.
é    )Údeque)ÚEnum)ÚDequeÚ	GeneratorÚListÚOptionalé   )ÚBytesMessageÚCloseConnectionÚEventÚMessageÚPingÚPongÚTextMessage)Ú	Extension)ÚCloseReasonÚFrameProtocolÚOpcodeÚParseFailed)ÚLocalProtocolErrorc                   ó(   — e Zd ZdZdZdZdZdZdZdZ	y)	ÚConnectionStatez1
    RFC 6455, Section 4 - Opening Handshake
    r   r	   é   é   é   é   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
CONNECTINGÚOPENÚREMOTE_CLOSINGÚLOCAL_CLOSINGÚCLOSEDÚ	REJECTING© ó    úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/wsproto/connection.pyr   r      s'   „ ñð
 €Jà€Dà€Nà€Mà€Fà�Ir(   r   c                   ó   — e Zd ZdZdZdZy)ÚConnectionTypez#An enumeration of connection types.r	   r   N)r   r   r   r    ÚCLIENTÚSERVERr'   r(   r)   r+   r+   -   s   „ Ù-ð €Fð �Fr(   r+   c            	       óŽ   — e Zd ZdZ	 	 ddedeee      deddfd„Z	e
defd„«       Zd	edefd
„Zdee   ddfd„Zdeeddf   fd„Zy)Ú
Connectionaä  
    A low-level WebSocket connection object.

    This wraps two other protocol objects, an HTTP/1.1 protocol object used
    to do the initial HTTP upgrade handshake and a WebSocket frame protocol
    object used to exchange messages and other control frames.

    :param conn_type: Whether this object is on the client- or server-side of
        a connection. To initialise as a client pass ``CLIENT`` otherwise
        pass ``SERVER``.
    :type conn_type: ``ConnectionType``
    NÚconnection_typeÚ
extensionsÚtrailing_dataÚreturnc                 óÚ   — |t         j                  u | _        t        «       | _        t        | j                  |xs g «      | _        t        j                  | _	        | j                  |«       y ©N)r+   r,   Úclientr   Ú_eventsr   Ú_protor   r"   Ú_stateÚreceive_data)Úselfr0   r1   r2   s       r)   Ú__init__zConnection.__init__I   sQ   € ð &¬×)>Ñ)>Ð>ˆŒÜ%*£WˆŒÜ# D§K¡K°Ò1A¸rÓBˆŒÜ%×*Ñ*ˆŒØ×Ñ˜-Õ(r(   c                 ó   — | j                   S r5   )r9   )r;   s    r)   ÚstatezConnection.stateU   s   € à�{‰{Ðr(   Úeventc                 óÒ  — d}t        |t        «      rR| j                  t        j                  k(  r5|| j
                  j                  |j                  |j                  «      z  }|S t        |t        «      rG| j                  t        j                  k(  r*|| j
                  j                  |j                  «      z  }|S t        |t        «      rG| j                  t        j                  k(  r*|| j
                  j                  |j                  «      z  }|S t        |t        «      rª| j                  t        j                  t        j                  hv r~|| j
                  j!                  |j"                  |j$                  «      z  }| j                  t        j                  k(  rt        j&                  | _        |S t        j*                  | _        |S t-        d|› d| j                  › d�«      ‚)Nr(   zEvent z cannot be sent in state ú.)Ú
isinstancer   r>   r   r"   r8   Ú	send_dataÚdataÚmessage_finishedr   ÚpingÚpayloadr   Úpongr   r#   ÚcloseÚcodeÚreasonr%   r9   r$   r   )r;   r?   rD   s      r)   ÚsendzConnection.sendY   s†  € ØˆÜ�eœWÔ%¨$¯*©*¼×8LÑ8LÒ*LØ�D—K‘K×)Ñ)¨%¯*©*°e×6LÑ6LÓMÑMˆDð$ ˆô# ˜œtÔ$¨¯©´×7KÑ7KÒ)KØ�D—K‘K×$Ñ$ U§]¡]Ó3Ñ3ˆDð  ˆô ˜œtÔ$¨¯©´×7KÑ7KÒ)KØ�D—K‘K×$Ñ$ U§]¡]Ó3Ñ3ˆDð ˆô ˜œÔ/°D·J±JÜ× Ñ Ü×*Ñ*ðC
ñ 5
ð �D—K‘K×%Ñ% e§j¡j°%·,±,Ó?Ñ?ˆDØ�z‰zœ_×;Ñ;Ò;Ü-×4Ñ4�”ð ˆô .×;Ñ;�”ð
 ˆô %Ø˜˜Ð8¸¿¹¸ÀAÐFóð r(   rD   c                 óx  — |€I| j                   j                  t        t        j                  ¬«      «       t
        j                  | _        y| j                  t
        j                  t
        j                  fv r| j                  j                  |«       y| j                  t
        j                  u rt        d«      ‚y)aO  
        Pass some received data to the connection for handling.

        A list of events that the remote peer triggered by sending this data can
        be retrieved with :meth:`~wsproto.connection.Connection.events`.

        :param data: The data received from the remote peer on the network.
        :type data: ``bytes``
        N)rJ   zConnection already closed.)r7   Úappendr   r   ÚABNORMAL_CLOSUREr   r%   r9   r>   r"   r$   r8   Úreceive_bytesr   )r;   rD   s     r)   r:   zConnection.receive_datap   sˆ   € ð ˆ<ð
 �L‰L×Ñ¤´[×5QÑ5QÔ RÔSÜ)×0Ñ0ˆDŒKØà�:‰:œ/×.Ñ.´×0MÑ0MÐNÑNØ�K‰K×%Ñ% dÕ+Ø�Z‰Zœ?×1Ñ1Ñ1Ü$Ð%AÓBÐBàr(   c              #   óØ  K  — | j                   r)| j                   j                  «       –— | j                   rŒ)	 | j                  j                  «       D �]Z  }|j                  t
        j                  u rU|j                  r|j                  sJ ‚t        |j                  t        t        f«      sJ ‚t        |j                  ¬«      –— Œu|j                  t
        j                  u rU|j                  r|j                  sJ ‚t        |j                  t        t        f«      sJ ‚t        |j                  ¬«      –— Œæ|j                  t
        j                   u rƒt        |j                  t"        «      sJ ‚|j                  \  }}| j$                  t&        j(                  u rt&        j*                  | _        nt&        j.                  | _        t1        ||¬«      –— �Œ…|j                  t
        j2                  u rLt        |j                  t4        «      sJ ‚t7        |j                  |j                  |j                  ¬«      –— �Œí|j                  t
        j8                  u rRt        |j                  t        t        f«      sJ ‚t;        |j                  |j                  |j                  ¬«      –— �Œ[�Œ] y# t<        $ r,}t1        |j>                  t5        |«      ¬«      –— Y d}~yd}~ww xY w­w)zÅ
        Return a generator that provides any events that have been generated
        by protocol activity.

        :returns: generator of :class:`Event <wsproto.events.Event>` subclasses
        )rG   )rJ   rK   )rD   Úframe_finishedrE   N) r7   Úpopleftr8   Úreceived_framesÚopcoder   ÚPINGrR   rE   rB   rG   ÚbytesÚ	bytearrayr   ÚPONGr   ÚCLOSEÚtupler>   r   r$   r%   r9   r#   r   ÚTEXTÚstrr   ÚBINARYr
   r   rJ   )r;   ÚframerJ   rK   Úexcs        r)   ÚeventszConnection.events‹   s  è ø€ ð �lŠlØ—,‘,×&Ñ&Ó(Ò(ð �l‹lð(	BØŸ™×4Ñ4Ó6ó %�Ø—<‘<¤6§;¡;Ñ.Ø ×/Ò/°E×4JÒ4JÐJÐJÜ% e§m¡m´e¼YÐ5GÔHÐHÐHÜ u§}¡}Ô5Ó5à—\‘\¤V§[¡[Ñ0Ø ×/Ò/°E×4JÒ4JÐJÐJÜ% e§m¡m´e¼YÐ5GÔHÐHÐHÜ u§}¡}Ô5Ó5à—\‘\¤V§\¡\Ñ1Ü% e§m¡m´UÔ;Ð;Ð;Ø#(§=¡=‘L�D˜&Ø—z‘z¤_×%BÑ%BÑBÜ&5×&<Ñ&<˜�ä&5×&DÑ&D˜œÜ)¨t¸FÔCÔCà—\‘\¤V§[¡[Ñ0Ü% e§m¡m´SÔ9Ð9Ð9Ü%Ø"Ÿ]™]Ø',×';Ñ';Ø).×)?Ñ)?ôô ð —\‘\¤V§]¡]Ñ2Ü% e§m¡m´e¼YÐ5GÔHÐHÐHÜ&Ø"Ÿ]™]Ø',×';Ñ';Ø).×)?Ñ)?ôô ñ ñK%øôL ò 	BÜ! s§x¡x¼¸C»ÔA×Aûð	Büs/   ‚5K*¹I8J2 Ê1K*Ê2	K'Ê;"K"ËK*Ë"K'Ë'K*)Nr(   )r   r   r   r    r+   r   r   r   rW   r<   Úpropertyr   r>   r   rL   r:   r   ra   r'   r(   r)   r/   r/   ;   s¢   „ ñð  15Ø"ñ	
)à'ð
)ð ˜T )™_Ñ-ð
)ð ð	
)ð
 
ó
)ð ð�ò ó ðð˜%ð  Eó ð. ¨%¡ð °Tó ð62B˜	 %¨¨tÐ"3Ñ4ô 2Br(   r/   N) r    Úcollectionsr   Úenumr   Útypingr   r   r   r   ra   r
   r   r   r   r   r   r   r1   r   Úframe_protocolr   r   r   r   Ú	utilitiesr   r   r+   r,   r-   r/   r'   r(   r)   ú<module>rh      ss   ðñõ Ý ß 3Ó 3÷÷ ñ õ "ß KÓ KÝ )ô�dô ô&�Tô ð 
×	Ñ	€Ø	×	Ñ	€÷BBò BBr(   