
    i!                         d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ  G d de      Z G d d	e      Zy)
    N)AsyncConnectionPoolOriginAsyncConnectionInterfaceRequestResponsedefault_ssl_contextAsyncHTTP11ConnectionConnectionNotAvailable)AsyncNetworkStream)	AsyncLock)	ProxyTypeparse_proxy_urlc            	       r     e Zd Zdddddddedededej                  f fdZde	d	e
fd
Zed        Z xZS )
AsyncProxyN)usernamepasswordrdns	proxy_sslloop
proxy_type
proxy_host
proxy_portr   c                    || _         || _        || _        || _        || _        || _        || _        || _        t        
| $  di |	 y )N )
_proxy_type_proxy_host_proxy_port	_username	_password_rdns
_proxy_ssl_loopsuper__init__)selfr   r   r   r   r   r   r   r   kwargs	__class__s             K/root/searxng-venv/lib/python3.12/site-packages/httpx_socks/_async_proxy.pyr$   zAsyncProxy.__init__   sP     &%%!!
#
"6"    originreturnc                 "   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  || j                  | j                  | j                  | j                        S )N)r   r   r   r   r   r   r   r   remote_originssl_contextkeepalive_expiryhttp1http2)AsyncProxyConnectionr   r   r   r   r   r    r!   r"   _ssl_context_keepalive_expiry_http1_http2r%   r*   s     r(   create_connectionzAsyncProxy.create_connection,   sp    #''''''^^^^oo ))!33++++
 	
r)   c           	      @    t        |      \  }}}}} | d|||||d|S )N)r   r   r   r   r   r   )r   )clsurlr&   r   hostportr   r   s           r(   from_urlzAsyncProxy.from_url=   sB    5DS5I2
D$( 
!
 
 	
r)   )__name__
__module____qualname__r   strintssl
SSLContextr$   r   r   r8   classmethodr>   __classcell__)r'   s   @r(   r   r      sm     $(# # 	#
 # >>#0
 
3K 
" 	
 	
r)   r   c                       e Zd Zddddddddddedededej                  d	ed
ej                  de	de
de
ddfdZdedefdZdefdZd Zd Zd ZddZdede
fdZde
fdZde
fdZde
fdZde
fdZdefdZy)r2   NTF)r   r   r   r   r   r/   r0   r1   r   r   r   r   r-   r.   r/   r0   r1   r+   c                   |

t               }
|| _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        t               | _        d | _        d| _        y NF)r   r   r   r   r   r   r    r!   r"   _remote_originr3   r4   r5   r6   r   _connect_lock_connection_connect_failed)r%   r   r   r   r   r   r   r   r   r-   r.   r/   r0   r1   s                 r(   r$   zAsyncProxyConnection.__init__K   s    $ -/K%%%!!
#
+'!1&[%*r)   requestc                 @  K   |j                   j                  di       }|j                  dd       }	 | j                  4 d {    | j                  | j	                  | j
                  |       d {   }|j                  d      }|d uxr |j                         dk(  }|s| j                  r7| j                  s+ddl
m}  || j
                  || j                        | _        nLt        | j
                  || j                        | _        n$| j                  j                         s
