From 1ec93281b66061f7f7cff509450299bdcbf813b4 Mon Sep 17 00:00:00 2001 From: Haru Date: Sun, 28 Feb 2016 02:12:48 +0100 Subject: Moved HPMHooking-related definitions to plugins/HPMHooking.h - Plugins that want to make use of the HPMHooking must now include "plugins/HPMHooking.h". Signed-off-by: Haru --- src/plugins/HPMHooking.c | 3 +++ src/plugins/HPMHooking.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ src/plugins/Makefile.in | 2 +- src/plugins/sample.c | 1 + 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/plugins/HPMHooking.h (limited to 'src/plugins') diff --git a/src/plugins/HPMHooking.c b/src/plugins/HPMHooking.c index 6530035b9..4fb7911c2 100644 --- a/src/plugins/HPMHooking.c +++ b/src/plugins/HPMHooking.c @@ -17,6 +17,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + +#include "HPMHooking.h" + #include "common/hercules.h" #include "common/db.h" #include "common/memmgr.h" diff --git a/src/plugins/HPMHooking.h b/src/plugins/HPMHooking.h new file mode 100644 index 000000000..b2d95dd8d --- /dev/null +++ b/src/plugins/HPMHooking.h @@ -0,0 +1,55 @@ +/** + * This file is part of Hercules. + * http://herc.ws - http://github.com/HerculesWS/Hercules + * + * Copyright (C) 2016 Hercules Dev Team + * + * Hercules is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef PLUGINS_HPMHOOKING_H +#define PLUGINS_HPMHOOKING_H + +#include "common/hercules.h" + +enum HPluginHookType { + HOOK_TYPE_PRE, + HOOK_TYPE_POST, +}; + +struct HPMHooking_interface { + bool (*AddHook) (enum HPluginHookType type, const char *target, void *hook, unsigned int pID); + void (*HookStop) (const char *func, unsigned int pID); + bool (*HookStopped) (void); +}; + +#ifdef HERCULES_CORE +struct HPMHooking_core_interface { + bool enabled; + bool force_return; + bool (*addhook_sub) (enum HPluginHookType type, const char *target, void *hook, unsigned int pID); + const char *(*Hooked)(bool *fr); +}; +#else // ! HERCULES_CORE +HPExport struct HPMHooking_interface HPMHooking_s; + +#define addHookPre(tname,hook) (HPMi->hooking->AddHook(HOOK_TYPE_PRE,(tname),(hook),HPMi->pid)) +#define addHookPost(tname,hook) (HPMi->hooking->AddHook(HOOK_TYPE_POST,(tname),(hook),HPMi->pid)) +/* need better names ;/ */ +/* will not run the original function after pre-hook processing is complete (other hooks will run) */ +#define hookStop() (HPMi->hooking->HookStop(__func__,HPMi->pid)) +#define hookStopped() (HPMi->hooking->HookStopped()) + +#endif // ! HERCULES_CORE + +#endif // PLUGINS_HPMHOOKING_H diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in index c3baa2f30..42d6d821c 100644 --- a/src/plugins/Makefile.in +++ b/src/plugins/Makefile.in @@ -47,7 +47,7 @@ PLUGINS = sample db2sql HPMHooking_char HPMHooking_login HPMHooking_map $(MYPLUG COMMON_D = ../common # Includes private headers (plugins might need them) -COMMON_H = $(wildcard $(COMMON_D)/*.h) +COMMON_H = $(wildcard $(COMMON_D)/*.h) ../plugins/HPMHooking.h COMMON_INCLUDE = -I.. THIRDPARTY_INCLUDE = -I../../3rdparty diff --git a/src/plugins/sample.c b/src/plugins/sample.c index 8fba2f4df..d6036dd70 100644 --- a/src/plugins/sample.c +++ b/src/plugins/sample.c @@ -29,6 +29,7 @@ #include "map/pc.h" #include "map/script.h" +#include "plugins/HPMHooking.h" #include "common/HPMDataCheck.h" /* should always be the last Hercules file included! (if you don't make it last, it'll intentionally break compile time) */ #include -- cgit v1.2.3-60-g2f50