
    ;e{                     P   d dl Z d dlZd dlZ	 d dlZn# e$ r dZY nw xY wddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ eej        ej        fZ G d d	ej                  Z G d
 dej                  Zd Zd Z G d de	j        e	j                  Z G d dej                  ZdS )    N   )	constants)
exceptions)	protocols)
transports)loggerc                   "    e Zd ZdZdZdZdZdZdS )SSLProtocolState	UNWRAPPEDDO_HANDSHAKEWRAPPEDFLUSHINGSHUTDOWNN)__name__
__module____qualname__r   r   r   r   r        '/usr/lib/python3.11/asyncio/sslproto.pyr
   r
      s'        I!LGHHHHr   r
   c                       e Zd ZdZdZdZdZdS )AppProtocolState
STATE_INITSTATE_CON_MADE	STATE_EOFSTATE_CON_LOSTN)r   r   r   r   r   r   r   r   r   r   r   r      s$         J%NI%NNNr   r   c                 `    | rt          d          t          j                    }|sd|_        |S )Nz(Server side SSL needs a valid SSLContextF)
ValueErrorsslcreate_default_contextcheck_hostname)server_sideserver_hostname
sslcontexts      r   _create_transport_contextr$   +   s@     ECDDD +--J *$)
!r   c                     | ||dz  }n
|}d|z  }n| }||dz  }n|}||cxk    rdk    sn t          d|d|d          ||fS )Ni      r   zhigh (z) must be >= low (z) must be >= 0)r   )highlowkbhilos        r   add_flowcontrol_defaultsr,   9   s    |;dBBBRBB
{1W====q====j""bbb" # # 	# r6Mr   c                       e Zd ZdZej        j        Zd ZddZ	d Z
d Zd Zd Zefd	Zd
 Zd Zd ZddZd Zd ZddZd Zd Zed             Zd Zd Zd Zd Zd Zd Z d Z!dS )_SSLProtocolTransportTc                 0    || _         || _        d| _        d S NF)_loop_ssl_protocol_closed)selfloopssl_protocols      r   __init__z_SSLProtocolTransport.__init__T   s    
)r   Nc                 :    	 | j                             ||          S N)r2   _get_extra_infor4   namedefaults      r   get_extra_infoz$_SSLProtocolTransport.get_extra_infoY   s    1!11$@@@r   c                 :    | j                             |           d S r9   )r2   _set_app_protocol)r4   protocols     r   set_protocolz"_SSLProtocolTransport.set_protocol]   s    ,,X66666r   c                     | j         j        S r9   )r2   _app_protocolr4   s    r   get_protocolz"_SSLProtocolTransport.get_protocol`   s    !//r   c                     | j         S r9   )r3   rE   s    r   
is_closingz _SSLProtocolTransport.is_closingc   s
    |r   c                 h    	 | j         s"d| _         | j                                         d S d | _        d S NT)r3   r2   _start_shutdownrE   s    r   closez_SSLProtocolTransport.closef   sC    	 | 	&DL..00000!%Dr   c                 \    | j         s$d| _         |                    dt                     d S d S )NTz9unclosed transport <asyncio._SSLProtocolTransport object>)r3   warnResourceWarning)r4   	_warningss     r   __del__z_SSLProtocolTransport.__del__t   sE    | 	,DLNN*, , , , ,	, 	,r   c                     | j         j         S r9   )r2   _app_reading_pausedrE   s    r   
