Ë
    è×ïiX5  ã                   óh  — d dl Z d dlZd dlZd dlZddl­ ddlmZ d dlmZ 	 	 d dl	m
Z
 defd„Zg 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eeeeeeeeeeeefZ  G d„ d«      Z! G d„ d«      Z" G d „ d!«      Z#y# e$ r- ej                  Zd	e j                   d
e j                   defd„ZY Œ€w xY w)"é    Né   )Ú*)Úvalidate_utf8)ÚLock)ÚXorMaskerSimpleÚreturnc                 ó6   — t        | «      j                  |«      S ©N)r   Úprocess)Ú_mÚ_ds     úI/var/www/html/aiagents/fe/lib/python3.12/site-packages/websocket/_abnf.pyÚ_maskr   $   s   € Ü˜rÓ"×*Ñ*¨2Ó.Ð.ó    Ú
mask_valueÚ
data_valuec                 óÐ   — t        |«      }t        j                  |t        «      }t        j                  | |dz  z  | d |dz   z   t        «      } || z  j	                  |t        «      S )Né   )ÚlenÚintÚ
from_bytesÚnative_byteorderÚto_bytes)r   r   Údatalens      r   r   r   +   s`   € Ü�j“/ˆÜ—^‘^ JÔ0@ÓAˆ
Ü—^‘^ J°'¸Q±,Ñ$?À*È]ÈwÐYZÉ{ÐB[Ñ$[Ô]mÓnˆ
Ø˜ZÑ'×1Ñ1°'Ô;KÓLÐLr   )ÚABNFÚcontinuous_frameÚframe_bufferÚSTATUS_NORMALÚSTATUS_GOING_AWAYÚSTATUS_PROTOCOL_ERRORÚSTATUS_UNSUPPORTED_DATA_TYPEÚSTATUS_STATUS_NOT_AVAILABLEÚSTATUS_ABNORMAL_CLOSEDÚSTATUS_INVALID_PAYLOADÚSTATUS_POLICY_VIOLATIONÚSTATUS_MESSAGE_TOO_BIGÚSTATUS_INVALID_EXTENSIONÚSTATUS_UNEXPECTED_CONDITIONÚSTATUS_BAD_GATEWAYÚSTATUS_TLS_HANDSHAKE_ERRORiè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  iö  i÷  c                   óN  — e Zd ZdZdZdZdZdZdZdZ	eeeeee	fZ
eded	ed
edede	diZdZdZdZddddeddfdededededededexs eddfd„Zd&deddfd„Zededefd„«       Zdefd „Zed'dedededd fd!„«       Zdefd"„Zd#exs edefd$„Zed#exs edexs edefd%„«       Zy)(r   z}
    ABNF frame class.
    See http://tools.ietf.org/html/rfc5234
    and http://tools.ietf.org/html/rfc6455#section-5.2
    r   r   é   é   é	   é
   ÚcontÚtextÚbinaryÚcloseÚpingÚpongé~   i   l            Ú ÚfinÚrsv1Úrsv2Úrsv3ÚopcodeÚmaskÚdatar   Nc                 ó˜   — || _         || _        || _        || _        || _        || _        |€d}|| _        t        j                  | _	        y)zG
        Constructor for ABNF. Please check RFC for arguments.
        Nr7   )
r8   r9   r:   r;   r<   r=   r>   ÚosÚurandomÚget_mask_key)Úselfr8   r9   r:   r;   r<   r=   r>   s           r   Ú__init__zABNF.__init__†   sK   € ð
 ˆŒØˆŒ	ØˆŒ	ØˆŒ	ØˆŒØˆŒ	Øˆ<ØˆDØˆŒ	ÜŸJ™JˆÕr   Úskip_utf8_validationc                 ó–  — | j                   s| j                  s| j                  rt        d«      ‚| j                  t
        j                  vrt        d| j                  «      ‚| j                  t
        j                  k(  r| j                  st        d«      ‚| j                  t
        j                  k(  r—t        | j                  «      }|sy|dk(  s|dk\  rt        d«      ‚|dkD  r%|s#t        | j                  dd «      st        d«      ‚d	| j                  d
   z  | j                  d   z   }| j                  |«      st        d|«      ‚yy)z…
        Validate the ABNF frame.

        Parameters
        ----------
        skip_utf8_validation: skip utf8 validation.
        zrsv is not implemented, yetzInvalid opcode %rzInvalid ping frame.Nr   r6   zInvalid close frame.r,   é   r   zInvalid close opcode %r)r9   r:   r;   ÚWebSocketProtocolExceptionr<   r   ÚOPCODESÚOPCODE_PINGr8   ÚOPCODE_CLOSEr   r>   r   Ú_is_valid_close_status)rC   rE   ÚlÚcodes       r   ÚvalidatezABNF.validate–   s  € ð �9Š9˜Ÿ	š	 T§Y¢YÜ,Ð-JÓKÐKà�;‰;œdŸl™lÑ*Ü,Ð-@À$Ç+Á+ÓNÐNà�;‰;œ$×*Ñ*Ò*°4·8²8Ü,Ð-BÓCÐCà�;‰;œ$×+Ñ+Ò+Ü�D—I‘I“ˆAÙØØ�AŠv˜˜cšÜ0Ð1GÓHÐHØ�1ŠuÑ1¼-ÈÏ	É	ÐRSÐRTÈÔ:VÜ0Ð1GÓHÐHà˜Ÿ™ 1™Ñ%¨¯	©	°!©Ñ4ˆDØ×.Ñ.¨tÔ4Ü0Ð1JÈDÓQÐQð 5ð ,r   rN   c                 ó6   — | t         v xs d| cxk  xr dk  S c S )Ni¸  iˆ  )ÚVALID_CLOSE_STATUS)rN   s    r   rL   zABNF._is_valid_close_status´   s#   € àÔ)Ð)ÒB¨d°dÖ.A¸TÑ.AÐBÑ.AÐBr   c                 ó–   — dt        | j                  «      z   dz   t        | j                  «      z   dz   t        | j                  «      z   S )Nzfin=z opcode=z data=)Ústrr8   r<   r>   ©rC   s    r   Ú__str__zABNF.__str__¸   sH   € Øœ˜DŸH™H›Ñ%ØñÜ˜tŸ{™{Ó+ñ,àñä˜TŸY™Y›ñ(ð 	(r   c           	      óŒ   — |t         j                  k(  r!t        | t        «      r| j	                  d«      } t        |ddd|d| «      S )aÚ  
        Create frame to send text, binary and other data.

        Parameters
        ----------
        data: str
            data to send. This is string value(byte array).
            If opcode is OPCODE_TEXT and this value is unicode,
            data value is converted into unicode string, automatically.
        opcode: int
            operation code. please see OPCODE_MAP.
        fin: int
            fin flag. if set to 0, create continue fragmentation.
        úutf-8r   r   )r   ÚOPCODE_TEXTÚ
isinstancerS   Úencode)r>   r<   r8   s      r   Úcreate_framezABNF.create_frame½   s@   € ð  ”T×%Ñ%Ò%¬*°T¼3Ô*?Ø—;‘;˜wÓ'ˆDä�C˜˜A˜q &¨!¨TÓ2Ð2r   c                 óR  — t        d„ | j                  | j                  | j                  | j                  fD «       «      rt        d«      ‚| j                  t        j                  vrt        d«      ‚t        | j                  «      }|t        j                  k\  rt        d«      ‚t        | j                  dz  | j                  dz  z  | j                  dz  z  | j                  dz  z  | j                  z  «      j                  d	«      }|t        j                  k  r.|t        | j                  dz  |z  «      j                  d	«      z  }n |t        j                   k  rG|t        | j                  dz  d
z  «      j                  d	«      z  }|t#        j$                  d|«      z  }nF|t        | j                  dz  dz  «      j                  d	«      z  }|t#        j$                  d|«      z  }| j                  s|| j                  z   S | j'                  d«      }|| j)                  |«      z   S )zR
        Format this object to string(byte array) to send data to server.
        c              3   ó$   K  — | ]  }|d v–— Œ
 y­w))r   r   N© )Ú.0Úxs     r   ú	<genexpr>zABNF.format.<locals>.<genexpr>Ö   s   è ø€ ÒT 1ˆq˜ŒÑTùs   ‚z
not 0 or 1zInvalid OPCODEzdata is too longé   é   é   r   úlatin-1r6   ú!Hé   ú!Q)Úanyr8   r9   r:   r;   Ú
ValueErrorr<   r   rI   r   r>   Ú	LENGTH_63ÚchrrZ   ÚLENGTH_7r=   Ú	LENGTH_16ÚstructÚpackrB   Ú_get_masked)rC   ÚlengthÚframe_headerÚmask_keys       r   ÚformatzABNF.formatÒ   sÊ  € ô ÑT¨¯©°4·9±9¸d¿i¹iÈÏÉÐ(SÔTÔTÜ˜\Ó*Ð*Ø�;‰;œdŸl™lÑ*ÜÐ-Ó.Ð.Ü�T—Y‘Y“ˆØ”T—^‘^Ò#ÜÐ/Ó0Ð0ä˜4Ÿ8™8 q™=ØŸ9™9¨™>ñ*Ø,0¯I©I¸©Nñ;Ø=A¿Y¹YÈ!¹^ñLàŸ;™;ñ'ó (ç(.©¨yÓ(9ð 	ð ”D—M‘MÒ!ØœC §	¡	¨Q¡°Ñ 7Ó8×?Ñ?À	ÓJÑJ‰LØ”d—n‘nÒ$ØœC §	¡	¨Q¡°Ñ 5Ó6×=Ñ=¸iÓHÑHˆLØœFŸK™K¨¨fÓ5Ñ5‰LàœC §	¡	¨Q¡°Ñ 5Ó6×=Ñ=¸iÓHÑHˆLØœFŸK™K¨¨fÓ5Ñ5ˆLà�yŠyØ $§)¡)Ñ+Ð+à×(Ñ(¨Ó+ˆHØ $×"2Ñ"2°8Ó"<Ñ<Ð<r   rt   c                 óŽ   — t         j                  || j                  «      }t        |t        «      r|j                  d«      }||z   S )NrW   )r   r=   r>   rY   rS   rZ   )rC   rt   Úss      r   rq   zABNF._get_maskedð   s8   € Ü�I‰I�h §	¡	Ó*ˆä�h¤Ô$Ø—‘ wÓ/ˆHà˜!‰|Ðr   c                 óö   — |€d}t        | t        «      r| j                  d«      } t        |t        «      r|j                  d«      }t        t	        j                  d| «      t	        j                  d|«      «      S )zÛ
        Mask or unmask data. Just do xor for each byte

        Parameters
        ----------
        mask_key: bytes or str
            4 byte mask.
        data: bytes or str
            data to mask/unmask.
        r7   re   ÚB)rY   rS   rZ   r   Úarray)rt   r>   s     r   r=   z	ABNF.maskø   sa   € ð ˆ<ØˆDä�h¤Ô$Ø—‘ yÓ1ˆHä�dœCÔ Ø—;‘;˜yÓ)ˆDä”U—[‘[  hÓ/´·±¸SÀ$Ó1GÓHÐHr   )F)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚOPCODE_CONTrX   ÚOPCODE_BINARYrK   rJ   ÚOPCODE_PONGrI   Ú
OPCODE_MAPrm   rn   rk   r   rS   ÚbytesrD   ÚboolrO   ÚstaticmethodrL   rU   r[   ru   rq   r=   r^   r   r   r   r   d   s�  „ ñð €KØ€KØ€MØ€LØ€KØ€Kð ˜K¨¸Ø˜Kð)€Gð
 	�VØ�VØ�xØ�gØ�VØ�Vð€Jð €HØ€IØ€Ià"#°ÀÈqØ*¸ÐPRñ'˜Cð '¨3ð '¸#ð 'Èð 'Øð'Ø25ð'ØADÂÈð'ØW[ó'ñ R¨Tð R¸dó Rð< ðC Sð C¨Tò Có ðCð(˜ó (ð
 ñ3˜3ð 3¨ð 3°#ð 3¸fò 3ó ð3ð(=˜ó =ð< C¢L¨5ð °Uó ð ðI�s’|˜eð I¨3ª<°%ð I¸Eò Ió ñIr   r   c                   óœ   — e Zd ZdZdZdededdfd„Zdd„Zdefd	„Z	dd
„Z
dexs efd„Zdefd„Zdd„Zdefd„Zdd„Zdefd„Zdedefd„Zy)r   rd   rc   Úrecv_fnrE   r   Nc                 ól   — || _         || _        g | _        | j                  «        t	        «       | _        y r
   )ÚrecvrE   Úrecv_bufferÚclearr   Úlock)rC   r‡   rE   s      r   rD   zframe_buffer.__init__  s-   € ØˆŒ	Ø$8ˆÔ!ð ˆÔØ�
‰
ŒÜ“Fˆ�	r   c                 ó.   — d | _         d | _        d | _        y r
   )Úheaderrr   r=   rT   s    r   r‹   zframe_buffer.clear  s   € ØˆŒØˆŒØˆ�	r   c                 ó   — | j                   d u S r
   )rŽ   rT   s    r   Úhas_received_headerz frame_buffer.has_received_header"  ó   € Ø�{‰{˜dÐ"Ð"r   c                 óº   — | j                  d«      }|d   }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz  }|d   }|dz	  dz  }	|d	z  }
||||||	|
f| _        y )
Nr,   r   rb   r   rc   rd   r   é   rg   )Úrecv_strictrŽ   )rC   rŽ   Úb1r8   r9   r:   r;   r<   Úb2Úhas_maskÚlength_bitss              r   Úrecv_headerzframe_buffer.recv_header%  s�   € Ø×!Ñ! !Ó$ˆØ�A‰YˆØ�A‰g˜‰kˆØ�Q‰w˜‰{ˆØ�Q‰w˜‰{ˆØ�Q‰w˜‰{ˆØ�c‘ˆØ�A‰YˆØ˜‘7˜Q‘;ˆØ˜4‘iˆà˜D $¨¨f°hÀÐLˆ�r   c                 óV   — | j                   sy| j                   t        j                     S )NF)rŽ   r   Ú_HEADER_MASK_INDEXrT   s    r   r—   zframe_buffer.has_mask3  s!   € Ø�{Š{ØØ�{‰{œ<×:Ñ:Ñ;Ð;r   c                 ó   — | j                   d u S r
   )rr   rT   s    r   Úhas_received_lengthz frame_buffer.has_received_length8  r‘   r   c                 ó*  — | j                   t        j                     }|dz  }|dk(  r0| j                  d«      }t	        j
                  d|«      d   | _        y |dk(  r0| j                  d«      }t	        j
                  d|«      d   | _        y || _        y )Nrg   r6   r,   rf   r   r-   rh   )rŽ   r   Ú_HEADER_LENGTH_INDEXr”   ro   Úunpackrr   )rC   Úbitsr˜   Úvs       r   Úrecv_lengthzframe_buffer.recv_length;  s„   € Ø�{‰{œ<×<Ñ<Ñ=ˆØ˜T‘kˆØ˜$ÒØ× Ñ  Ó#ˆAÜ Ÿ-™-¨¨aÓ0°Ñ3ˆD�KØ˜DÒ Ø× Ñ  Ó#ˆAÜ Ÿ-™-¨¨aÓ0°Ñ3ˆD�Kà%ˆD�Kr   c                 ó   — | j                   d u S r
   )r=   rT   s    r   Úhas_received_maskzframe_buffer.has_received_maskG  s   € Ø�y‰y˜DÐ Ð r   c                 ó`   — | j                  «       r| j                  d«      | _        y d| _        y )Nr   r7   )r—   r”   r=   rT   s    r   Ú	recv_maskzframe_buffer.recv_maskJ  s"   € Ø+/¯=©=¬?�D×$Ñ$ QÓ'ˆ�	Àˆ�	r   c           
      ó,  — | j                   5  | j                  «       r| j                  «        | j                  \  }}}}}}}| j	                  «       r| j                  «        | j                  }| j                  «       r| j                  «        | j                  }	| j                  |«      }
