
    'j:                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlm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 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mZ d	d
lmZ dedeee         ef         fdZ d:deej!                 fdZ"	 d:dededededede#dee         deeeef                  de$deej!                 deej%        ef         fdZ&dej%        defdZ'dej%        deee         e(ef         fdZ)defdZ*dede(de$fdZ+d edefd!Z,d"ee-         dedefd#Z.	 	 d;dej%        d&eded'ed(e$deeee         e-f                  fd)Z/	 	 	 	 d<d*eeee         e-f                  d+eee         ge-f         ded,ee-         d-ee         d.ee         d/ee-         deeee         e-f                  fd0Z0d*eeee         e-f                  d1ee         d"e-ddfd2Z1	 	 	 	 	 d=d3eee-f         d ed4ed5ed6ed7ed8efd9Z2dS )>    N)socket)encodebytes	b64encode)compare_digest)Logger)Lock)TupleOptionalUnionListCallableDict)urlparseunquote   )FrameHeadersockreturnc                    d }g }	 g }	 |                      d          }|st          d          |                    |           |dk    rnCd                    |                              d                                          }|t          |          dk    rnC|                    |           |s+|                    dd	          }t          |d                   }|d
                    |          fS )NTr   Connection is closed   
    utf-8r       
)	recvConnectionErrorappendjoindecodestriplensplitint)r   statuslineslinecstatus_lines         h/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_sdk/socket_mode/builtin/internals.py_parse_connect_responser,      s    FE)			!A >%&<===KKNNNEzz	 xx~~$$W--3355<3t99>>T 	)**S!,,KQ((F)  499U####r   ssl_contextc                 0    | | nt          j                    S N)sslcreate_default_context)r-   s    r+   _use_or_create_ssl_contextr2   *   s    %1;;s7Q7S7SSr   
session_idserver_hostnameserver_portloggersock_send_lockreceive_timeoutproxyproxy_headerstrace_enabledc
                    t          |	          }	|t          |          }
|
j        |
j        pd}}t	          j        ||f|          }t          t          d          r+|                    t          j        t          j	        d           t          t          d          r+|                    t          j
        t          j        d           d| d| dg}|
