X-Git-Url: https://git.syn-net.org/debian/?a=blobdiff_plain;f=src%2FsignalController.h;h=491c529cd7eec41d3d520d2da38e6785aff76711;hb=5123ec3335dda691676f62467c57edc2517a5d5c;hp=6108bea9bae1804addbe40b4a9966b023b125c5a;hpb=f9ad69dfae6bcec427652b0c4230603e465bd544;p=anytun.git diff --git a/src/signalController.h b/src/signalController.h index 6108bea..491c529 100644 --- a/src/signalController.h +++ b/src/signalController.h @@ -6,12 +6,12 @@ * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel * mode and allows tunneling of every ETHER TYPE protocol (e.g. * ethernet, ip, arp ...). satp directly includes cryptography and - * message authentication based on the methodes used by SRTP. It is + * message authentication based on the methods used by SRTP. It is * intended to deliver a generic, scaleable and secure solution for * tunneling and relaying of packets of any protocol. * * - * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, + * Copyright (C) 2007-2014 Markus Grüneis, Othmar Gsenger, Erwin Nindl, * Christian Pointner * * This file is part of Anytun. @@ -27,7 +27,20 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with anytun. If not, see . + * along with Anytun. If not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. */ #ifndef ANYTUN_signalController_h_INCLUDED @@ -35,157 +48,51 @@ #include #include +#include #include "threadUtils.hpp" -#ifndef _MSC_VER -#include +#ifdef WIN_SERVICE +//#include "win32/winService.h" +class WinService; +typedef WinService DaemonService; +#else +class DaemonService; #endif #define SIGERROR -1 +#define SIGUNKNOWN -2 -class SignalHandler -{ -public: - virtual ~SignalHandler() {} - - virtual int handle() { return 0; } - virtual int handle(const std::string& msg) { return 0; } - -protected: - SignalHandler(int s) : sigNum(s) {} - -private: - int sigNum; - friend class SignalController; -}; - -class SigErrorHandler : public SignalHandler -{ -public: - SigErrorHandler() : SignalHandler(SIGERROR) {} - int handle(const std::string& msg); -}; - -#ifndef _MSC_VER -class SigIntHandler : public SignalHandler -{ -public: - SigIntHandler() : SignalHandler(SIGINT) {} - int handle(); -}; - -class SigQuitHandler : public SignalHandler -{ -public: - SigQuitHandler() : SignalHandler(SIGQUIT) {} - int handle(); -}; - -class SigHupHandler : public SignalHandler -{ -public: - SigHupHandler() : SignalHandler(SIGHUP) {} - int handle(); -}; - -class SigUsr1Handler : public SignalHandler -{ -public: - SigUsr1Handler() : SignalHandler(SIGUSR1) {} - int handle(); -}; - -class SigUsr2Handler : public SignalHandler -{ -public: - SigUsr2Handler() : SignalHandler(SIGUSR2) {} - int handle(); -}; - -class SigTermHandler : public SignalHandler -{ -public: - SigTermHandler() : SignalHandler(SIGTERM) {} - int handle(); -}; - -#else - -class CtrlCHandler : public SignalHandler -{ -public: - CtrlCHandler() : SignalHandler(CTRL_C_EVENT) {} - int handle(); -}; - -class CtrlBreakHandler : public SignalHandler -{ -public: - CtrlBreakHandler() : SignalHandler(CTRL_BREAK_EVENT) {} - int handle(); -}; - -class CtrlCloseHandler : public SignalHandler -{ -public: - CtrlCloseHandler() : SignalHandler(CTRL_BREAK_EVENT) {} - int handle(); -}; - -class CtrlLogoffHandler : public SignalHandler -{ -public: - CtrlLogoffHandler() : SignalHandler(CTRL_BREAK_EVENT) {} - int handle(); -}; - -class CtrlShutdownHandler : public SignalHandler -{ -public: - CtrlShutdownHandler() : SignalHandler(CTRL_BREAK_EVENT) {} - int handle(); -}; -#endif +typedef boost::function SignalHandler; +typedef enum { CALLB_RUNNING, CALLB_STOPPING } CallbackType; +typedef boost::function ServiceCallback; class SignalController { public: static SignalController& instance(); -#ifndef _MSC_VER - void handle(); -#else - static bool handle(DWORD ctrlType); -#endif - void init(); + void init(DaemonService& service); int run(); void inject(int sig, const std::string& msg = ""); private: - typedef std::map HandlerMap; - SignalController() {}; - ~SignalController(); - SignalController(const SignalController &s); - void operator=(const SignalController &s); - - static SignalController* inst; - static Mutex instMutex; - class instanceCleaner { - public: ~instanceCleaner() { - if(SignalController::inst != NULL) - delete SignalController::inst; - } - }; - friend class instanceCleaner; + ~SignalController() {}; + SignalController(const SignalController& s); + void operator=(const SignalController& s); typedef std::pair SigPair; std::queue sigQueue; Mutex sigQueueMutex; Semaphore sigQueueSem; + typedef std::map HandlerMap; HandlerMap handler; + typedef std::map CallbackMap; + CallbackMap callbacks; + + friend void registerSignalHandler(SignalController& ctrl, DaemonService& service); }; extern SignalController& gSignalController;