
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aJj  ã                   @   sÆ   d dl Z d dlZzd dlZW n ek
r4   dZY nX ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	„ Zd
ZdZdZdZG dd„ deƒZG dd„ dejejƒZG dd„ dejƒZdS )é    Né   )Úbase_events)Ú	constants)Ú	protocols)Ú
transports)Úloggerc                 C   s"   | rt dƒ‚t ¡ }|sd|_|S )Nz(Server side SSL needs a valid SSLContextF)Ú
ValueErrorÚsslZcreate_default_contextZcheck_hostname)Úserver_sideÚserver_hostnameÚ
sslcontext© r   ú5/opt/alt/python38/lib64/python3.8/asyncio/sslproto.pyÚ_create_transport_context   s    r   Z	UNWRAPPEDZDO_HANDSHAKEZWRAPPEDZSHUTDOWNc                   @   sz   e Zd ZdZddd„Zedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	ddd„Z
ddd„Zdd„ Zddd„Zddd„ZdS )Ú_SSLPipei   Nc                 C   sH   || _ || _|| _t| _t ¡ | _t ¡ | _d | _	d| _
d | _d | _d S ©NF)Ú_contextÚ_server_sideÚ_server_hostnameÚ
_UNWRAPPEDÚ_stater	   Z	MemoryBIOÚ	_incomingÚ	_outgoingÚ_sslobjÚ_need_ssldataÚ_handshake_cbÚ_shutdown_cb)ÚselfÚcontextr
   r   r   r   r   Ú__init__8   s    

z_SSLPipe.__init__c                 C   s   | j S ©N)r   ©r   r   r   r   r   N   s    z_SSLPipe.contextc                 C   s   | j S r    )r   r!   r   r   r   Ú
ssl_objectS   s    z_SSLPipe.ssl_objectc                 C   s   | j S r    )r   r!   r   r   r   Úneed_ssldata[   s    z_SSLPipe.need_ssldatac                 C   s
   | j tkS r    )r   Ú_WRAPPEDr!   r   r   r   Úwrappeda   s    z_SSLPipe.wrappedc                 C   sR   | j tkrtdƒ‚| jj| j| j| j| jd�| _	t
| _ || _| jddd�\}}|S )Nz"handshake in progress or completed)r
   r   ó    T)Úonly_handshake)r   r   ÚRuntimeErrorr   Zwrap_bior   r   r   r   r   Ú_DO_HANDSHAKEr   Úfeed_ssldata©r   ÚcallbackÚssldataÚappdatar   r   r   Údo_handshakej   s    	
 ýz_SSLPipe.do_handshakec                 C   sB   | j tkrtdƒ‚| j tkr$tdƒ‚t| _ || _|  d¡\}}|S )Nzno security layer presentzshutdown in progressr&   )r   r   r(   Ú	_SHUTDOWNr   r*   r+   r   r   r   Úshutdown   s    	

z_SSLPipe.shutdownc                 C   s   | j  ¡  |  d¡\}}d S )Nr&   )r   Z	write_eofr*   )r   r-   r.   r   r   r   Úfeed_eof“   s    
z_SSLPipe.feed_eofFc              
   C   s�  | j tkr"|r|g}ng }g |fS d| _|r8| j |¡ g }g }z²| j tkrz| j ¡  t| _ | j	rl|  	d ¡ |rz||fW S | j tkr¦| j 
| j¡}| |¡ |s„qðq„nJ| j tkrÖ| j ¡  d | _t| _ | jrð|  ¡  n| j tkrð| | j 
¡ ¡ W nz tjtjfk
�rl } zRt|dd ƒ}|tjtjtjfk�rP| j tk�rN| j	�rN|  	|¡ ‚ |tjk| _W 5 d }~X Y nX | jj�rˆ| | j 
¡ ¡ ||fS )NFÚerrno)r   r   r   r   Úwriter)   r   r/   r$   r   ÚreadÚmax_sizeÚappendr0   Zunwrapr   r	   ÚSSLErrorÚCertificateErrorÚgetattrÚSSL_ERROR_WANT_READÚSSL_ERROR_WANT_WRITEÚSSL_ERROR_SYSCALLr   Úpending)r   Údatar'   r.   r-   ÚchunkÚexcÚ	exc_errnor   r   r   r*   �   sZ    










 þ

z_SSLPipe.feed_ssldatar   c              
   C   s  | j tkr6|t|ƒk r&||d … g}ng }|t|ƒfS g }t|ƒ}d| _z(|t|ƒk rn|| j ||d … ¡7 }W nh tjk