j        |
j        xt          |
j                   dt          |
j                   }t          |                    d                                        d	          }|                    d
|            |4|                                D ]\  }}|                    | d|             |                    d           |                    d           d                    d |D                       }|r|                    d|  d|            |5  |                    |                    d                     d d d            n# 1 swxY w Y   t/          |          \  }}|rd|  d| }|                    |           |dk    rt1          d| d| d          |	                    |dd|          }|S |dk    r6|                    d| d| d           t	          j        ||fd          }|S t	          j        ||f|          }|	                    |dd|          }|S )NP   TCP_NODELAYr   SO_KEEPALIVEzCONNECT :z	 HTTP/1.0r   asciizProxy-Authorization: Basic z:  z
c                 6    g | ]}|                                 S  )lstrip).0r(   s     r+   
<listcomp>z4_establish_new_socket_connection.<locals>.<listcomp>O   s     BBB$BBBr   z#Proxy connect request (session id: z):
z$Proxy connect response (session id:    z'Failed to connect to the proxy (proxy: z, connect status code: )T)do_handshake_on_connectsuppress_ragged_eofsr4   i  z!Using non-ssl socket to connect (   )timeout)r2   r   hostnameportr   create_connectionhasattr
setsockoptIPPROTO_TCPr>   
SOL_SOCKETr?   usernamepasswordr   r   encoder!   r   itemsr    debugsendr,   	Exceptionwrap_socketinfo)r3   r4   r5   r6   r7   r8   r9   r:   r;   r-   parsed_proxy
proxy_host
proxy_portr   message	raw_valueauthkvreqr&   textlog_messages                          r+    _establish_new_socket_connectionri   .   s    -[99K!-!68I8ORJ
'Z(@/RR6=)) 	GOOF.0BAFFF6>** 	GOOF-v/BAFFFFoFFFFFG ,1F1R"<#899\\GLDY<Z<Z\\IY--g6677>>wGGDNN???@@@$%++-- , ,1!{{q{{++++rr;;BB'BBBCC 	VLLTzTTsTTUUU 	+ 	+IIcjj))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+.t44 	&WWWQUWWKLL%%%S==memmdjmmmnnn&&$(!%+	 ' 
 
 cXXX+XXXYYY'+(FPQRRR#_k$BOTTD"" $!'	 #  D Ks   7)H,,H03H0c                     g }	 |                      d          }|st          d          |                    d          }|dk    rn|dk    r|                    |           ^d                    |          S )NTr   r   r   r   rB   )r   r   r!   r   r    )r   csbr)   s       r+   _read_http_response_linern   s   s~    	B99Q<< 	:!"8999'""9999IIaLLL 772;;r   c                 <   g }d}i }	 t          |           }|>|                    d          }t          |          dk    rt          |d                   }no|                    d          }t          |          dk    rG|d                                         ||d                                                                         <   |%t          |                                          dk    rn|                    |           d                    |          }|||fS )	zParses the handshake response.

    Args:
        sock: The current active socket

    Returns:
        (http status, headers, whole response as a str)
    NTr   r   r   r@   r   r   )rn   r$   r#   r%   r"   lowerr   r    )r   r'   r&   headersr(   elementsrg   s          r+   _parse_handshake_responsers      s    EF G'-->zz#H8}}q  Xa[))zz#H8}}!!7?{7H7H7J7J))++11334<3tzz||,,11T 99UDGT""r   c                      t          t          j        d                                        d                                          S )N   r   )r   osurandomr!   r"   rD   r   r+   _generate_sec_websocket_keyrx      s2    rz"~~&&--g66<<>>>r   sec_websocket_keyrq   c                 R   | dz                        d          }t          t          j        |                                                                        d                                          }|                    dd                                          }t          ||          S )Nz$258EAFA5-E914-47DA-95CA-C5AB0DC85B11r   zsec-websocket-acceptrB   )	rW   r   hashlibsha1digestr!   r"   getr   )ry   rq   re   expectedactuals        r+   _validate_sec_websocket_acceptr      s    	C	CKKGTTA7<??113344;;GDDJJLLH[[/44::<<F(F+++r   opcodec                     | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS | t           j        k    rdS dS )Ncontinuationrg   binaryclosepingpong-)r   OPCODE_CONTINUATIONOPCODE_TEXTOPCODE_BINARYOPCODE_CLOSEOPCODE_PINGOPCODE_PONG)r   s    r+   _to_readable_opcoder      sy    000~(((v***x)))w(((v(((v3r   datac                     	 | *t          | t                    r|                     d          S dS # t          $ r'}|                    d| d| d           Y d }~dS d }~ww xY w)Nr   rB   z!Failed to parse a payload (data: z	, error: rI   )
