
    yfb                       d dl m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m	Z	m
Z
mZ ddlmZmZ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d
lmZ ddlmZ ddl m!Z! es e"d      d dl#Z e$ e%e!ejL                  jL                  jO                  d                  Z(e(dk  r e"d      d dl)Zd dl*m+Z+ d dl,Z ejZ                  e.      5  dej^                  j`                  jb                  _2        dej^                  j`                  jb                  _3        ddd        G d de      Z4e G d de             Z5y# 1 sw Y   %xY w)    )annotationsN   )create_connectioncreate_socks_proxy_socketmake_socks_proxy_optsselect_proxy)FeaturesResponseregister_rh)CertificateVerifyError	HTTPError
ProxyErrorRequestErrorSSLErrorTransportError)WebSocketRequestHandlerWebSocketResponse   )	functools)
websockets)r   )int_or_nonezwebsockets is not installed.)   r   z"Only websockets>=12.0 is supported)	parse_uric                  6     e Zd Zd fdZ fdZd Zd Z xZS )WebsocketsResponseAdapterc                
   t         |   t        j                  |j                  j
                  xs d      ||j                  j                  |j                  j                  |j                  j                         || _	        y )N    fpurlheadersstatusreason)
super__init__ioBytesIOresponsebodyr"   status_codereason_phrase_ws)selfwsr!   	__class__s      ?/usr/lib/python3/dist-packages/yt_dlp/networking/_websockets.pyr&   z"WebsocketsResponseAdapter.__init__:   sc    zz"++**1c2KK'';;**;;,, 	 	
 r   c                V    | j                   j                          t        |           y N)r-   closer%   )r.   r0   s    r1   r4   zWebsocketsResponseAdapter.closeD   s    r   c                   	 | j                   j                  |      S # t        j                  j                  t
        t        f$ r}t        |      |d }~wt        $ r}t        |      |d }~wt        $ r}t        |      |d }~ww xY wNcause)r-   sendr   
exceptionsWebSocketExceptionRuntimeErrorTimeoutErrorr   SocksProxyErrorr   	TypeErrorr   )r.   messagees      r1   r9   zWebsocketsResponseAdapter.sendH   sv    	/88==))%%88,U 	1 q)q0 	-1%1, 	/Q'Q.	/s-    (B	AB	A++B	7BB	c                    	 | j                   j                         S # t        $ r}t        |      |d }~wt        j
                  j                  t        t        f$ r}t        |      |d }~ww xY wr6   )
r-   recvr>   r   r   r:   r;   r<   r=   r   )r.   rA   s     r1   rC   zWebsocketsResponseAdapter.recvS   s]    	188==?" 	-1%1,%%88,U 	1 q)q0	1s    	A/2+A/A**A/)r/   z'websockets.sync.client.ClientConnection)__name__
__module____qualname__r&   r4   r9   rC   __classcell__r0   s   @r1   r   r   8   s    	/1r   r   c                  t     e Zd ZdZdZdZej                  ej                  fZ	dZ
 fdZ fdZd Zd Z xZS )	WebsocketsRHz~
    Websockets request handler
    https://websockets.readthedocs.io
    https://github.com/python-websockets/websockets
    )wssr/   )socks4socks4asocks5socks5hr   c                   t        |   |i | i | _        dD ]  }t        j                  |      }t        j
                  t        j                        }|j                  t        j                  | j                   d             || j                  |<   |j                  |       | j                  s|j                  t        j                          y )N)zwebsockets.clientzwebsockets.server)streamz: %(message)s)r%   r&   _WebsocketsRH__logging_handlerslogging	getLoggerStreamHandlersysstdoutsetFormatter	FormatterRH_NAME
addHandlerverbosesetLevelDEBUG)r.   argskwargsnameloggerhandlerr0   s         r1   r&   zWebsocketsRH.__init__i   s    $)&)"$> 	/D&&t,F++3::>G  !2!2dll^=3Q!RS,3D##D)g&||.	/r   c                l    t         |   |       |j                  dd        |j                  dd        y )Ntimeout	cookiejar)r%   _check_extensionspop)r.   
extensionsr0   s     r1   rg   zWebsocketsRH._check_extensionsu   s,    !*-y$'{D)r   c                    | j                   j                         D ])  \  }}t        j                  |      j	                  |       + y r3   )rR   itemsrS   rT   removeHandler)r.   ra   rc   s      r1   r4   zWebsocketsRH.closez   s?     "44::< 	;MD'd#11':	;r   c           
     "   | j                  |      }| j                  |j                        }d|vr3| j                  |      }|j	                  |j
                        }|r||d<   t        |j
                        }| j                  r| j                  dfnd |d}t        |j
                  | j                  |            }	 |rQt        |      }	t        d|	d   |	d   ft        j                  t        |j                  |j                   f|	      d|}
n#t        dd|j                  |j                   fi|}
t"        j$                  j&                  j)                  |
|j
                  ||d |j*                  r| j-                         nd d      }t/        ||j
                  	      S # t0        $ r}t3        |
      |d }~wt"        j4                  j6                  $ r}t9        |
      |d }~wt:        j<                  $ r}t?        |
      |d }~wt:        j@                  $ r}tA        |
      |d }~wt"        j4                  jB                  $ r}tE        tG        tI        jJ                  |jL                  jN                        |j
                  |jL                  j                  |jL                  jP                  |jL                  jR                              |d }~wtT        tV        t"        j4                  jX                  f$ r}t[        |
      |d }~ww xY w)Ncookier   )source_addressre   addrport)address_create_socket_funcrr   )sockuriadditional_headersopen_timeoutuser_agent_headerssl_contextclose_timeout)r!   r7   r    )._calculate_timeout_merge_headersr"   _get_cookiejarget_cookie_headerr!   r   ro   r   _get_proxiesr   r   r   partialr   hostrq   r   syncclientconnectsecure_make_sslcontextr   r>   r   r:   
InvalidURIr   sslSSLCertVerificationErrorr   r   InvalidStatusr   r
   r'   r(   r)   r*   r+   r,   OSErrorr=   r;   r   )r.   requestre   r"   rf   cookie_headerwsuricreate_conn_kwargsproxysocks_proxy_optionsrt   connrA   s                r1   _sendzWebsocketsRH._send   s   ))'2%%goo67"++G4I%77DM$1!'++&:>:M:Mt22A6SW
 W[[$*;*;G*DE,	1&;E&B#( 08:Mf:UV(1(9(91EJJ

3KM`)b )	 ) "ZZ4( ??))11KK#*$"&7<||D113 2 D -Tw{{CC  	-1%1,$$// 	/Q'Q.++ 	9(q1q8|| 	+#*$$22 	zz!**//2JJ..::11::335  z'<'<'O'OP 	1 q)q0	1sV   >C"F! !	L*F77 LG$$L:HLH** L
BK+L<L		L)rD   rE   rF   __doc___SUPPORTED_URL_SCHEMES_SUPPORTED_PROXY_SCHEMESr	   	ALL_PROXYNO_PROXY_SUPPORTED_FEATURESrZ   r&   rg   r4   r   rG   rH   s   @r1   rJ   rJ   ]   sF    
 +I#--x/@/@AG
/*
;;1r   rJ   )6
__future__r   
contextlibr'   rS   r   rV   _helperr   r   r   r   commonr	   r
   r   r:   r   r   r   r   r   r   	websocketr   r   compatr   dependenciesr   socksr>   utilsr   ImportErrorwebsockets.versiontuplemapversionsplitwebsockets_versionwebsockets.sync.clientwebsockets.urir   websockets.sync.connectionsuppress	Exceptionr   
connection
Connectionrecv_excrecv_events_excr   rJ   r{   r   r1   <module>r      s&   "  	  
 
  4 3  B  % 1 
3
44 3{J,>,>,F,F,L,LS,QRS 
:
;;  $ "Z# A59JOO))2<@JOO))9	A"1 1 "1J ]1* ]1 ]1[A As   AD==E