added client1 config
[anytun.git] / signalController.h
blob4f912ef5a5c5748bcea1726da7a1ddba4704f1f7
1 /*
2 * anytun
4 * The secure anycast tunneling protocol (satp) defines a protocol used
5 * for communication between any combination of unicast and anycast
6 * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
7 * mode and allows tunneling of every ETHER TYPE protocol (e.g.
8 * ethernet, ip, arp ...). satp directly includes cryptography and
9 * message authentication based on the methodes used by SRTP. It is
10 * intended to deliver a generic, scaleable and secure solution for
11 * tunneling and relaying of packets of any protocol.
14 * Copyright (C) 2007 anytun.org <satp@wirdorange.org>
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2
18 * as published by the Free Software Foundation.
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
25 * You should have received a copy of the GNU General Public License
26 * along with this program (see the file COPYING included with this
27 * distribution); if not, write to the Free Software Foundation, Inc.,
28 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 #ifndef _SIGNAL_CONTROLLER_H_
32 #define _SIGNAL_CONTROLLER_H_
34 #include <csignal>
35 #include <map>
36 #include <queue>
38 #include "threadUtils.hpp"
40 class SignalHandler
42 public:
43 virtual ~SignalHandler() {}
45 virtual int handle() { return 0; }
47 protected:
48 SignalHandler(int s) : sigNum(s) {}
50 private:
51 int sigNum;
52 friend class SignalController;
55 class SigIntHandler : public SignalHandler
57 public:
58 SigIntHandler() : SignalHandler(SIGINT) {}
59 int handle();
62 class SigQuitHandler : public SignalHandler
64 public:
65 SigQuitHandler() : SignalHandler(SIGQUIT) {}
66 int handle();
69 class SigHupHandler : public SignalHandler
71 public:
72 SigHupHandler() : SignalHandler(SIGHUP) {}
73 int handle();
76 class SigUsr1Handler : public SignalHandler
78 public:
79 SigUsr1Handler() : SignalHandler(SIGUSR1) {}
80 int handle();
83 class SigUsr2Handler : public SignalHandler
85 public:
86 SigUsr2Handler() : SignalHandler(SIGUSR2) {}
87 int handle();
90 class SigTermHandler : public SignalHandler
92 public:
93 SigTermHandler() : SignalHandler(SIGTERM) {}
94 int handle();
97 class SignalController
99 public:
100 SignalController() {}
101 ~SignalController();
102 static void* handle(void* s);
104 void init();
105 int run();
107 private:
108 typedef std::map<int, SignalHandler*> HandlerMap;
110 SignalController(const SignalController &s);
111 void operator=(const SignalController &s);
113 std::queue<int> sigQueue;
114 Mutex sigQueueMutex;
115 Semaphore sigQueueSem;
117 pthread_t thread;
118 HandlerMap handler;
121 #endif