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