13742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Copyright 2003-2005 Arthur van Hoff, Rick Blair
23742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Licensed under Apache License version 2.0
33742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Original license LGPL
43742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
53742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpackage javax.jmdns.impl.tasks;
63742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
73742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanimport java.util.Timer;
83742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanimport java.util.logging.Level;
93742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanimport java.util.logging.Logger;
103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanimport javax.jmdns.impl.JmDNSImpl;
123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanimport javax.jmdns.impl.constants.DNSConstants;
133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/**
153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Periodically removes expired entries from the cache.
163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */
173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpublic class RecordReaper extends DNSTask {
183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    static Logger logger = Logger.getLogger(RecordReaper.class.getName());
193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @param jmDNSImpl
223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public RecordReaper(JmDNSImpl jmDNSImpl) {
243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        super(jmDNSImpl);
253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /*
283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * (non-Javadoc)
293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @see javax.jmdns.impl.tasks.DNSTask#getName()
303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    @Override
323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public String getName() {
333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return "RecordReaper(" + (this.getDns() != null ? this.getDns().getName() : "") + ")";
343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /*
373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * (non-Javadoc)
383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @see javax.jmdns.impl.tasks.DNSTask#start(java.util.Timer)
393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    @Override
413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public void start(Timer timer) {
423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        if (!this.getDns().isCanceling() && !this.getDns().isCanceled()) {
433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            timer.schedule(this, DNSConstants.RECORD_REAPER_INTERVAL, DNSConstants.RECORD_REAPER_INTERVAL);
443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        }
453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    @Override
483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public void run() {
493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        if (this.getDns().isCanceling() || this.getDns().isCanceled()) {
503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            return;
513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        }
523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        if (logger.isLoggable(Level.FINEST)) {
533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            logger.finest(this.getName() + ".run() JmDNS reaping cache");
543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        }
553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        // Remove expired answers from the cache
573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        // -------------------------------------
583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        this.getDns().cleanCache();
593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman}