fixed windows endian include
[anytun.git] / src / signalController.h
blobd99e16880a8afc39691a95212d32abb4cf1d9b89
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-2008 Othmar Gsenger, Erwin Nindl,
15 * Christian Pointner <satp@wirdorange.org>
17 * This file is part of Anytun.
19 * Anytun is free software: you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 3 as
21 * published by the Free Software Foundation.
23 * Anytun is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with anytun. If not, see <http://www.gnu.org/licenses/>.
32 #ifndef _SIGNAL_CONTROLLER_H_
33 #define _SIGNAL_CONTROLLER_H_
35 #include <csignal>
36 #include <map>
37 #include <queue>
39 #include "threadUtils.hpp"
41 class SignalHandler
43 public:
44 virtual ~SignalHandler() {}
46 virtual int handle() { return 0; }
48 protected:
49 SignalHandler(int s) : sigNum(s) {}
51 private:
52 int sigNum;
53 friend class SignalController;
56 class SigIntHandler : public SignalHandler
58 public:
59 SigIntHandler() : SignalHandler(SIGINT) {}
60 int handle();
63 class SigQuitHandler : public SignalHandler
65 public:
66 SigQuitHandler() : SignalHandler(SIGQUIT) {}
67 int handle();
70 class SigHupHandler : public SignalHandler
72 public:
73 SigHupHandler() : SignalHandler(SIGHUP) {}
74 int handle();
77 class SigUsr1Handler : public SignalHandler
79 public:
80 SigUsr1Handler() : SignalHandler(SIGUSR1) {}
81 int handle();
84 class SigUsr2Handler : public SignalHandler
86 public:
87 SigUsr2Handler() : SignalHandler(SIGUSR2) {}
88 int handle();
91 class SigTermHandler : public SignalHandler
93 public:
94 SigTermHandler() : SignalHandler(SIGTERM) {}
95 int handle();
98 class SignalController
100 public:
101 SignalController() { thread = NULL; }
102 ~SignalController();
103 static void handle(void* s);
105 void init();
106 int run();
108 private:
109 typedef std::map<int, SignalHandler*> HandlerMap;
111 SignalController(const SignalController &s);
112 void operator=(const SignalController &s);
114 std::queue<int> sigQueue;
115 Mutex sigQueueMutex;
116 Semaphore sigQueueSem;
118 boost::thread* thread;
119 HandlerMap handler;
122 #endif