]> git.ipfire.org Git - thirdparty/pdns.git/blame_incremental - pdns/dynlistener.hh
Merge pull request #9070 from rgacogne/boost-173
[thirdparty/pdns.git] / pdns / dynlistener.hh
... / ...
CommitLineData
1/*
2 * This file is part of PowerDNS or dnsdist.
3 * Copyright -- PowerDNS.COM B.V. and its contributors
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * In addition, for the avoidance of any doubt, permission is granted to
10 * link this program with OpenSSL and to (re)distribute the binaries
11 * produced as the result of such linking.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22#pragma once
23#include <string>
24#include <vector>
25#include <sys/types.h>
26#include <errno.h>
27#include <iostream>
28#include <sstream>
29#include "iputils.hh"
30#include <boost/utility.hpp>
31#include <unistd.h>
32#include <sys/un.h>
33#include <dlfcn.h>
34#include <sys/socket.h>
35#include <netinet/in.h>
36
37#include "namespaces.hh"
38
39class DynListener : public boost::noncopyable
40{
41public:
42 explicit DynListener(const string &pname="");
43 explicit DynListener(const ComboAddress& addr);
44 ~DynListener();
45 void go();
46 void theListener();
47
48 typedef string g_funk_t(const vector<string> &parts, Utility::pid_t ppid); // guido!
49 typedef struct { g_funk_t *func; string args; string usage; } g_funkwithusage_t;
50 typedef map<string,g_funkwithusage_t> g_funkdb_t;
51
52 static void registerFunc(const string &name, g_funk_t *gf, const string &usage="", const string &args="");
53 static void registerRestFunc(g_funk_t *gf);
54 static g_funk_t* getFunc(const string& fname) { return s_funcdb[fname].func; }
55private:
56 void sendlines(const string &lines);
57 string getHelp();
58 string getLine();
59
60 void listenOnUnixDomain(const std::string& fname);
61 void listenOnTCP(const ComboAddress&);
62 void createSocketAndBind(int family, struct sockaddr*local, size_t len);
63
64 NetmaskGroup d_tcprange;
65 int d_s{-1};
66 int d_client{-1};
67 bool d_nonlocal;
68 bool d_tcp{false};
69 pid_t d_ppid{0};
70
71 string d_socketname;
72 ComboAddress d_socketaddress;
73 static g_funkdb_t s_funcdb;
74 static g_funk_t* s_restfunc;
75 bool testLive(const string& fname);
76};