* Returns int
*/
#ifdef MODULE_HOOK_REMOTEMSG
- CHOOK_REMOTEMSG, /* called for privmsg or notice from !MyClient()
- * Params: 5: (aClient *, aClient *,int isnotice,char *dest, char *msgtxt),
+ CHOOK_REM_MSG, /* called for privmsg or notice from !MyClient()
+ * Params: 3: (aClient *, int isnotice, char *msgtxt),
* Returns int
*/
+ CHOOK_REM_CHANMSG, /* called for every privmsg or notice to a channel
+ * Params: 4: (aClient *source, aChannel *destination, int isnotice, char *msgtxt)
+ */
+ CHOOK_REM_USERMSG, /* called for privmsg or notice to a local client
+ * Params: 4: (aClient *source, aClient *destination, int isnotice, char *msgtxt)
+ */
#endif
CHOOK_CHANMSG, /* called for every privmsg or notice to a channel
* Params: 4: (aClient *source, aChannel *destination,
/* gcc -I../include -shared remotemsg-test.c -o /usr/IRCd/modules/test.so */
int
-hook_rmsg(aClient *serv, aClient *src, int notice, char *dest, char *text)
+hook_both_usermsg(aClient *src, aClient *dest, int notice, char *text)
{
- sendto_serv_butone(&me, ":%s NOTICE %s :Hey %s i got your msg to %s [%s]",
- me.name, src->name, src->name, dest, text);
+ if (mycmp(dest->name, "god"))
+ return 0;
+
+ if (MyClient(src))
+ {
+ sendto_one(src, ":%s NOTICE %s :Hey %s i got your msg to %s [%s]",
+ me.name, src->name, src->name, dest->name, text);
+ }
+ else
+ {
+ sendto_serv_butone(&me, ":%s NOTICE %s :Hey %s i snooped your msg to %s [%s]",
+ me.name, src->name, src->name, dest->name, text);
+ }
return 0;
}
int bircmodule_init(void *self)
{
- bircmodule_add_hook(CHOOK_REMOTEMSG, self, hook_rmsg);
+ bircmodule_add_hook(CHOOK_REM_USERMSG, self, hook_both_usermsg);
+ bircmodule_add_hook(CHOOK_USERMSG, self, hook_both_usermsg);
return 0;
}
* Copyright (C) 2003, Lucas Madar
*/
-/* $Id: modules.c,v 1.2 2005/01/15 23:35:03 mwiggins Exp $ */
+/* $Id: modules.c,v 1.3 2005/01/19 22:05:45 mwiggins Exp $ */
#include "struct.h"
#include "common.h"
static DLink *postmotd_hooks = NULL;
static DLink *msg_hooks = NULL;
#ifdef MODULE_HOOK_REMOTEMSG
-static DLink *remotemsg_hooks = NULL;
+static DLink *rem_msg_hooks = NULL;
+static DLink *rem_chanmsg_hooks = NULL;
+static DLink *rem_usermsg_hooks = NULL;
#endif
static DLink *chanmsg_hooks = NULL;
static DLink *usermsg_hooks = NULL;
case CHOOK_MSG:
return "Message";
#ifdef MODULE_HOOK_REMOTEMSG
- case CHOOK_REMOTEMSG:
+ case CHOOK_REM_MSG:
return "Remote Message";
+ case CHOOK_REM_CHANMSG:
+ return "Remote Channel Message";
+ case CHOOK_REM_USERMSG:
+ return "Remote User Message";
#endif
case CHOOK_CHANMSG:
hooklist = &msg_hooks;
break;
#ifdef MODULE_HOOK_REMOTEMSG
- case CHOOK_REMOTEMSG:
- hooklist = &remotemsg_hooks;
+ case CHOOK_REM_MSG:
+ hooklist = &rem_msg_hooks;
+ break;
+ case CHOOK_REM_USERMSG:
+ hooklist = &rem_usermsg_hooks;
+ break;
+ case CHOOK_REM_CHANMSG:
+ hooklist = &rem_chanmsg_hooks;
break;
#endif
break;
}
#ifdef MODULE_HOOK_REMOTEMSG
- case CHOOK_REMOTEMSG:
+ case CHOOK_REM_MSG:
{
aClient *acptr = va_arg(vl, aClient *);
- aClient *asptr = va_arg(vl, aClient *);
int aint = va_arg(vl, int);
- char *destptr = va_arg(vl, char *);
char *txtptr = va_arg(vl, char *);
- for (lp = remotemsg_hooks; lp; lp = lp->next)
+ for (lp = rem_msg_hooks; lp; lp = lp->next)
{
- int (*rfunc) (aClient *, aClient *, int, char *, char *) =
+ int (*rfunc) (aClient *, int, char *) =
((aHook*)lp->value.cp)->funcptr;
- if ((ret = (*rfunc)(acptr, asptr, aint, destptr, txtptr)) == FLUSH_BUFFER)
+ if ((ret = (*rfunc)(acptr, aint, txtptr)) == FLUSH_BUFFER)
break;
}
break;
}
+ case CHOOK_REM_CHANMSG:
+ {
+ aClient *acptr = va_arg(vl, aClient *);
+ aChannel *chptr = va_arg(vl, aChannel *);
+ int aint = va_arg(vl, int);
+ char *txtptr = va_arg(vl, char *);
+
+ for(lp = rem_chanmsg_hooks; lp; lp = lp->next)
+ {
+ int (*rfunc) (aClient *, aChannel *, int, char *) =
+ ((aHook *)lp->value.cp)->funcptr;
+ if((ret = (*rfunc)(acptr, chptr, aint, txtptr))
+ == FLUSH_BUFFER)
+ break;
+ }
+ break;
+ }
+ case CHOOK_REM_USERMSG:
+ {
+ aClient *acptr = va_arg(vl, aClient *);
+ aClient *dcptr = va_arg(vl, aClient *);
+ int aint = va_arg(vl, int);
+ char *txtptr = va_arg(vl, char *);
+
+ for(lp = rem_usermsg_hooks; lp; lp = lp->next)
+ {
+ int (*rfunc) (aClient *, aClient *, int, char *) =
+ ((aHook *)lp->value.cp)->funcptr;
+ if((ret = (*rfunc)(acptr, dcptr, aint, txtptr))
+ == FLUSH_BUFFER)
+ break;
+ }
+ break;
+ }
#endif
case CHOOK_CHANMSG:
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: s_user.c,v 1.9 2005/01/15 23:35:03 mwiggins Exp $ */
+/* $Id: s_user.c,v 1.10 2005/01/19 22:05:45 mwiggins Exp $ */
#include "struct.h"
#include "common.h"
#ifdef MODULE_HOOK_REMOTEMSG
else
{
- if(call_hooks(CHOOK_REMOTEMSG, cptr, sptr, notice, parv[1], parv[2]) == FLUSH_BUFFER)
+ if(call_hooks(CHOOK_REM_MSG, sptr, notice, parv[2]) == FLUSH_BUFFER)
return FLUSH_BUFFER;
}
#endif
ischan = IsChannelName(nick);
if (ischan && (chptr = find_channel(nick,NullChn)))
{
- if(ismine && call_hooks(CHOOK_CHANMSG, sptr, chptr,
+ if(ismine)
+ {
+ if (call_hooks(CHOOK_CHANMSG, sptr, chptr,
notice, parv[2]) == FLUSH_BUFFER)
- return FLUSH_BUFFER;
+ return FLUSH_BUFFER;
+ }
+#ifdef MODULE_HOOK_REMOTEMSG
+ else
+ {
+ if (call_hooks(CHOOK_REM_CHANMSG, sptr, chptr, notice, parv[2]) == FLUSH_BUFFER)
+ return FLUSH_BUFFER;
+ }
+#endif
if (!notice)
switch(check_for_ctcp(parv[2], NULL))
return FLUSH_BUFFER;
continue;
}
- if(ismine && call_hooks(CHOOK_USERMSG, sptr, acptr, notice,
+ if(ismine)
+ {
+ if (call_hooks(CHOOK_USERMSG, sptr, acptr, notice,
parv[2]) == FLUSH_BUFFER)
- return FLUSH_BUFFER;
+ return FLUSH_BUFFER;
+ }
+#ifdef MODULE_HOOK_REMOTEMSG
+ else
+ {
+ if (call_hooks(CHOOK_REM_USERMSG, sptr, acptr, notice, parv[2]) == FLUSH_BUFFER)
+ return FLUSH_BUFFER;
+ }
+#endif
if (!IsClient(acptr))