
    g              	          U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ  ed	      j                   Z ed
      j$                  Z ed      j(                  Z ed      j(                  Z ed      j(                  Z ed
      j(                  Z ed      j(                  ZdZee   ed<   dZee   ed<   dZee   ed<   ej@                  dee   fd       Z!dede"ddfdZ#esere#Z$n		 ddl%m&Z& e&Z$ ejP                  d      Z)ee
e*      ed<    ejP                  d      Z+ee
e*      ed<   d%de	e*   d e,deee,f   fd!Z-	 d&d"ed e,d#e,de*fd$Z.y# e'$ r e#Z$Y ew xY w)'z1Helpers for WebSocket protocol versions 13 and 8.    N)Struct)TYPE_CHECKINGFinalListOptionalPatternTuple   )NO_EXTENSIONS   )WSHandshakeErrorz!Qz!Hz!BBz!BBHz!BBQz!Li @  MSG_SIZE   MASK_LENs$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11WS_KEYreturnc            	      x     t        d      D   cg c]   t         fdt        d      D              ! c} S c c} w )N   c              3   (   K   | ]	  }|z    y wN ).0abs     O/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/_websocket/helpers.py	<genexpr>z_xor_table.<locals>.<genexpr>   s     ,A!a%   )rangebytes)r   s   `r   
_xor_tabler       s.    6;CjAjE,s,,jAAAs   $7maskdatac                    t        |t              sJ |       t        |       dk(  sJ |        |rt               fd| 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<   yy)aw  Websocket masking function.

    `mask` is a `bytes` object of length 4; `data` is a `bytearray`
    object of any length. The contents of `data` are masked with `mask`,
    as specified in section 5.3 of RFC 6455.

    Note that this function mutates the `data` argument.

    This pure-python implementation may be replaced by an optimized
    version when available.

    r   c              3   (   K   | ]	  }|     y wr   r   )r   n
_XOR_TABLEs     r   r   z)_websocket_mask_python.<locals>.<genexpr>0   s     2TjmTr   Nr   r
      )
isinstance	bytearraylenr    	translate)r!   r"   r   r   cdr&   s         @r   _websocket_mask_pythonr.      s     dI&,,&t9>4>\
2T2
1a1I''*SqS	!$Q$Z))!,QTT
!$Q$Z))!,QTT
!$Q$Z))!,QTT
     )_websocket_mask_cythonz^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$
_WS_EXT_REzpermessage-deflate([^,]+)?_WS_EXT_RE_SPLITextstrisserverc                 D   | syd}d}t         j                  |       D ]  }|j                  d      }|sd} ||fS t        j	                  |      }|rd}|rP|j                  d      r't        |j                  d            }|dkD  s|dk  rd}p|j                  d      rd} ||fS |j                  d	      r/t        |j                  d	            }|dkD  s|dk  rt        d
      |j                  d      rd} ||fS |rt        d|j                  d      z          ||fS )N)r   Fr   Fr      r   	   T   zInvalid window sizer
   z#Extension for deflate not supported)r2   finditergroupr1   matchintr   )r3   r4   compress
notakeoverextdefextr;   s          r   ws_ext_parserA   M   sI   HJ((01HJ ZI   (H ;;q>"5;;q>2H
  "}1#$ ;;q>!%J$ Z! ;;q>"5;;q>2H
  "}1./DEE;;q>!%J
 Z "#H399UV<#WXXQ 1T Zr/   r=   server_notakeoverc                     | dk  s| dkD  rt        d      dg}|s|j                  d       | dk  r|j                  dt        |       z          |r|j                  d       dj                  |      S )	Nr7   r6   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateclient_max_window_bitszserver_max_window_bits=server_no_context_takeoverz; )
ValueErrorappendstrjoin)r=   r4   rB   
enabledexts       r   
ws_ext_genrK      s    
 !|x"}Q
 	
 ''J23"}3c(mCD67 99Z  r/   )F)r6   FF)/__doc__	functoolsrestructr   typingr   r   r   r   r   r	   helpersr   modelsr   unpack_fromUNPACK_LEN3unpackUNPACK_CLOSE_CODEpack	PACK_LEN1	PACK_LEN2	PACK_LEN3PACK_CLOSE_CODEPACK_RANDBITSr   r<   __annotations__r   r   r   	lru_cacher    r)   r.   websocket_maskr!   r0   ImportErrorcompiler1   rH   r2   boolrA   rK   r   r/   r   <module>rc      s   7  	  G G # $Tl&&4L'' 5M	6N	6N	,##t!!%* %* >e > BDK B B- -i -D -2 M+N00/
 #-"**/#
E'#,  )3

3P(Q %% Q0 # 0 $ 0 5dCS 0 h KP!!"&!CG!!E  0/0s   4E E"!E"