is_readingz _SSLProtocolTransport.is_reading{   s    %999r   c                 :    	 | j                                          d S r9   )r2   _pause_readingrE   s    r   pause_readingz#_SSLProtocolTransport.pause_reading~   s$    	
 	))+++++r   c                 :    	 | j                                          d S r9   )r2   _resume_readingrE   s    r   resume_readingz$_SSLProtocolTransport.resume_reading   s$    	
 	**,,,,,r   c                 p    	 | j                             ||           | j                                          d S r9   )r2   _set_write_buffer_limits_control_app_writingr4   r'   r(   s      r   set_write_buffer_limitsz-_SSLProtocolTransport.set_write_buffer_limits   s=    	$ 	33D#>>>//11111r   c                 2    | j         j        | j         j        fS r9   )r2   _outgoing_low_water_outgoing_high_waterrE   s    r   get_write_buffer_limitsz-_SSLProtocolTransport.get_write_buffer_limits       "6"79 	9r   c                 6    	 | j                                         S r9   )r2   _get_write_buffer_sizerE   s    r   get_write_buffer_sizez+_SSLProtocolTransport.get_write_buffer_size   s    ;!88:::r   c                 p    	 | j                             ||           | j                                          d S r9   )r2   _set_read_buffer_limits_control_ssl_readingr^   s      r   set_read_buffer_limitsz,_SSLProtocolTransport.set_read_buffer_limits   s=    	$ 	224===//11111r   c                 2    | j         j        | j         j        fS r9   )r2   _incoming_low_water_incoming_high_waterrE   s    r   get_read_buffer_limitsz,_SSLProtocolTransport.get_read_buffer_limits   rd   r   c                 6    	 | j                                         S r9   )r2   _get_read_buffer_sizerE   s    r   get_read_buffer_sizez*_SSLProtocolTransport.get_read_buffer_size   s    9!77999r   c                     | j         j        S r9   )r2   _app_writing_pausedrE   s    r   _protocol_pausedz&_SSLProtocolTransport._protocol_paused   s     !55r   c                     	 t          |t          t          t          f          s$t	          dt          |          j                   |sd S | j                            |f           d S )Nz+data: expecting a bytes-like instance, got )	
