U :eJj@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/usr/local/python38/lib/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-viewrArBr r r feed_appdatas4       z_SSLPipe.feed_appdata)N)N)N)F)r)__name__ __module__ __qualname__r6rpropertyrr"r#r%r/r1r2r*rHr 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 )rO_get_extra_infornamedefaultr r rget_extra_info'sz$_SSLProtocolTransport.get_extra_infocCs|j|dSr )rO_set_app_protocol)rprotocolr r r set_protocol+sz"_SSLProtocolTransport.set_protocolcCs|jjSr )rO _app_protocolr!r r r get_protocol.sz"_SSLProtocolTransport.get_protocolcCs|jSr )rPr!r r r is_closing1sz _SSLProtocolTransport.is_closingcCsd|_|jdSNT)rPrO_start_shutdownr!r r rclose4sz_SSLProtocolTransport.closecCs&|js"|d|t|d|dS)Nzunclosed transport )source)rPResourceWarningr_)r_warnr r r__del__?sz_SSLProtocolTransport.__del__cCs |jj}|dkrtd|S)Nz*SSL transport has not been initialized yet)rO _transportr( is_reading)rtrr r rreDsz _SSLProtocolTransport.is_readingcCs|jjdSr )rOrd pause_readingr!r r rrgJsz#_SSLProtocolTransport.pause_readingcCs|jjdSr )rOrdresume_readingr!r r rrhRsz$_SSLProtocolTransport.resume_readingcCs|jj||dSr )rOrdset_write_buffer_limits)rhighlowr r rriZsz-_SSLProtocolTransport.set_write_buffer_limitscCs |jjSr )rOrdget_write_buffer_sizer!r r rrlosz+_SSLProtocolTransport.get_write_buffer_sizecCs |jjjSr )rOrd_protocol_pausedr!r r rrmssz&_SSLProtocolTransport._protocol_pausedcCs<t|tttfs$tdt|j|s,dS|j|dS)Nz+data: expecting a bytes-like instance, got ) isinstancebytes bytearrayrD TypeErrortyperIrO_write_appdatarr?r r rr4xs z_SSLProtocolTransport.writecCsdSrr r!r r r can_write_eofsz#_SSLProtocolTransport.can_write_eofcCs|jd|_dSr])rO_abortrPr!r r raborts z_SSLProtocolTransport.abort)N)NN)rIrJrKrZ _SendfileModeZFALLBACKZ_sendfile_compatiblerrVrYr[r\r_warningswarnrcrergrhrirlrLrmr4rurwr r r rrMs$     rMc@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_waiterrNrWrM_app_transport_sslpipe_session_established _in_handshake _in_shutdownrd_call_connection_made_ssl_handshake_timeout) rrQ app_protocolr waiterr r Zcall_connection_madeZssl_handshake_timeoutr r rrs@   zSSLProtocol.__init__cCs||_t|tj|_dSr )rZrnrZBufferedProtocol_app_protocol_is_buffer)rrr r rrWs zSSLProtocol._set_app_protocolcCsD|jdkrdS|js:|dk r.|j|n |jdd|_dSr )r cancelled set_exception set_resultrrAr r r_wakeup_waiters   zSSLProtocol._wakeup_waitercCs&||_t|j|j|j|_|dSr )rdrr{rrr_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) rrN call_soonrZconnection_lostrrPrdr:rcancelrrrr r rrs    zSSLProtocol.connection_lostcCs|jdSr )rZ pause_writingr!r r rrszSSLProtocol.pause_writingcCs|jdSr )rZresume_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_errorrdr4rrZ_feed_data_to_buffered_protorZ data_receivedr^)rr?r-r.er@exr 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) rdr_rN get_debugrdebugrConnectionResetErrorrrZ eof_receivedwarning)rZ keep_openr r rr-s    zSSLProtocol.eof_receivedcCs4||jkr|j|S|jdk r,|j||S|SdSr )r}rdrVrSr r rrRCs    zSSLProtocol._get_extra_infocCs.|jr dS|jr|nd|_|ddS)NTr&)rrrvrsr!r r rr^Ks  zSSLProtocol._start_shutdowncCs.|j|df|jt|7_|dS)Nr)rr7rrC_process_write_backlogrtr r rrsTszSSLProtocol._write_appdatacCs\|jr$td||j|_nd|_d|_|jd|j |j |j |_ | dS)Nz%r starts SSL handshakeT)r&r)rNrrrtime_handshake_start_timerrr7Z 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 getpeercertrrrrnr r9rrNrrrrrr}updaterrrrZrrrrrr)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)rdrrangerCrrHr/rr1 _finalizer4Z_pausedrhrrrrrr)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)message exceptionrrX) rnOSErrorrNrrrZcall_exception_handlerrdZ _force_close)rrArr r rrs  zSSLProtocol._fatal_errorcCsd|_|jdk r|jdSr )rrdr_r!r r rrs zSSLProtocol._finalizecCs(z|jdk r|jW5|XdSr )rrdrwr!r r rrvs zSSLProtocol._abort)FNTN)N)N)r)rIrJrKrrWrrrrrrrrRr^rsrrrrrrrvr r r rrzs. .  &   )+ rz)r~rxr ImportErrorrrrrlogrrrr)r$r0objectrZ_FlowControlMixinZ TransportrMZProtocolrzr r r rs*       yx