o
    �õ±j   ã                   @   sf   d dl Z d dlZd dlZe d¡Ze ¡ Ze d¡Ze 	e¡ e 
e¡ e ej¡ G dd„ dƒZdS )é    Nzasysocks.traffic.sslz3%(asctime)s %(name)-12s %(levelname)-8s %(message)sc                   @   sX   e Zd Zddd„Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚSSLBaseMonitorNc                 C   s¬   || _ || _|| _t ¡ | _t ¡ | _t ¡ | _d | _d | _	d | _
d | _d | _d | _t ¡ | _t ¡ | _d | _d | _d | _d | _t ¡ | _t ¡ | _t ¡ | _t ¡ | _d S ©N)ÚmonitorÚclient_ssl_ctxÚdestination_ssl_ctxÚasyncioÚEventÚstop_evtÚclient_ssl_ok_evtÚdestination_ssl_ok_evtÚclient_tls_objÚclient_tls_in_buffÚclient_tls_out_buffÚdestination_tls_objÚdestination_tls_in_buffÚdestination_tls_out_buffÚQueueÚ _SSLBaseMonitor__client_ssl_in_qÚ%_SSLBaseMonitor__destination_ssl_in_qÚc2d_ssl_taskÚd2c_ssl_taskÚ	dest_taskÚclient_taskÚc2d_inÚc2d_outÚd2c_inÚd2c_out)Úselfr   r   r   © r   ú™/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/intercepting/monitors/sslbase.pyÚ__init__   s,   







zSSLBaseMonitor.__init__c                 C   s   | j j|||d�}d|_|S )N)Úmodule_nameT)r   Úget_trafficlogÚis_ssl)r   ÚdataÚ	directionr!   Útr   r   r   r"   +   s   zSSLBaseMonitor.get_trafficlogc              
   Ã   s,  �zid}d }| j  ¡ sh|d u r!t|ƒdkr!tj|dd… ddd�}|d urFt|ƒ|d krF| |d |d … ¡I d H  ||d d … }d }q| ¡ I d H }|dkr\| d¡I d H  W d S ||7 }| j  ¡ rW d S W d S  tjyu   Y d S  t	y• } zt
d| ƒ | d¡I d H  W Y d }~d S d }~ww )	Nó    é   é   é   ÚbigF)Ú	byteorderÚsignedz__read_ssl_record %s)r	   Úis_setÚlenÚintÚ
from_bytesÚputÚgetr   ÚCancelledErrorÚ	ExceptionÚprint)r   Úraw_in_qÚssl_in_qÚbufferÚlengthr$   Úer   r   r   Ú__read_ssl_record0   s2   €
ð€þz SSLBaseMonitor.__read_ssl_recordc              
   Ã   sð   �zZt  ¡ }t  ¡ }|j||d| jjd�}d}| j ¡ sU|d7 }z| ¡  W n- t jyP   	 | 	¡ }|dkr@| 
|¡I d H  nnq/| ¡ I d H }	| |	¡ Y q   ‚ 	 |||d fW S  tyw }
 zt|
ƒ d d d |
fW  Y d }
~
S d }
~
ww )NF)Úserver_sideÚserver_hostnamer   é   Tr'   )ÚsslÚ	MemoryBIOÚwrap_bior   Údst_hostnamer	   r.   Údo_handshakeÚSSLWantReadErrorÚreadr2   r3   Úwriter5   r6   )r   Ússl_ctxÚin_qÚout_qÚtls_in_buffÚtls_out_buffÚtls_objÚctrÚclient_helloÚserver_hellor;   r   r   r   Ú__do_ssl_handshake_cliQ   s:   €
ú	
€þz%SSLBaseMonitor.__do_ssl_handshake_clic              
   Ã   s
  �zkt  ¡ }t  ¡ }|j||dd�}d}| j ¡ sf|d7 }| ¡ I d H }| |¡ z| ¡  W n! t jyM   	 | 	¡ }	|	dkrI| 
|	¡I d H  nnq8Y q   ‚ 	 | 	¡ }
|
dkrc| 
|
¡I d H  nnqR	 |||d fW S  ty„ } zd d d |fW  Y d }~S d }~ww )NT)r=   r   r?   r'   )r@   rA   rB   r	   r.   r3   rG   rD   rE   rF   r2   r5   )r   rH   rI   rJ   rK   rL   rM   rN   rO   rP   Ú
server_finr;   r   r   r   Ú__do_ssl_handshake_srv}   sD   €