isinstancebytes	bytearray
memoryview	TypeErrortyper   r2   _write_appdatar4   datas     r   writez_SSLProtocolTransport.write   s{    	
 $	: >?? 	: 9#'::#69 9 : : : 	F))4'22222r   c                 <    	 | j                             |           d S r9   )r2   r}   )r4   list_of_datas     r   
writelinesz _SSLProtocolTransport.writelines   s&    	
 	)),77777r   c                     	 t           r9   )NotImplementedErrorrE   s    r   	write_eofz_SSLProtocolTransport.write_eof   s    	 "!r   c                     	 dS r0   r   rE   s    r   can_write_eofz#_SSLProtocolTransport.can_write_eof   s
    Our   c                 Z    	 d| _         | j        | j                                         d S d S rJ   r3   r2   _abortrE   s    r   abortz_SSLProtocolTransport.abort   s<    	 )%%''''' *)r   c                 H    d| _         | j                            |           d S rJ   r   r4   excs     r   _force_closez"_SSLProtocolTransport._force_close   s&    !!#&&&&&r   c                     | j         j                            |           | j         xj        t	          |          z  c_        d S r9   )r2   _write_backlogappend_write_buffer_sizelenr~   s     r   _test__append_write_backlogz1_SSLProtocolTransport._test__append_write_backlog   s?    )00666--T:----r   r9   NN)"r   r   r   _start_tls_compatibler   _SendfileModeFALLBACK_sendfile_compatibler7   r>   rB   rF   rH   rL   warningsrQ   rT   rW   rZ   r_   rc   rg   rk   ro   rr   propertyru   r   r   r   r   r   r   r   r   r   r   r.   r.   N   s        !$2;  
A A A A7 7 70 0 0  & & & !) , , , ,: : :, , ,- - -2 2 2 2,9 9 9; ; ;2 2 2 2,9 9 9: : : 6 6 X63 3 38 8 8" " "  	( 	( 	(' ' '; ; ; ; ;r   r.   c                      e Zd ZdZdZdZdZ	 	 	 	 d-dZd Zd.dZ	d Z
d	 Zd
 Zd Zd Zd Zd.dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d/d#Z%d$ Z&d% Z'd& Z(d/d'Z)d( Z*d) Z+d* Z,d0d,Z-dS )1SSLProtocoli   NFTc
                    t           t          d          t          | j                  | _        t          | j                  | _        |t          j        }n|dk    rt          d|           |	t          j
        }	n|	dk    rt          d|	           |st          ||          }|| _        |r
|s|| _        nd | _        || _        t          |          | _        t#          j                    | _        d| _        || _        || _        |                     |           d | _        d| _        d | _        || _        |	| _        t          j                    | _        t          j                    | _        t@          j!        | _"        d| _#        |rtH          j%        | _&        ntH          j'        | _&        | j        (                    | j        | j        | j        | j                  | _)        d| _*        d| _+        d| _,        d| _-        d| _.        | /                                 d| _0        d| _1        d| _2        d| _3        | 4                                 | 5                                 d S )Nzstdlib ssl module not availabler   z7ssl_handshake_timeout should be a positive number, got z6ssl_shutdown_timeout should be a positive number, got )r#   F)r!   r"   )6r   RuntimeErrorry   max_size_ssl_bufferrz   _ssl_buffer_viewr   SSL_HANDSHAKE_TIMEOUTr   SSL_SHUTDOWN_TIMEOUTr$   _server_side_server_hostname_sslcontextdict_extracollectionsdequer   r   _waiterr1   r@   _app_transport_app_transport_created
_transport_ssl_handshake_timeout_ssl_shutdown_timeout	MemoryBIO	_incoming	_outgoingr
   r   _state
_conn_lostr   r   
_app_stater   wrap_bio_sslobj_ssl_writing_pausedrS   _ssl_reading_pausedrn   rm   ri   _eof_receivedrt   rb   ra   r\   _get_app_transport)
r4   r5   app_protocolr#   waiterr!   r"   call_connection_madessl_handshake_timeoutssl_shutdown_timeouts
             r   r7   zSSLProtocol.__init__  s   
 ;@AAA$T]33 *4+; < < ($-$C!!"a''/,/ /0 0 0  '#,#A  !Q&&.+. ./ / /  	.2_. .J ( 	); 	)$3D!!$(D!% j111 */11"#
|,,,"&+#&;#%9"&0 	>.9DOO.=DO'00NDN) 1 1 3 3 $) #( #( $%!#$ $$&&&"#( $%!#$ %%'''!!!!!r   c                     || _         t          |d          r;t          |t          j                  r!|j        | _        |j        | _        d| _	        d S d| _	        d S )N
get_bufferTF)
rD   hasattrrw   r   BufferedProtocolr   _app_protocol_get_bufferbuffer_updated_app_protocol_buffer_updated_app_protocol_is_buffer)r4   r   s     r   r@   zSSLProtocol._set_app_protocol^  sc    )L,// 	1<)CDD	1,8,CD)0<0KD-+/D(((+0D(((r   c                     | j         d S | j                                         s7|| j                             |           n| j                             d            d | _         d S r9   )r   	cancelledset_exception
set_resultr   s     r   _wakeup_waiterzSSLProtocol._wakeup_waiteri  sd    <F|%%'' 	.**3////''---r   c                     | j         7| j        rt          d          t          | j        |           | _         d| _        | j         S )Nz$Creating _SSLProtocolTransport twiceT)r   r   r   r.   r1   rE   s    r   r   zSSLProtocol._get_app_transports  sK    &* K"#IJJJ"7
D"I"ID*.D'""r   c                 >    	 || _         |                                  d S r9   )r   _start_handshake)r4   	transports     r   connection_madezSSLProtocol.connection_made{  s(    	 $r   c                    	 | j                                          | j                                         | xj        dz  c_        | j        d| j        _        | j        t          j	        k    r`| j
        t          j        k    s| j
        t          j        k    r6t          j        | _
        | j                            | j        j        |           |                     t          j                   d | _        d | _        d | _        |                     |           | j        r | j                                         d | _        | j        r"| j                                         d | _        d S d S )Nr   T)r   clearr   readr   r   r3   r   r
   r   r   r   r   r   r   r1   	call_soonrD   connection_lost
