a DOgCk@sddlZddlZz ddlZWney2dZYn0ddlmZddlmZddlmZddlm Z ddZ d Z d Z d Z d ZGd ddeZGdddejejZGdddejZdS)N) constants) protocols) transports)loggercCs"|r tdt}|sd|_|S)Nz(Server side SSL needs a valid SSLContextF) ValueErrorsslZcreate_default_contextZcheck_hostname) server_sideserver_hostname sslcontextr 5/opt/alt/python39/lib64/python3.9/asyncio/sslproto.py_create_transport_contexts rZ UNWRAPPEDZ DO_HANDSHAKEZWRAPPEDZSHUTDOWNc@szeZdZdZdddZeddZeddZed d Zed d Z dd dZ dddZ ddZ dddZ dddZdS)_SSLPipeiNcCsH||_||_||_t|_t|_t|_d|_ d|_ d|_ d|_ dSNF) _context _server_side_server_hostname _UNWRAPPED_staterZ MemoryBIO _incoming _outgoing_sslobj _need_ssldata _handshake_cb _shutdown_cb)selfcontextr r r r r __init__7s   z_SSLPipe.__init__cCs|jSN)rrr 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_ssldatarcallbackssldataappdatar r r do_handshakeis z_SSLPipe.do_handshakecCsB|jtkrtd|jtkr$tdt|_||_|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_eofs z_SSLPipe.feed_eofFc Cs|jtkr"|r|g}ng}g|fSd|_|r8|j|g}g}z|jtkrz|jt|_|j rl| d|rz||fWS|jtkr|j |j }| ||sqqnJ|jt kr|jd|_t|_|jr|n|jtkr| |j Wn|tjtjfyn}zZt|dd}|tjtjtjfvrN|jtkrL|j rL| ||tjk|_WYd}~n d}~00|jjr| |j ||fS)NFerrno)rrrrwriter(rr.r#rreadmax_sizeappendr/ZunwraprrSSLErrorCertificateErrorgetattrSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITESSL_ERROR_SYSCALLrpending)rdatar&r-r,chunkexc exc_errnor r r r)sX              " z_SSLPipe.feed_ssldatarc Cs|jtkr6|t|kr&||dg}ng}|t|fSg}t|}d|_z(|t|krn||j||d7}Wnjtjy}zPt |dd}|j dkrtj }|_ |tj tj tjfvr|tj k|_WYd}~n d}~00|jjr||j|t|ks|jrBqqB||fS)NFr2ZPROTOCOL_IS_SHUTDOWN)rrlen memoryviewrrr3rr7r9reasonr:r2r;r<rr=r6r4)rr>offsetr,Zviewr@rAr r r feed_appdatas4       "z_SSLPipe.feed_appdata)N)N)N)F)r)__name__ __module__ __qualname__r5rpropertyrr!r"r$r.r0r1r)rFr r r r r#s        Krc@seZdZejjZddZd$ddZddZ dd Z d d Z d d Z e jfddZddZddZddZd%ddZddZddZeddZddZd d!Zd"d#ZdS)&_SSLProtocolTransportcCs||_||_d|_dSr)_loop _ssl_protocol_closed)rloopZ ssl_protocolr r r r sz_SSLProtocolTransport.__init__NcCs|j||Sr)rM_get_extra_infornamedefaultr r r get_extra_info&sz$_SSLProtocolTransport.get_extra_infocCs|j|dSr)rM_set_app_protocol)rprotocolr 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|_|jdSNT)rNrM_start_shutdownr r r r close3sz_SSLProtocolTransport.closecCs&|js"|d|t|d|dS)Nzunclosed transport )source)rNResourceWarningr])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|jjdSr)rMra pause_readingr r r r rcIsz#_SSLProtocolTransport.pause_readingcCs|jjdSr)rMraresume_readingr r r r rdQsz$_SSLProtocolTransport.resume_readingcCs|jj||dSr)rMraset_write_buffer_limits)rZhighZlowr r r reYsz-_SSLProtocolTransport.set_write_buffer_limitscCs |jjSr)rMraget_write_buffer_sizer r r r rfnsz+_SSLProtocolTransport.get_write_buffer_sizecCs |jjSr)rMraget_write_buffer_limitsr r r r rgrsz-_SSLProtocolTransport.get_write_buffer_limitscCs |jjjSr)rMra_protocol_pausedr r r r rhxsz&_SSLProtocolTransport._protocol_pausedcCs<t|tttfs$tdt|j|s,dS|j|dS)Nz+data: expecting a bytes-like instance, got ) isinstancebytes bytearrayrC TypeErrortyperGrM_write_appdatarr>r r r r3}sz_SSLProtocolTransport.writecCsdSrr r r r r can_write_eofsz#_SSLProtocolTransport.can_write_eofcCs|jd|_dSr[)rM_abortrNr r r r aborts z_SSLProtocolTransport.abort)N)NN)rGrHrIrZ _SendfileModeZFALLBACKZ_sendfile_compatiblerrTrWrYrZr]warningswarnr`rbrcrdrerfrgrJrhr3rprrr r r r rKs&     rKc@seZdZd+ddZddZd,dd Zd d Zd d ZddZddZ ddZ ddZ d-ddZ ddZ ddZddZddZd d!Zd"d#Zd.d%d&Zd'd(Zd)d*ZdS)/ SSLProtocolFNTc Cstdurtd|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 _sslcontextdict_extra collectionsdeque_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 rsB   zSSLProtocol.__init__cCs||_t|tj|_dSr)rXrirZBufferedProtocol_app_protocol_is_buffer)rrr r r rUs zSSLProtocol._set_app_protocolcCsD|jdurdS|js:|dur.|j|n |jdd|_dSr)r}Z cancelledZ set_exceptionZ set_resultrr@r r r _wakeup_waiters   zSSLProtocol._wakeup_waitercCs&||_t|j|j|j|_|dSr)rarrvrrr_start_handshake)r transportr r r connection_mades zSSLProtocol.connection_madecCsn|jr d|_|j|jj|n|jdur2d|j_d|_d|_t|ddrT|j | |d|_d|_ dS)NFT_handshake_timeout_handle) rrL call_soonrXconnection_lostr~rNrar9rcancelrrrr r r rs    zSSLProtocol.connection_lostcCs|jdSr)rX pause_writingr r r r rszSSLProtocol.pause_writingcCs|jdSr)rXresume_writingr r r r rszSSLProtocol.resume_writingc Cs|jdurdSz|j|\}}WnHttfy:Yn2tyj}z||dWYd}~dSd}~00|D]}|j|qp|D]}|rz&|jrt |j |n |j |WnLttfyYn6ty}z||dWYd}~dSd}~00q| qqdS)NzSSL error in data receivedz/application protocol failed to receive SSL data)rr) SystemExitKeyboardInterrupt BaseException _fatal_errorrar3rrZ_feed_data_to_buffered_protorX data_receivedr\)rr>r,r-er?Zexr r r r s8  zSSLProtocol.data_receivedcCs^zL|jrtd||t|js@|j}|r@t dW|j n |j 0dS)Nz%r received EOFz?returning true from eof_received() has no effect when using ssl) rL get_debugrdebugrConnectionResetErrorrrX eof_receivedZwarningrar])rZ keep_openr r r r2s     zSSLProtocol.eof_receivedcCs4||jvr|j|S|jdur,|j||S|SdSr)rxrarTrQr r r rPHs    zSSLProtocol._get_extra_infocCs.|jr dS|jr|nd|_|ddS)NTr%)rrrqrnr 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\|jr$td||j|_nd|_d|_|jd|j |j |j |_ | dS)Nz%r starts SSL handshakeT)r%r)rLrrrtime_handshake_start_timerr{r6Z call_laterr_check_handshake_timeoutrrr r r r r^s    zSSLProtocol._start_handshakecCs*|jdur&d|jd}|t|dS)NTz$SSL handshake is taking longer than z! seconds: aborting the connection)rrrConnectionAbortedError)rmsgr r r rms  z$SSLProtocol._check_handshake_timeoutc Cs d|_|j|jj}z|dur&||}Wn^ttfyHYnHty}z0t |t j rhd}nd}| ||WYd}~dSd}~00|j r|j |j}td||d|jj||||d|jr|j|j|d|_|j |jdS)NFz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg@@)peercertcipher compressionr!T)rrrrr!Z getpeercertrrrrirr8rrLrrrrrrxupdaterrrrXrr~rrrr)rZ handshake_excZsslobjrr@rZdtr r r _on_handshake_completevs8     z"SSLProtocol._on_handshake_completec CsB|jdus|jdurdSztt|jD]}|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\ttfyYnFty<}z,|jr||n ||dWYd}~n d}~00dS)NrrzFatal error on SSL transport)rarrangerBr{rFr.rr0 _finalizer3Z_pausedrdr|rrrrr)rir>rEr,r?r@r r r rs:   z"SSLProtocol._process_write_backlogFatal error on transportcCsVt|tr(|jr@tjd||ddn|j|||j|d|jrR|j|dS)Nz%r: %sT)exc_info)messageZ exceptionrrV) riOSErrorrLrrrZcall_exception_handlerraZ _force_close)rr@rr r r rs  zSSLProtocol._fatal_errorcCsd|_|jdur|jdSr)rrar]r r r r rs zSSLProtocol._finalizecCs0z |jdur|jW|n |0dSr)rarrrr r r r rqs  zSSLProtocol._abort)FNTN)N)N)r)rGrHrIrrUrrrrrrrrPr\rnrrrrrrrqr r r r rus, .  &   )+ ru)ryrsr ImportErrorrrrlogrrrr(r#r/objectrZ_FlowControlMixinZ TransportrKProtocolrur r r r s(       y~