<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]                 @   s  d  g Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z y d d l Z Wn e k
 r{ d Z Yn Xd d l	 m
 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 d d
 l	 m Z d d l	 m Z d d l m Z d d l m Z d d   Z e e d  rFd d   Z n d d   Z Gd d    d  e
 j  Z Gd d   d e j e j  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z  d S)BaseSelectorEventLoop    N   )base_events)compat)	constants)events)futures)	selectors)
transports)sslproto)	coroutine)loggerc             C   sA   y |  j  |  } Wn t k
 r+ d SYn Xt | j | @ Sd  S)NF)get_keyKeyErrorboolr   )selectorfdeventkey r   4/opt/alt/python35/lib64/python3.5/selector_events.py_test_selector_event    s
    	r   TCP_NODELAYc             C   s\   |  j  t j t j h k rX |  j t j k rX |  j t j k rX |  j t j t j	 d  d  S)Nr   )
familysocketAF_INETAF_INET6typeSOCK_STREAMprotoIPPROTO_TCP
setsockoptr   )sockr   r   r   _set_nodelay,   s    r#   c             C   s   d  S)Nr   )r"   r   r   r   r#   2   s    c                   s>  e  Z d  Z d   f d d  Z d d d d d d d Z d d d	 d
 d d d d d d d Z d d	 d
 d d d d d d d  Z d d d d d  Z   f d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d d d  d!  Z d d d d" d#  Z e d d d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d: d;   Z d< d=   Z d> d?   Z e d@ dA    Z  dB dC   Z! dD dE   Z" dF dG   Z# dH dI   Z$ dJ dK   Z% dL dM   Z& dN dO   Z'   S)Pr   Nc                sa   t    j   | d  k r% t j   } t j d | j j  | |  _ |  j	   t
 j   |  _ d  S)NzUsing selector: %s)super__init__r	   DefaultSelectorr   debug	__class____name__	_selector_make_self_pipeweakrefWeakValueDictionary_transports)selfr   )r(   r   r   r%   <   s    	
zBaseSelectorEventLoop.__init__extraserverc            C   s   t  |  | | | | |  S)N)_SelectorSocketTransport)r/   r"   protocolwaiterr0   r1   r   r   r   _make_socket_transportF   s    z,BaseSelectorEventLoop._make_socket_transportserver_sideFserver_hostnamec      
      C   s{   t  j   s: |  j | | | | d | d | d | d | St  j |  | | | | |  }	 t |  | |	 d | d | |	 j S)Nr6   r7   r0   r1   )r   Z_is_sslproto_available_make_legacy_ssl_transportZSSLProtocolr2   Z_app_transport)
r/   rawsockr3   
sslcontextr4   r6   r7   r0   r1   Zssl_protocolr   r   r   _make_ssl_transportK   s    z)BaseSelectorEventLoop._make_ssl_transportc      	   
   C   s"   t  |  | | | | | | | | 	 S)N)_SelectorSslTransport)	r/   r9   r3   r:   r4   r6   r7   r0   r1   r   r   r   r8   Z   s    z0BaseSelectorEventLoop._make_legacy_ssl_transportc             C   s   t  |  | | | | |  S)N)_SelectorDatagramTransport)r/   r"   r3   addressr4   r0   r   r   r   _make_datagram_transportd   s    z.BaseSelectorEventLoop._make_datagram_transportc                sh   |  j    r t d   |  j   r( d  S|  j   t   j   |  j d  k	 rd |  j j   d  |  _ d  S)Nz!Cannot close a running event loop)Z
is_runningRuntimeError	is_closed_close_self_piper$   closer*   )r/   )r(   r   r   rC   i   s    
zBaseSelectorEventLoop.closec             C   s
   t   d  S)N)NotImplementedError)r/   r   r   r   _socketpairt   s    z!BaseSelectorEventLoop._socketpairc             C   sU   |  j  |  j j    |  j j   d  |  _ |  j j   d  |  _ |  j d 8_ d  S)Nr   )_remove_reader_ssockfilenorC   _csock_internal_fds)r/   r   r   r   rB   w   s    		z&BaseSelectorEventLoop._close_self_pipec             C   sg   |  j    \ |  _ |  _ |  j j d  |  j j d  |  j d 7_ |  j |  j j   |  j  d  S)NFr   )rE   rG   rI   setblockingrJ   _add_readerrH   _read_from_self)r/   r   r   r   r+      s
    z%BaseSelectorEventLoop._make_self_pipec             C   s   d  S)Nr   )r/   datar   r   r   _process_self_data   s    z(BaseSelectorEventLoop._process_self_datac             C   s_   xX y* |  j  j d  } | s P|  j |  Wq t k
 rD w Yq t k
 rV PYq Xq Wd  S)Ni   )rG   recvrO   InterruptedErrorBlockingIOError)r/   rN   r   r   r   rM      s    z%BaseSelectorEventLoop._read_from_selfc             C   s[   |  j  } | d  k	 rW y | j d  Wn. t k
 rV |  j rR t j d d d Yn Xd  S)Ns    z3Fail to write a null byte into the self-pipe socketexc_infoT)rI   sendOSError_debugr   r'   )r/   Zcsockr   r   r   _write_to_self   s    		z$BaseSelectorEventLoop._write_to_selfd   c             C   s,   |  j  | j   |  j | | | | |  d  S)N)rL   rH   _accept_connection)r/   protocol_factoryr"   r:   r1   backlogr   r   r   _start_serving   s    z$BaseSelectorEventLoop._start_servingc             C   s[  xTt  |  D]F} yB | j   \ } } |  j rG t j d | | |  | j d  Wn t t t f k
 rv d  SYq t	 k
 r}	 z |	 j
 t
 j t
 j t
 j t
 j f k r	|  j d d d |	 d | i  |  j | j    |  j t j |  j | | | | |  n   WYd  d  }	 ~	 Xq Xd | i }
 |  j | | |
 | |  } |  j |  q Wd  S)Nz#%r got a new connection from %r: %rFmessagez&socket.accept() out of system resource	exceptionr   peername)rangeacceptrV   r   r'   rK   rR   rQ   ConnectionAbortedErrorrU   errnoZEMFILEZENFILEZENOBUFSZENOMEMcall_exception_handlerrF   rH   Z
call_laterr   ZACCEPT_RETRY_DELAYr\   _accept_connection2Zcreate_task)r/   rZ   r"   r:   r1   r[   _connaddrexcr0   ra   r   r   r   rY      s4    		
z(BaseSelectorEventLoop._accept_connectionc             c   s$  d  } d  } y |   } |  j    } | rZ |  j | | | d | d d d | d | } n$ |  j | | d | d | d | } y | Ed  HWn | j     Yn XWny t k
 r}	 zY |  j rd d d |	 i }
 | d  k	 r | |
 d	 <| d  k	 r | |
 d
 <|  j |
  WYd  d  }	 ~	 Xn Xd  S)Nr4   r6   Tr0   r1   r]   z3Error on transport creation for incoming connectionr^   r3   	transport)create_futurer;   r5   rC   	ExceptionrV   rd   )r/   rZ   rg   r0   r:   r1   r3   rj   r4   ri   contextr   r   r   re      s4    		
	

z)BaseSelectorEventLoop._accept_connection2c             C   sN   y |  j  | } Wn t k
 r% Yn% X| j   sJ t d j | |    d  S)Nz.File descriptor {!r} is used by transport {!r})r.   r   
is_closingr@   format)r/   r   rj   r   r   r   _ensure_fd_no_transport   s    z-BaseSelectorEventLoop._ensure_fd_no_transportc       	      G   s   |  j    t j | | |   } y |  j j |  } Wn1 t k
 rh |  j j | t j | d  f  YnS X| j | j	 } \ } } |  j j
 | | t j B| | f  | d  k	 r | j   d  S)N)_check_closedr   Handler*   r   r   registerr	   
EVENT_READrN   modifycancel)	r/   r   callbackargshandler   maskreaderwriterr   r   r   rL     s    
z!BaseSelectorEventLoop._add_readerc             C   s   |  j    r d Sy |  j j |  } Wn t k
 r> d SYn{ X| j | j } \ } } | t j M} | s |  j j |  n |  j j	 | | d  | f  | d  k	 r | j
   d Sd Sd  S)NFT)rA   r*   r   r   r   rN   r	   rt   
unregisterru   rv   )r/   r   r   rz   r{   r|   r   r   r   rF     s    	
z$BaseSelectorEventLoop._remove_readerc       	      G   s   |  j    t j | | |   } y |  j j |  } Wn1 t k
 rh |  j j | t j d  | f  YnS X| j | j	 } \ } } |  j j
 | | t j B| | f  | d  k	 r | j   d  S)N)rq   r   rr   r*   r   r   rs   r	   EVENT_WRITErN   ru   rv   )	r/   r   rw   rx   ry   r   rz   r{   r|   r   r   r   _add_writer(  s    
z!BaseSelectorEventLoop._add_writerc             C   s   |  j    r d Sy |  j j |  } Wn t k
 r> d SYn{ X| j | j } \ } } | t j M} | s |  j j |  n |  j j	 | | | d  f  | d  k	 r | j
   d Sd Sd  S)NFT)rA   r*   r   r   r   rN   r	   r~   r}   ru   rv   )r/   r   r   rz   r{   r|   r   r   r   _remove_writer7  s    	
z$BaseSelectorEventLoop._remove_writerc             G   s    |  j  |  |  j | | |  S)N)rp   rL   )r/   r   rw   rx   r   r   r   
add_readerN  s    z BaseSelectorEventLoop.add_readerc             C   s   |  j  |  |  j |  S)N)rp   rF   )r/   r   r   r   r   remove_readerS  s    z#BaseSelectorEventLoop.remove_readerc             G   s    |  j  |  |  j | | |  S)N)rp   r   )r/   r   rw   rx   r   r   r   
add_writerX  s    z BaseSelectorEventLoop.add_writerc             C   s   |  j  |  |  j |  S)N)rp   r   )r/   r   r   r   r   remove_writer]  s    z#BaseSelectorEventLoop.remove_writerc             C   sM   |  j  r' | j   d k r' t d   |  j   } |  j | d | |  | S)Nr   zthe socket must be non-blockingF)rV   
gettimeout
ValueErrorrk   
_sock_recv)r/   r"   nfutr   r   r   	sock_recvb  s
    	zBaseSelectorEventLoop.sock_recvc             C   s   | j    } | r |  j |  | j   r/ d  Sy | j |  } Wnh t t f k
 r{ |  j | |  j | d | |  Yn? t k
 r } z | j	 |  WYd  d  } ~ Xn X| j
 |  d  S)NT)rH   r   	cancelledrP   rR   rQ   r   r   rl   set_exception
set_result)r/   r   
registeredr"   r   r   rN   ri   r   r   r   r   q  s    # z BaseSelectorEventLoop._sock_recvc             C   sc   |  j  r' | j   d k r' t d   |  j   } | rR |  j | d | |  n | j d   | S)Nr   zthe socket must be non-blockingF)rV   r   r   rk   _sock_sendallr   )r/   r"   rN   r   r   r   r   sock_sendall  s    z"BaseSelectorEventLoop.sock_sendallc             C   s   | j    } | r |  j |  | j   r/ d  Sy | j |  } WnS t t f k
 rb d } Yn6 t k
 r } z | j |  d  SWYd  d  } ~ Xn X| t |  k r | j	 d   n5 | r | | d   } |  j
 | |  j | d | |  d  S)Nr   T)rH   r   r   rT   rR   rQ   rl   r   lenr   r   r   )r/   r   r   r"   rN   r   r   ri   r   r   r   r     s"    
z#BaseSelectorEventLoop._sock_sendallc             c   s   |  j  r' | j   d k r' t d   t t d  sI | j t j k r t j | d | j d | j	 d |  } | j
   s | Ed  H| j   d \ } } } } } |  j   } |  j | | |  | Ed  HS)Nr   zthe socket must be non-blockingAF_UNIXr   r   loop)rV   r   r   hasattrr   r   r   r   Z_ensure_resolvedr   doneresultrk   _sock_connect)r/   r"   r>   Zresolvedrf   r   r   r   r   sock_connect  s    "!	z"BaseSelectorEventLoop.sock_connectc             C   s   | j    } y | j |  Wn t t f k
 ro | j t j |  j |   |  j | |  j	 | | |  Yn? t
 k
 r } z | j |  WYd  d  } ~ Xn X| j d   d  S)N)rH   connectrR   rQ   add_done_callback	functoolspartial_sock_connect_doner   _sock_connect_cbrl   r   r   )r/   r   r"   r>   r   ri   r   r   r   r     s      z#BaseSelectorEventLoop._sock_connectc             C   s   |  j  |  d  S)N)r   )r/   r   r   r   r   r   r     s    z(BaseSelectorEventLoop._sock_connect_donec             C   s   | j    r d  Sy> | j t j t j  } | d k rM t | d | f   WnI t t f k
 rh Yn? t k
 r } z | j	 |  WYd  d  } ~ Xn X| j
 d   d  S)Nr   zConnect call failed %s)r   
getsockoptr   
SOL_SOCKETSO_ERRORrU   rR   rQ   rl   r   r   )r/   r   r"   r>   errri   r   r   r   r     s     z&BaseSelectorEventLoop._sock_connect_cbc             C   sJ   |  j  r' | j   d k r' t d   |  j   } |  j | d |  | S)Nr   zthe socket must be non-blockingF)rV   r   r   rk   _sock_accept)r/   r"   r   r   r   r   sock_accept  s
    
z!BaseSelectorEventLoop.sock_acceptc             C   s   | j    } | r |  j |  | j   r/ d  Sy# | j   \ } } | j d  Wne t t f k
 r |  j | |  j | d |  YnE t	 k
 r } z | j
 |  WYd  d  } ~ Xn X| j | | f  d  S)NFT)rH   r   r   ra   rK   rR   rQ   r   r   rl   r   r   )r/   r   r   r"   r   rg   r>   ri   r   r   r   r     s      z"BaseSelectorEventLoop._sock_acceptc             C   s   x | D] \ } } | j  | j } \ } } | t j @rk | d  k	 rk | j r^ |  j |  n |  j |  | t j @r | d  k	 r | j r |  j |  q |  j |  q Wd  S)N)	fileobjrN   r	   rt   Z
_cancelledrF   Z_add_callbackr~   r   )r/   Z
event_listr   rz   r   r{   r|   r   r   r   _process_events
  s    		z%BaseSelectorEventLoop._process_eventsc             C   s!   |  j  | j    | j   d  S)N)rF   rH   rC   )r/   r"   r   r   r   _stop_serving  s    z#BaseSelectorEventLoop._stop_serving)(r)   
__module____qualname__r%   r5   r;   r8   r?   rC   rE   rB   r+   rO   rM   rW   r\   rY   r   re   rp   rL   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r(   r   r   6   sT   
(#c                   s   e  Z d  Z d Z e Z d Z d d   f d d  Z d d   Z d d	   Z	 d
 d   Z
 d d   Z d d   Z d d   Z e j r d d   Z d d d  Z d d   Z d d   Z d d   Z   S)_SelectorTransport   i   Nc                s  t    j | |  | |  j d <| j   |  j d <d |  j k r~ y | j   |  j d <Wn" t j k
 r} d  |  j d <Yn X| |  _ | j   |  _	 | |  _
 d |  _ | |  _ |  j   |  _ d |  _ d |  _ |  j d  k	 r |  j j   |  | j |  j	 <d  S)Nr   Zsocknamer_   Tr   F)r$   r%   _extragetsocknamegetpeernamer   error_sockrH   _sock_fd	_protocol_protocol_connected_server_buffer_factory_buffer
_conn_lost_closingZ_attachr.   )r/   r   r"   r3   r0   r1   )r(   r   r   r%   )  s&    						z_SelectorTransport.__init__c             C   s  |  j  j g } |  j d  k r. | j d  n |  j rD | j d  | j d |  j  |  j d  k	 r|  j j   rt |  j j	 |  j t
 j  } | r | j d  n | j d  t |  j j	 |  j t
 j  } | r d } n d } |  j   } | j d | | f  d	 d
 j |  S)Nclosedclosingzfd=%szread=pollingz	read=idlepollingZidlezwrite=<%s, bufsize=%s>z<%s> )r(   r)   r   appendr   r   _looprA   r   r*   r	   rt   r~   get_write_buffer_sizejoin)r/   infor   statebufsizer   r   r   __repr__>  s*    		z_SelectorTransport.__repr__c             C   s   |  j  d   d  S)N)_force_close)r/   r   r   r   abortZ  s    z_SelectorTransport.abortc             C   s   | |  _  d  S)N)r   )r/   r3   r   r   r   set_protocol]  s    z_SelectorTransport.set_protocolc             C   s   |  j  S)N)r   )r/   r   r   r   get_protocol`  s    z_SelectorTransport.get_protocolc             C   s   |  j  S)N)r   )r/   r   r   r   rn   c  s    z_SelectorTransport.is_closingc             C   sn   |  j  r d  Sd |  _  |  j j |  j  |  j sj |  j d 7_ |  j j |  j  |  j j |  j d   d  S)NTr   )	r   r   rF   r   r   r   r   	call_soon_call_connection_lost)r/   r   r   r   rC   f  s    			z_SelectorTransport.closec             C   s4   |  j  d  k	 r0 t j d |  t  |  j  j   d  S)Nzunclosed transport %r)r   warningswarnResourceWarningrC   )r/   r   r   r   __del__t  s    z_SelectorTransport.__del__zFatal error on transportc          	   C   sy   t  | t j  r= |  j j   rh t j d |  | d d n+ |  j j d | d | d |  d |  j i  |  j	 |  d  S)Nz%r: %srS   Tr]   r^   rj   r3   )

isinstancer   Z_FATAL_ERROR_IGNOREr   	get_debugr   r'   rd   r   r   )r/   ri   r]   r   r   r   _fatal_errory  s    	z_SelectorTransport._fatal_errorc             C   s   |  j  r d  S|  j r6 |  j j   |  j j |  j  |  j s[ d |  _ |  j j |  j  |  j  d 7_  |  j j |  j	 |  d  S)NTr   )
r   r   clearr   r   r   r   rF   r   r   )r/   ri   r   r   r   r     s    				z_SelectorTransport._force_closec             C   su   z |  j  r |  j j |  Wd  |  j j   d  |  _ d  |  _ d  |  _ |  j } | d  k	 rp | j   d  |  _ Xd  S)N)r   r   Zconnection_lostr   rC   r   r   Z_detach)r/   ri   r1   r   r   r   r     s    					
z(_SelectorTransport._call_connection_lostc             C   s   t  |  j  S)N)r   r   )r/   r   r   r   r     s    z(_SelectorTransport.get_write_buffer_sizei   )r)   r   r   max_size	bytearrayr   r   r%   r   r   r   r   rn   rC   r   ZPY34r   r   r   r   r   r   r   )r(   r   r     s    	r   c                   s   e  Z d  Z d d d   f d d  Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z d d   Z	 d d   Z
   S)r2   Nc                s   t    j | | | | |  d |  _ d |  _ t |  j  |  j j |  j j	 |   |  j j |  j j
 |  j |  j  | d  k	 r |  j j t j | d   d  S)NF)r$   r%   _eof_pausedr#   r   r   r   r   connection_maderL   r   _read_readyr   _set_result_unless_cancelled)r/   r   r"   r3   r4   r0   r1   )r(   r   r   r%     s    		z!_SelectorSocketTransport.__init__c             C   si   |  j  r t d   |  j r* t d   d |  _ |  j j |  j  |  j j   re t j d |   d  S)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading)	r   r@   r   r   rF   r   r   r   r'   )r/   r   r   r   pause_reading  s    			z&_SelectorSocketTransport.pause_readingc             C   sg   |  j  s t d   d |  _  |  j r+ d  S|  j j |  j |  j  |  j j   rc t j	 d |   d  S)Nz
Not pausedFz%r resumes reading)
r   r@   r   r   rL   r   r   r   r   r'   )r/   r   r   r   resume_reading  s    			z'_SelectorSocketTransport.resume_readingc             C   s   |  j  r d  Sy |  j j |  j  } WnL t t f k
 r@ Yn t k
 rt } z |  j | d  WYd  d  } ~ Xnn X| r |  j j	 |  nT |  j
 j   r t j d |   |  j j   } | r |  j
 j |  j  n
 |  j   d  S)Nz$Fatal read error on socket transportz%r received EOF)r   r   rP   r   rR   rQ   rl   r   r   data_receivedr   r   r   r'   eof_receivedrF   r   rC   )r/   rN   ri   	keep_openr   r   r   r     s     	#z$_SelectorSocketTransport._read_readyc             C   sN  t  | t t t f  s1 t d t |  j   |  j rF t d   | sP d  S|  j	 r |  j	 t
 j k rx t j d  |  j	 d 7_	 d  S|  j s0y |  j j |  } WnP t t f k
 r YnS t k
 r } z |  j | d  d  SWYd  d  } ~ Xn X| | d   } | sd  S|  j j |  j |  j  |  j j |  |  j   d  S)Nz1data argument must be a bytes-like object, not %rz%Cannot call write() after write_eof()zsocket.send() raised exception.r   z%Fatal write error on socket transport)r   bytesr   
memoryview	TypeErrorr   r)   r   r@   r   r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   warningr   r   rT   rR   rQ   rl   r   r   r   r   _write_readyextend_maybe_pause_protocol)r/   rN   r   ri   r   r   r   write  s4    			z_SelectorSocketTransport.writec             C   s
  |  j  r d  Sy |  j j |  j  } Wnl t t f k
 r@ Yn t k
 r } z5 |  j j |  j	  |  j j
   |  j | d  WYd  d  } ~ Xnr X| r |  j d  |  =|  j   |  j s|  j j |  j	  |  j r |  j d   n |  j r|  j j t j  d  S)Nz%Fatal write error on socket transport)r   r   rT   r   rR   rQ   rl   r   r   r   r   r   _maybe_resume_protocolr   r   r   shutdownr   SHUT_WR)r/   r   ri   r   r   r   r   
  s&    	#
			z%_SelectorSocketTransport._write_readyc             C   s6   |  j  r d  Sd |  _  |  j s2 |  j j t j  d  S)NT)r   r   r   r   r   r   )r/   r   r   r   	write_eof"  s
    			z"_SelectorSocketTransport.write_eofc             C   s   d S)NTr   )r/   r   r   r   can_write_eof)  s    z&_SelectorSocketTransport.can_write_eof)r)   r   r   r%   r   r   r   r   r   r   r   r   r   )r(   r   r2     s   

#r2   c                   s   e  Z d  Z e Z d d d d d   f d d  Z d d d  Z d d   Z d	 d
   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z   S)r<   NFc
                s  t  d  k r t d   | s0 t j | |  } d | d d i }
 | rY | rY | |
 d <| j | |
  } t   j | | | | |	  d |  _ | |  _ | |  _	 | |  _
 d |  _ |  j j d |  |  j j   r t j d |   |  j j   } n d  } |  j |  d  S)Nzstdlib ssl module not availabler6   Zdo_handshake_on_connectFr7   r:   z%r starts SSL handshake)sslr@   r   Z_create_transport_contextZwrap_socketr$   r%   r   _server_hostname_waiter_sslcontextr   r   updater   r   r   r'   time_on_handshake)r/   r   r9   r3   r:   r4   r6   r7   r0   r1   Zwrap_kwargsZsslsock
start_time)r(   r   r   r%   1  s*    
					z_SelectorSslTransport.__init__c             C   s^   |  j  d  k r d  S|  j  j   sQ | d  k	 rA |  j  j |  n |  j  j d   d  |  _  d  S)N)r   r   r   r   )r/   ri   r   r   r   _wakeup_waiterU  s    z$_SelectorSslTransport._wakeup_waiterc          %   C   s  y |  j  j   Wnt j k
 rH |  j j |  j |  j |  d  SYn t j k
 r| |  j j	 |  j |  j |  d  SYn t
 k
 r} z |  j j   r t j d |  d d |  j j |  j  |  j j |  j  |  j  j   |  j |  t | t  rd  S  WYd  d  } ~ Xn X|  j j |  j  |  j j |  j  |  j  j   } t |  j d  s|  j r|  j j t j k ry t j | |  j  Wnh t k
 r} zH |  j j   rt j d |  d d |  j  j   |  j |  d  SWYd  d  } ~ Xn X|  j j d | d |  j  j   d |  j  j   d	 |  j   d
 |  _ d
 |  _  |  j j |  j |  j!  d |  _" |  j j# |  j$ j% |   |  j j# |  j  |  j j   r|  j j&   | } t j' d |  | d  d  S)Nz%r: SSL handshake failedrS   TZcheck_hostnamez1%r: SSL handshake failed on matching the hostnamepeercertciphercompressionZ
ssl_objectFz%r: SSL handshake took %.1f msg     @@)(r   Zdo_handshaker   SSLWantReadErrorr   rL   r   r   SSLWantWriteErrorr   BaseExceptionr   r   r   rF   r   rC   r   r   rl   Zgetpeercertr   r   r   Zverify_modeZ	CERT_NONEZmatch_hostnamer   r   r   r   _read_wants_write_write_wants_readr   r   r   r   r   r   r'   )r/   r   ri   r   Zdtr   r   r   r   _  sb    			
			z#_SelectorSslTransport._on_handshakec             C   si   |  j  r t d   |  j r* t d   d |  _ |  j j |  j  |  j j   re t j d |   d  S)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading)	r   r@   r   r   rF   r   r   r   r'   )r/   r   r   r   r     s    			z#_SelectorSslTransport.pause_readingc             C   sg   |  j  s t d   d |  _  |  j r+ d  S|  j j |  j |  j  |  j j   rc t j	 d |   d  S)Nz
Not pausedFz%r resumes reading)
r   r@   r   r   rL   r   r   r   r   r'   )r/   r   r   r   r     s    			z$_SelectorSslTransport.resume_readingc             C   sr  |  j  r d  S|  j rK d |  _ |  j   |  j rK |  j j |  j |  j  y |  j j |  j	  } Wn t
 t t j f k
 r Yn t j k
 r d |  _ |  j j |  j  |  j j |  j |  j  Yn t k
 r} z |  j | d  WYd  d  } ~ Xnm X| r|  j j |  nS zE |  j j   r=t j d |   |  j j   } | r_t j d  Wd  |  j   Xd  S)NFTz!Fatal read error on SSL transportz%r received EOFz?returning true from eof_received() has no effect when using ssl)r   r   r   r   r   r   r   r   rP   r   rR   rQ   r   r   r   r   rF   rl   r   r   r   r   r   r'   r   r   rC   )r/   rN   ri   r   r   r   r   r     s4    			
		#z!_SelectorSslTransport._read_readyc             C   s  |  j  r d  S|  j rT d |  _ |  j   |  j p8 |  j sT |  j j |  j |  j  |  j rAy |  j	 j
 |  j  } Wn t t t j f k
 r d } Yn t j k
 r d } |  j j |  j  d |  _ YnY t k
 r*} z9 |  j j |  j  |  j j   |  j | d  d  SWYd  d  } ~ Xn X| rA|  j d  |  =|  j   |  j s}|  j j |  j  |  j r}|  j d   d  S)NFr   Tz"Fatal write error on SSL transport)r   r   r   r   r   r   rL   r   r   r   rT   rR   rQ   r   r   r   r   r   rl   r   r   r   r   )r/   r   ri   r   r   r   r     s8    			
	

		z"_SelectorSslTransport._write_readyc             C   s   t  | t t t f  s1 t d t |  j   | s; d  S|  j rv |  j t j	 k rc t
 j d  |  j d 7_ d  S|  j s |  j j |  j |  j  |  j j |  |  j   d  S)Nz1data argument must be a bytes-like object, not %rzsocket.send() raised exception.r   )r   r   r   r   r   r   r)   r   r   r   r   r   r   r   r   r   r   r   r   )r/   rN   r   r   r   r     s    		z_SelectorSslTransport.writec             C   s   d S)NFr   )r/   r   r   r   r     s    z#_SelectorSslTransport.can_write_eof)r)   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   r   )r(   r   r<   -  s   "
?
"#r<   c                   sg   e  Z d  Z e j Z d d d   f d d  Z d d   Z d d   Z d d d	  Z	 d
 d   Z
   S)r=   Nc                s   t    j | | | |  | |  _ |  j j |  j j |   |  j j |  j j |  j |  j	  | d  k	 r |  j j t
 j | d   d  S)N)r$   r%   _addressr   r   r   r   rL   r   r   r   r   )r/   r   r"   r3   r>   r4   r0   )r(   r   r   r%     s    	z#_SelectorDatagramTransport.__init__c             C   s   t  d d   |  j D  S)Nc             s   s!   |  ] \ } } t  |  Vq d  S)N)r   ).0rN   rf   r   r   r   	<genexpr>'  s    zC_SelectorDatagramTransport.get_write_buffer_size.<locals>.<genexpr>)sumr   )r/   r   r   r   r   &  s    z0_SelectorDatagramTransport.get_write_buffer_sizec             C   s   |  j  r d  Sy |  j j |  j  \ } } Wn t t f k
 rF Yn| t k
 rz } z |  j j |  WYd  d  } ~ XnH t	 k
 r } z |  j
 | d  WYd  d  } ~ Xn X|  j j | |  d  S)Nz&Fatal read error on datagram transport)r   r   recvfromr   rR   rQ   rU   r   error_receivedrl   r   Zdatagram_received)r/   rN   rh   ri   r   r   r   r   )  s    	"#z&_SelectorDatagramTransport._read_readyc             C   s  t  | t t t f  s1 t d t |  j   | s; d  S|  j ro | d  |  j f k ro t d |  j f   |  j	 r |  j r |  j	 t
 j k r t j d  |  j	 d 7_	 d  S|  j sy7 |  j r |  j j |  n |  j j | |  d  SWn t t f k
 r&|  j j |  j |  j  Ynq t k
 r^} z |  j j |  d  SWYd  d  } ~ Xn9 t k
 r} z |  j | d  d  SWYd  d  } ~ Xn X|  j j t |  | f  |  j   d  S)Nz1data argument must be a bytes-like object, not %rz#Invalid address: must be None or %szsocket.send() raised exception.r   z'Fatal write error on datagram transport)r   r   r   r   r   r   r)   r   r   r   r   r   r   r   r   r   rT   sendtorR   rQ   r   r   r   _sendto_readyrU   r   r  rl   r   r   r   )r/   rN   rh   ri   r   r   r   r  7  s<    			z!_SelectorDatagramTransport.sendtoc             C   s:  x |  j  r |  j  j   \ } } y3 |  j r@ |  j j |  n |  j j | |  Wq t t f k
 r |  j  j | | f  PYq t	 k
 r } z |  j
 j |  d  SWYd  d  } ~ Xq t k
 r } z |  j | d  d  SWYd  d  } ~ Xq Xq W|  j   |  j  s6|  j j |  j  |  j r6|  j d   d  S)Nz'Fatal write error on datagram transport)r   popleftr   r   rT   r  rR   rQ   
appendleftrU   r   r  rl   r   r   r   r   r   r   r   )r/   rN   rh   ri   r   r   r   r  ^  s*    		
		z(_SelectorDatagramTransport._sendto_ready)r)   r   r   collectionsdequer   r%   r   r   r  r  r   r   )r(   r   r=     s   	'r=   )!__all__r  rc   r   r   r   r,   r   ImportError r   r   r   r   r   r	   r
   r   Z
coroutinesr   logr   r   r   r#   ZBaseEventLoopr   Z_FlowControlMixinZ	Transportr   r2   r<   r=   r   r   r   r   <module>   s>   	 