rØ } zHt	|dd ƒ}|j
dkr¦tj }|_|tjtjtjfkr¼‚ |tjk| _W 5 d }~X Y nX | jjrò| | j ¡ ¡ |t|ƒk�s| jrB�qqB||fS )NFr3   ZPROTOCOL_IS_SHUTDOWN)r   r   ÚlenÚ
memoryviewr   r   r4   r	   r8   r:   Úreasonr;   r3   r<   r=   r   r>   r7   r5   )r   r?   Úoffsetr-   ZviewrA   rB   r   r   r   Úfeed_appdataè   s4    

þz_SSLPipe.feed_appdata)N)N)N)F)r   )Ú__name__Ú
__module__Ú__qualname__r6   r   Úpropertyr   r"   r#   r%   r/   r1   r2   r*   rG   r   r   r   r   r   $   s   








Kr   c                   @   s¢   e Zd ZejjZdd„ Zd"dd„Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zejfdd„Zdd„ Zdd„ Zdd„ Zd#dd„Zdd„ Zedd„ ƒZdd„ Zdd„ Zd d!„ ZdS )$Ú_SSLProtocolTransportc                 C   s   || _ || _d| _d S r   )Ú_loopÚ_ssl_protocolÚ_closed)r   ÚloopZssl_protocolr   r   r   r   !  s    z_SSLProtocolTransport.__init__Nc                 C   s   | j  ||¡S r    )rN   Ú_get_extra_info©r   ÚnameÚdefaultr   r   r   Úget_extra_info'  s    z$_SSLProtocolTransport.get_extra_infoc                 C   s   | j  |¡ d S r    )rN   Ú_set_app_protocol)r   Úprotocolr   r   r   Úset_protocol+  s    z"_SSLProtocolTransport.set_protocolc                 C   s   | j jS r    )rN   Ú_app_protocolr!   r   r   r   Úget_protocol.  s    z"_SSLProtocolTransport.get_protocolc                 C   s   | j S r    )rO   r!   r   r   r   Ú
is_closing1  s    z _SSLProtocolTransport.is_closingc                 C   s   d| _ | j ¡  d S ©NT)rO   rN   Ú_start_shutdownr!   r   r   r   Úclose4  s    z_SSLProtocolTransport.closec                 C   s&   | j s"|d| ›�t| d� |  ¡  d S )Nzunclosed transport )Úsource)rO   ÚResourceWarningr^   )r   Z_warnr   r   r   Ú__del__?  s    z_SSLProtocolTransport.__del__c                 C   s    | j j}|d krtdƒ‚| ¡ S )Nz*SSL transport has not been initialized yet)rN   Ú
_transportr(   Ú
is_reading)r   Ztrr   r   r   rc   D  s    z _SSLProtocolTransport.is_readingc                 C   s   | j j ¡  d S r    )rN   rb   Úpause_readingr!   r   r   r   rd   J  s    z#_SSLProtocolTransport.pause_readingc                 C   s   | j j ¡  d S r    )rN   rb   Úresume_readingr!   r   r   r   re   R  s    z$_SSLProtocolTransport.resume_readingc                 C   s   | j j ||¡ d S r    )rN   rb   Úset_write_buffer_limits)r   ZhighZlowr   r   r   rf   Z  s    z-_SSLProtocolTransport.set_write_buffer_limitsc                 C   s   | j j ¡ S r    )rN   rb   Úget_write_buffer_sizer!   r   r   r   rg   o  s    z+_SSLProtocolTransport.get_write_buffer_sizec                 C   s
   | j jjS r    )rN   rb   Ú_protocol_pausedr!   r   r   r   rh   s  s    z&_SSLProtocolTransport._protocol_pausedc                 C   s<   t |tttfƒs$tdt|ƒj› �ƒ‚|s,d S | j |¡ d S )Nz+data: expecting a bytes-like instance, got )	Ú
isinstanceÚbytesÚ	bytearrayrD   Ú	TypeErrorÚtyperH   rN   Ú_write_appdata©r   r?   r   r   r   r4   x  s
    z_SSLProtocolTransport.writec                 C   s   dS r   r   r!   r   r   r   Úcan_write_eof…  s    z#_SSLProtocolTransport.can_write_eofc                 C   s   | j  ¡  d| _d S r\   )rN   Ú_abortrO   r!   r   r   r   Úabort‰  s    
