
    V|h;                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrSSKJ	r	J
r
Jr  SSKJr  SSKJrJrJr  SSKJrJrJrJrJrJr  SS	KJrJr  SS
KJr  SSKJr  SSK J!r!  \(       d  \"" S5      eS SK#r\$" \%" \!\RL                  RL                  RO                  S5      5      5      r(\(S:  a&  \RL                  RL                   S3\l)        \"" S5      eS SK*rS SK+J,r,  S SK-r\R\                  " \/5         S\R`                  Rb                  Rd                  l3        SSS5         " S S\5      r4\ " S S\5      5       r5g! , (       d  f       N*= f)    )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)
websockets)r   )int_or_nonezwebsockets is not installed.)   r   z (unsupported)z"Only websockets>=13.0 is supported)	parse_uric                  D   ^  \ rS rSrSU 4S jjrU 4S jrS rS rSrU =r	$ )WebsocketsResponseAdapter6   c                  > [         TU ]  [        R                  " UR                  R
                  =(       d    S5      UUR                  R                  UR                  R                  UR                  R                  S9  Xl	        g )N    fpurlheadersstatusreason)
super__init__ioBytesIOresponsebodyr"   status_codereason_phrase_ws)selfwsr!   	__class__s      W/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/networking/_websockets.pyr&   "WebsocketsResponseAdapter.__init__8   sa    zz"++**1c2KK'';;**;;,, 	 	
 r   c                V   > U R                   R                  5         [        TU ]  5         g N)r-   closer%   )r.   r0   s    r1   r5   WebsocketsResponseAdapter.closeB   s    r   c                    U R                   R                  U5      $ ! [        R                  R                  [
        [        4 a  n[        US9UeS nAf[         a  n[        US9UeS nAf[         a  n[        US9UeS nAff = fNcause)r-   sendr   
exceptionsWebSocketExceptionRuntimeErrorTimeoutErrorr   SocksProxyErrorr   	TypeErrorr   )r.   messagees      r1   r;   WebsocketsResponseAdapter.sendF   sv    	/88==))%%88,U 	1 q)q0 	-1%1, 	/Q'Q.	/s-    )B
AB
A''B4
A>>Bc                     U R                   R                  5       $ ! [         a  n[        US9UeS nAf[        R
                  R                  [        [        4 a  n[        US9UeS nAff = fr8   )
r-   recvr@   r   r   r<   r=   r>   r?   r   )r.   rC   s     r1   rF   WebsocketsResponseAdapter.recvQ   s]    	188==?" 	-1%1,%%88,U 	1 q)q0	1s    
A+
0,A+
A&&A+)r-   )r/   z'websockets.sync.client.ClientConnection)
__name__
__module____qualname____firstlineno__r&   r5   r;   rF   __static_attributes____classcell__r0   s   @r1   r   r   6   s    	/1 1r   r   c                     ^  \ rS rSrSrSrSr\R                  \R                  4r
SrU 4S jrU 4S jrS rS	 rS
 rSrU =r$ )WebsocketsRH[   zn
Websockets request handler
https://websockets.readthedocs.io
https://github.com/python-websockets/websockets
)wssr/   )socks4socks4asocks5socks5hr   c                  > [         TU ]  " U0 UD6  0 U l        S H  n[        R                  " U5      n[        R
                  " [        R                  S9nUR                  [        R                  " U R                   S35      5        XPR                  U'   UR                  U5        U R                  (       d  M  UR                  [        R                  5        M     g )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&   WebsocketsRH.__init__g   s    $)&)"$>D&&t,F++3::>G  !2!2dll^=3Q!RS,3##D)g&|||. ?r   c                   > [         TU ]  U5        UR                  SS 5        UR                  SS 5        UR                  SS 5        UR                  SS 5        g )Ntimeout	cookiejar
legacy_sslkeep_header_casing)r%   _check_extensionspop)r.   
extensionsr0   s     r1   rq   WebsocketsRH._check_extensionss   sI    !*-y$'{D)|T*+T2r   c                    U R                   R                  5        H*  u  p[        R                  " U5      R	                  U5        M,     g r4   )rY   itemsrZ   r[   removeHandler)r.   rh   rj   s      r1   r5   WebsocketsRH.closez   s8     "44::<MDd#11': =r   c                    SU;  a9  U R                  U5      nUR                  UR                  5      nU(       a  XBS'   g g g )Ncookie)_get_cookiejarget_cookie_headerr!   )r.   requestr"   rn   cookie_headers        r1   _prepare_headersWebsocketsRH._prepare_headers   sC    7"++G4I%77DM$1!  #r   c                   U R                  U5      nU R                  U5      n[        UR                  5      nU R                  (       a  U R                  S4OS US.n[        UR                  U R                  U5      5      n U(       aR  [        U5      n[        SUS   US   4[        R                  " [        UR                  UR                  4U5      S.UD6nO#[        SSUR                  UR                  40UD6nU R                  UR                  R!                  S5      S9n	["        R$                  R&                  R)                  UUR                  UUS UR*                  (       a  U	OS SS	9n
[-        XR                  S
9$ ! [.         a  n[1        US9UeS nAf["        R2                  R4                   a  n[7        US9UeS nAf[8        R:                   a  n[=        US9UeS nAf[8        R>                   a  n[?        US9UeS nAf["        R2                  R@                   a  n[C        [E        [F        RH                  " URJ                  RL                  5      UR                  URJ                  RN                  URJ                  RP                  URJ                  RR                  S95      UeS nAf[T        [V        ["        R2                  RX                  4 a  n[[        US9UeS nAff = f)Nr   )source_addressrm   addrport)address_create_socket_funcr   ro   )legacy_ssl_support)sockuriadditional_headersopen_timeoutuser_agent_headersslclose_timeout)r!   r9   r    )._calculate_timeout_get_headersr   r!   r   r	   _get_proxiesr   r   	functoolspartialr   hostr   _make_sslcontextrs   getr   syncclientconnectsecurer   r@   r   r<   
InvalidURIr   r   SSLCertVerificationErrorr   r   InvalidStatusr   r   r'   r(   r)   r*   r"   r+   r,   OSErrorr?   r=   r   )r.   r}   rm   r"   wsuricreate_conn_kwargsproxysocks_proxy_optionsr   ssl_ctxconnrC   s               r1   _sendWebsocketsRH._send   s   ))'2##G,'++&:>: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( ++w?Q?Q?U?UVb?c+dG??))11KK#*$"&$||G 2 D -T{{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   D F 
K%
F!K%8
GK%
G##K%:
H!K%%BJ**,K%
K  K%)__logging_handlers)rH   rI   rJ   rK   __doc___SUPPORTED_URL_SCHEMES_SUPPORTED_PROXY_SCHEMESr
   	ALL_PROXYNO_PROXY_SUPPORTED_FEATURESra   r&   rq   r5   r   r   rL   rM   rN   s   @r1   rP   rP   [   sP    
 +I#--x/@/@AG
/3;261 61r   rP   )6
__future__r   
contextlibr   r'   rZ   r   r]   _helperr   r   r   utils.networkingr	   commonr
   r   r   r<   r   r   r   r   r   r   	websocketr   r   dependenciesr   socksr@   utilsr   ImportErrorwebsockets.versiontuplemapversionsplitwebsockets_version_yt_dlp__versionwebsockets.sync.clientwebsockets.urir   websockets.sync.connectionsuppress	Exceptionr   
connection
Connectionrecv_excr   rP   r   r   r1   <module>r      s    "   	  
 
 
 , 3 3  B % 1 
3
44 3{J,>,>,F,F,L,LS,QRS %/%7%7%?%?$@"OJ
:
;;  $ "#59JOO))2 $"1 1 "1J a1* a1 a1U $#s   4&D>>
E