
    V|h#'                    J   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rS SK	r
S SKr
SSKJr  SSKJr  SSKJrJr  \R&                  (       a  S SKJr  SS	KJr  SSS
 jjrS rS rS r      SS jr " S S5      rSS jrS rS r S r!\RD                  S4\ S.S jjr#g)    )annotationsN   )RequestError   )certifi)	ProxyTypesockssocket)Iterable)HTTPHeaderDictc                ^   [         (       a*  U(       a#  U R                  [         R                  " 5       S9  g  U R                  5         g ! [        R
                   aP    [        R                  S:X  a)  [        [        S5      (       a  S H  n[        X5        M     U R                  5          g f = f)N)cafilewin32enum_certificates)CAROOT)r   load_verify_locationswhereload_default_certssslSSLErrorsysplatformhasattrssl_load_windows_store_certsset_default_verify_paths)contextuse_certifi	storenames      S/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/networking/_helper.pyssl_load_certsr       s}    w;%%W]]_%=
	/&&( || 	/||w&738K+L+L!/I0D "0,,.	/s   A A!B,+B,c                    [         R                  " U5       VVVs/ s H?  u  p#nUS:X  d  M  USL d*  [         R                  R                  R                  U;   d  M=  UPMA     nnnnU H?  n[        R                  " [         R                  5         U R                  US9  S S S 5        MA     g s  snnnf ! [
         a     g f = f! , (       d  f       Mj  = f)Nx509_asnT)cadata)
r   r   PurposeSERVER_AUTHoidPermissionError
contextlibsuppressr   r   )ssl_contextr   certencodingtrustcertss         r   r   r   (   s    363H3H3S M3S/$%
* d]ckk&=&=&A&AU&J 3S M
   .--T-: /. M   /.s9   B3 B,+B,B,"B3 C,B3 3
