15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpackage org.xbill.DNS;
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattnerimport java.io.*;
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattnerimport java.util.*;
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/**
92f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett * Interface describing a resolver.
102f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett *
112f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett * @author Brian Wellington
122f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett */
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic interface Resolver {
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/**
175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * Sets the port to communicate with on the server
18686775deca8b8685eb90801495880e3abdd844c2Chris Lattner * @param port The port to send messages to
190ee7d94ece918f22e67d0f09fcbc631c91091adcArgyrios Kyrtzidis */
2030a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruthvoid setPort(int port);
21ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner
2230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth/**
23b328ee55d86acaafd55ebf0e0c84766b29459530Chad Rosier * Sets whether TCP connections will be sent by default
2430a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth * @param flag Indicates whether TCP connections are made
259dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner */
269c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenekvoid setTCP(boolean flag);
272b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
282b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner/**
2906159e878569e5f39bf0e8f11b84ac3ad0970597Chris Lattner * Sets whether truncated responses will be ignored.  If not, a truncated
309c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek * response over UDP will cause a retransmission over TCP.
319c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek * @param flag Indicates whether truncated responses should be ignored.
325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer */
331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid setIgnoreTruncation(boolean flag);
34a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek
351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump/**
364bd495c2a4fc742dde435115f66c722217975bd2James Dennett * Sets the EDNS version used on outgoing messages.
374bd495c2a4fc742dde435115f66c722217975bd2James Dennett * @param level The EDNS level to use.  0 indicates EDNS0 and -1 indicates no
382b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * EDNS.
392b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @throws IllegalArgumentException An invalid level was indicated.
40af50aab0c317462129d73ae8000c6394c718598dJames Dennett */
41af50aab0c317462129d73ae8000c6394c718598dJames Dennettvoid setEDNS(int level);
42f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
432b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner/**
442b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * Sets the EDNS information on outgoing messages.
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump * @param level The EDNS level to use.  0 indicates EDNS0 and -1 indicates no
462b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * EDNS.
471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump * @param payloadSize The maximum DNS packet size that this host is capable
482b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * of receiving over UDP.  If 0 is specified, the default (1280) is used.
492b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @param flags EDNS extended flags to be set in the OPT record.
502b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @param options EDNS options to be set in the OPT record, specified as a
512b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * List of OPTRecord.Option elements.
522b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @throws IllegalArgumentException An invalid field was specified.
532b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @see OPTRecord
541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump */
55f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorvoid setEDNS(int level, int payloadSize, int flags, List options);
56f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump/**
582b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * Specifies the TSIG key that messages will be signed with
592b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @param key The key
6031d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor */
6131d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregorvoid setTSIGKey(TSIG key);
6231d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor
63f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor/**
642b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * Sets the amount of time to wait for a response before giving up.
652b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @param secs The number of seconds to wait.
662b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner * @param msecs The number of milliseconds to wait.
672b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner */
68f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorvoid setTimeout(int secs, int msecs);
692b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump/**
711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump * Sets the amount of time to wait for a response before giving up.
72f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor * @param secs The number of seconds to wait.
73f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor */
74f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorvoid setTimeout(int secs);
75f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
76f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor/**
773201f382956ed9beee9fb31229c2835c1208889cChandler Carruth * Sends a message and waits for a response.
783201f382956ed9beee9fb31229c2835c1208889cChandler Carruth * @param query The query to send.
793201f382956ed9beee9fb31229c2835c1208889cChandler Carruth * @return The response
80f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor * @throws IOException An error occurred while sending or receiving.
81f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor */
82f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas GregorMessage send(Message query) throws IOException;
83f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
843201f382956ed9beee9fb31229c2835c1208889cChandler Carruth/**
85f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor * Asynchronously sends a message registering a listener to receive a callback
86f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor * on success or exception.  Multiple asynchronous lookups can be performed
875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * in parallel.  Since the callback may be invoked before the function returns,
885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * external synchronization is necessary.
89bcc2a67e5180612417727cbdd8afd0f79fdf726dChris Lattner * @param query The query to send
905a4374812c56aa60672e291b07e14d3696bbb5a6Argyrios Kyrtzidis * @param listener The object containing the callbacks.
915a4374812c56aa60672e291b07e14d3696bbb5a6Argyrios Kyrtzidis * @return An identifier, which is also a parameter in the callback
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines */
93de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris LattnerObject sendAsync(final Message query, final ResolverListener listener);
945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
959ebac5e0dab6f99717e3ff169c45048966146b2eChris Lattner}
965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer