a XC?hCk�@s�ddlZddlZz ddlZWney2dZYn0ddlmZddlmZddlmZddlm Z dd�Z d Z d Z d Z d ZGd d�de�ZGdd�dejej�ZGdd�dej�ZdS)�N�)� constants)� protocols)� transports)�loggercCs"|r td��t��}|sd|_|S)Nz(Server side SSL needs a valid SSLContextF)� ValueError�sslZcreate_default_contextZcheck_hostname)� server_side�server_hostname� sslcontext�r �5/opt/alt/python39/lib64/python3.9/asyncio/sslproto.py�_create_transport_contexts rZ UNWRAPPEDZ DO_HANDSHAKEZWRAPPEDZSHUTDOWNc@szeZdZdZddd�Zedd��Zedd��Zed d ��Zed d ��Z dd d�Z ddd�Z dd�Z ddd�Z ddd�ZdS)�_SSLPipeiNcCsH||_||_||_t|_t��|_t��|_d|_ d|_ d|_ d|_ dS�NF) �_context� _server_side�_server_hostname� _UNWRAPPED�_staterZ MemoryBIO� _incoming� _outgoing�_sslobj� _need_ssldata� _handshake_cb� _shutdown_cb)�self�contextr r r r r �__init__7s   z_SSLPipe.__init__cCs|jS�N)r�rr r r rMsz_SSLPipe.contextcCs|jSr)rr r r r � ssl_objectRsz_SSLPipe.ssl_objectcCs|jSr)rr r r r � need_ssldataZsz_SSLPipe.need_ssldatacCs |jtkSr)r�_WRAPPEDr r r r �wrapped`sz_SSLPipe.wrappedcCsR|jtkrtd��|jj|j|j|j|jd�|_ t |_||_ |j ddd�\}}|S)Nz"handshake in progress or completed)r r �T)�only_handshake) rr� RuntimeErrorrZwrap_biorrrrr� _DO_HANDSHAKEr� feed_ssldata�r�callback�ssldata�appdatar r r � do_handshakeis �z_SSLPipe.do_handshakecCsB|jtkrtd��|jtkr$td��t|_||_|�d�\}}|S)Nzno security layer presentzshutdown in progressr%)rrr'� _SHUTDOWNrr)r*r r r �shutdown~s  z_SSLPipe.shutdowncCs|j��|�d�\}}dS)Nr%)rZ write_eofr))rr,r-r r r �feed_eof�s z_SSLPipe.feed_eofFc Cs�|jtkr"|r|g}ng}g|fSd|_|r8|j�|�g}g}z�|jtkrz|j��t|_|j rl|� d�|rz||fWS|jtkr�|j� |j �}|� |�|s�q�q�nJ|jt kr�|j��d|_t|_|jr�|��n|jtkr�|� |j� ��Wn|tjtjf�yn}zZt|dd�}|tjtjtjfv�rN|jtk�rL|j �rL|� |��|tjk|_WYd}~n d}~00|jj�r�|� |j� ��||fS)NF�errno)rrrr�writer(rr.r#r�read�max_size�appendr/Zunwraprr�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)�sX             � " z_SSLPipe.feed_ssldatarc Cs|jtkr6|t|�kr&||d�g}ng}|t|�fSg}t|�}d|_z(|t|�krn||j�||d��7}Wnjtjy�}zPt |dd�}|j dkr�tj }|_ |tj tj tjfvr��|tj k|_WYd}~n d}~00|jjr�|�|j���|t|�k�s|jrB�qqB||fS)NFr2ZPROTOCOL_IS_SHUTDOWN)rr�len� memoryviewrrr3rr7r9�reasonr:r2r;r<rr=r6r4)rr>�offsetr,Zviewr@rAr r r � feed_appdata�s4       �"z_SSLPipe.feed_appdata)N)N)N)F)r)�__name__� __module__� __qualname__r5r�propertyrr!r"r$r.r0r1r)rFr r r r r#s        Krc@s�eZdZejjZdd�Zd$dd�Zdd�Z dd �Z d d �Z d d �Z e jfdd�Zdd�Zdd�Zdd�Zd%dd�Zdd�Zdd�Zedd��Zdd�Zd d!�Zd"d#�ZdS)&�_SSLProtocolTransportcCs||_||_d|_dSr)�_loop� _ssl_protocol�_closed)r�loopZ ssl_protocolr r r r sz_SSLProtocolTransport.__init__NcCs|j�||�Sr)rM�_get_extra_info�r�name�defaultr r r �get_extra_info&sz$_SSLProtocolTransport.get_extra_infocCs|j�|�dSr)rM�_set_app_protocol)r�protocolr r r � set_protocol*sz"_SSLProtocolTransport.set_protocolcCs|jjSr)rM� _app_protocolr r r r � get_protocol-sz"_SSLProtocolTransport.get_protocolcCs|jSr)rNr r r r � is_closing0sz _SSLProtocolTransport.is_closingcCsd|_|j��dS�NT)rNrM�_start_shutdownr r r r �close3sz_SSLProtocolTransport.closecCs&|js"|d|��t|d�|��dS)Nzunclosed transport )�source)rN�ResourceWarningr])rZ_warnr r r �__del__>sz_SSLProtocolTransport.__del__cCs |jj}|durtd��|��S)Nz*SSL transport has not been initialized yet)rM� _transportr'� is_reading)rZtrr r r rbCsz _SSLProtocolTransport.is_readingcCs|jj��dSr)rMra� pause_readingr r r r rcIsz#_SSLProtocolTransport.pause_readingcCs|jj��dSr)rMra�resume_readingr r r r rdQsz$_SSLProtocolTransport.resume_readingcCs|jj�||�dSr)rMra�set_write_buffer_limits)rZhighZlowr r r reYsz-_SSLProtocolTransport.set_write_buffer_limitscCs |jj��Sr)rMra�get_write_buffer_sizer r r r rfnsz+_SSLProtocolTransport.get_write_buffer_sizecCs |jj��Sr)rMra�get_write_buffer_limitsr r r r rgrsz-_SSLProtocolTransport.get_write_buffer_limitscCs |jjjSr)rMra�_protocol_pausedr r r r rhxsz&_SSLProtocolTransport._protocol_pausedcCs<t|tttf�s$tdt|�j����|s,dS|j�|�dS)Nz+data: expecting a bytes-like instance, got ) � isinstance�bytes� bytearrayrC� TypeError�typerGrM�_write_appdata�rr>r r r r3}s�z_SSLProtocolTransport.writecCsdSrr r r r r � can_write_eof�sz#_SSLProtocolTransport.can_write_eofcCs|j��d|_dSr[)rM�_abortrNr r r r �abort�s z_SSLProtocolTransport.abort)N)NN)rGrHrIrZ _SendfileModeZFALLBACKZ_sendfile_compatiblerrTrWrYrZr]�warnings�warnr`rbrcrdrerfrgrJrhr3rprrr r r r rKs&     rKc@s�eZdZd+dd�Zdd�Zd,dd �Zd d �Zd d �Zdd�Zdd�Z dd�Z dd�Z d-dd�Z dd�Z dd�Zdd�Zdd�Zd d!�Zd"d#�Zd.d%d&�Zd'd(�Zd)d*�ZdS)/� SSLProtocolFNTc Cs�tdurtd��|dur tj}n|dkr6td|����|sDt||�}||_|rZ|sZ||_nd|_||_t |d�|_ t � �|_ d|_||_||_|�|�t|j|�|_d|_d|_d|_d|_d|_||_||_dS)Nzstdlib ssl module not availablerz7ssl_handshake_timeout should be a positive number, got )r F)rr'rZSSL_HANDSHAKE_TIMEOUTrrrr� _sslcontext�dict�_extra� collections�deque�_write_backlog�_write_buffer_size�_waiterrLrUrK�_app_transport�_sslpipe�_session_established� _in_handshake� _in_shutdownra�_call_connection_made�_ssl_handshake_timeout) rrO� app_protocolr Zwaiterr r Zcall_connection_madeZssl_handshake_timeoutr r r r�sB���   zSSLProtocol.__init__cCs||_t|tj�|_dSr)rXrirZBufferedProtocol�_app_protocol_is_buffer)rr�r r r rU�s �zSSLProtocol._set_app_protocolcCsD|jdurdS|j��s:|dur.|j�|�n |j�d�d|_dSr)r}Z cancelledZ set_exceptionZ set_result�rr@r r r �_wakeup_waiter�s   zSSLProtocol._wakeup_waitercCs&||_t|j|j|j�|_|��dSr)rarrvrrr�_start_handshake)r� transportr r r �connection_made�s �zSSLProtocol.connection_madecCsn|jr d|_|j�|jj|�n|jdur2d|j_d|_d|_t|dd�rT|j � �|� |�d|_d|_ dS)NFT�_handshake_timeout_handle) r�rL� call_soonrX�connection_lostr~rNrar9r��cancelr�rr�r r r r��s    zSSLProtocol.connection_lostcCs|j��dSr)rX� pause_writingr r r r r�szSSLProtocol.pause_writingcCs|j��dSr)rX�resume_writingr r r r r�szSSLProtocol.resume_writingc Cs|jdurdSz|j�|�\}}WnHttfy:�Yn2tyj}z|�|d�WYd}~dSd}~00|D]}|j�|�qp|D]�}|�rz&|jr�t � |j |�n |j � |�WnLttfy��Yn6t�y}z|�|d�WYd}~dSd}~00q�|� ��qq�dS)NzSSL error in data receivedz/application protocol failed to receive SSL data)rr)� SystemExit�KeyboardInterrupt� BaseException� _fatal_errorrar3r�rZ_feed_data_to_buffered_protorX� data_receivedr\)rr>r,r-�er?Zexr r r r� s8  ��zSSLProtocol.data_receivedcCs^zL|j��rt�d|�|�t�|js@|j��}|r@t� d�W|j � �n |j � �0dS)Nz%r received EOFz?returning true from eof_received() has no effect when using ssl) rL� get_debugr�debugr��ConnectionResetErrorr�rX� eof_receivedZwarningrar])rZ keep_openr r r r�2s     zSSLProtocol.eof_receivedcCs4||jvr|j|S|jdur,|j�||�S|SdSr)rxrarTrQr r r rPHs    zSSLProtocol._get_extra_infocCs.|jr dS|jr|��nd|_|�d�dS)NTr%)r�r�rqrnr r r r r\Ps  zSSLProtocol._start_shutdowncCs.|j�|df�|jt|�7_|��dS)Nr)r{r6r|rB�_process_write_backlogror r r rnYszSSLProtocol._write_appdatacCs\|j��r$t�d|�|j��|_nd|_d|_|j�d�|j� |j |j �|_ |� �dS)Nz%r starts SSL handshakeT)r%r)rLr�rr��time�_handshake_start_timer�r{r6Z call_laterr��_check_handshake_timeoutr�r�r r r r r�^s    ��zSSLProtocol._start_handshakecCs*|jdur&d|j�d�}|�t|��dS)NTz$SSL handshake is taking longer than z! seconds: aborting the connection)r�r�r��ConnectionAbortedError)r�msgr r r r�ms  ��z$SSLProtocol._check_handshake_timeoutc Cs d|_|j��|jj}z|dur&|�|��}Wn^ttfyH�YnHty�}z0t |t j �rhd}nd}|� ||�WYd}~dSd}~00|j ��r�|j ��|j}t�d||d�|jj||��|��|d�|jr�|j�|j�|��d|_|j �|j�dS)NFz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg@�@)�peercert�cipher� compressionr!T)r�r�r�rr!Z getpeercertr�r�r�rirr8r�rLr�r�r�rr�rx�updater�r�r�rXr�r~r�r�r�r�)rZ handshake_excZsslobjr�r@r�Zdtr r r �_on_handshake_completevs8     �z"SSLProtocol._on_handshake_completec CsB|jdus|jdurdSz�tt|j��D]�}|jd\}}|rR|j�||�\}}n*|rj|j�|j�}d}n|j�|j �}d}|D]}|j� |�q�|t|�kr�||f|jd<|jj r�|j� �q�|jd=|j t|�8_ q(Wn\ttfy��YnFt�y<}z,|j�r|�|�n |�|d�WYd}~n d}~00dS)NrrzFatal error on SSL transport)rar�rangerBr{rFr.r�r0� _finalizer3Z_pausedrdr|r�r�r�r�r�)r�ir>rEr,r?r@r r r r��s:�   z"SSLProtocol._process_write_backlog�Fatal error on transportcCsVt|t�r(|j��r@tjd||dd�n|j�|||j|d��|jrR|j�|�dS)Nz%r: %sT)�exc_info)�messageZ exceptionr�rV) ri�OSErrorrLr�rr�Zcall_exception_handlerraZ _force_close)rr@r�r r r r��s  �zSSLProtocol._fatal_errorcCsd|_|jdur|j��dSr)rrar]r r r r r��s zSSLProtocol._finalizecCs0z |jdur|j��W|��n |��0dSr)rarrr�r r r r rq�s  zSSLProtocol._abort)FNTN)N)N)r�)rGrHrIrrUr�r�r�r�r�r�r�rPr\rnr�r�r�r�r�r�rqr r r r ru�s,� .  &   )+ ru)ryrsr� ImportError�rrr�logrrrr(r#r/�objectrZ_FlowControlMixinZ TransportrK�Protocolrur r r r �s(       y�~