úû€þz%SSLBaseMonitor.__do_ssl_handshake_srvc              
   Ã   s²   �z@	 |  ¡ I d H }|dkr| |¡I d H  W d S | |¡ d}	 z|| ¡ 7 }W n
 tjy3   Y nw q!|dkrA| |¡I d H  q tyX } zt|ƒ W Y d }~d S d }~ww )NTr'   )r3   r2   rG   rF   r@   rE   r5   r6   )r   r8   Úfinal_out_qÚtls_inrM   Ússl_dataÚ	data_buffr;   r   r   r   Ú
__read_decª   s.   €
ÿýð€ÿzSSLBaseMonitor.__read_decc              
   Ã   s0  �zízz|   | j| j| jj¡I d H \| _| _| _}|d ur|‚tdƒ | j	 
¡  | j ¡ I d H  t |  | j| j| j| j¡¡ | j ¡ s{| j ¡ I d H }|dkrZ| jj |¡I d H  n!| j |¡ 	 | j ¡ }|dkrkn| jj |¡I d H  qa| j ¡ rCW nG tyÃ } z;td| ƒ d d d |fW  Y d }~W | j 
¡  | j	 
¡  | j 
¡  | jj d¡I d H  | j ¡  | j ¡  | j ¡  S d }~ww W | j 
¡  | j	 
¡  | j 
¡  | jj d¡I d H  | j ¡  | j ¡  | j ¡  d S | j 
¡  | j	 
¡  | j 
¡  | jj d¡I d H  | j ¡  | j ¡  | j ¡  w )NzCLIENT Handshake OK!r'   TzCLIENT error: %s)Ú%_SSLBaseMonitor__do_ssl_handshake_srvr   r   r   r   r   r   r   r6   r
   Úsetr   Úwaitr   Úcreate_taskÚ_SSLBaseMonitor__read_decr   r	   r.   r   r3   r2   r   rG   r   rF   r5   r   Úcancelr   r   )r   ÚerrÚclient_data_buffÚclient_ssl_datar;   r   r   r   Ú__client_ssl_endpointÁ   sd   €*


û
ù€




€õ€





ú



z$SSLBaseMonitor.__client_ssl_endpointc              
   Ã   sH  �zùz€|   | j| j| jj¡I d H \| _| _| _}|d ur|‚| j 	¡  | j
 ¡ I d H  tdƒ t |  | j| j| j| j¡¡ | j ¡ s�| j ¡ I d H }|dkrZ| jj |¡I d H  n'td| ƒ | j |¡ 	 | j ¡ }|dkrqn| jj |¡I d H  qg| j ¡ rCW nM tyÏ } zAtt|ƒƒ td| ƒ d d d |fW  Y d }~W | j 	¡  | j
 	¡  | j 	¡  | jj d¡I d H  | j ¡  | j ¡  | j ¡  S d }~ww W | j 	¡  | j
 	¡  | j 	¡  | jj d¡I d H  | j ¡  | j ¡  | j ¡  d S | j 	¡  | j
 	¡  | j 	¡  | jj d¡I d H  | j ¡  | j ¡  | j ¡  w )NzDST Handshake OK!r'   zdestination_data %sTzDST error: %s) Ú%_SSLBaseMonitor__do_ssl_handshake_clir   r   r   r   r   r   r   r   rZ   r
   r[   r6   r   r\   r]   r   r	   r.   r   r3   r2   r   rG   r   rF   r5   Útyper   r^   r   r   )r   r_   Údestination_data_buffÚdestination_ssl_datar;   r   r   r   Ú__destination_ssl_endpointæ   sh   €*


ü
ø€




€ô€





ú



z)SSLBaseMonitor.__destination_ssl_endpointc                 Ã   sj   �t  |  | jj| j¡¡| _t  |  | jj| j¡¡| _	t  |  
¡ ¡| _t  |  ¡ ¡| _| j ¡ I d H  d S r   )r   r\   Ú _SSLBaseMonitor__read_ssl_recordr   r   r   r   r   r   r   Ú)_SSLBaseMonitor__destination_ssl_endpointr   Ú$_SSLBaseMonitor__client_ssl_endpointr   r	   r[   )r   r   r   r   Úrun  s   €zSSLBaseMonitor.run)NNr   )Ú__name__Ú
__module__Ú__qualname__r    r"   rh   rc   rY   r]   rj   ri   rk   r   r   r   r   r      s    

!,-%(r   )r   r@   ÚloggingÚ	getLoggerÚ	srvloggerÚStreamHandlerÚhandlerÚ	FormatterÚ	formatterÚsetFormatterÚ
addHandlerÚsetLevelÚINFOr   r   r   r   r   Ú<module>   s    
ÿ

