Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorvald Natvig <slicer@users.sourceforge.net>2010-02-25 17:18:35 +0300
committerThorvald Natvig <slicer@users.sourceforge.net>2010-02-25 17:18:35 +0300
commitf2c191daf8f5c7f5fa3b64ff9a6da5aaf108a85e (patch)
tree99427bb7e07391bd4e166781357d84e37c7c908f /plugins/dys
parent63adacd5fcee46c3b5294aade232bcd46e50cab4 (diff)
The grand plugin multiregexp experiment
Diffstat (limited to 'plugins/dys')
-rw-r--r--plugins/dys/dys.cpp125
1 files changed, 29 insertions, 96 deletions
diff --git a/plugins/dys/dys.cpp b/plugins/dys/dys.cpp
index 74dc65ade..0f73167cc 100644
--- a/plugins/dys/dys.cpp
+++ b/plugins/dys/dys.cpp
@@ -29,78 +29,15 @@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <windows.h>
-#include <tlhelp32.h>
-#include <string>
-#include <sstream>
-
-#define _USE_MATH_DEFINES
-#include <math.h>
-
-#include "../mumble_plugin.h"
+#include "../mumble_plugin_win32.h"
using namespace std;
-HANDLE h;
BYTE *posptr;
BYTE *rotptr;
BYTE *stateptr;
BYTE *hostptr;
-static DWORD getProcess(const wchar_t *exename) {
- PROCESSENTRY32 pe;
- DWORD pid = 0;
-
- pe.dwSize = sizeof(pe);
- HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (hSnap != INVALID_HANDLE_VALUE) {
- BOOL ok = Process32First(hSnap, &pe);
-
- while (ok) {
- if (wcscmp(pe.szExeFile, exename)==0) {
- pid = pe.th32ProcessID;
- break;
- }
- ok = Process32Next(hSnap, &pe);
- }
- CloseHandle(hSnap);
- }
- return pid;
-}
-
-static BYTE *getModuleAddr(DWORD pid, const wchar_t *modname) {
- MODULEENTRY32 me;
- BYTE *addr = NULL;
- me.dwSize = sizeof(me);
- HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
- if (hSnap != INVALID_HANDLE_VALUE) {
- BOOL ok = Module32First(hSnap, &me);
-
- while (ok) {
- if (wcscmp(me.szModule, modname)==0) {
- addr = me.modBaseAddr;
- break;
- }
- ok = Module32Next(hSnap, &me);
- }
- CloseHandle(hSnap);
- }
- return addr;
-}
-
-
-static bool peekProc(VOID *base, VOID *dest, SIZE_T len) {
- SIZE_T r;
- BOOL ok=ReadProcessMemory(h, base, dest, len, &r);
- return (ok && (r == len));
-}
-
-static void about(HWND h) {
- ::MessageBox(h, L"Reads audio position information from Dystopia (Build 3945). IP:Port context support.", L"Mumble Dystopia Plugin", MB_OK);
-}
-
static bool calcout(float *pos, float *rot, float *opos, float *front, float *top) {
float h = rot[0];
float v = rot[1];
@@ -184,22 +121,13 @@ static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, floa
}
static int trylock(const std::multimap<std::wstring, unsigned long long int> &pids) {
-
- h = NULL;
posptr = rotptr = NULL;
- DWORD pid=getProcess(L"hl2.exe");
- if (!pid)
- return false;
- BYTE *mod=getModuleAddr(pid, L"client.dll");
- if (!mod)
- return false;
- BYTE *mod_engine=getModuleAddr(pid, L"engine.dll");
- if (!mod_engine)
+ if (! initialize(pids, L"hl2.exe", L"client.dll"))
return false;
- h=OpenProcess(PROCESS_VM_READ, false, pid);
- if (!h)
+ BYTE *mod_engine=getModuleAddr(L"engine.dll");
+ if (!mod_engine)
return false;
// Check if we really have Dystopia running
@@ -212,14 +140,14 @@ static int trylock(const std::multimap<std::wstring, unsigned long long int> &pi
*/
// Remember addresses for later
- posptr = mod + 0x423990;
- rotptr = mod + 0x423924;
- stateptr = mod + 0x3c6270;
+ posptr = pModule + 0x423990;
+ rotptr = pModule + 0x423924;
+ stateptr = pModule + 0x3c6270;
hostptr = mod_engine + 0x3909c4;
//Gamecheck
char sMagic[14];
- if (!peekProc(mod + 0x3c948e, sMagic, 14) || strncmp("DysObjective@@", sMagic, 14)!=0)
+ if (!peekProc(pModule + 0x3c948e, sMagic, 14) || strncmp("DysObjective@@", sMagic, 14)!=0)
return false;
// Check if we can get meaningful data from it
@@ -228,21 +156,12 @@ static int trylock(const std::multimap<std::wstring, unsigned long long int> &pi
wstring sidentity;
string scontext;
- if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity))
+ if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) {
return true;
-
- // If it failed clean up
- CloseHandle(h);
- h = NULL;
- return false;
-}
-
-static void unlock() {
- if (h) {
- CloseHandle(h);
- h = NULL;
+ } else {
+ generic_unlock();
+ return false;
}
- return;
}
static const std::wstring longdesc() {
@@ -252,18 +171,32 @@ static const std::wstring longdesc() {
static std::wstring description(L"Dystopia (Build 3945)");
static std::wstring shortname(L"Dystopia");
+static int trylock1() {
+ return trylock(std::multimap<std::wstring, unsigned long long int>());
+}
+
static MumblePlugin dysplug = {
MUMBLE_PLUGIN_MAGIC,
description,
shortname,
- about,
NULL,
- trylock,
- unlock,
+ NULL,
+ trylock1,
+ generic_unlock,
longdesc,
fetch
};
+static MumblePlugin2 dysplug2 = {
+ MUMBLE_PLUGIN_MAGIC_2,
+ MUMBLE_PLUGIN_VERSION,
+ trylock
+};
+
extern "C" __declspec(dllexport) MumblePlugin *getMumblePlugin() {
return &dysplug;
}
+
+extern "C" __declspec(dllexport) MumblePlugin2 *getMumblePlugin2() {
+ return &dysplug2;
+}