Imported Upstream version 0.3.3
[anytun.git] / src / win32 / winService.h
index 53c2750..9c95400 100644 (file)
  *  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"
   static void install();
   static void uninstall();
   static void start();
 
-  void waitForStop();
-  void stop();
-
   static VOID WINAPI main(DWORD dwArgc, LPTSTR *lpszArgv);
   static VOID WINAPI ctrlHandler(DWORD dwCtrl);
+
+  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() : started_(false) {};
-  ~WinService();
+  WinService() {};
+  ~WinService() {};
   WinService(const WinService &w);
   void operator=(const WinService &w);
 
-  void reportStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint=0);
-
-  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