diff -r 46a9fde631f4 -r 75db7bb8dce8 misc/xfire/xfiregameclient.cpp --- a/misc/xfire/xfiregameclient.cpp Wed Jan 02 11:11:49 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/* This file is NOT open source. See "license.txt" to read the full license provided with the Xfire SDK. */ - -#define WIN32_LEAN_AND_MEAN -#include -#include - -#include "xfiregameclient.h" - -static HMODULE g_toucan_dll = NULL; -static void HelperInit(); -static HMODULE HelperGetToucanDLL(); - -typedef int (*XfireSetCustomGameDataAFunction)(int , const char **, const char **); -typedef int (*XfireSetCustomGameDataWFunction)(int , const wchar_t **, const wchar_t **); -typedef int (*XfireSetCustomGameDataUTF8Function)(int , const char **, const char **); - -static XfireSetCustomGameDataAFunction ptr_XfireSetCustomGameDataA = NULL; -static XfireSetCustomGameDataWFunction ptr_XfireSetCustomGameDataW = NULL; -static XfireSetCustomGameDataUTF8Function ptr_XfireSetCustomGameDataUTF8 = NULL; - -/* make sure we are going to call the ANSI version */ -#ifdef MODULEENTRY32 -#undef MODULEENTRY32 -#endif - -#ifdef Module32First -#undef Module32First -#endif - -#ifdef Module32Next -#undef Module32Next -#endif - - -int XfireIsLoaded() -{ - HelperInit(); - if (ptr_XfireSetCustomGameDataA && - ptr_XfireSetCustomGameDataW && - ptr_XfireSetCustomGameDataUTF8) - return 1; - return 0; -} - -int XfireSetCustomGameDataA(int num_keys, const char **keys, const char **values) -{ - HelperInit(); - if (ptr_XfireSetCustomGameDataA) - return ptr_XfireSetCustomGameDataA(num_keys, keys, values); - return 1; -} - -int XfireSetCustomGameDataW(int num_keys, const wchar_t **keys, const wchar_t **values) -{ - HelperInit(); - if (ptr_XfireSetCustomGameDataW) - return ptr_XfireSetCustomGameDataW(num_keys, keys, values); - return 1; -} - -int XfireSetCustomGameDataUTF8(int num_keys, const char **keys, const char **values) -{ - HelperInit(); - if (ptr_XfireSetCustomGameDataUTF8) - return ptr_XfireSetCustomGameDataUTF8(num_keys, keys, values); - return 1; -} - -/* ------------------------------------------------------------------------- */ -static void HelperInit() -{ - if (!ptr_XfireSetCustomGameDataA || - !ptr_XfireSetCustomGameDataW || - !ptr_XfireSetCustomGameDataUTF8) - { - HMODULE toucan_dll = HelperGetToucanDLL(); - if (toucan_dll) - { - ptr_XfireSetCustomGameDataA = (XfireSetCustomGameDataAFunction)::GetProcAddress(toucan_dll, "ToucanSendGameClientDataA_V1"); - ptr_XfireSetCustomGameDataW = (XfireSetCustomGameDataWFunction)::GetProcAddress(toucan_dll, "ToucanSendGameClientDataW_V1"); - ptr_XfireSetCustomGameDataUTF8 = (XfireSetCustomGameDataUTF8Function)::GetProcAddress(toucan_dll, "ToucanSendGameClientDataUTF8_V1"); - } - } -} - - -static HMODULE HelperGetToucanDLL() -{ - if (g_toucan_dll) - return g_toucan_dll; - - /* - ** We need to enumerate the DLLs loaded to find toucan dll. - ** This is done because the toucan dll changes with each update. - ** The toucan dll has the following format. "xfire_toucan_{BUILD_NUMBER}.dll" - ** We simply try to find a dll w/ the prefix "xfire_toucan" - */ - HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); - if (snapshot_handle != INVALID_HANDLE_VALUE) - { - MODULEENTRY32 module_entry; - module_entry.dwSize = sizeof(MODULEENTRY32); - - BOOL result = Module32First(snapshot_handle, &module_entry); - char module_name[] = "xfire_toucan"; - DWORD module_name_len = sizeof(module_name)-1; - while (result) - { - if (CompareStringA(LOCALE_USER_DEFAULT, NORM_IGNORECASE, module_entry.szModule, module_name_len, module_name, module_name_len) == CSTR_EQUAL) - { - g_toucan_dll = module_entry.hModule; - break; - } - result = Module32Next(snapshot_handle, &module_entry); - } - - CloseHandle(snapshot_handle); - } - - return g_toucan_dll; -}