3 2ae @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!r r8r r<reasonr?r7r@rArrBr;r9)r$rCoffsetr1ZviewrErrr feed_appdatas2       z_SSLPipe.feed_appdatai)N)N)N)F)r)__name__ __module__ __qualname__r:r&propertyr%r'r(r*r3r5r6r/rJrrrrr0s       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)rQ_get_extra_info)r$namedefaultrrrget_extra_info/sz$_SSLProtocolTransport.get_extra_infocCs ||j_dS)N)rQ _app_protocol)r$protocolrrr set_protocol3sz"_SSLProtocolTransport.set_protocolcCs|jjS)N)rQrX)r$rrr get_protocol6sz"_SSLProtocolTransport.get_protocolcCs|jS)N)rR)r$rrr is_closing9sz _SSLProtocolTransport.is_closingcCsd|_|jjdS)NT)rRrQ_start_shutdown)r$rrrclose<sz_SSLProtocolTransport.closecCs&|js"tjd|t|d|jdS)Nzunclosed transport %r)source)rRwarningswarnResourceWarningr^)r$rrr__del__Ks z_SSLProtocolTransport.__del__cCs|jjjdS)N)rQ _transport pause_reading)r$rrrreQsz#_SSLProtocolTransport.pause_readingcCs|jjjdS)N)rQrdresume_reading)r$rrrrfYsz$_SSLProtocolTransport.resume_readingcCs|jjj||dS)N)rQrdset_write_buffer_limits)r$ZhighZlowrrrrgasz-_SSLProtocolTransport.set_write_buffer_limitscCs |jjjS)N)rQrdget_write_buffer_size)r$rrrrhvsz+_SSLProtocolTransport.get_write_buffer_sizecCs<t|tttfs$tdjt|j|s,dS|jj |dS)Nz/data: expecting a bytes-like instance, got {!r}) isinstancebytes bytearrayrG TypeErrorformattyperKrQ_write_appdata)r$rCrrrr8zs z_SSLProtocolTransport.writecCsdS)NFr)r$rrr can_write_eofsz#_SSLProtocolTransport.can_write_eofcCs|jjdS)N)rQ_abort)r$rrrabortsz_SSLProtocolTransport.abort)N)NN)rKrLrMr&rWrZr[r\r^rZPY34rcrerfrgrhr8rprrrrrrrO&s   rOc@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_waiterrPrXrO_app_transport_sslpipe_session_established _in_handshake _in_shutdownrd_call_connection_made)r$rSZ app_protocolrZwaiterrrZcall_connection_maderrrr&s,    zSSLProtocol.__init__cCsD|jdkrdS|jjs:|dk r.|jj|n |jjdd|_dS)N)r{Z cancelledZ set_exceptionZ set_result)r$rErrr_wakeup_waiters   zSSLProtocol._wakeup_waitercCs&||_t|j|j|j|_|jdS)N)rdrrtrrr}_start_handshake)r$ transportrrrconnection_mades  zSSLProtocol.connection_madecCs8|jrd|_|jj|jj|d|_d|_|j|dS)NF)r~rP call_soonrXconnection_lostrdr|r)r$rErrrrs zSSLProtocol.connection_lostcCs|jjdS)N)rX pause_writing)r$rrrrszSSLProtocol.pause_writingcCs|jjdS)N)rXresume_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<rP get_debugrwarningr7rHrqrdr8rX data_receivedr])r$rCr1r2erDrrrrs"    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) rPrrdebugrConnectionResetErrorrrX eof_receivedrrdr^)r$Z keep_openrrrr s    zSSLProtocol.eof_receivedcCs4||jkr|j|S|jdk r,|jj||S|SdS)N)rvrdrW)r$rUrVrrrrT!s    zSSLProtocol._get_extra_infocCs.|jr dS|jr|jnd|_|jddS)NTr+)rrrqro)r$rrrr])s  zSSLProtocol._start_shutdowncCs.|jj|df|jt|7_|jdS)Nr)ryr;rzrF_process_write_backlog)r$rCrrrro2szSSLProtocol._write_appdatacCsH|jjr$tjd||jj|_nd|_d|_|jjd|j dS)Nz%r starts SSL handshakeTr+r)r+r) rPrrrtime_handshake_start_timerryr;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')$rr}r'Z getpeercertr rtrrr Z CERT_NONEZmatch_hostname BaseExceptionrPrrir=rrrdr^ ExceptionrrrrrvupdaterrrrXrr|r~rr)r$Z handshake_excZsslobjrrEZdtrrr_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)rdr}rangerFryrJr3rr5 _finalizer8Z_pausedrfrzrr _fatal_errorrir)r$irCrIr1rDrErrrrws8      z"SSLProtocol._process_write_backlogFatal error on transportcCsXt|tjr*|jjrBtjd||ddn|jj|||j|d|jrT|jj |dS)Nz%r: %sT)r)messageZ exceptionrrY) rirZ_FATAL_ERROR_IGNORErPrrrZcall_exception_handlerrdZ _force_close)r$rErrrrrs   zSSLProtocol._fatal_errorcCsd|_|jdk r|jjdS)N)r}rdr^)r$rrrrs zSSLProtocol._finalizec Cs(z|jdk r|jjWd|jXdS)N)rdrrr)r$rrrrqs zSSLProtocol._abort)FNT)N)N)r)rKrLrMr&rrrrrrrrTr]rorrrrrrqrrrrrss$ "     4, rs)rwr`r ImportErrorrrrrlogrrrrr.r)r4objectrZ_FlowControlMixinZ TransportrOZProtocolrsrrrrs*       wn