MINI MINI MANI MO
3
  \e              
   @   s   d dl Z d dlZyd dlZW n ek
r4   dZY nX ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	 Zd
d ZdZ
d
ZdZdZG dd deZG dd dejejZG dd dejZdS )    N   )base_events)compat)	protocols)
transports)loggerc             C   sj   | rt dttdr*tj }|sfd|_n<tjtj}| jtjO  _| jtj	O  _|j
  tj|_|S )Nz(Server side SSL needs a valid SSLContextcreate_default_contextF)
ValueErrorhasattrsslr   check_hostnameZ
SSLContextZPROTOCOL_SSLv23ZoptionsZOP_NO_SSLv2ZOP_NO_SSLv3Zset_default_verify_pathsZ
CERT_REQUIREDverify_mode)server_sideserver_hostname
sslcontext r   (/usr/lib64/python3.6/asyncio/sslproto.py_create_transport_context   s    
r   c               C   s
   t tdS )N	MemoryBIO)r
   r   r   r   r   r   _is_sslproto_available%   s    r   Z	UNWRAPPEDZDO_HANDSHAKEZWRAPPEDZSHUTDOWNc               @   sz   e Zd ZdZdddZedd Zedd	 Zed
d Zedd
 Z	dddZ
dddZdd ZdddZ
dddZdS ) _SSLPipe   i   Nc             C   sH   || _ || _|| _t| _tj | _tj | _d | _	d| _
d | _d | _d S )NF)
_context_server_side_server_hostname
_UNWRAPPED_stater   r   	_incoming	_outgoing_sslobj
_need_ssldata
_handshake_cb_shutdown_cb)selfcontextr   r   r   r   r   __init__D   s    
z_SSLPipe.__init__c             C   s   | j S )N)r   )r#   r   r   r   r$   Z   s    z_SSLPipe.contextc             C   s   | j S )N)r   )r#   r   r   r   
ssl_object_   s    z_SSLPipe.ssl_objectc             C   s   | j S )N)r    )r#   r   r   r   need_ssldatag   s    z_SSLPipe.need_ssldatac             C   s
   | j tkS )N)r   _WRAPPED)r#   r   r   r   wrappedm   s    z_SSLPipe.wrappedc             C   sR   | j tkrtd| jj| j| j| j| jd| _	t
| _ || _| jddd\}}|S )Nz"handshake in progress or completed)r   r       T)only_handshake)
r   r   RuntimeErrorr   Zwrap_bior   r   r   r   r   
_DO_HANDSHAKEr!   feed_ssldata)r#   callbackssldataappdatar   r   r   do_handshakev   s    	
z_SSLPipe.do_handshakec             C   sB   | j tkrtd| j tkr$tdt| _ || _| jd\}}|S )Nzno security layer presentzshutdown in progressr*   )r   r   r,   	_SHUTDOWNr"