
    F/j              	          U d Z ddlZddlZddlmZ ddlmZ ddl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jL                  d      Z'eee(      ed<    ejL                  d      Z)eee(      ed<   d&d e(dz  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)Pattern)Struct)TYPE_CHECKINGFinal   )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     X/var/www/html/maxservice/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AE,s,,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>1   s     2jm2r   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)r/   finditergroupr.   matchintr
   )r0   r1   compress
notakeoverextdefextr8   s          r   ws_ext_parser>   N   sP   HJ((0 (Y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(YT 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 )	Nr4   r3   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:   r1   r?   
enabledexts       r   
ws_ext_genrH      s    
 !|x"}Q
 	
 ''J23"}3c(mCD67 99Z  r,   )F)r3   FF).__doc__	functoolsrer   structr   typingr   r   helpersr   modelsr
   unpack_fromUNPACK_LEN3unpackUNPACK_CLOSE_CODEpack	PACK_LEN1	PACK_LEN2	PACK_LEN3PACK_CLOSE_CODEPACK_RANDBITSr   r9   __annotations__r   r   r   	lru_cachelistr   r&   r+   websocket_maskr   r-   ImportErrorcompiler.   rE   r/   booltupler>   rH   r   r,   r   <module>rb      s   7  	   ' # $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 t 0 t 0 c4i@P 0 h KP!!"&!CG!!E  0/0s   2E E E 