U ifJj@sddlZddlZz ddlZWnek r4dZYnXddlmZddlmZddlmZddlmZddl m Z dd Z d Z d Z d Zd ZGdddeZGdddejejZGdddejZdS)N) base_events) 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/python38/lib64/python3.8/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_stater Z MemoryBIO _incoming _outgoing_sslobj _need_ssldata _handshake_cb _shutdown_cb)selfcontextr r r r r__init__8s   z_SSLPipe.__init__cCs|jSN)rrr r rrNsz_SSLPipe.contextcCs|jSr )rr!r r r ssl_objectSsz_SSLPipe.ssl_objectcCs|jSr )rr!r r r need_ssldata[sz_SSLPipe.need_ssldatacCs |jtkSr )r_WRAPPEDr!r r rwrappedasz_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_handshakejs z_SSLPipe.do_handshakecCsB|jtkrtd|jtkr$tdt|_||_|d\}}|S)Nzno security layer presentzshutdown in progressr&)rrr( _SHUTDOWNrr*r+r r rshutdowns  z_SSLPipe.shutdowncCs|j|d\}}dS)Nr&)rZ write_eofr*)rr-r.r r rfeed_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 Wnztjtjfk rl}zRt|dd}|tjtjtjfkrP|jtkrN|j rN| ||tjk|_W5d}~XYnX|jjr| |j ||fS)NFerrno)rrrrwriter)rr/r$rreadmax_sizeappendr0Zunwraprr SSLErrorCertificateErrorgetattrSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITESSL_ERROR_SYSCALLrpending)rdatar'r.r-chunkexc exc_errnor r rr*sZ               z_SSLPipe.feed_ssldatarc Cs|jtkr6|t|kr&||dg}ng}|t|fSg}t|}d|_z(|t|krn||j||d7}Wnhtjk r}zHt |dd}|j dkrtj }|_ |tj tj tjfkr|tj k|_W5d}~XYnX|jjr||j|t|ks |jrBq qB||fS)NFr3ZPROTOCOL_IS_SHUTDOWN)rrlen memoryviewrrr4r r8r:reasonr;r3r<r=rr>r7r5)rr?offsetr-ZviewrArBr r r feed_appdatas4       z_SSLPipe.feed_appdata)N)N)N)F)r)__name__ __module__ __qualname__r6rpropertyrr"r#r%r/r1r2r*rGr r r rr$s        Krc@seZdZejjZddZd"ddZddZ dd Z d d Z d d Z e jfddZddZddZddZd#ddZddZeddZddZddZd d!ZdS)$_SSLProtocolTransportcCs||_||_d|_dSr)_loop _ssl_protocol_closed)rloopZ ssl_protocolr r rr!sz_SSLProtocolTransport.__init__NcCs|j||Sr )rN_get_extra_infornamedefaultr r rget_extra_info'sz$_SSLProtocolTransport.get_extra_infocCs|j|dSr )rN_set_app_protocol)rprotocolr r r set_protocol+sz"_SSLProtocolTransport.set_protocolcCs|jjSr )rN _app_protocolr!r r r get_protocol.sz"_SSLProtocolTransport.get_protocolcCs|jSr )rOr!r r r is_closing1sz _SSLProtocolTransport.is_closingcCsd|_|jdSNT)rOrN_start_shutdownr!r r rclose4sz_SSLProtocolTransport.closecCs&|js"|d|t|d|dS)Nzunclosed transport )source)rOResourceWarningr^)rZ_warnr r r__del__?sz_SSLProtocolTransport.__del__cCs |jj}|dkrtd|S)Nz*SSL transport has not been initialized yet)rN _transportr( is_reading)rZtrr r rrcDsz _SSLProtocolTransport.is_readingcCs|jjdSr )rNrb pause_readingr!r r rrdJsz#_SSLProtocolTransport.pause_readingcCs|jjdSr )rNrbresume_readingr!r r rreRsz$_SSLProtocolTransport.resume_readingcCs|jj||dSr )rNrbset_write_buffer_limits)rZhighZlowr r rrfZsz-_SSLProtocolTransport.set_write_buffer_limitscCs |jjSr )rNrbget_write_buffer_sizer!r r rrgosz+_SSLProtocolTransport.get_write_buffer_sizecCs |jjjSr )rNrb_protocol_pausedr!r r rrhssz&_SSLProtocolTransport._protocol_pausedcCs<t|tttfs$tdt|j|s,dS|j|dS)Nz+data: expecting a bytes-like instance, got ) isinstancebytes bytearrayrD TypeErrortyperHrN_write_appdatarr?r r rr4xs z_SSLProtocolTransport.writecCsdSrr r!r r r can_write_eofsz#_SSLProtocolTransport.can_write_eofcCs|jd|_dSr\)rN_abortrOr!r r raborts z_SSLProtocolTransport.abort)N)NN)rHrIrJrZ _SendfileModeZFALLBACKZ_sendfile_compatiblerrUrXrZr[r^warningswarnrarcrdrerfrgrKrhr4rprrr r r rrLs$     rLc@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 Cstdkrtd|dkr 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)r r(rZSSL_HANDSHAKE_TIMEOUTrrrr _sslcontextdict_extra collectionsdeque_write_backlog_write_buffer_size_waiterrMrVrL_app_transport_sslpipe_session_established _in_handshake _in_shutdownrb_call_connection_made_ssl_handshake_timeout) rrP app_protocolr Zwaiterr r Zcall_connection_madeZssl_handshake_timeoutr r rrs@   zSSLProtocol.__init__cCs||_t|tj|_dSr )rYrirZBufferedProtocol_app_protocol_is_buffer)rrr r rrVs zSSLProtocol._set_app_protocolcCsD|jdkrdS|js:|dk r.|j|n |jdd|_dSr )r}Z cancelledZ set_exceptionZ set_resultrrAr r r_wakeup_waiters   zSSLProtocol._wakeup_waitercCs&||_t|j|j|j|_|dSr )rbrrvrrr_start_handshake)r transportr r rconnection_mades zSSLProtocol.connection_madecCsn|jr d|_|j|jj|n|jdk r2d|j_d|_d|_t|ddrT|j | |d|_d|_ dS)NFT_handshake_timeout_handle) rrM call_soonrYconnection_lostr~rOrbr:rcancelrrrr r rrs    zSSLProtocol.connection_lostcCs|jdSr )rY pause_writingr!r r rrszSSLProtocol.pause_writingcCs|jdSr )rYresume_writingr!r r rrszSSLProtocol.resume_writingc Cs"|jdkrdSz|j|\}}WnLttfk r<Yn4tk rn}z||dWYdSd}~XYnX|D]}|j|qt|D]}|rz&|jrt |j |n |j |WnPttfk rYn8tk r }z||dWYdSd}~XYnXq| qqdS)NzSSL error in data receivedz/application protocol failed to receive SSL data)rr* SystemExitKeyboardInterrupt BaseException _fatal_errorrbr4rrZ_feed_data_to_buffered_protorY data_receivedr])rr?r-r.er@Zexr r rrs<  zSSLProtocol.data_receivedcCsTzB|jrtd||t|js@|j }|r@t dW5|jXdS)Nz%r received EOFz?returning true from eof_received() has no effect when using ssl) rbr^rM get_debugrdebugrConnectionResetErrorrrY eof_receivedZwarning)rZ keep_openr r rr-s    zSSLProtocol.eof_receivedcCs4||jkr|j|S|jdk r,|j||S|SdSr )rxrbrUrRr r rrQCs    zSSLProtocol._get_extra_infocCs.|jr dS|jr|nd|_|ddS)NTr&)rrrqrnr!r r rr]Ks  zSSLProtocol._start_shutdowncCs.|j|df|jt|7_|dS)Nr)r{r7r|rC_process_write_backlogror r rrnTszSSLProtocol._write_appdatacCs\|jr$td||j|_nd|_d|_|jd|j |j |j |_ | dS)Nz%r starts SSL handshakeT)r&r)rMrrrtime_handshake_start_timerr{r7Z call_laterr_check_handshake_timeoutrrr!r r rrYs    zSSLProtocol._start_handshakecCs*|jdkr&d|jd}|t|dS)NTz$SSL handshake is taking longer than z! seconds: aborting the connection)rrrConnectionAbortedError)rmsgr r rrhs  z$SSLProtocol._check_handshake_timeoutc Csd|_|j|jj}z|dk r&||}Wnbttfk rJYnJtk r}z,t |t j rld}nd}| ||WYdSd}~XYnX|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 getpeercertrrrrir r9rrMrrrrrrxupdaterrrrYrr~rrrr)rZ handshake_excZsslobjrrArZdtr r r_on_handshake_completeqs8     z"SSLProtocol._on_handshake_completec CsB|jdks|jdkrdSztt|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\ttfk rYnDtk r<}z$|jr ||n ||dW5d}~XYnXdS)NrrzFatal error on SSL transport)rbrrangerCr{rGr/rr1 _finalizer4Z_pausedrer|rrrrr)rir?rFr-r@rAr r rrs:   z"SSLProtocol._process_write_backlogFatal error on transportcCsVt|tr(|jr@tjd||ddn|j|||j|d|jrR|j|dS)Nz%r: %sT)exc_info)messageZ exceptionrrW) riOSErrorrMrrrZcall_exception_handlerrbZ _force_close)rrArr r rrs  zSSLProtocol._fatal_errorcCsd|_|jdk r|jdSr )rrbr^r!r r rrs zSSLProtocol._finalizecCs(z|jdk r|jW5|XdSr )rrbrrr!r r rrqs zSSLProtocol._abort)FNTN)N)N)r)rHrIrJrrVrrrrrrrrQr]rnrrrrrrrqr r r rrus. .  &   )+ ru)ryrsr ImportErrorrrrrlogrrrr)r$r0objectrZ_FlowControlMixinZ TransportrLZProtocolrur r r rs*       yx