]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - win/inspircd_win32wrapper.cpp
Check in tag names too
[user/henk/code/inspircd.git] / win / inspircd_win32wrapper.cpp
index cc56af69d922a308c342ea6cd0351b39fad9812c..c32d31d5a2b81045387d0e8e6dbea6735bc976ca 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
  * See: http://www.inspircd.org/wiki/index.php/Credits
  *
  * This program is free but copyrighted software; see
 #include <string>
 #include <errno.h>
 #include <assert.h>
+#pragma comment(lib, "winmm.lib")
 using namespace std;
 
 #ifndef INADDR_NONE
 #define INADDR_NONE 0xffffffff
 #endif
 
+#include <mmsystem.h>
+
 /* This MUST remain static and delcared outside the class, so that WriteProcessMemory can reference it properly */
 static DWORD owner_processid = 0;
 
@@ -299,7 +302,6 @@ int getopt_long_only(int ___argc, char *const *___argv, const char *__shortopts,
                return -1;
 
        const char * opt = ___argv[arg_counter];
-       int return_val = 0;
 
        // if we're not an option, return an error.
        if (strnicmp(opt, "--", 2) != 0)
@@ -387,14 +389,14 @@ void IPC::Check()
        if (!res)
        {
                if (GetLastError() != ERROR_SEM_TIMEOUT)
-                       Instance->Log(DEFAULT, "IPC Pipe Error %u: %s", GetLastError(), dlerror());
+                       Instance->Logs->Log("win32",DEFAULT, "IPC Pipe Error %u: %s", GetLastError(), dlerror());
                return;
        }
 
        switch (action)
        {
                case IPC_MESSAGE_REHASH:
-                       Instance->Rehash();
+                       Instance->Rehash("due to IPC message");
                break;
                
                case IPC_MESSAGE_DIE:
@@ -516,19 +518,16 @@ void ClearConsole()
 }
 
 /* Many inspircd classes contain function pointers/functors which can be changed to point at platform specific implementations
- * of code. This function, called from WindowsForkStart, repoints these pointers and functors so that calls are windows
- * specific.
+ * of code. This function repoints these pointers and functors so that calls are windows specific.
  */
 void ChangeWindowsSpecificPointers(InspIRCd* Instance)
 {
+       Instance->Logs->Log("win32",DEBUG,"Changing to windows specific pointer and functor set");
        Instance->Config->DNSServerValidator = &ValidateWindowsDnsServer;
 }
 
 DWORD WindowsForkStart(InspIRCd* Instance)
 {
-       /* See the function declaration above */
-       ChangeWindowsSpecificPointers(Instance);
-
         /* Windows implementation of fork() :P */
        if (owner_processid)
                return 0;
@@ -631,15 +630,31 @@ bool ValidateWindowsDnsServer(ServerConfig* conf, const char* tag, const char* v
        if (!*(data.GetString()))
        {
                std::string nameserver;
-               conf->GetInstance()->Log(DEFAULT,"WARNING: <dns:server> not defined, attempting to find working server in the registry...");
+               conf->GetInstance()->Logs->Log("win32",DEFAULT,"WARNING: <dns:server> not defined, attempting to find working server in the registry...");
                nameserver = FindNameServerWin();
                /* Windows stacks multiple nameservers in one registry key, seperated by commas.
                 * Spotted by Cataclysm.
                 */
                if (nameserver.find(',') != std::string::npos)
                        nameserver = nameserver.substr(0, nameserver.find(','));
+               /* Just to be FUCKING AKWARD, windows fister... err i mean vista...
+                * seperates the nameservers with spaces instead.
+                */
+               if (nameserver.find(' ') != std::string::npos)
+                       nameserver = nameserver.substr(0, nameserver.find(' '));
                data.Set(nameserver.c_str());
-               conf->GetInstance()->Log(DEFAULT,"<dns:server> set to '%s' as first active resolver in registry.", nameserver.c_str());
+               conf->GetInstance()->Logs->Log("win32",DEFAULT,"<dns:server> set to '%s' as first active resolver in registry.", nameserver.c_str());
        }
        return true;
 }
+
+int gettimeofday(struct timeval * tv, void * tz)
+{
+       if(tv == NULL)
+               return -1;
+
+       DWORD mstime = timeGetTime();
+       tv->tv_sec   = time(NULL);
+       tv->tv_usec  = (mstime - (tv->tv_sec * 1000)) * 1000;
+    return 0;  
+}