B C[%p @ s d dl Z d dlZyd dlZW n ek r4 dZY nX ddlmZ ddlmZ ddlmZ ddlmZ ddl m Z dd Zd ZdZ dZd ZG dd deZG dd dejejZG dd dejZdS ) N )base_events) constants) protocols) transports)loggerc C s" | rt dt }|sd|_|S )Nz(Server side SSL needs a valid SSLContextF) ValueErrorsslZcreate_default_contextZcheck_hostname)server_sideserver_hostname sslcontext r 5/opt/alt/python37/lib64/python3.7/asyncio/sslproto.py_create_transport_context s r Z UNWRAPPEDZDO_HANDSHAKEZWRAPPEDZSHUTDOWNc @ sz e Zd ZdZdddZedd Zedd Zed d Zedd Z dd dZ dddZdd ZdddZ dddZdS )_SSLPipei Nc C sH || _ || _|| _t| _t | _t | _d | _ d| _ d | _d | _d S )NF) _context_server_side_server_hostname _UNWRAPPED_stater Z MemoryBIO _incoming _outgoing_sslobj _need_ssldata _handshake_cb_shutdown_cb)selfcontextr r r r r __init__8 s z_SSLPipe.__init__c C s | j S )N)r )r r r r r N s z_SSLPipe.contextc C s | j S )N)r )r r r r ssl_objectS s z_SSLPipe.ssl_objectc C s | j S )N)r )r r r r need_ssldata[ s z_SSLPipe.need_ssldatac C s | j tkS )N)r _WRAPPED)r r r r wrappeda 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_handshakej s z_SSLPipe.do_handshakec C sB | j tkrtd| j tkr$tdt| _ || _| d\}}|S )Nzno security layer presentzshutdown in progressr# )r r r% _SHUTDOWNr r' )r r( r) r* r r r shutdown s z_SSLPipe.shutdownc C s | j | d\}}d S )Nr# )r Z write_eofr' )r r) r* r r r feed_eof s z_SSLPipe.feed_eofFc C s | j tkr"|r|g}ng }g |fS d| _|r8| j| g }g }y| j tkrx| j t| _ | j rl| d |rx||fS | j tkrxn| j | j}|| |sP qW nJ| j t kr| j d | _t| _ | jr| n| j tkr|| j W nz tjtjfk rn } zRt|dd }|tjtjtjfkrR| j tkrP| j rP| | |tjk| _W d d }~X Y nX | jjr|| j ||fS )NFerrno)r r r r writer&