isinstancebytesr!   UnicodeDecodeErrorrY   )r   r6   es      r+   _parse_text_payloadr      s    
4 7 7;;w'''2   NNN!NNNOOOrrrrrs   +0 
A!AA!   Fsock_receive_lockreceive_buffer_sizeall_message_trace_enabledc           	           ddt           t                   f fd}t          g |d d d t                                S )Nspecific_buffer_sizec                    | | n}5  	                      |          }r+t          |          dk    r                    d|           |cd d d            S # t          $ rZ}|j        t          j        t          j        fv r4                    d           t                      cY d }~cd d d            S |d }~ww xY w# 1 swxY w Y   d S )Nr   zReceived bytes: z*The connection seems to be already closed.)r   r#   rY   OSErrorerrnoEBADFENOTSOCKr   )	r   sizereceived_bytesr   r   r6   r   r   r   s	       r+   receivez"_receive_messages.<locals>.receive   sZ   ';'G##M` 	 	!%4, L>**Q..%J%J%JKKK%	 	 	 	 	 	 	 	     7u{EN;;; LL!MNNN 77NNNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sB   CAA
C &AB;'C (C9B;;C  CC
C)messagesr   remaining_bytescurrent_mask_keycurrent_headercurrent_datar6   r/   )r
   r%   _fetch_messagesr   )r   r   r6   r   r   r   s   ````` r+   _receive_messagesr      s{     hsm          & WW   r   r   r   r   r   r   r   c           	         |
 |            }|t          |          dk    r|t          | ||           | S |t          |          dk    r| |            z  }|d         dk    rq|$t          |          dk    rt          | ||           t          | d |d d                    |dd          }t          |          dk    r| S t          | |||          S |d         |d         }}|dz  }	d}
|	dk    rTt          |          dk     r| |d	          z  }t          j        d
t          |dd                             d         }	d}
nY|	dk    rSt          |          dk     r| |d	          z  }t          j        dt          |dd                             d         }	d}
t          |dz  |dz  |dz  |dz  |dz  |dz  |	          }|j        dk    r||
|
dz   }}|||         }|
dz  }
|
|
|	z   }}|||         }t                      }|j        dk    r3t          |          D ]}||dz           }||xx         |z  cc<   ||z  }n||z  }t          |          |	k    rCt          | ||           ||d          }t          |          dk    rt          | |||          S | S t          |          |	k     rt          | |||||          S t          ||d |	                    | S ||j	        t          |          z
  }|t          |          k    r||z  }t          | |||||          S ||d |         z  }t          | ||           ||d          }t          |          dk    r| S t          | |||          S | S )Nr   r   
   r   )r   r   r   r6      ~      r   z!Hz!Q   @       ru      )finrsv1rsv2rsv3r   maskedlength)r   r   r   r   r   r6   )
r#   _append_messager   structunpackr   r   r   ranger   )r   r   r6   r   r   r   r   b1b2current_data_lengthidx_after_length_partidx1idx2startenddata_to_appendimasklength_neededs                      r+   r   r      s    !'))#o"6"6!";";%HnlCCC1$$wwyy(O1##'C,=,=,B,B.,GGGHdOBQB,?@@@-abb1O?##q((&%#$3!	    !#_Q%7B $&
?%&#%%?##a''774==0"(-eOAaC<P6Q6Q"R"RST"U$%!! C''?##b((774==0"(-eOAbD<Q6R6R"S"STU"V$&!$Zjjj
?
?&
 
 
  1$$'24IA4Md#249#= %*%*,ADW,Ws(s3ww 1$$>** * *'A.q!!!T)!!!!N*LLN*L| 333HnlCCC-cdd3O?##a''&%#$3!	     !444"!!1-)    NL9M:M9M,NOOOO !&-L0A0AA3////O+L"!!1-)    ON]N;;LHnlCCC-mnn=O?##q(( '%#$3!	    Or   headerc                 4    |                      ||f           d S r/   )r   )r   r   r   s      r+   r   r   w  s     
 OOVTN#####r   payloadr   r   r   r   r   c           	      8   |dz  |dz  z  |dz  z  |dz  z  |z  }t          |g          }t          | t                    r|                     d          n| }	t	          |	          }
|
dk    r|dz  |
z  }|t          |g          z  }n!|dz  dz  }|t          j        d||
          z  }t          j        t          d	          d
          }|t          |          z  }t          d t          |	t          j        |                    D                       }||z   S )N         r   r   }   r   z!BH   )rd   c              3   &   K   | ]\  }}||z  V  d S r/   rD   )rF   byter   s      r+   	<genexpr>z0_build_data_frame_for_sending.<locals>.<genexpr>  s*      tt
dtttttttr   )r   r   strrW   r#   r   packrandomchoicesr   zip	itertoolscycle)r   r   r   r   r   r   r   r   r   original_payload_datapayload_lengthr   mask_keypayload_datas                 r+   _build_data_frame_for_sendingr     s,    
DAI			)DAI	5	>B2$KKF>HRU>V>V#c7>>'#:#:#:\c.//Nq[>)%++q[3&+eR888 .sq999H
eHooFttcBWYbYhiqYrYr>s>stttttLL  r   r/   )r   F)NNNN)r   r   r   r   r   )3r   r{   r   rv   r   r   Socketr0   r   base64r   r   hmacr   loggingr   	threadingr   typingr	   r
   r   r   r   r   urllib.parser   r   frame_headerr   r%   r   r,   
SSLContextr2   floatbool	SSLSocketri   rn   dictrs   rx   r   r   r   r   r   r   r   r   rD   r   r+   <module>r      s         				   # # # # # # 



  ) ) ) ) ) ) ) )                   ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? * * * * * * * * % % % % % %$& $U8C=#3E-F $ $ $ $,T THS^,D T T T T -1B BBB B 	B
 B B C=B DcN+B B #.)B 3=& !B B B BJ3= S    #CM #eHSM4QT<T6U # # # #:?S ? ? ? ?,c ,D ,T , , , ,      huo v #      $&+" "
-"" " 	"
  $" 
%%u,
-." " " "R (,&*,0$(K K5+.567Kx}ou,-K K e_	K
 smK [)K 5/K 
%%u,
-.K K K K\$5+.567$[!$ $ 
	$ $ $ $ ! !3:!! 
! 	!
 ! ! ! ! ! ! ! !r   