* tunneling and relaying of packets of any protocol.
*
*
- * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl,
+ * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl,
* Christian Pointner <satp@wirdorange.org>
*
* 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
* along with anytun. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _WIN_SERVICE_H_
-#define _WIN_SERVICE_H_
+#ifndef ANYTUN_win32_winService_h_INCLUDED
+#define ANYTUN_win32_winService_h_INCLUDED
#ifdef WIN_SERVICE
#include "../threadUtils.hpp"
+#include "../signalController.h"
class WinService
{
public:
- static WinService& instance();
- #define SVC_NAME "anytun"
+#define SVC_NAME "anytun"
static void install();
static void uninstall();
static void start();
- void waitForStop();
- void stop();
-
- static VOID WINAPI main(DWORD dwArgc, LPTSTR *lpszArgv);
+ static VOID WINAPI main(DWORD dwArgc, LPTSTR* lpszArgv);
static VOID WINAPI ctrlHandler(DWORD dwCtrl);
-private:
- WinService() : started_(false) {};
- ~WinService();
- WinService(const WinService &w);
- void operator=(const WinService &w);
- void reportStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint=0);
+ void reportStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode);
+ int handleCtrlSignal(int sig, const std::string& msg);
+
+ void initPrivs(std::string const& username, std::string const& groupname);
+ void dropPrivs();
+ void chroot(std::string const& dir);
+ void daemonize();
+ bool isDaemonized();
+
+private:
+ WinService() {};
+ ~WinService() {};
+ WinService(const WinService& w);
+ void operator=(const WinService& w);
- static WinService* inst;
- static Mutex instMutex;
- class instanceCleaner {
- public: ~instanceCleaner() {
- if(WinService::inst != NULL)
- delete WinService::inst;
- }
- };
- friend class instanceCleaner;
-
- bool started_;
SERVICE_STATUS status_;
SERVICE_STATUS_HANDLE status_handle_;
- HANDLE stop_event_;
};
-extern WinService& gWinService;
+typedef WinService DaemonService;
#endif
-#endif
\ No newline at end of file
+#endif