PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  4h^c@sEdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddlZejdZddlmZddlmZmZdfdYZde jfd YZd ejfd YZd Zejd ejZdZddZdZ ejdZ!dZ"e#dkrAddlZe$ej%dkrdej%dGHnddl&Z&ddl'Z'ddl(Z(ddl Z ddl)Z)ddl*Z*ddl+Z+ddlZe+j,dZ-ej.ej/Z0e&j1dddZ2e'j3ej%dZ4e(j(e4Z5ede6ej%de-e0Z7e7j8e5e)j)e)j9ej%dddde-de0Z:e*j*ddZ;e j<e7e2e:e;e-gZ=e7j8e=d ej%kr4d!Z>ddl?Z?e?j@d"d#n ejAndS($s>$Id: http_server.py,v 1.12 2004/04/21 15:11:44 akuchling Exp $iNi(tcounter(tunquotet splitqueryt http_requestc Bs%eZdZeZdZdmZdZdZ dZ dZ dZ dZ dZd Zdmd Zd Zd Zejd ZdZdZdZdZdZdZddZdZeZdZdZ dZ!i%dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d6d76d8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6Z"dbj#dnZ$dlZ%RS(oiicGs|\|_|_|_|_|_|_g|_idtd6tj t j d6|_ g|_ t jj|_d|_i|_dS(Ns Medusa/%stServertDate(tchanneltrequesttcommandturitversiontheadertoutgoingtVERSION_STRINGt http_datetbuild_http_datettimet reply_headerst _http_request__reply_header_listRtrequest_countert incrementtrequest_numbertNonet _split_urit _header_cache(tselftargs((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt__init__8s*    cCs||j|^ss (tjointresponset reply_codetmapRtitems(R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytbuild_reply_header[scCs|jj||fdS(s$ Adds a header to the reply headers N(Rtappend(RtnameR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt add_headerlscCs|jjg|j(dS(s Clears the reply header list N(RtclearR(R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt clear_headersps cCs-d}|jj|rJ|dks7|j||krJ|j|=d}n|dk r||f|jkr||fg}d}qn@g}x7|jD],}|d|kr|j|d}qqW|s|dkrd|}nd||f}td|nx|D]}|jj|qWdS(s Removes the specified header. If a value is provided, the name and value must match to remove the header. If the value is None, removes all headers with that name.iis%ss%s: %ssHeader '%s' not foundN(RR!RRR*t LookupErrortremove(RR+Rtfound_ittremoved_headerstht search_value((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt remove_headerxs,          cCs||j}g|D]\}}|^q}xL|jjD];\}}||kr9|j||f|j|q9q9W|S(sP Get the tuple of headers that will be used for generating reply headers(RRR(R*(Rt header_tuplestntvt header_names((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytget_reply_headerss  cCsS|j}|j|jg}|g|D]}d|^q+7}dj|dS(sE Gets the reply header (including status and additional crlf)s%s: %ss s (R:R%R&R$(RR6theadersR3((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytget_reply_header_texts !s#([^;?#]*)(;[^?#]*)?(\?[^#]*)?(#.*)?cCsg|jdkr`|jj|j}|jt|jkrNtdq`|j|_n|jS(Ns Broken URI( RRt path_regextmatchR tendtlent ValueErrortgroups(Rtm((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt split_uris cCsLxE|jD]:}|j|}|jt|kr |j|Sq WdS(Nt(R R>R?R@tgroup(Rthead_regRFtlineRC((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytget_header_with_regexs cCs|j}|j}|j|s|d}t|}x?|jD]4}|| j|krD||}|||<|SqDWd||sError responsesss

Error response

s

Error code %(code)d.s

Message: %(message)s.sREcCsdS(N((Rtmsgtlevel((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRRsN( ssError responsesss

Error response

s

Error code %(code)d.s

Message: %(message)s.sRE(&t__name__t __module__R&RRRfRRPRRRR R!R)R,R.R5R:R<tretcompileR=RDRIRNRQRTRZR%Rat reply_nowR_RRmR[R$R^RR(((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyR%s          (         L    t http_channelcBseZdZdZeZdZdZdZ dZ dZ dZ d Z d Zd Zd Zd ZdZdZdZRS(iicCstjj|_t|_tjj||||_ ||_ |j dd|_ t tj|_|j|_|jdS(Ns RE(Rtchannel_counterRtchannel_numberRRtasynchatt async_chatRRRtset_terminatort in_buffertintRt creation_timet last_usedtcheck_maintenance(RRtconnR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRs      cCs0tjj|dd!}d||j|jfS(Niis<%s channel#: %s requests:%s>(RRt__repr__RR(Rtar((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRs icCs!|j|js|jndS(N(Rtmaintenance_intervalt maintenance(R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRscCs|jdS(N(t kill_zombies(R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRsii<cCshttj}xOtjjD]>}|j|jkr"||j|jkr`|jq`q"q"WdS(N( RRtasyncoret socket_maptvaluest __class__Rtzombie_timeoutRc(RtnowR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRs cCsGtjj||}|jjjt|ttj|_ |S(N( RRtsendRt bytes_outRR@RRR(RRStresult((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRscCspyKtjj||}|jjjt|ttj|_ |SWnt k rkt j dnXdS(NsOut of Memory!( RRtrecvRtbytes_inRR@RRRt MemoryErrortsystexit(RRUR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyR s cCsEtjd \}}|tkr1||ntjj|dS(Ni(Rtexc_infot SystemExitRRt handle_error(RttR8((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRs cGsdS(N((RR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRm!scCs0|jr|jj|n|j||_dS(N(RnRQR(RRS((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRQ(s cCs#|jr|jjn|j}d|_|jd}x|r[|d r[|d}q=W|sp|jdS|d}t|\}}}t|d}t|\}}d|kr|rt|d|}qt|}nt ||||||} |j j |j j j |dkrX|jdt|d| jd dSx|j jD]} | j| rey| |_| j| Wns|j jj tj\\} } } }}}|jd ||| | fdy| jd Wq q XnXdSqeW| jd dS( NREs iit%t?sBad HTTP request: %sRais'Server Error: %s, %s: file: %s line: %sii(RnRTRtsplitRot crack_requestt join_headersRRRRRRttotal_requestsRRRtreprRathandlersR>thandle_requestt exceptionsRtcompact_traceback(RR tlinesRRR R trpathtrqueryRMR3tfiletfunRHRR8ttbinfo((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRT0sT          !cCsP|jr dSt|jrL|jj}t|drE|j SdSndS(Nitstalled(t ac_out_bufferR@t producer_fifotfirstthasattrR(Rtp((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytwritable_for_proxyws  iNi(RRtac_out_buffer_sizeRRnRRRRRRRRRRRRRmRQRTR(((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRs"          Gt http_servercBsreZdeZeZd d dZdZdZ dZ dZ dZ ddZ d Zd ZRS( sHTTP Server (V%s)cCs||_||_tjj||jtjtjg|_ |s\t j t j }n|j|j||f|jd|jj\}}|s|jddtjtj}nytj|d|_Wn-tjk r|jdd||_nX||_t|_t|_t|_t|_t|_|sst j t j }n|rt j|||_ nt j ||_ |jdt!t"j#t"j"|j|fdS(NisComputing default hostnameROisCannot do reverse lookups2Medusa (V%s) started at %s Hostname: %s Port:%d ($tiptportRt dispatcherRt create_sockettsockettAF_INETt SOCK_STREAMRRt file_loggerRtstdouttset_reuse_addrtbindtlistent getsocknameRRt gethostbynamet gethostnamet gethostbyaddrt server_nameRat server_portRt total_clientsRRRRtresolving_loggertunresolving_loggerR Rtctime(RRRtresolvert logger_objectthost((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRsH            cCsdS(Ni((R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytwritablescCsdS(N((R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt handle_readscCs|jS(N(t accepting(R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytreadablescCsdS(N((R((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pythandle_connectscCs|jjy|j\}}WnFtjk rJ|jdddStk rk|jdddSX|j|||dS(Ns+warning: server accept() threw an exceptionROs*warning: server accept() threw EWOULDBLOCK(RRtacceptRRaRRt TypeErrort channel_class(RRR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt handle_accepts  icCs0|r|jj|n|jjd|dS(Ni(RR*Ri(Rthandlertback((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytinstall_handlerscCs|jj|dS(N(RR0(RR((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytremove_handlersc Csd}tdtt|j}|jrR|jjt|jj}nd}t j t j d|j d|j d|jd|jd|jd|d ||jjd ||jjd |jd g g|t jd gS(NcSsdjtj|S(NRE(R$tstatus_handlert english_bytes(R7((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt nice_bytessgs

%s

s!
Listening on: Host: %ssPort: %ds#

Extension List

(tfilterRR't maybe_statusRRRtas_longtfloatRWRhtlines_producert SERVER_IDENTRRRRRRX(RRt handler_statstratio((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytstatuss  %N(RRR RRRRRRRRRRRRR(((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRs 6       cCs!t|dr|jSdSdS(NR(RRR(RY((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyR s sConnection: (.*)cCsig}x\tt|D]H}||ddkrP|d||d|dR?R@RF(RGRRFRHRC((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyRN s  cCsFx?|D]7}|j|}|r|jt|kr|SqWdS(NRE(R>R?R@(RGRRHRC((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytget_header_match's  s%([^ ]+) ([^ ]+)(( HTTP/([0-9.]+))$|$)cCs{tj|}|rs|jt|krs|jdrN|jd}nd}|jd|jd|fSdSdS(Niiii(NNN(tREQUESTR>R?R@RFR(RMRCR ((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyR0st__main__susage: %s is 127.0.0.1tfnordi'RERiURRias-pcCs&ytjWntk r!nXdS(N(RtlooptKeyboardInterrupt(((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pyt profile_loopYs sprofile_loop()s profile.out(BtRCS_IDtosRRtstringRRt asyncore_25Rt asynchat_25RRRWRRRR RturllibRRRRRRRRRt IGNORECASEReRRNRRRRR@targvtmonitortfilesystdefault_handlert ftp_servert chat_serverRtcaching_resolvertrsRRtlgtsecure_monitor_servertmst os_filesystemtfstdhRthsRtdummy_authorizertftptcststatus_extensiontshR tprofiletrunR (((sA/usr/lib/python2.7/site-packages/supervisor/medusa/http_server.pytst                         "