_set_stater   r   r   _shutdown_timeout_handlecancel_handshake_timeout_handler   s     r   r   zSSLProtocol.connection_lost  sT   	 	!!###1 **.D';*777#3#BBB#3#==="2"A
$$T%7%GMMM(2333"!C   ( 	1)00222,0D)) 	2*11333-1D***	2 	2r   c                     |}|dk    s|| j         k    r| j         }t          | j                  |k     r-t          |          | _        t	          | j                  | _        | j        S Nr   )r   r   r   ry   rz   r   )r4   nwants      r   r   zSSLProtocol.get_buffer  sc    199t},,=Dt  4''(D$.t/?$@$@D!$$r   c                    | j                             | j        d |                    | j        t          j        k    r|                                  d S | j        t          j        k    r|                                  d S | j        t          j	        k    r| 
                                 d S | j        t          j        k    r|                                  d S d S r9   )r   r   r   r   r
   r   _do_handshaker   _do_readr   	_do_flushr   _do_shutdown)r4   nbytess     r   r   zSSLProtocol.buffer_updated  s    T27F7;<<<;*777     [,444MMOOOOO[,555NN[,555 65r   c                    	 d| _         	 | j                                        rt          j        d|            | j        t          j        k    r|                     t                     d S | j        t          j
        k    r>|                     t          j                   | j        rdS |                                  d S | j        t          j        k    rI|                                  |                     t          j                   |                                  d S | j        t          j        k    r|                                  d S d S # t$          $ r | j                                          w xY w)NTz%r received EOF)r   r1   	get_debugr   debugr   r
   r   _on_handshake_completeConnectionResetErrorr   r   r   rS   r   	_do_writer   r   	Exceptionr   rL   rE   s    r   eof_receivedzSSLProtocol.eof_received  sl   	 "	z##%% 6.555{.;;;++,@AAAAA 0 888 0 9:::+ %4NN$$$$$ 0 999    0 9:::!!##### 0 999!!##### :9  	 	 	O!!###	s%   AE );E &E <AE )E %E,c                 v    || j         v r| j         |         S | j        | j                            ||          S |S r9   )r   r   r>   r;   s      r   r:   zSSLProtocol._get_extra_info  sA    4;;t$$_(?11$@@@Nr   c                    d}|t           j        k    rd}n| j        t           j        k    r|t           j        k    rd}nw| j        t           j        k    r|t           j        k    rd}nO| j        t           j        k    r|t           j        k    rd}n'| j        t           j        k    r|t           j        k    rd}|r	|| _        d S t          d                    | j        |                    )NFTz!cannot switch state from {} to {})	r
   r   r   r   r   r   r   r   format)r4   	new_statealloweds      r   r   zSSLProtocol._set_state  s    (222GG K+555)666GG K+888)111GG K+333)222GG K+444)222G 	-#DKKK 3::K, ,- - -r   c                 f     j                                         r4t          j        d             j                                          _        nd  _                             t          j                    j         	                     j
         fd           _                                          d S )Nz%r starts SSL handshakec                  ,                                      S r9   )_check_handshake_timeoutrE   s   r   <lambda>z.SSLProtocol._start_handshake.<locals>.<lambda>  s    $*G*G*I*I r   )r1   r   r   r   time_handshake_start_timer   r
   r   
