
    i                         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 d dlmZ  G d d	e      Z G d
 de      Zy)    N)ConnectionPoolOriginConnectionInterfaceRequestResponsedefault_ssl_contextHTTP11ConnectionConnectionNotAvailable   )
SyncStream)Lock)	ProxyTypeparse_proxy_url)Proxyc            	       p     e Zd Z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 )	SyncProxyN)usernamepasswordrdns	proxy_ssl
proxy_type
proxy_host
proxy_portr   c                    || _         || _        || _        || _        || _        || _        || _        t        	|    di | y )N )	_proxy_type_proxy_host_proxy_port	_username	_password_rdns
_proxy_sslsuper__init__)
selfr   r   r   r   r   r   r   kwargs	__class__s
            J/root/searxng-venv/lib/python3.12/site-packages/httpx_socks/_sync_proxy.pyr$   zSyncProxy.__init__   sI     &%%!!
#"6"    originreturnc                    t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  || j                  | j                  | j                  | j                        S )N)r   r   r   r   r   r   r   remote_originssl_contextkeepalive_expiryhttp1http2)SyncProxyConnectionr   r   r   r   r    r!   r"   _ssl_context_keepalive_expiry_http1_http2r%   r*   s     r(   create_connectionzSyncProxy.create_connection,   si    "''''''^^^^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SyncProxy.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      sj     $(# # 	#
 # >>#,
 
3F 
  	
 	
r)   r   c                       e Zd Z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def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/   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"   _remote_originr3   r4   r5   r6   r   _connect_lock_connection_connect_failed)r%   r   r   r   r   r   r   r   r-   r.   r/   r0   r1   s                r(   r$   zSyncProxyConnection.__init__J   s    " -/K%%%!!
#+'!1!V%*r)   requestc                    |j                   j                  di       }|j                  dd       }	 | j                  5  | j                  | j	                  | j
                  |      }|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        | j                  j%                  |      S # 1 sw Y   $xY w# t         $ r}d	| _        |d }~ww xY w)
Ntimeoutconnect)r*   connect_timeout
ssl_objecth2r   )HTTP2Connection)r*   streamr/   T)
extensionsgetrL   rM   _connect_via_proxyrK   get_extra_infoselected_alpn_protocolr6   r5   httpcorerV   r4   r	   is_availabler
   BaseExceptionrN   handle_request)	r%   rO   timeoutsrQ   rW   rT   http2_negotiatedrV   excs	            r(   r`   z"SyncProxyConnection.handle_requestp   s[   %%)))R8,,y$/	## 3##+!44#22(/ 5 F
 "(!6!6|!DJ"$.^:3T3T3VZ^3^ % (DKK<+:#'#6#6#)-1-C-C,( ,<#'#6#6#)-1-C-C,(
 ))66802253> ..w77?3 36  	#'D I	s/   E C%E!E E	E 	E'	E""E'r*   rS   c           	         |j                   |j                  |j                  }}}|dk(  r| j                  nd }|j	                  d      }t        j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                        }|j                  ||||      }	t        |	j                         S )Ns   httpsascii)r   r<   r=   r   r   r   r   )dest_sslrQ   )sock)schemer<   r=   r3   decoder   creater   r   r   r   r    r!   r"   rR   r   socket)
r%   r*   rS   rh   hostnamer=   r.   r<   proxyproxy_streams
             r(   rZ   z&SyncProxyConnection._connect_via_proxy   s    !'V[[$+1X+=d''4w'''!!!!^^^^oo
 }} #	 % 
 |2233r)   c                 R    | j                   | j                   j                          y y N)rM   closer%   s    r(   rq   zSyncProxyConnection.close   s%    '""$ (r)   c                      || j                   k(  S rp   )rK   r7   s     r(   can_handle_requestz&SyncProxyConnection.can_handle_request   s    ,,,,r)   c                 P    | j                   y| j                   j                         S rJ   )rM   r^   rr   s    r(   r^   z SyncProxyConnection.is_available   s&    #,,..r)   c                 f    | j                   | j                  S | j                   j                         S rp   )rM   rN   has_expiredrr   s    r(   rw   zSyncProxyConnection.has_expired   s/    #'''++--r)   c                 f    | j                   | j                  S | j                   j                         S rp   )rM   rN   is_idlerr   s    r(   ry   zSyncProxyConnection.is_idle   s/    #'''''))r)   c                 f    | j                   | j                  S | j                   j                         S rp   )rM   rN   	is_closedrr   s    r(   r{   zSyncProxyConnection.is_closed   s/    #'''))++r)   c                 n    | j                   | j                  rdS dS | j                   j                         S )NzCONNECTION FAILED
CONNECTING)rM   rN   inforr   s    r(   r~   zSyncProxyConnection.info   s7    #*.*>*>&PLP$$&&r)   )r+   N)r?   r@   rA   r   rB   rC   rD   rE   r   floatboolr$   r   r   r`   rZ   rq   rt   r^   rw   ry   r{   r~   r   r)   r(   r2   r2   I   s    $( #'$+ $+ 	$+
 $+ >>$+ $+ ^^$+  $+ $+ $+ 
$+L$8g $8( $8L4 4# 42%- -D -/d /.T .
* *
,4 ,
'c 'r)   r2   )rD   r]   r   r   r   r   r   r   r	   r
   _sync_streamr   httpcore._synchronizationr   python_socksr   r   python_socks.sync.v2r   r   r2   r   r)   r(   <module>r      sA    
	 	 	 % * 3 &1
 1
hE'- E'r)   