
    z%i{                     z   d dl Z d dlZd dlZ	 d dlZ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y# e$ r dZY w xY w)    N   )	constants)
exceptions)	protocols)
transports)loggerc                        e Zd ZdZdZdZdZdZy)SSLProtocolState	UNWRAPPEDDO_HANDSHAKEWRAPPEDFLUSHINGSHUTDOWNN)__name__
__module____qualname__r   r   r   r   r        D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/asyncio/sslproto.pyr
   r
      s    I!LGHHr   r
   c                       e Zd ZdZdZdZdZy)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%Nr   r   c                 Z    | 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$   +   s2    C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   sh    |;dBBRB
{1W=q=b" # 	# 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!y)_SSLProtocolTransportTc                 .    || _         || _        d| _        y NF)_loop_ssl_protocol_closed)selfloopssl_protocols      r   __init__z_SSLProtocolTransport.__init__T   s    
)r   Nc                 <    	 | j                   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                   j                  |       y r9   )r2   _set_app_protocol)r4   protocols     r   set_protocolz"_SSLProtocolTransport.set_protocol]   s    ,,X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                 p    	 | j                   s"d| _         | j                  j                          y d | _        y NT)r3   r2   _start_shutdownrE   s    r   closez_SSLProtocolTransport.closef   s1    	 ||DL..0!%Dr   c                 X    | j                   sd| _         |j                  dt               y y )NTz9unclosed transport <asyncio._SSLProtocolTransport object>)r3   warnResourceWarning)r4   	_warningss     r   __del__z_SSLProtocolTransport.__del__t   s)    ||DLNN*, r   c                 0    | j                   j                   S r9   )r2   _app_reading_pausedrE   s    r   
is_readingz _SSLProtocolTransport.is_reading{   s    %%9999r   c                 :    	 | j                   j                          y r9   )r2   _pause_readingrE   s    r   pause_readingz#_SSLProtocolTransport.pause_reading~   s    	
 	))+r   c                 :    	 | j                   j                          y r9   )r2   _resume_readingrE   s    r   resume_readingz$_SSLProtocolTransport.resume_reading   s    	
 	**,r   c                 r    	 | j                   j                  ||       | j                   j                          y r9   )r2   _set_write_buffer_limits_control_app_writingr4   r'   r(   s      r   set_write_buffer_limitsz-_SSLProtocolTransport.set_write_buffer_limits   s1    	$ 	33D#>//1r   c                 Z    | 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6""779 	9r   c                 8    	 | j                   j                         S r9   )r2   _get_write_buffer_sizerE   s    r   get_write_buffer_sizez+_SSLProtocolTransport.get_write_buffer_size   s    ;!!88::r   c                 r    	 | j                   j                  ||       | j                   j                          y r9   )r2   _set_read_buffer_limits_control_ssl_readingr^   s      r   set_read_buffer_limitsz,_SSLProtocolTransport.set_read_buffer_limits   s1    	$ 	224=//1r   c                 Z    | 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                 8    	 | j                   j                         S r9   )r2   _get_read_buffer_sizerE   s    r   get_read_buffer_sizez*_SSLProtocolTransport.get_read_buffer_size   s    9!!7799r   c                 .    | j                   j                  S r9   )r2   _app_writing_pausedrE   s    r   _protocol_pausedz&_SSLProtocolTransport._protocol_paused   s     !!555r   c                     	 t        |t        t        t        f      s!t	        dt        |      j                         |sy | j                  j                  |f       y )Nz+data: expecting a bytes-like instance, got )	
isinstancebytes	bytearray
memoryview	TypeErrortyper   r2   _write_appdatar4   datas     r   writez_SSLProtocolTransport.write   s]    	
 $	: >? ##':#6#6"79 : :))4'2r   c                 <    	 | j                   j                  |       y r9   )r2   r}   )r4   list_of_datas     r   
writelinesz _SSLProtocolTransport.writelines   s    	
 	)),7r   c                     	 t         r9   )NotImplementedErrorrE   s    r   	write_eofz_SSLProtocolTransport.write_eof   s    	 "!r   c                      	 yr0   r   rE   s    r   can_write_eofz#_SSLProtocolTransport.can_write_eof   s    Or   c                 b    	 d| _         | j                  | j                  j                          y y rJ   r3   r2   _abortrE   s    r   abortz_SSLProtocolTransport.abort   s3    	 )%%' *r   c                 H    d| _         | j                  j                  |       y rJ   r   r4   excs     r   _force_closez"_SSLProtocolTransport._force_close   s    !!#&r   c                     | j                   j                  j                  |       | j                   xj                  t	        |      z  c_        y r9   )r2   _write_backlogappend_write_buffer_sizelenr~   s     r   _test__append_write_backlogz1_SSLProtocolTransport._test__append_write_backlog   s7    ))00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2;;
A70& !) ,:,-2,9;2,9: 6 63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,d-d)Z-y).SSLProtocoli   Nc
                    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| _        || _        || _        | j/                  |       d | _        d| _        d | _        || _        |	| _        t        j:                         | _        t        j:                         | _        t@        jB                  | _"        d| _#        |rtH        jJ                  | _&        ntH        jN                  | _&        | j                  jQ                  | j<                  | j>                  | j                  | j                        | _)        d| _*        d| _+        d| _,        d| _-        d| _.        | j_                          d| _0        d| _1        d| _2        d| _3        | ji                          | jk                          y )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__  sE   
 ;@AA$T]]3 *4+;+; < ($-$C$C!"a',-/0 0  '#,#A#A !Q&+,./ / 2_.J (;$3D!$(D!% j1 *//1"#
|,"&+#&;#%9"&00.99DO.==DO''00NNDNN)) 11 1 3 $) #( #( $%!#$ $$&"#( $%!#$ %%'!r   c                     || _         t        |d      rDt        |t        j                        r*|j
                  | _        |j                  | _        d| _	        y d| _	        y )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^  sP    )L,/<)C)CD,8,C,CD)0<0K0KD-+/D(+0D(r   c                     | j                   y | j                   j                         s@|#| j                   j                  |       d | _         y | j                   j                  d        d | _         y r9   )r   	cancelledset_exception
set_resultr   s     r   _wakeup_waiterzSSLProtocol._wakeup_waiteri  sZ    <<||%%'**3/  ''-r   c                     | j                   9| 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  sJ    &**"#IJJ"7

D"ID*.D'"""r   c                 4    	 || _         | j                          y r9   )r   _start_handshake)r4   	transports     r   connection_madezSSLProtocol.connection_made{  s    	 $r   c                 J   	 | j                   j                          | j                  j                          | xj                  dz  c_        | j
                  d| j
                  _        | j                  t        j                  k7  r| j                  t        j                  k(  s| j                  t        j                  k(  rEt        j                  | _
        | j                  j!                  | j"                  j$                  |       | j'                  t        j(                         d | _        d | _        d | _        | j-                  |       | j.                  r!| j.                  j1                          d | _        | j2                  r"| j2                  j1                          d | _        y y )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  s>   	 	!!#1 **.D';;*777#3#B#BB#3#=#=="2"A"A

$$T%7%7%G%GM(223"!C (())002,0D)))**113-1D* *r   c                     |}|dk  s|| j                   kD  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  s`    19t}},==Dt 4'(D$.t/?/?$@D!$$$r   c                    | j                   j                  | j                  d |        | j                  t        j
                  k(  r| j                          y | j                  t        j                  k(  r| j                          y | j                  t        j                  k(  r| j                          y | j                  t        j                  k(  r| j                          y y 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227F;<;;*777 [[,444MMO[[,555NN[[,555 6r   c                    	 d| _         	 | j                  j                         rt        j                  d|        | j
                  t        j                  k(  r| j                  t               y | j
                  t        j                  k(  r=| j                  t        j                         | j                  ry| j                          y | j
                  t        j                  k(  r@| j                          | j                  t        j                          | j#                          y | j
                  t        j                   k(  r| j#                          y y # t$        $ r | j&                  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  s   	 "	zz##%.5{{.;;;++,@A 0 8 88 0 9 9:++NN$ 0 9 99  0 9 9:!!# 0 9 99!!# :  	OO!!#	s&   A"E -AE 6E AE $-E %E8c                     || j                   v r| j                   |   S | j                  | j                  j                  ||      S |S r9   )r   r   r>   r;   s      r   r:   zSSLProtocol._get_extra_info  sC    4;;;;t$$__(??11$@@Nr   c                 &   d}|t         j                  k(  rd}n| j                  t         j                  k(  r|t         j                  k(  rd}n| j                  t         j                  k(  r|t         j                  k(  rd}ne| j                  t         j                  k(  r|t         j
                  k(  rd}n2| j                  t         j
                  k(  r|t         j                  k(  rd}|r|| _        y t        dj                  | 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G KK+555)666G KK+888)111G KK+333)222G KK+444)222G#DK 3::KK,- -r   c                 n     j                   j                         r6t        j                  d         j                   j	                          _        nd  _         j                  t        j                          j                   j                   j                   fd       _         j                          y )Nz%r starts SSL handshakec                  $     j                         S r9   )_check_handshake_timeoutrE   s   r   <lambda>z.SSLProtocol._start_handshake.<locals>.<lambda>  s    $*G*G*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    ::!LL2D9)-):D&)-D&(556 JJ!!$"="="IK 	& 	r   c                     | j                   t        j                  k(  r+d| j                   d}| j	                  t        |             y y )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"  sN    ;;*7776../ 0*+ 
 4S9: 8r   c                     	 | j                   j                          | j                  d        y # t        $ r | j	                          Y y t
        j                  $ r}| j                  |       Y d }~y d }~ww xY wr9   )r   do_handshaker   SSLAgainErrors_process_outgoingr   SSLErrorr   s     r   r   zSSLProtocol._do_handshake+  sb    	.LL%%' ''-  	%""$|| 	-'',,	-s   . A6	A6A11A6c                    | j                   !| j                   j                          d | _         | j                  }	 | | j                  t        j
                         n||j                         }| j                  j                         rA| j                  j!                         | j"                  z
  }t%        j&                  d| |dz         | j(                  j+                  ||j-                         |j/                         |       | j0                  t2        j4                  k(  r>t2        j6                  | _        | j8                  j;                  | j=                                | j                          | j?                          y # t        $ rk}| j                  t        j                         t        |t        j                        rd}nd}| j                  ||       | j                  |       Y d }~y d }~ww xY w)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-1D*	$ 0 8 89##))+H ::!"T%?%??BLL94cJ 	H"(--/'-'9'9';&, 	 	. ??.999.==DO..t/F/F/HI/  	OO,667#s334I,c3'$	s   4F 	G5
A!G00G5c                      j                   t        j                  t        j                  t        j                  fv ry  j
                  d j
                  _         j                   t        j                  k(  r j                          y  j                  t        j                          j                  j                   j                   fd       _         j                          y )NTc                  $     j                         S r9   )_check_shutdown_timeoutrE   s   r   r   z-SSLProtocol._start_shutdown.<locals>.<lambda>n  s    44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    KK )) )) **  **.D';;*777KKMOO,556,0JJ,A,A**6-D) NNr   c                     | j                   t        j                  t        j                  fv r/| j                  j                  t        j                  d             y y )NzSSL shutdown timed out)r   r
   r   r   r   r   r   TimeoutErrorrE   s    r   r  z#SSLProtocol._check_shutdown_timeoutr  sN    KK )) )) 
 OO((''(@ACr   c                     | j                          | j                  t        j                         | j	                          y r9   )r   r   r
   r   r   rE   s    r   r   zSSLProtocol._do_flush|  s*    (112r   c                 J   	 | j                   s| j                  j                          | j                          | j	                          | j                  d        y # t        $ r | j                          Y y t        j                  $ r}| j                  |       Y d }~y 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 B"5B"BB"c                     | j                   !| j                   j                          d | _         |r| j                  |       y | j                  j	                  | j
                  j                         y r9   )r   r   r   r1   r   r   rL   )r4   shutdown_excs     r   r  z!SSLProtocol._on_shutdown_complete  sU    ((4))002,0D)l+JJ  !6!67r   c                     | j                  t        j                         | j                  | j                  j	                          y y r9   )r   r
   r   r   r   rE   s    r   r   zSSLProtocol._abort  s4    (223??&OO!!# 'r   c                 8   | j                   t        j                  t        j                  t        j                  fv rH| j
                  t        j                  k\  rt        j                  d       | xj
                  dz  c_        y |D ];  }| j                  j                  |       | xj                  t        |      z  c_        = 	 | j                   t        j                  k(  r| j                          y y # t         $ r}| j#                  |d       Y d }~y 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    KK )) )) **  )"M"MM9:OOq O  	1D&&t,##s4y0#	1	A{{.666  7  	Ab"?@@	As   -C4 4	D=DDc                 ~   	 | j                   r| j                   d   }| j                  j                  |      }t        |      }||k  r(||d  | j                   d<   | xj                  |z  c_        n"| j                   d= | xj                  |z  c_        | j                   r| j                          y # t
        $ r Y w xY wr   )r   r   r   r   r   r  r  )r4   r   countdata_lens       r   r   zSSLProtocol._do_write  s    	%%**1-**40t98#-1%&\D''*++u4+++A.++x7+ %% 	   		s   BB0 0	B<;B<c                     | j                   s@| j                  j                         }t        |      r| j                  j                  |       | j                          y r9   )r   r   r   r   r   r   r]   r~   s     r   r  zSSLProtocol._process_outgoing  sB    ''>>&&(D4y%%d+!!#r   c                    | j                   t        j                  t        j                  fvry 	 | j                  sZ| j
                  r| j                          n| j                          | j                  r| j                          n| j                          | j                          y # t        $ r}| j                  |d       Y d }~y 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    KK (( ))  
 	A++//++-))+&&NN$**,%%' 	Ab"?@@	As   A6B& &	C/CCc                     d}d} j                   j                               }t        |      }	  j                  j	                  ||      }|dkD  rY|}||k  r4 j                  j	                  ||z
  ||d        }|dkD  r||z  }nn$||k  r4 j
                  j                   fd       |dkD  r j                  |       |s! j                           j                          y y # t        $ r Y Ew xY w)Nr   r   c                  $     j                         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  s    ++D,F,F,HIC	LL%%eS1Eqyun LL--efnc&'lKEqy% un JJ(()@A A:--f5##%  " 	  		s   AC% C% %	C10C1c                    d}d}d}	 	 | j                   j                  | j                        }|sn$|rd}d}|}n|rd}|g}nj                  |       L	 |r| j
                  j                         n,|s*| j
                  j                  dj                               |s!| j                          | j                          y y # t        $ r Y yw xY w)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  s    	))$--8 DC!EC!5>DKK&   ,,U3,,SXXd^<##%  "   		s   AC 	CCc                 >   	 | j                   t        j                  k(  rHt        j                  | _         | j                  j                         }|rt        j                  d       y y y # t        t        f$ r  t        $ r}| j                  |d       Y d }~y 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"<"< ..;;=	NN $B C  B ":. 	 	Bb"@AA	Bs   A#A( (B BBc                 Z   | j                         }|| j                  k\  r/| j                  s#d| _        	 | j                  j	                          y || j                  k  r0| j                  r#d| _        	 | j                  j                          y y y # t
        t        f$ r  t        $ r4}| j                  j                  d|| j                  | d       Y d }~y d }~ww xY w# t
        t        f$ r  t        $ r4}| j                  j                  d|| j                  | d       Y d }~y d }~ww xY w)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,,,T5M5M'+D$