|rt        j                  |	|
«      }
| j                  «        t        |||||||
«      }|j                  | j                  «       d d d «       |S # 1 sw Y   S xY wr
   )rŒ   r�   r™   rŽ   r�   r£   rr   r¥   r§   r=   r”   r   r‹   rO   rE   )rC   r8   r9   r:   r;   r<   r—   Ú_rr   r=   ÚpayloadÚframes               r   Ú
recv_framezframe_buffer.recv_frameM  só   € à�Y‰Yñ 	6à×'Ñ'Ô)Ø× Ñ Ô"Ø;?¿;¹;Ñ8ˆS�$˜˜d F¨H°að ×'Ñ'Ô)Ø× Ñ Ô"Ø—[‘[ˆFð ×%Ñ%Ô'Ø—‘Ô Ø—9‘9ˆDð ×&Ñ& vÓ.ˆGÙÜŸ)™) D¨'Ó2�ð �J‰JŒLä˜˜d D¨$°¸À'ÓJˆEØ�N‰N˜4×4Ñ4Ô5÷3	6ð6 ˆ÷7	6ð6 ˆús   �C2D	Ä	DÚbufsizec                 ó^  — |t        t        t        | j                  «      «      z
  }|dkD  rJ| j	                  t        d|«      «      }| j                  j                  |«       |t        |«      z  }|dkD  rŒJdj                  | j                  «      }|dk(  r	g | _        |S ||d  g| _        |d | S )Nr   i @  r   )ÚsumÚmapr   rŠ   r‰   ÚminÚappendÚjoin)rC   r­   ÚshortageÚbytes_Úunifieds        r   r”   zframe_buffer.recv_strictl  s°   € ØœS¤¤S¨$×*:Ñ*:Ó!;Ó<Ñ<ˆØ˜Šlð —Y‘Yœs 5¨(Ó3Ó4ˆFØ×Ñ×#Ñ# FÔ+Øœ˜F›Ñ#ˆHð ˜‹lð —(‘(˜4×+Ñ+Ó,ˆà�qŠ=Ø!ˆDÔØˆNà '¨¨Ð 1Ð2ˆDÔØ˜8˜GÐ$Ð$r   )r   N)r{   r|   r}   r›   rŸ   r   r„   rD   r‹   r�   r™   r—   r�   r£   r¥   r§   r   r¬   rƒ   r”   r^   r   r   r   r     s‘   „ ØÐØÐð ð ¸4ð ÀDó óð
# Tó #óMð<˜$š+ #ó <ð
# Tó #ó
&ð! 4ó !óCð˜Dó ð>% 3ð %¨5ô %r   r   c                   óh   — e Zd Zdededdfd„Zdeddfd„Zdeddfd„Zdedexs efd	„Z	dede
fd
„Zy)r   Úfire_cont_framerE   r   Nc                 ó<   — || _         || _        d | _        d | _        y r
   )r¸   rE   Ú	cont_dataÚrecving_frames)rC   r¸   rE   s      r   rD   zcontinuous_frame.__init__…  s!   € Ø.ˆÔØ$8ˆÔ!ØˆŒØ"ˆÕr   r«   c                 óô   — | j                   s(|j                  t        j                  k(  rt	        d«      ‚| j                   r8|j                  t        j
                  t        j                  fv rt	        d«      ‚y y )NzIllegal frame)r»   r<   r   r   rH   rX   r€   ©rC   r«   s     r   rO   zcontinuous_frame.validate‹  sc   € Ø×"Ò" u§|¡|´t×7GÑ7GÒ'GÜ,¨_Ó=Ð=Ø×ÒØ—‘¤×!1Ñ!1´4×3EÑ3EÐ FÑFÜ,¨_Ó=Ð=ð Gð r   c                 ó<  — | j                   r"| j                   dxx   |j                  z  cc<   nZ|j                  t        j                  t        j
                  fv r|j                  | _        |j                  |j                  g| _         |j                  rd | _        y y )Nr   )rº   r>   r<   r   rX   r€   r»   r8   r½   s     r   Úaddzcontinuous_frame.add’  sr   € Ø�>Š>Ø�N‰N˜1Ó §¡Ñ+Ôà�|‰|¤× 0Ñ 0´$×2DÑ2DÐEÑEØ&+§l¡l�Ô#Ø#Ÿl™l¨E¯J©JÐ7ˆDŒNà�9Š9Ø"&ˆDÕð r   c                 ó6   — |j                   xs | j                  S r
   )r8   r¸   r½   s     r   Úis_firezcontinuous_frame.is_fire�  s   € Ø�y‰yÒ0˜D×0Ñ0Ð0r   c                 ó  — | j                   }d | _         |d   |_        | j                  sX|d   t        j                  k(  rB| j
                  s6t        |j                  «      s!t        dt        |j                  «      z   «      ‚|d   |gS )Nr   r   zcannot decode: )	rº   r>   r¸   r   rX   rE   r   ÚWebSocketPayloadExceptionÚrepr)rC   r«   r>   s      r   Úextractzcontinuous_frame.extract   s�   € Ø�~‰~ˆØˆŒØ˜!‘WˆŒ
