o
    �õ±j³  ã                   @   sš   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
 e d¡Ze ¡ Ze d¡Ze e¡ e e¡ e ej¡ G dd„ dƒZdS )	é    N)Ú
prototable)ÚSSLBaseMonitor)Údefault_intercept_tablezasysocks.interceptz3%(asctime)s %(name)-12s %(levelname)-8s %(message)sc                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚInterceptServerNc                 C   s@   || _ || _|| _|| _|| _t ¡ | _d | _d | _	|  
¡  d S ©N)ÚserverÚcertmanagerÚ	log_queueÚintercept_targetsÚprotocol_load_tableÚasyncioÚQueueÚmonitor_dispatch_qÚserver_taskÚprocessing_taskÚsetup)Úselfr   r   r	   r
   r   © r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/intercepting/server.pyÚ__init__   s   
zInterceptServer.__init__c                 C   s(   | j d u rt| _ | jd u rt| _d S d S r   )r   r   r
   r   ©r   r   r   r   r   %   s
   


ÿzInterceptServer.setupc              
   Ã   s  �zs|}| j D ]h}| |¡\}}|d uro|du rdt ¡ }d|_tj|_| jj| 	¡ |j
d�I d H \}}}	|	d urCt|	ƒ ||	f  W S | ||¡ t tj¡}
d|
_tj|
_t|||
d�}t | ¡ ¡ | j| || jƒ} nq|d fW S  tyŠ } z
d |fW  Y d }~S d }~ww )NTF)Úport)Úclient_ssl_ctxÚdestination_ssl_ctx)r
   Úget_proto_for_monitorÚsslÚcreate_default_contextÚcheck_hostnameÚ	CERT_NONEÚverify_moder   Úget_cert_by_hostÚget_dst_hostnameÚdst_portÚprintÚload_cert_chainÚ
SSLContextÚPROTOCOL_TLS_CLIENTr   r   Úcreate_taskÚrunr   r	   Ú	Exception)r   ÚmonitorÚselected_protocolÚentryÚis_sslÚprotor   Úfake_cert_fileÚfake_key_fileÚerrr   Úer   r   r   Ú__lookup_monitor,   s8   €
"ê
€ÿz InterceptServer.__lookup_monitorc              
   Ã   sž   �z1t dƒ 	 | j ¡ I d H }t dƒ |  |¡I d H \}}|d ur't |ƒ |‚t dƒ t | ¡ ¡ q tyN } zt 	d¡ t |ƒ W Y d }~d S d }~ww )Né   TÚ
monitor_iné,   Ú__process_monitors)
r#   r   ÚgetÚ _InterceptServer__lookup_monitorr   r'   r(   r)   ÚloggerÚ	exception)r   r*   Úmonitor_protocolr1   r2   r   r   r   r7   M   s$   €÷
€þz"InterceptServer.__process_monitorsc                 Ã   s@   �| j | j_ t | j ¡ ¡| _t d¡I d H  |  ¡ I d H  d S )Nr   )r   r   r   r'   r(   r   ÚsleepÚ"_InterceptServer__process_monitorsr   r   r   r   r(   `   s
   €
zInterceptServer.run)NN)Ú__name__Ú
__module__Ú__qualname__r   r   r9   r>   r(   r   r   r   r   r      s    
!r   )r   ÚloggingÚjsonÚrer   Úasysocks.intercepting.monitorsr   Ú&asysocks.intercepting.monitors.sslbaser   Ú-asysocks.intercepting.default_intercept_tabler   Ú	getLoggerr:   ÚStreamHandlerÚhandlerÚ	FormatterÚ	formatterÚsetFormatterÚ
addHandlerÚsetLevelÚINFOr   r   r   r   r   Ú<module>   s"   
ÿ