call_laterr   r   r   rE   s   `r   r   zSSLProtocol._start_handshake  s    :!! 	.L2D999)-):):D&&)-D&(5666 J!!$"="I"I"I"IK K 	& 	r   c                     | j         t          j        k    r/d| j         d}|                     t          |                     d S d S )Nz$SSL handshake is taking longer than z! seconds: aborting the connection)r   r
   r   r   _fatal_errorConnectionAbortedError)r4   msgs     r   r   z$SSLProtocol._check_handshake_timeout"  s_    ;*777+.+ + + 
 4S99::::: 87r   c                    	 | j                                          |                     d            d S # t          $ r |                                  Y d S t
          j        $ r }|                     |           Y d }~d S d }~ww xY wr9   )r   do_handshaker   SSLAgainErrors_process_outgoingr   SSLErrorr   s     r   r   zSSLProtocol._do_handshake+  s    	.L%%''' ''-----  	% 	% 	%""$$$$$$| 	- 	- 	-'',,,,,,,,,	-s   2 BB!A<<Bc                    | j          | j                                          d | _         | j        }	 | |                     t          j                   n||                                }n# t          $ rt}|                     t          j                   t          |t          j                  rd}nd}|                     ||           |                     |           Y d }~d S d }~ww xY w| j                                        r:| j                                        | j        z
  }t%          j        d| |dz             | j                            ||                                |                                |           | j        t2          j        k    r=t2          j        | _        | j                            |                                            |                                  |                                  d S )Nz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg     @@)peercertciphercompression
ssl_object) r   r   r   r   r
   r   getpeercertr   r   rw   r   CertificateErrorr   r   r1   r   r   r   r   r   r   updater	  r
  r   r   r   r   rD   r   r   r   )r4   handshake_excsslobjr  r   r  dts          r   r   z"SSLProtocol._on_handshake_complete5  s   )5*11333-1D*	$ 0 89999##))++HH 	 	 	OO,6777#s344 -I,c3'''$$$FFFFF	 :!! 	K""T%??BL94cJJJ 	H"(--//'-'9'9';';&, 	 	. 	. 	. ?.999.=DO..t/F/F/H/HIIIs   8A) )
C'3A)C""C'c                      j         t          j        t          j        t          j        fv rd S  j        d j        _         j         t          j        k    r                                  d S  	                    t          j                    j
                             j         fd           _                                          d S )NTc                  ,                                      S r9   )_check_shutdown_timeoutrE   s   r   r   z-SSLProtocol._start_shutdown.<locals>.<lambda>n  s    4466 r   )r   r
   r   r   r   r   r3   r   r   r   r1   r   r   r   r   rE   s   `r   rK   zSSLProtocol._start_shutdown]  s    K ) ) *   F**.D';*777KKMMMMMOO,5666,0J,A,A*6666- -D) NNr   c                     | j         t          j        t          j        fv r.| j                            t          j        d                     d S d S )NzSSL shutdown timed out)r   r
   r   r   r   r   r   TimeoutErrorrE   s    r   r  z#SSLProtocol._check_shutdown_timeoutr  sf    K ) )  
 O(('(@AAC C C C C r   c                     |                                   |                     t          j                   |                                  d S r9   )r   r   r
   r   r   rE   s    r   r   zSSLProtocol._do_flush|  s=    (1222r   c                 f   	 | j         s| j                                         |                                  |                                  |                     d            d S # t          $ r |                                  Y d S t          j        $ r }|                     |           Y d }~d S d }~ww xY wr9   )	r   r   unwrapr  _call_eof_received_on_shutdown_completer  r   r  r   s     r   r   zSSLProtocol._do_shutdown  s    
	-% &##%%% ""$$$##%%%&&t,,,,,  	% 	% 	%""$$$$$$| 	, 	, 	,&&s+++++++++	,s    A! !B0B0B++B0c                     | j          | j                                          d | _         |r|                     |           d S | j                            | j        j                   d S r9   )r   r   r   r1   r   r   rL   )r4   shutdown_excs     r   r  z!SSLProtocol._on_shutdown_complete  sk    (4)00222,0D) 	8l+++++J  !677777r   c                     |                      t          j                   | j        | j                                         d S d S r9   )r   r
   r   r   r   rE   s    r   r   zSSLProtocol._abort  sB    (2333?&O!!##### '&r   c                    | j         t          j        t          j        t          j        fv r;| j        t          j        k    rt          j	        d           | xj        dz  c_        d S |D ]9}| j
                            |           | xj        t          |          z  c_        :	 | j         t          j        k    r|                                  d S d S # t           $ r!}|                     |d           Y d }~d S d }~ww xY w)NzSSL connection is closedr   Fatal error on SSL protocol)r   r
   r   r   r   r   r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   warningr   r   r   r   r   r   r   r   )r4   r   r   exs       r   r}   zSSLProtocol._write_appdata  s&   K ) ) *   )"MMM9:::OOq OOF  	1 	1D&&t,,,##s4yy0###	A{.666      76  	A 	A 	Ab"?@@@@@@@@@	As   #)C 
C;C66C;c                 \   	 | j         r~| j         d         }| j                            |          }t          |          }||k     r#||d          | j         d<   | xj        |z  c_        n| j         d= | xj        |z  c_        | j         ~n# t
          $ r Y nw xY w|                                  d S r   )r   r   r   r   r   r  r  )r4   r   countdata_lens       r   r   zSSLProtocol._do_write  s    	% 	8*1-**400t998##-1%&&\D'*++u4++++A.++x7++ % 	8  	 	 	D	     s   BB 
