
    yfH"                       d dl mZ d dlZd dlZd dlZddlmZmZ ddl	m
Z
mZ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 e ed       ed ej>                  jA                  d      D              Z!e!dk7  rej>                   de_"         ed      d dl#Zd dl$m%Z%m&Z&  G d dejN                        Z( G d de      Z)e G d dee             Z* ee*      d        Z+y)    )annotationsN   )InstanceStoreMixinselect_proxy)FeaturesRequestResponseregister_preferenceregister_rh)CertificateVerifyError	HTTPErrorIncompleteRead
ProxyErrorSSLErrorTransportError)ImpersonateRequestHandlerImpersonateTarget   )	curl_cffiint_or_nonezcurl_cffi is not installedc              #  6   K   | ]  }t        |d         yw)r   )defaultNr   ).0xs     =/usr/lib/python3/dist-packages/yt_dlp/networking/_curlcffi.py	<genexpr>r      s     ^+a33^s   .)r      
   z (unsupported)z"Only curl_cffi 0.5.10 is supported)	CurlECodeCurlOptc                  4     e Zd ZddZd ZddZ fdZ xZS )CurlCFFIResponseReaderc                X    || _         |j                         | _        d| _        d| _        y )N    r   )	_responseiter_content	_iterator_buffer
bytes_read)selfresponses     r   __init__zCurlCFFIResponseReader.__init__)   s'    !!..0r&   c                     y)NT )r,   s    r   readablezCurlCFFIResponseReader.readable/   s    r&   c                l   d}	 | j                   r|t        | j                        |k  r{t        | j                   d       }|d | _         n[| xj                  |z  c_        | xj                  t        |      z  c_        | j                   r|bt        | j                        |k  r{|t        | j                        }| j                  d | }| j                  |d  | _        | j                   s| j                  s| j                          d}||r| j                          S S # |r| j                          w w xY w)NTF)r)   lenr*   nextr+   close)r,   sizeexception_raisedchunkdatas        r   readzCurlCFFIResponseReader.read2   s    	..dlc$,,6G$6NT^^T2=%)DN%3u:- ..dlc$,,6G$6N |4<<(<<&D<<.DL >>$,,

$

  

  s   BD D %A%D D3c                |    | j                   s!| j                  j                          d| _        t        | 	          y )Nr&   )closedr'   r5   r*   super)r,   	__class__s    r   r5   zCurlCFFIResponseReader.closeL   s*    {{NN  "DLr&   r-   zcurl_cffi.requests.ResponseN)__name__
__module____qualname__r.   r1   r:   r5   __classcell__r>   s   @r   r$   r$   (   s    4 r&   r$   c                  4     e Zd ZU ded<   d fdZddZ xZS )CurlCFFIResponseAdapterr$   fpc                z    t         |   t        |      |j                  |j                  |j
                         y )N)rH   headersurlstatus)r=   r.   r$   rJ   rK   status_code)r,   r-   r>   s     r   r.   z CurlCFFIResponseAdapter.__init__V   s6    %h/$$''	 	 	)r&   c                   	 | j                   j                  |      S # t        j                  j                  j
                  $ r}|j                  t        j                  k(  rlt        |j                  j                  j                  d            }t        | j                   j                  ||| j                   j                  z
  nd |      |t        |      |d }~ww xY w)NzContent-Length)partialexpectedcauserQ   )rH   r:   r   requestserrorsRequestsErrorcoder!   PARTIAL_FILEr   r-   rJ   getr   r+   r   )r,   amtecontent_lengths       r   r:   zCurlCFFIResponseAdapter.read]   s    		177<<$$!!((66 	1vv///!,QZZ-?-?-C-CDT-U!V$ GG..DRD^^dgg.@.@@dh #$$ !q)q0	1s    'CBCCr?   r@   )rA   rB   rC   __annotations__r.   r:   rD   rE   s   @r   rG   rG   S   s    )
1r&   rG   c                      e Zd ZdZdZej                  ej                  fZdZ	 e
dddd      ej                  j                  j                   e
dddd      ej                  j                  j                   e
dd	dd      ej                  j                  j                    e
dd
dd      ej                  j                  j"                   e
dddd      ej                  j                  j$                   e
dddd      ej                  j                  j&                   e
dd
dd      ej                  j                  j(                   e
dddd      ej                  j                  j*                   e
dddd      ej                  j                  j,                   e
dddd      ej                  j                  j.                   e
dddd      ej                  j                  j0                  iZddZ fdZddZ xZS )
CurlCFFIRHr   )httphttps)r_   r`   socks4socks4asocks5socks5hchrome110windows1010710410110099edgesafariz15.5macos12z15.311androidc                B    t         j                  j                  |      S )N)cookies)r   rS   Session)r,   	cookiejars     r   _create_instancezCurlCFFIRH._create_instance~   s    !!))))<<r&   c                    t         |   |       |j                  dd        |j                  dd        |j                  dd        y )Nimpersonaterw   timeout)r=   _check_extensionspop)r,   
extensionsr>   s     r   r|   zCurlCFFIRH._check_extensions   s:    !*-}d+{D)y$'r&   c                   d}| j                  d|j                  vr| j                  |      nd       }| j                  r*|j                  j                  t        j                  d       | j                  |      }d|v r?|j                  j                  t        j                  |d          |j                  dd        t        |j                  |      }|r|j                  j                  t        j                  |       t        j                  j!                  |j                        j"                  j%                         }|dk7  r*|j                  j                  t        j&                  d       | j)                  |      }| j*                  r|j                  j                  t        j,                  | j*                  d          | j*                  j/                  d	      }| j*                  j/                  d
      }	|r*|j                  j                  t        j0                  |       |	r*|j                  j                  t        j2                  |	       | j5                  |      }
|j                  j                  t        j6                  d       |j                  j                  t        j8                  t;        j<                  |
             	 |j?                  |j@                  |j                  ||jB                  | jD                  d|
| jF                  j/                  | jI                  |            | jJ                  d
      }ti        |      }d|jj                  cxk  rdk  sn tm        ||      |S # tL        jN                  jP                  jR                  $ r}|jT                  tV        jX                  k(  rt[        |      ||jT                  tV        j\                  k(  rt_        |      ||jT                  tV        j`                  k(  rd}|jb                  }n7|jT                  tV        j                  k(  rte        |      |tg        |      |Y d }~d }~ww xY w)NFcookie)rw   r   no)proxiesr_   client_certificateclient_certificate_keyclient_certificate_passwordr   T)
methodrK   rJ   r9   verifymax_redirectsr{   rz   	interfacestreamrR      i,  )redirect_loop)7_get_instancerJ   _get_cookiejarverbosecurlsetoptr"   VERBOSE_get_proxiesNOPROXYr}   r   rK   PROXYurllibparseurlparseschemelowerHTTPPROXYTUNNEL_get_impersonate_headers_client_certSSLCERTrX   SSLKEY	KEYPASSWD_calculate_timeoutLOW_SPEED_LIMITLOW_SPEED_TIMEmathceilrequestr   r9   r   !_SUPPORTED_IMPERSONATE_TARGET_MAP_get_request_targetsource_addressr   rS   rT   rU   rV   r!   PEER_FAILED_VERIFICATIONr   SSL_CONNECT_ERRORr   TOO_MANY_REDIRECTSr-   r   r   rG   rL   r   )r,   r   max_redirects_exceededsessionr   proxyr   rJ   r   r   r{   curl_responserZ   r-   s                 r   _sendzCurlCFFIRH._send   sX   !&.2.@.@6>goo6Ud))'2[_ /A /a <<LL3##G,7?LL?KKd# W[[':LLu5\\**7;;7>>DDFF ##G$;$;Q?//8LL1B1BCW1XY%)%6%6%:%:;S%T"*.*;*;*?*?@]*^'%##GNN4JK*##G$5$57RS))'2 	G33Q7G22DIIg4FG	5#OO~~KK\\{{ BBFF,,W57-- , M: +=9hoo++H4JKK+ !!((66 	5vv;;;,151<9666Q'Q.9777)-& !

9??* q)q0$1-14 	5s   A5M2 2'QB7QQr@   )r   r   )rA   rB   rC   RH_NAME_SUPPORTED_URL_SCHEMESr   NO_PROXY	ALL_PROXY_SUPPORTED_FEATURES_SUPPORTED_PROXY_SCHEMESr   r   rS   BrowserType	chrome110	chrome107	chrome104	chrome101	chrome100chrome99edge101edge99
safari15_5
safari15_3chrome99_androidr   rx   r|   r   rD   rE   s   @r   r^   r^   j   s   G.#,,h.@.@AZ(E9d;Y=O=O=[=[=e=e(E9d;Y=O=O=[=[=e=e(E9d;Y=O=O=[=[=e=e(E9d;Y=O=O=[=[=e=e(E9d;Y=O=O=[=[=e=e(D)T:I<N<N<Z<Z<c<c&%D99;M;M;Y;Y;a;a&$	48):L:L:X:X:_:_(FGT:I<N<N<Z<Z<e<e(FGT:I<N<N<Z<Z<e<e(D)T:I<N<N<Z<Z<k<k)%=(Qr&   r^   c                     y)Nir0   )rhr   s     r   curl_cffi_preferencer      s    r&   ),
__future__r   ior   urllib.parser   _helperr   r   commonr   r   r	   r
   r   
exceptionsr   r   r   r   r   r   rz   r   r   dependenciesr   utilsr   ImportErrortuple__version__splitcurl_cffi_version_yt_dlp__versioncurl_cffi.requestscurl_cffi.constr!   r"   IOBaser$   rG   r^   r   r0   r&   r   <module>r      s    " 	   5   F $ 
2
33^Y=R=R=X=XY\=]^^ 
"$-$9$9#:.!II
:
;;  .(RYY (V1h 1. m*,> m m` Z  !r&   