
    VGh!'                    4   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Zd dl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 ej&                  rd dlmZ dd	lmZ ddd
Zd Zd Zd Z	 	 	 	 	 	 ddZ G d d      ZddZd Zd Z d Z!ejD                  dfe ddZ#y)    )annotationsN   )RequestError   )certifi)	ProxyTypesockssocket)Iterable)HTTPHeaderDictc                >   t         r'|r%| j                  t        j                                y 	 | j                          y # t        j
                  $ rI t        j                  dk(  r#t        t        d      rdD ]  }t        | |        | j                          Y y w xY w)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      b/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/networking/_helper.pyssl_load_certsr       s    ;%%W]]_%=
	/&&( || 	/||w&738K+L!/ EI0)DE,,.	/s   A   ABBc                   	 t        j                  |      D cg c]7  \  }}}|dk(  r,|du s&t         j                  j                  j                  |v r|9 }}}}|D ]@  }t        j                  t         j                        5  | j                  |       d d d        B y c c}}}w # t
        $ r Y y w xY w# 1 sw Y   cxY w)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 M/$%
*d]ckk&=&=&A&AU&J  M M
  ;  . 	;--T-:	; 	;;M  	; 	;s.   B( <B!B( B7!B( (	B43B47C 	c                   t         j                  j                  |       }|j                  j	                         dk(  rt
        j                  }d}n|j                  j	                         dk(  rt
        j                  }d}n|j                  j	                         dk(  rt
        j                  }d}nV|j                  j	                         dk(  rt
        j                  }d}n&t        d|j                  j	                                d }||j                  |j                  xs d	| ||j                         ||j                        d
S )Nsocks5Fsocks5hTsocks4socks4azUnknown SOCKS proxy version: c                H    | s| S t         j                  j                  |       S N)urllibparseunquote_plus)ss    r   unquote_if_non_emptyz3make_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>   r@   rA   )socks_proxyurl_components
socks_typer?   r:   s        r   make_socks_proxy_optsrM   5   s   \\**;7N""$0%%
				$	$	&)	3%%
				$	$	&(	2%%
				$	$	&)	3&&
89N9N9T9T9V8WXYY,
  ''##+t()@)@A()@)@A r;   c                4    |dk(  r| dk7  rd} |dv r| dk(  rd} | S )z Unified redirect method handlingi/  HEADGET)i-  i.  POST )methodstatuss     r   get_redirect_methodrU   T   s2    
 }6)
 & 0Mr;   c                \   t        j                  t         j                        }| |_        | rt         j                  nt         j
                  |_        t        |d      r(t        j                  j                  d      xs d |_        t        j                  t              5  |j                  dg       d d d        | rt!        ||       |r'|xj"                  dz  c_        |j%                  d       nbt         j&                  dk\  rOt         j(                  j+                  d      s0|j%                  d       t         j,                  j.                  |_        |r)	 |j3                  |||	       t9        |dd       d|_        |S # 1 sw Y   xY w# t         j4                  $ r t7        d
      w xY w)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)keyfilerA   z!Unable to load client certificatepost_handshake_authT)r   
SSLContextPROTOCOL_TLS_CLIENTcheck_hostnameCERT_REQUIRED	CERT_NONEverify_moder   osenvirongetrW   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_contextrx   d   sl    nnS445G#G/5#++3==Gw)*"$**.."A"IT
 
		0	1 1""J<01w,1I&		!	!Y	.s7J7J7U7UV`7a 	f	h"%.."8"8	D##",B4 $ 6 7148D*.G'NI1 1> || 	DBCC	Ds   F F  F	F+c                  @     e Zd Z fdZed        Zd Zd Zd Z xZ	S )InstanceStoreMixinc                2    g | _         t        |   di | y NrR   )_InstanceStoreMixin__instancessuper__init__)selfkwargs	__class__s     r   r   zInstanceStoreMixin.__init__   s    "6"r;   c                     t         r5   )rg   )r   s    r   _create_instancez#InstanceStoreMixin._create_instance   s    !!r;   c                    | j                   D ]  \  }}||k(  s|c S   | j                  di |}| j                   j                  ||f       |S r|   )r}   r   append)r   r   keyinstances       r   _get_instancez InstanceStoreMixin._get_instance   s\    !-- 	 MCf}	  )4((262 23r;   c                R    t        t        |dd             r|j                          y y )Nclose)callablerr   r   )r   r   s     r   _close_instancez"InstanceStoreMixin._close_instance   s"    GHgt45NN 6r;   c                    | j                   D ]  \  }}| j                  |        | j                   j                          y r5   )r}   r   clear)r   _r   s      r   _clear_instancesz#InstanceStoreMixin._clear_instances   s;    ++ 	+KAx  *	+ r;   )
__name__
__module____qualname__r   staticmethodr   r   r   r   __classcell__)r   s   @r   rz   rz      s+    # " "!r;   rz   c                >    d| vrdj                  |      xs d| d<   y y )NzAccept-Encodingz, identity)join)headerssupported_encodingss     r   add_accept_encoding_headerr      s)    '%)YY/B%C%Qz!" (r;   c                B     t        j                          fd       }|S )Nc                h    	  | g|i |S # t         $ r}|j                  | |_         d }~ww xY wr5   )r   handler)r   argsr   efuncs       r   wrapperz$wrap_request_errors.<locals>.wrapper   sA    	.t.v.. 	yy  		s    	1,1)	functoolswraps)r   r   s   ` r   wrap_request_errorsr      s%    __T  Nr;   c                   | \  }}}}}t        j                   |||      }	 |t         j                  ur|j                  |       |r|j                  |       |j	                  |       |S # t
        $ r |j                           w xY wr5   )socket_GLOBAL_DEFAULT_TIMEOUT
settimeoutbindconnectOSErrorr   )	ip_addrtimeoutsource_addressafsocktypeproto	canonnamesasocks	            r   _socket_connectr      s~    )0&B%B==Xu-D	&888OOG$IIn%R 

s   AA* *Bc                t   |\  }}}}}	t        |||      }
	 |j                         }|j                  |	d   |	d   d        |
j                  di | |t        j
                  ur|
j                  |       |r|
j                  |       |
j                  |        |
S # t        $ r |
j                           w xY w)Nr   r   )r=   r>   rR   )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    )6&B%Br8U+D'__.!!2a5"Q%"@A+*+&888OOG$IIn%Y 

s   BB B7)_create_socket_funcc                  | \  }}t        j                  ||dt         j                        }|st        d      |kd|d   vrt         j                  nt         j
                  }|D cg c]  }|d   |k(  s| }}|s*t        d|t         j                  k(  rdnd d|d    d      d }	|D ]  }
	  ||
||      }d }	|c S  	 |	c c}w # t        $ r}|}	Y d }~-d }~ww xY w# d }	w xY w)	Nr   z!getaddrinfo returns an empty list:zNo remote IPvrY      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^^%-?TaBD??R6>>%9qA B-a011DFG G C 	&wHD CK	% @  	C	 s0   &C4C.C C 	CCCC#)T)r   zssl.SSLContext)TNNNFT)r   r   r   zIterable[str])$
__future__r   r(   r   rd   r   r   r   typingurllib.parser6   urllib.request
exceptionsr   dependenciesr   socksr   r	   TYPE_CHECKINGcollections.abcr
   utils.networkingr   r    r   rM   rU   rx   rz   r   r   r   r   r   r   rR   r;   r   <module>r      s    "   	  
 
    $ " *	(1/"
;>"  $6r! !8R
	( **&
 (&r;   