Ϫf^dZddlmZddlmZmZddlmZmZGddejZ y)z An in-memory caching resolver. )defer)commondns)failurelogcDeZdZdZdZd dZdZdZdZd dZ d dZ d Z y) CacheResolverz A resolver that serves records from a local, memory cache. @ivar _reactor: A provider of L{interfaces.IReactorTime}. Nctjj|i|_||_i|_|ddlm}||_|r/|jD]\}\}}|j|||yy)Nr)reactor) r ResolverBase__init__cacheverbosecanceltwisted.internetr _reactoritems cacheResult)selfrrr querysecondspayloads 5/usr/lib/python3/dist-packages/twisted/names/cache.pyr zCacheResolver.__init__ss$$T*   ? 0 -2[[] :))  9 : c||_|jj}|jj D]<\}\}\}}}||z }||z|zD] } | j |ks|j|=<>yN)__dict__rrrrttl) rstatenowkwhenansaddnsdiffrecs r __setstate__zCacheResolver.__setstate__&s mm##%)-)9)9);  %A%nsC:DSy2~ 77T> 1   rc|jjD]}|j|jj|jSr)rvaluesclearr)rcs r __getstate__zCacheResolver.__getstate__1sA##% A HHJ  }}rc *|jj}tj|||} |j|\}\}} } |j r!t jdt|z||z } |D cgc]Z} tj| jj| j| j| j| z | j\c} | D cgc]Z} tj| jj| j| j| j| z | j\c} | D cgc]Z} tj| jj| j| j| j| z | j\c} f} tj | Scc} wcc} wcc} w#t"$r>tj$t'j(tj*|cYSwxYw#t,$rn|j dkDr!t jdt|ztj$t'j(tj*|cYSwxYw)NzCache hit for zCache miss for )rrrQueryrrrmsgreprRRHeadernametypeclsrrrsucceed ValueErrorfailrFailure DomainErrorKeyError)rr4r6r5timeoutr qr"r#authr$r&rresults r_lookupzCacheResolver._lookup7smm##% IIdD# &# -%)ZZ] "D"3c ||(4:56:D - "%  FFKK aii"&  FFKK aii"%  FFKK aii.}}V,,-   Jzz'//#//$2G"HII J= F||a)DJ67::goocood.CDE E FsRH<GAGG%AGG AG )GGAHHA4JJcxtjtjt j |Sr)rr9rr:rr;)rr4r=s rlookupAllRecordszCacheResolver.lookupAllRecords_s#zz'//#//$*?@AArc$|jdkDrtjd|z|xs|jj |f|j |<||j vr|j |j t|dt|dzt|dz}|r-|dj}|D]}t||j}nd}|jj||j||j |<y)a Cache a DNS entry. @param query: a L{dns.Query} instance. @param payload: a 3-tuple of lists of L{dns.RRHeader} records, the matching result of the query (answers, authority and additional). @param cacheTime: The time (seconds since epoch) at which the entry is considered to have been added to the cache. If L{None} is given, the current time is used. r/zAdding %r to cacherN) rrr1rrrrlistrmin callLater clearEntry)rrr cacheTimesmr@s rrzCacheResolver.cacheResultbs <rr N) rRrr twisted.namesrrtwisted.pythonrrr r rSrrrVs)  #%'tF''tr