root/trunk/pdns/pdns/packethandler.hh @ 215

Revision 215, 3.2 KB (checked in by ahu, 9 years ago)

lots

  • Property svn:eol-style set to native
  • Property svn:keywords set to author date id revision
Line 
1/*
2    PowerDNS Versatile Database Driven Nameserver
3    Copyright (C) 2002  PowerDNS.COM BV
4
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.
9
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.
14
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
18*/
19#ifndef PACKETHANDLER_HH
20#define PACKETHANDLER_HH
21
22#ifndef WIN32
23# include <sys/socket.h>
24# include <netinet/in.h>
25# include <arpa/inet.h>
26#endif // WIN32
27
28#include "ueberbackend.hh"
29#include "dnspacket.hh"
30#include "packetcache.hh"
31
32using namespace std;
33
34// silly Solaris people define PC
35#undef PC
36
37/** Central DNS logic according to RFC1034. Ask this class a question in the form of a DNSPacket
38    and it will return, synchronously, a DNSPacket answer, suitable for
39    sending out over the network.
40
41    The PacketHandler gives your question to the PacketCache for possible inclusion
42    in the cache.
43
44    In order to do so, the PacketHandler contains a reference to the global extern PacketCache PC
45
46    It also contains an UeberBackend instance for answering the subqueries needed to generate
47    a complete reply.
48
49*/
50
51class PacketHandler
52{
53public:
54  template<class T> class Guard
55  {
56  public:
57    Guard(T **guard)
58    {
59      d_guard=guard;
60    }
61   
62    ~Guard()
63    {
64      if(*d_guard)
65        delete *d_guard;
66    }
67   
68  private:
69    T **d_guard;
70  };
71
72
73  DNSPacket *question(DNSPacket *); //!< hand us a DNS packet with a question, we give you an answer
74  PacketHandler(); 
75  ~PacketHandler(); // defined in packethandler.cc, and does --count
76  static int numRunning(){return s_count;}; //!< Returns the number of running PacketHandlers. Called by Distributor
77 
78  void soaMagic(DNSResourceRecord *rr);
79  DNSBackend *getBackend();
80
81
82private:
83  int doNotify(DNSPacket *);
84  int PacketHandler::trySuperMaster(DNSPacket *p);
85  int makeCanonic(DNSPacket *p, DNSPacket *r, string &target);
86  int doWildcardRecords(DNSPacket *p, DNSPacket *r, string &target);
87  int findMboxFW(DNSPacket *p, DNSPacket *r, string &target);
88  int findUrl(DNSPacket *p, DNSPacket *r, string &target);
89  int doFancyRecords(DNSPacket *p, DNSPacket *r, string &target);
90  int doDNSCheckRequest(DNSPacket *p, DNSPacket *r, string &target);
91  int doVersionRequest(DNSPacket *p, DNSPacket *r, string &target);
92  bool getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId);
93  bool getTLDAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId);
94  int doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r);
95 
96  static int s_count;
97  bool d_doFancyRecords;
98  bool d_doRecursion;
99  bool d_doWildcards;
100  bool d_doCNAME;
101  bool d_logDNSDetails;
102  bool d_doIPv6AdditionalProcessing;
103
104  UeberBackend B; // every thread an own instance
105};
106
107#endif /* PACKETHANDLER */
Note: See TracBrowser for help on using the browser.