summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgeniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2005-06-03 20:44:01 +0000
committergeniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2005-06-03 20:44:01 +0000
commitca25d6e252a652714957eff7bfd672fedad652e4 (patch)
tree19fbaa26f130f67ba83f7e6feb3a6979f0b63f93 /src
parente0cba0bb71611f82434b7f061760d105423bbe09 (diff)
BUILD : 1.7.10 (824) BUGS : 389 NOTES : Added the possibility for protocol files to override the code setting mod_current_buffer, which is needed for InspIRCd
git-svn-id: svn://svn.anope.org/anope/trunk@824 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@577 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r--src/ircd.c17
-rw-r--r--src/process.c17
-rw-r--r--src/protocol/inspircd.c10
3 files changed, 37 insertions, 7 deletions
diff --git a/src/ircd.c b/src/ircd.c
index 67b336b47..d40b9968c 100644
--- a/src/ircd.c
+++ b/src/ircd.c
@@ -24,6 +24,7 @@ int UseTSMODE;
**/
void initIrcdProto()
{
+ ircdproto.ircd_set_mod_current_buffer = NULL;
ircdproto.ircd_set_umode = NULL;
ircdproto.ircd_cmd_svsnoop = NULL;
ircdproto.ircd_cmd_remove_akill = NULL;
@@ -96,6 +97,17 @@ void initIrcdProto()
ircdproto.ircd_cmd_ctcp = NULL;
}
+/* Special function, returns 1 if executed, 0 if not */
+int anope_set_mod_current_buffer(int ac, char **av)
+{
+ if (ircdproto.ircd_set_mod_current_buffer) {
+ ircdproto.ircd_set_mod_current_buffer(ac, av);
+ return 1;
+ }
+
+ return 0;
+}
+
void anope_set_umode(User * user, int ac, char **av)
{
ircdproto.ircd_set_umode(user, ac, av);
@@ -601,6 +613,11 @@ void anope_cmd_ctcp(char *source, char *dest, const char *fmt, ...)
* Set routines for modules to set the prefered function for dealing with things.
**/
+void pmodule_set_mod_current_buffer(void (*func) (int ac, char **av))
+{
+ ircdproto.ircd_set_mod_current_buffer = func;
+}
+
void pmodule_cmd_svsnoop(void (*func) (char *server, int set))
{
ircdproto.ircd_cmd_svsnoop = func;
diff --git a/src/process.c b/src/process.c
index 1fa7354b2..5f5f27a50 100644
--- a/src/process.c
+++ b/src/process.c
@@ -248,18 +248,21 @@ void process()
to the NICK and thus AV[0] is the message. The new logic is to check
av[0] to see if its a service nick if so assign mod_current_buffer the
value from AV[1] else just assign av[0] - TSL */
- if (av[0]) {
- if (nickIsServices(av[0], 1)) {
- if (av[1]) {
- mod_current_buffer = sstrdup(av[1]);
+ /* First check if the ircd proto module overrides this -GD */
+ if (!anope_set_mod_current_buffer(ac, av)) {
+ if (av[0]) {
+ if (nickIsServices(av[0], 1)) {
+ if (av[1]) {
+ mod_current_buffer = sstrdup(av[1]);
+ } else {
+ mod_current_buffer = sstrdup(av[0]);
+ }
} else {
mod_current_buffer = sstrdup(av[0]);
}
} else {
- mod_current_buffer = sstrdup(av[0]);
+ mod_current_buffer = NULL;
}
- } else {
- mod_current_buffer = NULL;
}
/* Do something with the message. */
m = find_message(cmd);
diff --git a/src/protocol/inspircd.c b/src/protocol/inspircd.c
index 7053ae8fd..592eefddf 100644
--- a/src/protocol/inspircd.c
+++ b/src/protocol/inspircd.c
@@ -421,6 +421,15 @@ void inspircd_set_umode(User * user, int ac, char **av)
}
}
+/* Set mod_current_buffer from here */
+void inspircd_set_mod_current_buffer(int ac, char **av)
+{
+ if (ac >= 3)
+ mod_current_buffer = sstrdup(av[2]);
+ else
+ mod_current_buffer = NULL;
+}
+
int anope_event_nickchange(char *source, int ac, char **av);
int anope_event_servertopic(char *source, int ac, char **av);
int anope_event_servermode(char *source, int ac, char **av);
@@ -1424,6 +1433,7 @@ void inspircd_cmd_ctcp(char *source, char *dest, char *buf)
* These prototypes must match what anope expects.
**/
void moduleAddAnopeCmds() {
+ pmodule_set_mod_current_buffer(inspircd_set_mod_current_buffer);
pmodule_cmd_svsnoop(inspircd_cmd_svsnoop);
pmodule_cmd_remove_akill(inspircd_cmd_remove_akill);
pmodule_cmd_topic(inspircd_cmd_topic);