/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.service.dns;
import org.xbill.DNS.*;
/**
* The purpose of this class is to help avoid the significant delays that occur
* in networks where DNS servers would ignore SRV, NAPTR, and sometimes even
* A/AAAA queries (i.e. without even sending an error response). We also try to
* handle cases where DNS servers may return empty responses to some records.
* <p>
* We achieve this by entering a redundant mode whenever we detect an abnormal
* delay (longer than <tt>DNS_PATIENCE</tt>) while waiting for a DNS resonse,
* or when that response is not considered satisfying.
* <p>
* Once we enter redundant mode, we start duplicating all queries and sending
* them to both our primary and backup resolvers (in case we have any). We then
* always return the first response we get, regardless of who sent it.
* <p>
* We exit redundant mode after receiving <tt>DNS_REDEMPTION</tt> consecutive
* timely and correct responses from our primary resolver.
*
* @author Emil Ivov
*/
public interface CustomResolver
extends Resolver
{
/**
* The default number of milliseconds it takes us to get into redundant
* mode while waiting for a DNS query response.
*/
public static final int DNS_PATIENCE = 1500;
/**
* The name of the property that allows us to override the default
* <tt>DNS_PATIENCE</tt> value.
*/
public static final String PNAME_DNS_PATIENCE
= "net.java.sip.communicator.util.dns.DNS_PATIENCE";
/**
* The default number of times that the primary DNS would have to provide a
* faster response than the backup resolver before we consider it safe
* enough to exit redundant mode.
*/
public static final int DNS_REDEMPTION = 3;
/**
* The name of the property that allows us to override the default
* <tt>DNS_REDEMPTION</tt> value.
*/
public static final String PNAME_DNS_REDEMPTION
= "net.java.sip.communicator.util.dns.DNS_REDEMPTION";
/**
* The currently configured number of times that the primary DNS would have
* to provide a faster response than the backup resolver before we consider
* it safe enough to exit redundant mode.
*/
public static int currentDnsRedemption = DNS_REDEMPTION;
/**
* The name of the property that enables or disables the DNSSEC resolver
* (instead of a normal, non-validating local resolver).
*/
public static final String PNAME_DNSSEC_RESOLVER_ENABLED
= "net.java.sip.communicator.util.dns.DNSSEC_ENABLED";
/**
* Default value of @see PNAME_DNSSEC_RESOLVER_ENABLED.
*/
public static final boolean PDEFAULT_DNSSEC_RESOLVER_ENABLED = false;
/**
* Resets resolver configuration and populate our default resolver
* with the newly configured servers.
*/
public void reset();
}