t               d d d       d {    | j                  j%                  |       d {   S 7 $7 7 ,# 1 d {  7  sw Y   <xY w# t         $ r}d	| _        |d }~ww xY w7 :w)
Ntimeoutconnect)r*   connect_timeout
ssl_objecth2r   )AsyncHTTP2Connection)r*   streamr/   T)
extensionsgetrL   rM   _connect_via_proxyrK   get_extra_infoselected_alpn_protocolr6   r5   httpcorerV   r4   r	   is_availabler
   BaseExceptionrN   handle_async_request)	r%   rO   timeoutsrQ   rW   rT   http2_negotiatedrV   excs	            r(   r`   z)AsyncProxyConnection.handle_async_requests   s    %%)))R8,,y$/	)) 3 3##+#'#:#:#22(/ $; $ F
 "(!6!6|!DJ"$.^:3T3T3VZ^3^ % (DKKA+?#'#6#6#)-1-C-C,( ,A#'#6#6#)-1-C-C,(
 ))66802253 3> %%::7CCC?33 3 3 36  	#'D I	 Ds   /FF E&F -E-3E)4B?E-3F >E+?F F!F"F&F )E-+F -E?3E64E?;F 	F	FFFc                    K   |j                   |j                  |j                  }}}|dk(  r| j                  nd }|j	                  d      }| j                  ||||       d {   S 7 w)Ns   httpsascii)r<   r=   rS   r.   )schemer<   r=   r3   decode_open_stream)r%   r*   rS   rf   hostnamer=   r.   r<   s           r(   rZ   z'AsyncProxyConnection._connect_via_proxy   so     !'V[[$+1X+=d''4w'&&+#	 ' 
 
 	
 
s   A!A*#A($A*c                    K   t        j                         }|dk(  r| j                  ||||       d {   S |dk(  r| j                  ||||       d {   S t	        d|      7 37 w)Nasynciotrioz Unsupported concurrency backend )sniffiocurrent_async_library_open_aio_stream_open_trio_streamRuntimeError)r%   r<   r=   rS   r.   backends         r(   rh   z!AsyncProxyConnection._open_stream   sz     //1i..tT?KXXXf//dO[YYY =g[IJJ Y Zs!   1A+A' A+A)A+)A+c           	      @  K   ddl m} ddlm} |j	                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                        }|j                  ||||       d {   } ||j                        S 7 w)Nr   )AnyIOStreamProxyr   r<   r=   r   r   r   r   dest_sslrQ   )httpcore._backends.anyiort   python_socks.async_.anyiorv   creater   r   r   r   r   r    r!   rR   anyio_stream)	r%   r<   r=   rS   r.   rt   rv   proxyproxy_streams	            r(   ro   z%AsyncProxyConnection._open_aio_stream   s     83''!!!!^^^^oo  
 #]] #	 + 
 
 <4455
   BBBBc           	      @  K   ddl m} ddlm} |j	                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                        }|j                  ||||       d {   } ||j                        S 7 w)Nr   )
TrioStreamru   rw   rx   )httpcore._backends.trior   python_socks.async_.trio.v2rv   r|   r   r   r   r   r   r    r!   rR   trio_stream)	r%   r<   r=   rS   r.   r   rv   r~   r   s	            r(   rp   z&AsyncProxyConnection._open_trio_stream   s     65''!!!!^^^^oo  
 #]] #	 + 
 
 ,2233
r   c                 n   K   | j                   #| j                   j                          d {    y y 7 wN)rM   acloser%   s    r(   r   zAsyncProxyConnection.aclose   s2     '""))+++ (+s   *535r*   c                      || j                   k(  S r   )rK   r7   s     r(   can_handle_requestz'AsyncProxyConnection.can_handle_request   s    ,,,,r)   c                 P    | j                   y| j                   j                         S rJ   )rM   r^   r   s    r(   r^   z!AsyncProxyConnection.is_available   s&    #,,..r)   c                 f    | j                   | j                  S | j                   j                         S r   )rM   rN   has_expiredr   s    r(   r   z AsyncProxyConnection.has_expired   s/    #'''++--r)   c                 f    | j                   | j                  S | j                   j                         S r   )rM   rN   is_idler   s    r(   r   zAsyncProxyConnection.is_idle   s/    #'''''))r)   c                 f    | j                   | j                  S | j                   j                         S r   )rM   rN   	is_closedr   s    r(   r   zAsyncProxyConnection.is_closed   s/    #'''))++r)   c                 n    | j                   | j                  rdS dS | j                   j                         S )NzCONNECTION FAILED
CONNECTING)rM   rN   infor   s    r(   r   zAsyncProxyConnection.info   s7    #*.*>*>&PLP$$&&r)   )r+   N)r?   r@   rA   r   rB   rC   rD   rE   r   floatboolr$   r   r   r`   r   rZ   rh   ro   rp   r   r   r^   r   r   r   r   r   r)   r(   r2   r2   J   s    $( #'&+ &+ 	&+
 &+ >>&+ &+ ^^&+  &+ &+ &+  
!&+P$D' $Dh $DL
CU 
K6.4.,- -D -/d /.T .
* *
,4 ,
'c 'r)   r2   )rD   rm   r]   r   r   r   r   r   r   r	   r
   r   httpcore._synchronizationr   python_socksr   r   r   r2   r   r)   r(   <module>r      sB    
 	 	 	 ( / 34
$ 4
nx'3 x'r)   