aQc@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z ddl mZdZdefdYZdejfd YZd efd YZd efd YZy$ddlmZeejZWnEek ree jedrLejZqfdefdYZnXdZdeeejfdYZdefdYZ dZ!dS(iN(tutilterror(tcommon(t_cCsGd|kr'|jdd\}}n |d}}tj||fS(sReturn path and query that has been split from uri Just like CGI environment, the path is unquoted, the query is not. t?it(tsplitturllibtunquote(turitpathtquery((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt _splitURIs  t _error_loggercBs,eZdZdZdZdZRS(cCs ||_dS(N(thandler(tselfR((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt__init__scCsdS(N((R((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytflushscCs|j|jddS(Ns (t writelinesR(Rtstr((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytwritescCs(x!|D]}|jjd|qWdS(Ns HG error: %s(Rt log_error(Rtseqtmsg((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR!s (t__name__t __module__RRRR(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR s   t_httprequesthandlercBseZdZedZdZdZdZdZdddZ dZ d Z d Z d Z d Zdd ZdZdZRS(thttpcCsdS(s*Prepare .socket of new HTTPServer instanceN((t httpservertssl_cert((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytpreparehttpserver)scOs#d|_tjj|||dS(NsHTTP/1.1(tprotocol_versiontBaseHTTPServertBaseHTTPRequestHandlerR(Rtargstkargs((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR.s cGs9|jd|jd|j||f|jdS(Ns%s - - [%s] %s i(Rtclient_addresstlog_date_time_stringR(RtfptformatR"((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt_log_any2s cGs|j|jj||dS(N(R(tserverterrorlog(RR'R"((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR8scGs|j|jj||dS(N(R(R)t accesslog(RR'R"((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt log_message;st-c Csg|jjD]}|djdr|^q}|jd|jt|t|djgt|D]}d|^qidS(Nisx-s "%s" %s %s%sRs %s:%s(theaderstitemst startswithR,t requestlineRtjointsorted(Rtcodetsizethtxheaders((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt log_request>s5 cCsDy|jWn/tjk r?}|dtjkr@q@nXdS(Ni(tdo_hgwebtsocketRterrnotEPIPE(Rtinst((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytdo_writeDs cCswy|jWnbtk rr|jdg|jddjtjtj}|j d|j |nXdS(Ns500 Internal Server ErrorsInternal Server ErrorRs5Exception happened during processing request '%s': %s( R>t Exceptiont_start_responset_writeR2t tracebacktformat_exceptiontsystexc_infoRR (Rttb((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytdo_POSTKs   cCs|jdS(N(RG(R((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytdo_GETUsc Cst|j\}}i}d|d<|j|d<|jj|dRGRHR9RwR^R@RARx(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR%s       7  t_httprequesthandleropensslcBs>eZdZdZedZdZdZdZRS(s HTTPS handler based on pyOpenSSLthttpscCsyddl}|jjWn&tk rBtjtdnX|jj|jj}|j||j |t j |j |j }|jj |||_ |j|jdS(NisSSL support is unavailable(tOpenSSLtSSLtContextt ImportErrorRtAbortRt SSLv23_METHODtuse_privatekey_filetuse_certificate_fileR:taddress_familyt socket_typeRt server_bindtserver_activate(RRRtctxtsock((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs     cCsL|j|_tj|jd|j|_tj|jd|j|_dS(Ntrbtwb(trequestRR:t _fileobjecttrbufsizeRjtwbufsizeRk(R((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytsetups cCsYddl}ytj|Wn5|jjk rT}|jdtjkrUqUnXdS(Nii(RRR>Rt SysCallErrorR"R;R<(RRR=((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR>s  cCsPddl}ytj|Wn,|jj|jjfk rKt|_nXdS(Ni(RRthandle_one_requestRRtZeroReturnErrorRR(RR((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs   ( RRt__doc__RfRRRR>R(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs   t_httprequesthandlersslcBs,eZdZdZedZdZRS(s=HTTPS handler based on Pythons ssl module (introduced in 2.6)RcCsnyddl}|jWn&tk r?tjtdnX|j|jdtd|d|j|_dS(NisSSL support is unavailablet server_sidetcertfilet ssl_version( tsslt wrap_socketRRRRR:RtPROTOCOL_SSLv23(RRR((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs   cCsL|j|_tj|jd|j|_tj|jd|j|_dS(NRR(RRR:RRRjRRk(R((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs (RRRRfRRR(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs (t activeCounttforkt_mixincBseZRS((RR(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR scCs#|r|dkrt|dS|S(NR-ta(topen(topttdefault((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pytopenlog s tMercurialHTTPServercBs)eZejdkrdZndZRS(tntic Kstjj||||t|_||_|j||jdd|jddd}|rxd|jd}n||_ t |jdddt j }t |jdddt j }||_||_|jjd d !\|_|_tj|d |_dS( Ntwebt certificateR[Rt/R+R-R*ii(R t HTTPServerRRtdaemon_threadsRvRtconfigRdR[RRDtstdouttstderrR+R*R:t getsocknametaddrtporttgetfqdntfqaddr( RtuitappRRtkwargsR[talogtelog((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs   !!  "(RRtostnametallow_reuse_addressR(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyRs tIPv6HTTPServercBs#eZeeddZdZRS(tAF_INET6cOsD|jdkr'tjtdntt|j||dS(Ns$IPv6 is not available on this system(RR^Rt RepoErrorRtsuperRR(RR"R((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR-sN(RRtgetattrR:R^RR(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyR+scCs|jddr3tjd kr*t}q9t}nt}|jddrTt}nt}ddl }|j |jddd}t j |jdd d }y|||||f|SWn?t jk r}t jtd |||jd fnXdS(NRRiitipv6itaddressRRi@s"cannot start server at '%s:%d': %si(ii(RRDt version_infoRRRt configboolRRt mimetypestinitRtgetportR:RRRR"(RRRtclsRRRR=((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt create_server2s"    ("RRDR;RR R:RmRBt mercurialRRtmercurial.hgwebRtmercurial.i18nRR tobjectR R!RRRt threadingRRnRRt safehasattrRoRRRRR(((s:/sys/lib/python2.7/site-packages/mercurial/hgweb/server.pyt s(`  )