mò "á¸Ec@sçdZdkZdkZdkZdkZdkZdklZeidƒoeieƒdZ ndZ dd„Z dd„Z d „Z d „Z d „Zd „Zd „Zdeifd„ƒYZdefd„ƒYZdfd„ƒYZdefd„ƒYZedjoÌdkZeeiƒdjo!deidGHeidƒnOdeijo8eiidƒZeiedZeieed5ndZdeijo&dZeiidƒZeie=ndZdeijodZeiidƒndZeoeeƒZ n eeƒZ eeiƒda!d„Z"x[eidD]LZ#eoe i$e#e"ƒq^eoe i%e#e"ƒq^e i&e#e"ƒq^Wx2ei'o#ei(dƒdee i)ƒGHq±WndS( s6$Id: resolver.py 24763 2004-05-17 05:59:28Z philikon $N(scounters$Id: is0.0icCsRdt|d?d@ƒt|d@ƒfdtitd„ti|dƒƒdƒS(Ns%c%ciiÿs%scCsdtt|ƒƒ|fS(Ns%c%s(tchrtlentpart(R((t6/data/zmath/zope/lib/python/ZServer/medusa/resolver.pytAst.t(Rtidtstringtjointmaptsplitthost(R R((Rtfast_address_request;s7cCsRdt|d?d@ƒt|d@ƒfdtitd„ti|dƒƒdƒS(Ns%c%ciiÿs%s cCsdtt|ƒƒ|fS(Ns%c%s(RRR(R((RRNsRR(RRRR R R R (R R((Rtfast_ptr_requestHs7cCs›g}x‚t||ƒ}|d@o$|dd>@t||dƒ}q |djoPq |d}|i||||!ƒ||}q Wti|dƒS(NiiÀi?iiR(tntordtrtpostlltappendRR (RRRR((Rt unpack_nameUs $  cCsc|}xVt||ƒ}|d@o |dSq |djo|d}Pq ||d}q W|S(NiiÀii(RtsRRR(RRRR((Rt skip_nameds    cCs$td„tt|||d!ƒƒS(NcCs |d>|BS(Ni(txty(RR((RRtsi(treduceR RRR(RR((Rt unpack_ttlrs c Cst|dƒd>t|dƒ}t|dƒd}|oÁx¶t|ƒD]¨}t||ƒ}|||d!djo=t||dƒdtt t||d|d !ƒƒfSn|d}t||ƒd>t||d ƒ}|d |}qIWd SndSdS(Niiii its %d.%d.%d.%di iiii(iN(iN( RRtancountRRtrangetanRttupleR trdlengthtNone(RRRRR!((Rtunpack_address_replyŽs" = &cCsðt|dƒd>t|dƒ}t|dƒd}|o¬x¡t|ƒD]“}t||ƒ}|||d!djo(t||dƒt||dƒfSn|d}t||ƒd>t||dƒ}|d |}qIWd Snd SdS( Niiii it i iii(iN(iN( RRRRRRRRRR!R"(RRRRR!((Rtunpack_ptr_reply¥s" ( &tresolvercBsntZeƒZdd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z RS( Ns 127.0.0.1cCsQtii|ƒ|ititiƒ||_h|_ t t i ƒƒ|_ dS(N( tasyncoret dispatchert__init__tselft create_sockettsockettAF_INETt SOCK_DGRAMtservert request_maptintttimetlast_reap_time(R*R/((RR)Ìs   cCsdS(Ni((R*((RtwritableÓscGsdS(N((R*targs((RtlogÖscCs|idƒ|iƒdS(Nsclosing!(R*tlog_infotclose(R*((Rt handle_closeÙs cCsBtiƒ\\}}}}}}|i d|||fdƒdS(Ns"Problem with DNS lookup (%s:%s %s)terror( R'tcompact_tracebacktfiletfuntlinetttvttbinfoR*R7(R*RAR?R<R@R=R>((Rt handle_errorÝs!cCs|iiƒdd>S(Nii(R*Rtas_long(R*((Rtget_idãsc CsÞttiƒƒ} | |idjo´| |_x¨|iiƒD]“\} \}} }}| |djoj|i| =y||ddƒWqÒt iƒ\\}}} }}}|id|||fdƒqÒXq?q?WndS(Ni´is%s %s %sR:(R1R2tnowR*R3R0titemstkR tunpacktcallbacktwhenR"R'R;R<R=R>R?R@RAR7( R*RAR@RJRIR R?R<R=R>RERHRG((Rtreapæs  !cCsq|iƒ|iit||iƒƒ|idfƒ|t|t t i ƒƒf|i |iƒ<|i iƒdS(Ni5(R*RKR,tsendtoR R RDR/R#RIR1R2R0Rt increment(R*R RI((Rtresolveós  +cCs£|iƒti|dƒ}|iƒti|dƒd}|ii t ||i ƒƒ|i dfƒ|t |ttiƒƒf|i|i ƒ<|iiƒdS(NRs .in-addr.arpai5(R*RKRR R tiptreverseR R,RLRRDR/R%RIR1R2R0RRM(R*R RIRO((Rt resolve_ptrýs  +cCsæ|iidƒ\} }t| dƒd>t| dƒ}|ii|ƒo•|i|\}}}}|i|=|| ƒ\} } y||| | ƒWqâtiƒ\\} }}} }}|id| ||fdƒqâXndS(Niiiis%s %s %sR:(R*R,trecvfromtreplytwhenceRRR0thas_keyR RHRIRJtttltanswerR'R;R<R=R>R?R@RAR7(R*RAR=R>R@RJRTRIR R?R<RVRWRSRHR((Rt handle_read s" !(t__name__t __module__tcounterRR)R4R6R9RBRDRKRNRQRX(((RR&Ês        trblcBstZd„Zd„ZRS(NcCsti|dƒ}|iƒti|dƒd}|iit ||i ƒƒ|i dfƒ||i |f|i|i ƒ<|iiƒdS(NRs.rbl.maps.vix.comi5(RR R RORPR R*R,RLRRDR/t check_replyRIR0RRM(R*R RIRO((Rt resolve_mapss cCs;t|dƒd@}|id|t|ƒfƒd|fS(NiisMAPS RBL; RCODE =%02x %si(RRtrcodeR*R7trepr(R*RR_((RR]&s(RYRZR^R](((RR\s thooked_callbackcBstZd„Zd„ZRS(NcCs|||_|_dS(N(thookRIR*(R*RbRI((RR).scGs|i|Œ|i|ŒdS(N(R*RbR5RI(R*R5((Rt__call__1s (RYRZR)Rc(((RRa-s tcaching_resolvercBsEtZdZd„Zd„Zd„Zd„ZdeZd„Z RS(sCCache DNS queries. Will need to honor the TTL value in the repliescGsAti||Œh|_tƒ|_tƒ|_tƒ|_dS(N( R&R)R*R5tcacheR[tforward_requeststreverse_requestst cache_hits(R*R5((RR)8s    cCsz|iiƒ|ii|ƒo7|i|\}}}||||ƒ|i iƒn t i ||t |i|ƒƒdS(N(R*RfRMReRUR RJRVRWRIRhR&RNRat callback_hook(R*R RIRJRVRW((RRN?s   cCsz|iiƒ|ii|ƒo7|i|\}}}||||ƒ|i iƒn t i ||t |i|ƒƒdS(N(R*RgRMReRUR RJRVRWRIRhR&RQRaRi(R*R RIRJRVRW((RRQPs   cCs tiƒ||f|i|%ss
Server: %ss
Cache Entries: %ds
Outstanding Requests: %ds
Forward Requests: %ss
Reverse Requests: %ss
Cache Hits: %s( tstatus_handlert producerstsimple_producerR*t SERVER_IDENTR/RReR0RfRgRh(R*RkRj((Rtstatusfs  ( RYRZt__doc__R)RNRQRitVERSIONRmRn(((RRd5s      t__main__is/usage: %s [-r] [-s ] host [host ...]s-ss 127.0.0.1s-rs-mcCs2d||fGHtdatptiƒndS(Ns%s: %si(R RWtcountRR8(R RVRW((Rtprint_itªs  f30.0srequests outstanding: %d(*tRCS_IDRR'R,tsysR2R[t startswithR RpR RRRRR#R%R(R&R\RaRdRYRtargvtexittindextiR/RPtmapstremoveRRrRsR RQR^RNt socket_maptpollR0(R'RRaRsR%R#RtR{RRdRRRuR RpR&RRPR,RzR[R/RR\R2R ((Rt?sn      "     %OU