C ?C 
C	c                   [         R                  R                  U 5      nUR                  R	                  5       S:X  a  [
        R                  nSnOUR                  R	                  5       S:X  a  [
        R                  nSnOUR                  R	                  5       S:X  a  [
        R                  nSnOWUR                  R	                  5       S:X  a  [
        R                  nSnO&[        SUR                  R	                  5        35      eS nUUR                  UR                  =(       d    S	UU" UR                  5      U" UR                  5      S
.$ )Nsocks5Fsocks5hTsocks4socks4azUnknown SOCKS proxy version: c                R    U (       d  U $ [         R                  R                  U 5      $ N)urllibparseunquote_plus)ss    r   unquote_if_non_empty3make_socks_proxy_opts.<locals>.unquote_if_non_emptyF   s    H||((++    i8  )	proxytypeaddrportrdnsusernamepassword)r6   r7   urlparseschemelowerr   SOCKS5SOCKS4SOCKS4A
ValueErrorhostnamer?   rA   rB   )socks_proxyurl_components
socks_typer@   r:   s        r   make_socks_proxy_optsrN   5   s   \\**;7N""$0%%
				$	$	&)	3%%
				$	$	&(	2%%
				$	$	&)	3&&
89N9N9T9T9V8WXYY,
  ''##+t()@)@A()@)@A r<   c                >    US:X  a  U S:w  a  Sn US;   a  U S:X  a  Sn U $ )z Unified redirect method handlingi/  HEADGET)i-  i.  POST )methodstatuss     r   get_redirect_methodrV   T   s2    
 }6)
 & 0Mr<   c                   [         R                  " [         R                  5      nXl        U (       a  [         R                  O[         R
                  Ul        [        US5      (       a-  [        R                  R                  S5      =(       d    S Ul        [        R                  " [        5         UR                  S/5        S S S 5        U (       a  [!        Xe5        U(       a'  U=R"                  S-  sl        UR%                  S5        Oh[         R&                  S:  aT  [         R(                  R+                  S5      (       d0  UR%                  S5        [         R,                  R.                  Ul        U(       a&   UR3                  XUS	9  [9        USS 5      b  SUl        U$ ! , (       d  f       N= f! [         R4                   a    [7        S
5      ef = f)Nkeylog_filenameSSLKEYLOGFILEzhttp/1.1   DEFAULT)r   r   r   LibreSSLzX@SECLEVEL=2:ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES:DHE+AES:!aNULL:!eNULL:!aDSS:!SHA1:!AESCCM)keyfilerB   z!Unable to load client certificatepost_handshake_authT)r   
SSLContextPROTOCOL_TLS_CLIENTcheck_hostnameCERT_REQUIRED	CERT_NONEverify_moder   osenvirongetrX   r(   r)   NotImplementedErrorset_alpn_protocolsr    optionsset_ciphersOPENSSL_VERSION_INFOOPENSSL_VERSION
startswith
TLSVersionTLSv1_2minimum_versionload_cert_chainr   r   getattrr^   )verifyclient_certificateclient_certificate_keyclient_certificate_passwordlegacy_supportr   r   s          r   make_ssl_contextry   d   sd    nnS445G#/5#++3==Gw)**"$**.."A"IT
 
		0	1""J<0 
2w,1I&		!	!Y	.s7J7J7U7UV`7a7a 	f	h"%.."8"8	D##"4 $ 6 7148D*.G'NI 
2	1> || 	DBCC	Ds   /F!:F2 !
F/2 Gc                  J   ^  \ rS rSrU 4S jr\S 5       rS rS rS r	Sr
U =r$ )InstanceStoreMixin   c                4   > / U l         [        TU ]  " S0 UD6  g NrS   )_InstanceStoreMixin__instancessuper__init__)selfkwargs	__class__s     r   r   InstanceStoreMixin.__init__   s    "6"r<   c                     [         er5   )rh   )r   s    r   _create_instance#InstanceStoreMixin._create_instance   s    !!r<   c                    U R                    H  u  p#X!:X  d  M  Us  $    U R                  " S0 UD6nU R                   R                  X45        U$ r~   )r   r   append)r   r   keyinstances       r   _get_instance InstanceStoreMixin._get_instance   sO    !--MC} . ((262 23r<   c                \    [        [        USS 5      5      (       a  UR                  5         g g )Nclose)callablers   r   )r   r   s     r   _close_instance"InstanceStoreMixin._close_instance   s%    GHgt455NN 6r<   c                    U R                    H  u  pU R                  U5        M     U R                   R                  5         g r5   )r   r   clear)r   _r   s      r   _clear_instances#InstanceStoreMixin._clear_instances   s4    ++KA  * , r<   )__instances)__name__
__module____qualname____firstlineno__r   staticmethodr   r   r   r   __static_attributes____classcell__)r   s   @r   r{   r{      s0    # " "! !r<   r{   c                L    SU ;  a  SR                  U5      =(       d    SU S'   g g )NzAccept-Encodingz, identity)join)headerssupported_encodingss     r   add_accept_encoding_headerr      s)    '%)YY/B%C%Qz!" (r<   c                F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                j   >  T" U /UQ70 UD6$ ! [          a  nUR                  c  Xl        e S nAff = fr5   )r   handler)r   argsr   efuncs       r   wrapper$wrap_request_errors.<locals>.wrapper   s?    	.t.v.. 	yy  		s    
2-2)	functoolswraps)r   r   s   ` r   wrap_request_errorsr      s%    __T  Nr<   c                   U u  p4pVn[         R                   " X4U5      n U[         R                  La  UR                  U5        U(       a  UR                  U5        UR	                  U5        U$ ! [
         a    UR                  5         e f = fr5   )socket_GLOBAL_DEFAULT_TIMEOUT
settimeoutbindconnectOSErrorr   )	ip_addrtimeoutsource_addressafsocktypeproto
_canonnamesasocks	            r   _socket_connectr      sx    *1'B%R==u-D	&888OOG$IIn%R 

s   AA. .B
c                |   Uu  pVpxn	[        XVU5      n
 UR                  5       nUR                  U	S   U	S   S.5        U
R                  " S0 UD6  U[        R
                  La  U
R                  U5        U(       a  U
R                  U5        U
R                  U 5        U
$ ! [         a    U
R                  5         e f = f)Nr   r   )r>   r?   rS   )r	   copyupdatesetproxyr   r   r   r   r   r   r   )	dest_addr
proxy_argsproxy_ip_addrr   r   r   r   r   r   r   r   connect_proxy_argss               r   create_socks_proxy_socketr      s    *7'B%RrU+D'__.!!2a5"Q%"@A+*+&888OOG$IIn%Y 

s   B
B B;)_create_socket_funcc                  U u  pE[         R                  " XES[         R                  5      nU(       d  [        S5      eUbw  SUS   ;  a  [         R                  O[         R
                  nU Vs/ s H  oS   U:X  d  M  UPM     nnU(       d+  [        SU[         R                  :X  a  SOS SUS    S35      eS n	U H  n
 U" XU5      nS n	Us  $     U	es  snf ! [         a  nUn	 S nAM/  S nAff = f! S n	f = f)	Nr   z!getaddrinfo returns an empty list:zNo remote IPvrZ      z- addresses available for connect. Can't use "z" as source address)r   getaddrinfoSOCK_STREAMr   AF_INETAF_INET6)addressr   r   r   hostr?   ip_addrsr   r>   errr   r   r   s                r   create_connectionr      s    JD!!$a1C1CDH9::!".*;;V^^%-?XTaBDX?R6>>%9qA B-a011DFG G C	&wHD CK 	% @  	C	 s0   -C=C?CC2 
C/"C**C/2C6)T)r   zssl.SSLContext)TNNNFT)r   r   r   zIterable[str])$
__future__r   r(   r   re   r   r   r   typingurllib.parser6   urllib.request
exceptionsr   dependenciesr   socksr   r	   TYPE_CHECKINGcollections.abcr
   utils.networkingr   r    r   rN   rV   ry   r{   r   r   r   r   r   r   rS   r<   r   <module>r      s    "   	  
 
    $ " *	(1/"
;>"  $6r! !8R
	( **&
 (&r<   