BBc                     | j         sB| j                                        }t          |          r| j                            |           |                                  d S r9   )r   r   r   r   r   r   r]   r~   s     r   r  zSSLProtocol._process_outgoing  s\    ' 	,>&&((D4yy ,%%d+++!!#####r   c                    | j         t          j        t          j        fvrd S 	 | j        s`| j        r|                                  n|                                  | j        r| 	                                 n| 
                                 |                                  d S # t          $ r!}|                     |d           Y d }~d S d }~ww xY w)Nr   )r   r
   r   r   rS   r   _do_read__buffered_do_read__copiedr   r   r  rj   r   r   )r4   r#  s     r   r   zSSLProtocol._do_read  s    K ( )   
 F	A+ -/ ,++----))+++& -NN$$$$**,,,%%''''' 	A 	A 	Ab"?@@@@@@@@@	As   A;B   
C*CCc                 ,    d}d}                                                                 }t          |          }	  j                            ||          }|dk    r^|}||k     r9 j                            ||z
  ||d                    }|dk    r||z  }nn#||k     9 j                             fd           n# t          $ r Y nw xY w|dk    r                     |           |s* 	                                  
                                 d S d S )Nr   r   c                  ,                                      S r9   )r   rE   s   r   r   z0SSLProtocol._do_read__buffered.<locals>.<lambda>  s     r   )r   rq   r   r   r   r1   r   r  r   r  rK   )r4   offsetr%  bufwantss   `    r   r)  zSSLProtocol._do_read__buffered  sK   ++D,F,F,H,HIIC	L%%eS11Eqyyunn L--efnc&''lKKEqyy% unn J(()@)@)@)@AAA 	 	 	D	A::--f555 	###%%%  """""	# 	#s   A?B= =
C
	C
c                    d}d}d}	 	 | j                             | j                  }|sn(|rd}d}|}n|rd}||g}n|                    |           Jn# t          $ r Y nw xY w|r| j                            |           n/|s-| j                            d                    |                     |s*|                                  | 	                                 d S d S )N   1TFr   )
r   r   r   r   r  rD   data_receivedjoinr  rK   )r4   chunkzeroonefirstr   s         r   r*  zSSLProtocol._do_read__copied  s3   	'))$-88  ' DC!EE 'C!5>DDKK&&&'   	 	 	D	 	=,,U3333 	=,,SXXd^^<<< 	###%%%  """""	# 	#s   AA 
A! A!c                 8   	 | j         t          j        k    rBt          j        | _         | j                                        }|rt          j        d           d S d S d S # t          t          f$ r  t          $ r!}|                     |d           Y d }~d S d }~ww xY w)Nz?returning true from eof_received() has no effect when using sslzError calling eof_received())r   r   r   r   rD   r   r   r"  KeyboardInterrupt
SystemExitBaseExceptionr   )r4   	keep_openr#  s      r   r  zSSLProtocol._call_eof_received!  s    
	B"2"AAA"2"< .;;==	 CN $B C C C C C	 BAC C ":. 	 	 	 	B 	B 	Bb"@AAAAAAAAA	Bs   AA B8BBc                 :   |                                  }|| j        k    rw| j        spd| _        	 | j                                         d S # t
          t          f$ r  t          $ r/}| j        	                    d|| j
        | d           Y d }~d S d }~ww xY w|| j        k    rw| j        rrd| _        	 | j                                         d S # t
          t          f$ r  t          $ r/}| j        	                    d|| j
        | d           Y d }~d S d }~ww xY wd S d S )NTzprotocol.pause_writing() failedmessage	exceptionr   rA   Fz protocol.resume_writing() failed)rf   rb   rt   rD   pause_writingr9  r:  r;  r1   call_exception_handlerr   ra   resume_writing)r4   sizer   s      r   r]   z SSLProtocol._control_app_writing0  s   **,,4,,,T5M,'+D$
"0022222%z2       
11@!$!%!4 $	3 3          T---$2J-',D$
"1133333%z2       
11A!$!%!4 $	3 3          .---s/   A
 
B%$BB1C D'$DDc                 *    | j         j        | j        z   S r9   )r   pendingr   rE   s    r   rf   z"SSLProtocol._get_write_buffer_sizeM  s    ~%(???r   c                 ^    t          ||t          j                  \  }}|| _        || _        d S r9   )r,   r   !FLOW_CONTROL_HIGH_WATER_SSL_WRITErb   ra   r^   s      r   r\   z$SSLProtocol._set_write_buffer_limitsP  s7    ,#yBD D	c$(!#&   r   c                     d| _         d S rJ   )rS   rE   s    r   rV   zSSLProtocol._pause_readingX  s    #'   r   c                 f      j         r(d _          fd} j                            |           d S d S )NFc                  
    j         t          j        k    r                                  d S  j         t          j        k    r                                  d S  j         t          j        k    r                                  d S d S r9   )r   r
   r   r   r   r   r   r   rE   s   r   resumez+SSLProtocol._resume_reading.<locals>.resume_  s}    ;"2":::MMOOOOO[$4$===NN$$$$$[$4$===%%''''' >=r   )rS   r1   r   )r4   rL  s   ` r   rY   zSSLProtocol._resume_reading[  sW    # 
	)',D$( ( ( ( ( J  (((((
	) 
	)r   c                    |                                  }|| j        k    r)| j        s"d| _        | j                                         d S || j        k    r)| j        r$d| _        | j                                         d S d S d S )NTF)rq   rn   r   r   rW   rm   rZ   )r4   rD  s     r   rj   z SSLProtocol._control_ssl_readingj  s    ))++4,,,T5M,'+D$O))+++++T---$2J-',D$O**,,,,, .---r   c                 ^    t          ||t          j                  \  }}|| _        || _        d S r9   )r,   r    FLOW_CONTROL_HIGH_WATER_SSL_READrn   rm   r^   s      r   ri   z#SSLProtocol._set_read_buffer_limitss  s7    ,#yAC C	c$(!#&   r   c                     | j         j        S r9   )r   rF  rE   s    r   rq   z!SSLProtocol._get_read_buffer_sizey  s    ~%%r   c                     	 d| _         d S rJ   )r   rE   s    r   rA  zSSLProtocol.pause_writing~  s    	 $(   r   c                 >    	 d| _         |                                  d S r0   )r   r  rE   s    r   rC  zSSLProtocol.resume_writing  s)    	 $)      r   Fatal error on transportc                 \   | j         r| j                             |           t          |t                    r5| j                                        rt          j        d| |d           d S d S t          |t          j	                  s&| j        
                    ||| j         | d           d S d S )Nz%r: %sT)exc_infor>  )r   r   rw   OSErrorr1   r   r   r   r   CancelledErrorrB  )r4   r   r?  s      r   r   zSSLProtocol._fatal_error  s    ? 	.O((---c7## 		z##%% EXtWtDDDDDDE EC!:;; 	J--" !_ 	/ /     	 	r   )FNTNNr9   r   )rS  ).r   r   r   r   r   r   r   r7   r@   r   r   r   r   r   r   r   r:   r   r   r   r   r   rK   r  r   r   r  r   r}   r   r  r   r)  r*  r  r]   rf   r\   rV   rY   rj   ri   rq   rA  rC  r   r   r   r   r   r     s       H  $# 59&*'+&*	Q" Q" Q" Q"f	1 	1 	1   # # #     "2 "2 "2H% % %     ! ! !F   $- $- $-P   ; ; ;. . .$ $ $P  *C C C  
- - -8 8 8$ $ $A A A0! ! ! $ $ $A A A,# # #:# # #<B B B  :@ @ @' ' ' '( ( () ) )- - -' ' ' '& & &
( ( (! ! !     r   r   )r   enumr   r   ImportError r   r   r   r   logr   SSLWantReadErrorSSLSyscallErrorr  Enumr
   r   r$   r,   _FlowControlMixin	Transportr.   r   r   r   r   r   <module>ra     s        JJJJ   
CCC                              ?*C,?@N    ty   & & & & &ty & & &     *s; s; s; s; s;J8&0s; s; s;lV
 V
 V
 V
 V
), V
 V
 V
 V
 V
s    