z_SSLProtocolTransport.abort)N)NN)rH   rI   rJ   r   Z_SendfileModeZFALLBACKZ_sendfile_compatibler   rU   rX   rZ   r[   r^   ÚwarningsÚwarnra   rc   rd   re   rf   rg   rK   rh   r4   rp   rr   r   r   r   r   rL     s$   


rL   c                   @   s¬   e Zd Zd+dd„Z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d„Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd.d%d&„Zd'd(„ Zd)d*„ ZdS )/ÚSSLProtocolFNTc	           	      C   sÔ   t d krtdƒ‚|d kr tj}n|dkr6td|› �ƒ‚|sDt||ƒ}|| _|rZ|sZ|| _nd | _|| _t	|d�| _
t ¡ | _d| _|| _|| _|  |¡ t| j| ƒ| _d | _d| _d| _d| _d | _|| _|| _d S )Nzstdlib ssl module not availabler   z7ssl_handshake_timeout should be a positive number, got )r   F)r	   r(   r   ZSSL_HANDSHAKE_TIMEOUTr   r   r   r   Ú_sslcontextÚdictÚ_extraÚcollectionsÚdequeÚ_write_backlogÚ_write_buffer_sizeÚ_waiterrM   rV   rL   Ú_app_transportÚ_sslpipeÚ_session_establishedÚ_in_handshakeÚ_in_shutdownrb   Ú_call_connection_madeÚ_ssl_handshake_timeout)	r   rP   Úapp_protocolr   Zwaiterr
   r   Zcall_connection_madeZssl_handshake_timeoutr   r   r   r   ›  s@    ÿ ÿ

zSSLProtocol.__init__c                 C   s   || _ t|tjƒ| _d S r    )rY   ri   r   ZBufferedProtocolÚ_app_protocol_is_buffer)r   r…   r   r   r   rV   É  s    
ÿzSSLProtocol._set_app_protocolc                 C   sD   | j d krd S | j  ¡ s:|d k	r.| j  |¡ n| j  d ¡ d | _ d S r    )r}   Z	cancelledZset_exceptionZ
set_result©r   rA   r   r   r   Ú_wakeup_waiterÎ  s    

zSSLProtocol._wakeup_waiterc                 C   s&   || _ t| j| j| jƒ| _|  ¡  d S r    )rb   r   rv   r   r   r   Ú_start_handshake)r   Ú	transportr   r   r   Úconnection_madeØ  s    þzSSLProtocol.connection_madec                 C   sn   | j r d| _ | j | jj|¡ n| jd k	r2d| j_d | _d | _t| dd ƒrT| j	 
¡  |  |¡ d | _d | _d S )NFTÚ_handshake_timeout_handle)r€   rM   Ú	call_soonrY   Úconnection_lostr~   rO   rb   r:   rŒ   Úcancelrˆ   r   r‡   r   r   r   rŽ   ã  s    


zSSLProtocol.connection_lostc                 C   s   | j  ¡  d S r    )rY   Úpause_writingr!   r   r   r   r�   û  s    zSSLProtocol.pause_writingc                 C   s   | j  ¡  d S r    )rY   Úresume_writingr!   r   r   r   r‘     s    zSSLProtocol.resume_writingc                 C   s"  | j d krd S z| j  |¡\}}W nL ttfk
r<   ‚ Y n4 tk
rn } z|  |d¡ W Y ¢d S d }~X Y nX |D ]}| j |¡ qt|D ]’}|�rz&| jr¬t	 
| j|¡ n| j |¡ W nP ttfk
rÔ   ‚ Y n8 tk
�r
 } z|  |d¡ W Y ¢ d S d }~X Y nX qŠ|  ¡   �qqŠd S )NzSSL error in data receivedz/application protocol failed to receive SSL data)r   r*   Ú
SystemExitÚKeyboardInterruptÚBaseExceptionÚ_fatal_errorrb   r4   r†   r   Z_feed_data_to_buffered_protorY   Údata_receivedr]   )r   r?   r-   r.   Úer@   Zexr   r   r   r–     s<    
 ÿ ÿzSSLProtocol.data_receivedc                 C   sT   zB| j ¡ rt d| ¡ |  t¡ | js@| j	 
¡ }|r@t d¡ W 5 | j  ¡  X d S )Nz%r received EOFz?returning true from eof_received() has no effect when using ssl)rb   r^   rM   Ú	get_debugr   Údebugrˆ   ÚConnectionResetErrorr�   rY   Úeof_receivedZwarning)r   Z	keep_openr   r   r   r›   -  s    


zSSLProtocol.eof_receivedc                 C   s4   || j kr| j | S | jd k	r,| j ||¡S |S d S r    )rx   rb   rU   rR   r   r   r   rQ   C  s
    