Ø×#Ò#¨¨Q©´4×3CÑ3CÒ(CÈD×LeÒLeÔn{ð  }B÷  }Gñ  }Gô  oHÜ+Ø!¤D¨¯©Ó$4Ñ4ó6ð 6ð �Q‘˜ÐÐr   )r{   r|   r}   r„   rD   r   rO   r¿   r   rÁ   ÚlistrÅ   r^   r   r   r   r   ƒ  sl   „ ð#¨ð #ÀDð #ÈTó #ð>˜dð > tó >ð	'˜ð 	' $ó 	'ð1˜Tð 1 d¢k¨có 1ð ˜Tð   dô  r   r   )$rz   r@   ro   ÚsysÚ_exceptionsÚ_utilsr   Ú	threadingr   Úwsaccel.xormaskr   rƒ   r   ÚImportErrorÚ	byteorderr   Ú__all__r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   ÚSTATUS_SERVICE_RESTARTÚSTATUS_TRY_AGAIN_LATERr)   r*   rQ   r   r   r   r^   r   r   ú<module>rÑ      s0  ðÛ Û 	Û Û 
ä Ý !Ý ðð&Mõ
 0ð/˜ó /ò€ð$ €ØÐ ØÐ Ø#Ð Ø"Ð ØÐ ØÐ ØÐ ØÐ ØÐ Ø"Ð ØÐ ØÐ ØÐ Ø!Ð ð ØØØ ØØØØØØØØðÐ ÷ iIñ iI÷Xp%ñ p%÷f% ò % øðy
 ò Mà—}‘}ÐðM˜%Ÿ+™+ð M°5·;±;ð MÀ5õ Mð	Mús   ¤A? Á?/B1Â0B1