diff options
author | geniusdex 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 |
---|---|---|
committer | geniusdex 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 |
commit | ca25d6e252a652714957eff7bfd672fedad652e4 (patch) | |
tree | 19fbaa26f130f67ba83f7e6feb3a6979f0b63f93 /src | |
parent | e0cba0bb71611f82434b7f061760d105423bbe09 (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.c | 17 | ||||
-rw-r--r-- | src/process.c | 17 | ||||
-rw-r--r-- | src/protocol/inspircd.c | 10 |
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); |