zSSLProtocol._get_extra_infoc                 C   s.   | j r
d S | jr|  ¡  nd| _ |  d¡ d S )NTr&   )r‚   r�   rq   rn   r!   r   r   r   r]   K  s    
zSSLProtocol._start_shutdownc                 C   s.   | j  |df¡ |  jt|ƒ7  _|  ¡  d S )Nr   )r{   r7   r|   rC   Ú_process_write_backlogro   r   r   r   rn   T  s    zSSLProtocol._write_appdatac                 C   s\   | j  ¡ r$t d| ¡ | j  ¡ | _nd | _d| _| j d¡ | j  	| j
| j¡| _|  ¡  d S )Nz%r starts SSL handshakeT)r&   r   )rM   r˜   r   r™   ÚtimeÚ_handshake_start_timer�   r{   r7   Z
call_laterr„   Ú_check_handshake_timeoutrŒ   rœ   r!   r   r   r   r‰   Y  s    

ÿÿzSSLProtocol._start_handshakec                 C   s*   | j dkr&d| j› d�}|  t|ƒ¡ d S )NTz$SSL handshake is taking longer than z! seconds: aborting the connection)r�   r„   r•   ÚConnectionAbortedError)r   Úmsgr   r   r   rŸ   h  s    
ÿz$SSLProtocol._check_handshake_timeoutc              
   C   s  d| _ | j ¡  | jj}z|d k	r&|‚| ¡ }W nb ttfk
rJ   ‚ Y nJ tk
r’ } z,t	|t
jƒrld}nd}|  ||¡ W Y ¢d S d }~X Y nX | j ¡ rÀ| j ¡ | j }t d| |d ¡ | jj|| ¡ | ¡ |d� | jrð| j | j¡ |  ¡  d| _| j | j¡ d S )NFz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg     @�@)ÚpeercertÚcipherÚcompressionr"   T)r�   rŒ   r�   r   r"   Zgetpeercertr’   r“   r”   ri   r	   r9   r•   rM   r˜   r�   rž   r   r™   rx   Úupdater£   r¤   rƒ   rY   r‹   r~   rˆ   r€   r�   rœ   )r   Zhandshake_excZsslobjr¢   rA   r¡   Zdtr   r   r   Ú_on_handshake_completeq  s8    

ýz"SSLProtocol._on_handshake_completec              
   C   sB  | j d ks| jd krd S zÈtt| jƒƒD ]´}| jd \}}|rR| j ||¡\}}n*|rj| j | j¡}d}n| j | j	¡}d}|D ]}| j  
|¡ q€|t|ƒk rÂ||f| jd< | j jr¾| j  ¡   qÞ| jd= |  jt|ƒ8  _q(W n\ ttfk
rú   ‚ Y nD tk
�r< } z$| j�r |  |¡ n|  |d¡ W 5 d }~X Y nX d S )Nr   r   zFatal error on SSL transport)rb   r   ÚrangerC   r{   rG   r/   r¦   r1   Ú	_finalizer4   Z_pausedre   r|   r’   r“   r”   r�   r•   )r   Úir?   rF   r-   r@   rA   r   r   r   rœ   š  s:    ÿ
z"SSLProtocol._process_write_backlogúFatal error on transportc                 C   sV   t |tƒr(| j ¡ r@tjd| |dd� n| j ||| j| dœ¡ | jrR| j |¡ d S )Nz%r: %sT)Úexc_info)ÚmessageZ	exceptionrŠ   rW   )	ri   ÚOSErrorrM   r˜   r   r™   Zcall_exception_handlerrb   Z_force_close)r   rA   r¬   r   r   r   r•   Å  s    

üzSSLProtocol._fatal_errorc                 C   s   d | _ | jd k	r| j ¡  d S r    )r   rb   r^   r!   r   r   r   r¨   Ó  s    
zSSLProtocol._finalizec                 C   s(   z| jd k	r| j ¡  W 5 |   ¡  X d S r    )r¨   rb   rr   r!   r   r   r   rq   Ù  s    
zSSLProtocol._abort)FNTN)N)N)rª   )rH   rI   rJ   r   rV   rˆ   r‹   rŽ   r�   r‘   r–   r›   rQ   r]   rn   r‰   rŸ   r¦   rœ   r•   r¨   rq   r   r   r   r   ru   ”  s.        ý
.

&
		)+
ru   )ry   rs   r	   ÚImportErrorÚ r   r   r   r   Úlogr   r   r   r)   r$   r0   Úobjectr   Z_FlowControlMixinZ	TransportrL   ZProtocolru   r   r   r   r   Ú<module>   s*   
 yÿx