ó ükWc @s0ddlZddlZddlZddlZddlZddlZddlmZm Z ddl m Z ddl m ZejdƒZejjeƒZejZejjedƒZdefd„ƒYZd e fd „ƒYZd e fd „ƒYZd ejfd„ƒYZdeedd„Zedkr,ddl Z e j!ddƒZ"e"j#ddde$ddddƒe"j#ddddde%dddd ƒe"j#d!d"dd#de&dd$dd%ƒe"j#d&dd'de'dd(dd)ƒe"j#d*dd+de'dd,ƒe"j#d-dd.de'dd(dd/ƒe"j(ƒZ)e)j*e_*e)j+r\eZ,neZ,ej-ƒe,_.ej/ej0j1ƒZ2e2j3eƒe)j4r¯e2j5e)j4ƒne)j6rËe2j7e)j6ƒne)j8rçe2j9e)j8ƒned0e)j:fe,e2ƒZ;e)j*rd1j<e)ƒGHne;j=d2ƒndS(3iÿÿÿÿN(t HTTPServertBaseHTTPRequestHandler(tSimpleHTTPRequestHandler(t test_supportt threadings keycert.pemt HTTPSServercBs#eZd„Zd„Zd„ZRS(cCs tj|||ƒ||_dS(N(t _HTTPServert__init__tcontext(tselftserver_addresst handler_classR((s&/usr/lib/python2.7/test/ssl_servers.pyRscCsd|jj|j|jfS(Ns <%s %s:%s>(t __class__t__name__t server_namet server_port(R ((s&/usr/lib/python2.7/test/ssl_servers.pyt__str__s cCsty1|jjƒ\}}|jj|dtƒ}Wn6tk ri}tjrctj j d|ƒn‚nX||fS(Nt server_sidesGot an error: %s ( tsockettacceptRt wrap_sockettTruetOSErrortsupporttverbosetsyststderrtwrite(R tsocktaddrtsslconnte((s&/usr/lib/python2.7/test/ssl_servers.pyt get_request!s (R t __module__RRR (((s&/usr/lib/python2.7/test/ssl_servers.pyRs  tRootedHTTPRequestHandlercBs,eZdZeZdZd„Zd„ZRS(s TestHTTPS/1.0icCs¯tj|ƒd}tjjtj|ƒƒ}|jdƒ}td|ƒ}|j }xS|D]K}tjj |ƒ\}}tjj|ƒ\}}tjj ||ƒ}q\W|S(sñTranslate a /-separated PATH to the local filename syntax. Components that mean special things to the local file system (e.g. drive or directory names) are ignored. (XXX They should probably be diagnosed.) it/N( turlparsetostpathtnormpathturllibtunquotetsplittfiltertNonetroott splitdrivetjoin(R R&twordstwordtdrivethead((s&/usr/lib/python2.7/test/ssl_servers.pyttranslate_path7s   cGsRtjrNtjjd|jj|jj|jj ƒ|j ƒ||fƒndS(Ns server (%s:%d %s): [%s] %s ( RRRtstdoutRtserverR Rtrequesttciphertlog_date_time_string(R tformattargs((s&/usr/lib/python2.7/test/ssl_servers.pyt log_messageKs      (R R!tserver_versionthereR-ttimeoutR4R<(((s&/usr/lib/python2.7/test/ssl_servers.pyR"-s  tStatsRequestHandlercBs2eZdZdZed„Zd„Zd„ZRS(sSExample HTTP request handler which returns SSL statistics on GET requests. sStatsHTTPS/1.0cCsÃ|jjj}|j}i|jƒd6|jƒd6|jƒd6}tj|ƒ}|j dƒ}|j dƒ|j ddƒ|j dt t |ƒƒƒ|jƒ|r¿|jj|ƒnd S( sServe a GET request.t session_cacheR8t compressionsutf-8iÈs Content-typestext/plain; charset=utf-8sContent-LengthN(trfiletrawt_sockRt session_statsR8RBtpprinttpformattencodet send_responset send_headertstrtlent end_headerstwfileR(R t send_bodyRRtstatstbody((s&/usr/lib/python2.7/test/ssl_servers.pytdo_GET]s     cCs|jdtƒdS(sServe a HEAD request.RPN(RStFalse(R ((s&/usr/lib/python2.7/test/ssl_servers.pytdo_HEADoscGs#tjrtj|||ŒndS(N(RRRt log_request(R R:R;((s&/usr/lib/python2.7/test/ssl_servers.pyRVss (R R!t__doc__R=RRSRURV(((s&/usr/lib/python2.7/test/ssl_servers.pyR@Vs   tHTTPSServerThreadcBs>eZedd„Zd„Zdd„Zd„Zd„ZRS(cCsVd|_t|df|pt|ƒ|_|jj|_tjj |ƒt |_ dS(Ni( R,tflagRR"R6RtportRtThreadRRtdaemon(R RthostR ((s&/usr/lib/python2.7/test/ssl_servers.pyRzs    cCsd|jj|jfS(Ns<%s %s>(R R R6(R ((s&/usr/lib/python2.7/test/ssl_servers.pyRƒscCs||_tjj|ƒdS(N(RYRR[tstart(R RY((s&/usr/lib/python2.7/test/ssl_servers.pyR^†s cCsB|jr|jjƒnz|jjdƒWd|jjƒXdS(Ngš™™™™™©?(RYtsetR6t serve_forevert server_close(R ((s&/usr/lib/python2.7/test/ssl_servers.pytrunŠs  cCs|jjƒdS(N(R6tshutdown(R ((s&/usr/lib/python2.7/test/ssl_servers.pytstop’sN( R R!tHOSTR,RRR^RbRd(((s&/usr/lib/python2.7/test/ssl_servers.pyRXxs    cs†|dkr$tjtjjƒ}n|j|ƒt|||ƒ‰tjƒ}ˆj |ƒ|j ƒ‡fd†}|j |ƒˆS(NcsPtjrtjjdƒnˆjƒtjrBtjjdƒnˆjƒdS(Nsstopping HTTPS server sjoining HTTPS thread (RRRR5RRdR/((R6(s&/usr/lib/python2.7/test/ssl_servers.pytcleanup s    ( R,tssltcreate_default_contexttPurposet CLIENT_AUTHtload_cert_chainRXRtEventR^twaitt addCleanup(tcaseRtcertfileR]R RYRf((R6s&/usr/lib/python2.7/test/ssl_servers.pytmake_https_server–s      t__main__t descriptionsERun a test HTTPS server. By default, the current directory is served.s-ps--portttypetdefaultiQthelps(port to listen on (default: %(default)s)s-qs--quiettdestRtactiont store_falsesbe less verboses-ss--statstuse_stats_handlert store_truesalways return stats pages --curve-namet curve_nametstores&curve name for EC-based Diffie-Hellmans --cipherstcipherssallowed cipher lists--dhtdh_files!PEM file containing DH parametersts'Listening on https://localhost:{0.port}gš™™™™™¹?(>R%RRgRGR(R$tBaseHTTPServerRRRtSimpleHTTPServerRttestRRt import_moduleRR&tdirnamet__file__R>ReR/tCERTFILERR"R@R[RXR,RqR targparsetArgumentParsertparsert add_argumenttintRRTRLt parse_argsR;RRzR tgetcwdR-RhRiRjRRkR|tset_ecdh_curveRtload_dh_paramsR~t set_ciphersRZR6R:R`(((s&/usr/lib/python2.7/test/ssl_servers.pytsj       )"