3 \e @sddlZddlZy ddlZWnek r4dZYnXddlmZddlmZddlmZddlmZddl m Z dd Z d d Z d Z d ZdZdZGdddeZGdddejejZGdddejZdS)N) base_events)compat) protocols) transports)loggercCsj|r tdttdr*tj}|sfd|_n|j dkrtj |_ |j tj tj tj fkr|j tj k|_WYdd}~XnX|jjr|j|jj|t|ks|jrDPqDW||fS)NFZPROTOCOL_IS_SHUTDOWN)rrlen memoryviewr rr7r r;reasonr>r6r?r@rrAr:r8)r#rBoffsetr0ZviewrDrrr feed_appdatas2       z_SSLPipe.feed_appdatai)N)N)N)F)r)__name__ __module__ __qualname__r9r%propertyr$r&r'r)r2r4r5r.rIrrrrr0s       Jrc@seZdZddZdddZddZdd Zd d Zd d Ze j rHddZ ddZ ddZ dddZddZddZddZddZdS) _SSLProtocolTransportcCs||_||_d|_dS)NF)_loop _ssl_protocol_closed)r#loopZ ssl_protocolrrrr%)sz_SSLProtocolTransport.__init__NcCs|jj||S)N)rP_get_extra_info)r#namedefaultrrrget_extra_info/sz$_SSLProtocolTransport.get_extra_infocCs ||j_dS)N)rP _app_protocol)r#protocolrrr set_protocol3sz"_SSLProtocolTransport.set_protocolcCs|jjS)N)rPrW)r#rrr get_protocol6sz"_SSLProtocolTransport.get_protocolcCs|jS)N)rQ)r#rrr is_closing9sz _SSLProtocolTransport.is_closingcCsd|_|jjdS)NT)rQrP_start_shutdown)r#rrrclose<sz_SSLProtocolTransport.closecCs&|js"tjd|t|d|jdS)Nzunclosed transport %r)source)rQwarningswarnResourceWarningr])r#rrr__del__Ks z_SSLProtocolTransport.__del__cCs|jjjdS)N)rP _transport pause_reading)r#rrrrdQsz#_SSLProtocolTransport.pause_readingcCs|jjjdS)N)rPrcresume_reading)r#rrrreYsz$_SSLProtocolTransport.resume_readingcCs|jjj||dS)N)rPrcset_write_buffer_limits)r#ZhighZlowrrrrfasz-_SSLProtocolTransport.set_write_buffer_limitscCs |jjjS)N)rPrcget_write_buffer_size)r#rrrrgvsz+_SSLProtocolTransport.get_write_buffer_sizecCs<t|tttfs$tdjt|j|s,dS|jj |dS)Nz/data: expecting a bytes-like instance, got {!r}) isinstancebytes bytearrayrF TypeErrorformattyperJrP_write_appdata)r#rBrrrr7zs z_SSLProtocolTransport.writecCsdS)NFr)r#rrr can_write_eofsz#_SSLProtocolTransport.can_write_eofcCs|jjdS)N)rP_abort)r#rrrabortsz_SSLProtocolTransport.abort)N)NN)rJrKrLr%rVrYrZr[r]rZPY34rbrdrerfrgr7rorqrrrrrN&s   rNc@seZdZd'ddZd(ddZdd Zd d Zd d ZddZddZ ddZ d)ddZ ddZ ddZ ddZddZddZd*d!d"Zd#d$Zd%d&ZdS)+ SSLProtocolFNTcCstdkrtd|st||}||_|r6| r6||_nd|_||_t|d|_tj |_ d|_ ||_ ||_ ||_t|j ||_d|_d|_d|_d|_d|_||_dS)Nzstdlib ssl module not available)rrF)r r,rrr _sslcontextdict_extra collectionsdeque_write_backlog_write_buffer_size_waiterrOrWrN_app_transport_sslpipe_session_established _in_handshake _in_shutdownrc_call_connection_made)r#rRZ app_protocolrZwaiterrrZcall_connection_maderrrr%s,    zSSLProtocol.__init__cCsD|jdkrdS|jjs:|dk r.|jj|n |jjdd|_dS)N)rzZ cancelledZ set_exceptionZ set_result)r#rDrrr_wakeup_waiters   zSSLProtocol._wakeup_waitercCs&||_t|j|j|j|_|jdS)N)rcrrsrrr|_start_handshake)r# transportrrrconnection_mades  zSSLProtocol.connection_madecCs8|jrd|_|jj|jj|d|_d|_|j|dS)NF)r}rO call_soonrWconnection_lostrcr{r)r#rDrrrrs zSSLProtocol.connection_lostcCs|jjdS)N)rW pause_writing)r#rrrrszSSLProtocol.pause_writingcCs|jjdS)N)rWresume_writing)r#rrrrszSSLProtocol.resume_writingcCs|jdkrdSy|jj|\}}WnHtjk rj}z*|jjrTtjd||j|j |j dSd}~XnXx|D]}|j j |qrWx(|D] }|r|j j|q|jPqWdS)Nz%r: SSL error %s (reason %s))r|r.r r;rO get_debugrwarningr6rGrprcr7rW data_receivedr\)r#rBr0r1erCrrrrs"    zSSLProtocol.data_receivedc CsTzB|jjrtjd||jt|js@|jj}|r@tj dWd|j j XdS)Nz%r received EOFz?returning true from eof_received() has no effect when using ssl) rOrrdebugrConnectionResetErrorr~rW eof_receivedrrcr])r#Z keep_openrrrr s    zSSLProtocol.eof_receivedcCs4||jkr|j|S|jdk r,|jj||S|SdS)N)rurcrV)r#rTrUrrrrS!s    zSSLProtocol._get_extra_infocCs.|jr dS|jr|jnd|_|jddS)NTr*)rr~rprn)r#rrrr\)s  zSSLProtocol._start_shutdowncCs.|jj|df|jt|7_|jdS)Nr)rxr:ryrE_process_write_backlog)r#rBrrrrn2szSSLProtocol._write_appdatacCsH|jjr$tjd||jj|_nd|_d|_|jjd|j dS)Nz%r starts SSL handshakeTr*r)r*r) rOrrrtime_handshake_start_timer~rxr:r)r#rrrr7s   zSSLProtocol._start_handshakecCsTd|_|jj}yF|dk r||j}t|jdsR|jrR|jjtj krRtj ||jWn~t k r}zb|j j rt|tjrtjd|ddntjd|dd|jjt|tr|j|dSWYdd}~XnX|j j r|j j|j}tjd||d|jj||j|j|d |jr4|jj|j |jd|_!|j j"|j#dS) NFr z5%r: SSL handshake failed on verifying the certificateT)exc_infoz%r: SSL handshake failedz%r: SSL handshake took %.1f msg@@)peercertcipher compressionr&)$r~r|r&Z getpeercertr rsrr r Z CERT_NONEZmatch_hostname BaseExceptionrOrrhr<rrrcr] ExceptionrrrrruupdaterrrrWrr{r}rr)r#Z handshake_excZsslobjrrDZdtrrr_on_handshake_completeCsD         z"SSLProtocol._on_handshake_completecCs>|jdks|jdkrdSyxtt|jD]}|jd\}}|rT|jj||\}}n*|rl|jj|j}d}n|jj|j }d}x|D]}|jj |qW|t|kr||f|jd<|jj r|jj P|jd=|j t|8_ q*WWnRtk r8}z4|jr|j|n |j|dt|ts(WYdd}~XnXdS)NrrzFatal error on SSL transport)rcr|rangerErxrIr2rr4 _finalizer7Z_pausedreryrr~ _fatal_errorrhr)r#irBrHr0rCrDrrrrws8      z"SSLProtocol._process_write_backlogFatal error on transportcCsXt|tjr*|jjrBtjd||ddn|jj|||j|d|jrT|jj |dS)Nz%r: %sT)r)messageZ exceptionrrX) rhrZ_FATAL_ERROR_IGNORErOrrrZcall_exception_handlerrcZ _force_close)r#rDrrrrrs   zSSLProtocol._fatal_errorcCsd|_|jdk r|jjdS)N)r|rcr])r#rrrrs zSSLProtocol._finalizec Cs(z|jdk r|jjWd|jXdS)N)rcrqr)r#rrrrps zSSLProtocol._abort)FNT)N)N)r)rJrKrLr%rrrrrrrrSr\rnrrrrrrprrrrrrs$ "     4, rr)rvr_r ImportErrorrrrrlogrrrrr-r(r3objectrZ_FlowControlMixinZ TransportrNZProtocolrrrrrrs*       wn