""002 T---$2J2J',D$
""113 3K- &z2   

11@!$!%!4!4 $	3   &z2   

11A!$!%!4!4 $	3  s/   B 2C C'*CCD*6*D%%D*c                 H    | j                   j                  | j                  z   S r9   )r   pendingr   rE   s    r   rf   z"SSLProtocol._get_write_buffer_sizeM  s    ~~%%(?(???r   c                 \    t        ||t        j                        \  }}|| _        || _        y r9   )r,   r   !FLOW_CONTROL_HIGH_WATER_SSL_WRITErb   ra   r^   s      r   r\   z$SSLProtocol._set_write_buffer_limitsP  s.    ,#yBBD	c$(!#& r   c                     d| _         y rJ   )rS   rE   s    r   rV   zSSLProtocol._pause_readingX  s
    #' r   c                 n      j                   r(d _          fd} j                  j                  |       y y )NFc                      j                   t        j                  k(  r j                          y  j                   t        j                  k(  r j                          y  j                   t        j                  k(  r j                          y y r9   )r   r
   r   r   r   r   r   r   rE   s   r   resumez+SSLProtocol._resume_reading.<locals>.resume_  s`    ;;"2":"::MMO[[$4$=$==NN$[[$4$=$==%%' >r   )rS   r1   r   )r4   rL  s   ` r   rY   zSSLProtocol._resume_reading[  s2    ##',D$( JJ  ( $r   c                    | j                         }|| j                  k\  r.| j                  s"d| _        | j                  j	                          y || j
                  k  r/| j                  r"d| _        | j                  j                          y y y )NTF)rq   rn   r   r   rW   rm   rZ   )r4   rD  s     r   rj   z SSLProtocol._control_ssl_readingj  su    ))+4,,,T5M5M'+D$OO))+T---$2J2J',D$OO**, 3K-r   c                 \    t        ||t        j                        \  }}|| _        || _        y r9   )r,   r    FLOW_CONTROL_HIGH_WATER_SSL_READrn   rm   r^   s      r   ri   z#SSLProtocol._set_read_buffer_limitss  s.    ,#yAAC	c$(!#& r   c                 .    | j                   j                  S r9   )r   rF  rE   s    r   rq   z!SSLProtocol._get_read_buffer_sizey  s    ~~%%%r   c                     	 d| _         y rJ   )r   rE   s    r   rA  zSSLProtocol.pause_writing~  s    	 $( r   c                 4    	 d| _         | j                          y r0   )r   r  rE   s    r   rC  zSSLProtocol.resume_writing  s    	 $)  r   c                 f   | j                   r| j                   j                  |       t        |t              r5| j                  j                         rt        j                  d| |d       y y t        |t        j                        s+| j                  j                  ||| j                   | d       y y )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    ??OO((-c7#zz##%XtWtD &C!:!:;JJ--" !__ 	/  <r   )FNTNNr9   r   )zFatal error on transport).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"f	1# "2H% !F$-P ;.$P*C
-8$A0! $A,#:#<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>r`     s           ?**C,?,?@Ntyy &tyy & *s;J88&00s;lV
),, V
}  
Cs   B0 0B:9B: