]]e @ s d d l Z d d l Z y d d l Z Wn e k rB 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 Z d d Z d Z d Z d Z d Z Gd d d e Z Gd d d e j e j Z Gd d d e j Z d S) N )base_events)compat) protocols) transports)loggerc C s | r t d t t d r? t j } | s d | _ nL t j t j } | j t j O_ | j t j O_ | j t j | _ | S)Nz(Server side SSL needs a valid SSLContextcreate_default_contextF) ValueErrorhasattrsslr check_hostnameZ SSLContextZPROTOCOL_SSLv23optionsZOP_NO_SSLv2ZOP_NO_SSLv3Zset_default_verify_pathsZ CERT_REQUIREDverify_mode)server_sideserver_hostname sslcontext r -/opt/alt/python35/lib64/python3.5/sslproto.py_create_transport_context s r c C s t t d S)N MemoryBIO)r r r r r r _is_sslproto_available% s r Z UNWRAPPEDZDO_HANDSHAKEZWRAPPEDZSHUTDOWNc @ s e Z d Z d Z d d d Z e d d Z e d d Z e d d Z e d d Z d d d Z d d d Z d d Z d d d Z d d d Z d S)_SSLPipe i Nc C sj | | _ | | _ | | _ t | _ t j | _ t j | _ 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 t k S)N)r _WRAPPED)r$ r r r wrappedm s z_SSLPipe.wrappedc C s| | j t k r t d | j j | j | j d | j d | j | _ t | _ | | _ | j d d d \ } } | S)Nz"handshake in progress or completedr r only_handshakeT) 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 sa | j t k r t d | j t k r6 t d t | _ | | _ | j d \ } } | S)Nzno security layer presentzshutdown in progressr+ )r r r- _SHUTDOWNr# r/ )r$ r0 r1 r2 r r r shutdown s z_SSLPipe.shutdownc C s&