X-Git-Url: https://git.syn-net.org/debian/?a=blobdiff_plain;f=src%2FsignalController.h;h=491c529cd7eec41d3d520d2da38e6785aff76711;hb=74b165bb1a2b001b52ee01eb56ee3ea59a81d10f;hp=575b50bbe98992006e1055871176588d2f0a323d;hpb=058ae090a970436caec3b3059e9e18b310dd6b0d;p=anytun.git diff --git a/src/signalController.h b/src/signalController.h index 575b50b..491c529 100644 --- a/src/signalController.h +++ b/src/signalController.h @@ -6,19 +6,20 @@ * 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-2008 Othmar Gsenger, Erwin Nindl, + * Copyright (C) 2007-2014 Markus Grüneis, Othmar Gsenger, Erwin Nindl, * Christian Pointner * * This file is part of Anytun. * * Anytun is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. * * Anytun is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -26,172 +27,72 @@ * 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 _SIGNAL_CONTROLLER_H_ -#define _SIGNAL_CONTROLLER_H_ +#ifndef ANYTUN_signalController_h_INCLUDED +#define ANYTUN_signalController_h_INCLUDED #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; - -#ifndef _MSC_VER - SignalController() : thread(NULL) {}; -#else SignalController() {}; -#endif - ~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; -#ifndef _MSC_VER - boost::thread* thread; -#endif + typedef std::map HandlerMap; HandlerMap handler; + typedef std::map CallbackMap; + CallbackMap callbacks; + + friend void registerSignalHandler(SignalController& ctrl, DaemonService& service); }; extern SignalController& gSignalController;