2 PowerDNS Versatile Database Driven Nameserver
3 Copyright (C) 2002 PowerDNS.COM BV
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifndef PACKETHANDLER_HH
20 #define PACKETHANDLER_HH
23 # include <sys/socket.h>
24 # include <netinet/in.h>
25 # include <arpa/inet.h>
28 #include "ueberbackend.hh"
29 #include "dnspacket.hh"
30 #include "packetcache.hh"
34 /** Central DNS logic according to RFC1034. Ask this class a question in the form of a DNSPacket
35 and it will return, synchronously, a DNSPacket answer, suitable for
36 sending out over the network.
38 The PacketHandler gives your question to the PacketCache for possible inclusion
41 In order to do so, the PacketHandler contains a reference to the global extern PacketCache PC
43 It also contains an UeberBackend instance for answering the subqueries needed to generate
51 template<class T> class Guard
70 DNSPacket *question(DNSPacket *); //!< hand us a DNS packet with a question, we give you an answer
72 ~PacketHandler(); // defined in packethandler.cc, and does --count
73 static int numRunning(){return s_count;}; //!< Returns the number of running PacketHandlers
75 void soaMagic(DNSResourceRecord *rr);
76 DNSBackend *getBackend();
80 int doNotify(DNSPacket *);
81 int PacketHandler::trySuperMaster(DNSPacket *p);
82 int makeCanonic(DNSPacket *p, DNSPacket *r, string &target);
83 int doWildcardRecords(DNSPacket *p, DNSPacket *r, string &target);
84 int findMboxFW(DNSPacket *p, DNSPacket *r, string &target);
85 int findUrl(DNSPacket *p, DNSPacket *r, string &target);
86 int doFancyRecords(DNSPacket *p, DNSPacket *r, string &target);
87 int doDNSCheckRequest(DNSPacket *p, DNSPacket *r, string &target);
88 int doVersionRequest(DNSPacket *p, DNSPacket *r, string &target);
89 bool getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId);
90 bool getTLDAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId);
91 int doAdditionalProcessing(DNSPacket *p, DNSPacket *r, bool &dangling);
95 bool d_doFancyRecords;
97 bool d_doLazyRecursion;
100 bool d_logDNSDetails;
102 UeberBackend B; // every thread an own instance
105 #endif /* PACKETHANDLER */