info->on_privmsg = handler;
}
+void
+unreg_privmsg_func(struct userNode *user) {
+ struct service_message_info *info;
+ info = dict_find(service_msginfo_dict, user->nick, NULL);
+ if (info) {
+ info->on_privmsg = NULL;
+ if (info->on_notice == NULL) {
+ dict_remove(service_msginfo_dict, user->nick);
+ }
+ }
+}
+
void
reg_notice_func(struct userNode *user, privmsg_func_t handler) {
struct service_message_info *info = dict_find(service_msginfo_dict, user->nick, NULL);
info->on_notice = handler;
}
+void
+unreg_notice_func(struct userNode *user) {
+ struct service_message_info *info;
+ info = dict_find(service_msginfo_dict, user->nick, NULL);
+ if (info) {
+ info->on_notice = NULL;
+ if (info->on_privmsg == NULL) {
+ dict_remove(service_msginfo_dict, user->nick);
+ }
+ }
+}
+
void
reg_oper_func(oper_func_t handler)
{
{
unsigned int numeric = user->num_local;
if (numeric >= num_privmsg_funcs) {
- int newnum = numeric + 8;
+ int newnum = numeric + 8, ii;
privmsg_funcs = realloc(privmsg_funcs, newnum*sizeof(privmsg_func_t));
- memset(privmsg_funcs+num_privmsg_funcs, 0, (newnum-num_privmsg_funcs)*sizeof(privmsg_func_t));
+ for (ii = num_privmsg_funcs; ii < newnum; ++ii)
+ privmsg_funcs[ii] = NULL;
num_privmsg_funcs = newnum;
}
if (privmsg_funcs[numeric])
}
void
-unreg_privmsg_func(struct userNode *user, privmsg_func_t handler)
+unreg_privmsg_func(struct userNode *user)
{
- unsigned int x;
+ if (!IsLocal(user) || user->num_local >= num_privmsg_funcs)
+ return; /* this really only works with users */
- if (!user || handler)
- return; /* this really only works with users */
-
- memset(privmsg_funcs+user->num_local, 0, sizeof(privmsg_func_t));
-
- for (x = user->num_local+1; x < num_privmsg_funcs; x++)
- memmove(privmsg_funcs+x-1, privmsg_funcs+x, sizeof(privmsg_func_t));
-
- privmsg_funcs = realloc(privmsg_funcs, num_privmsg_funcs*sizeof(privmsg_func_t));
- num_privmsg_funcs--;
+ privmsg_funcs[user->num_local] = NULL;
}
{
unsigned int numeric = user->num_local;
if (numeric >= num_notice_funcs) {
- int newnum = numeric + 8;
+ int newnum = numeric + 8, ii;
notice_funcs = realloc(notice_funcs, newnum*sizeof(privmsg_func_t));
- memset(notice_funcs+num_notice_funcs, 0, (newnum-num_notice_funcs)*sizeof(privmsg_func_t));
+ for (ii = num_privmsg_funcs; ii < newnum; ++ii)
+ privmsg_funcs[ii] = NULL;
num_notice_funcs = newnum;
}
if (notice_funcs[numeric])
}
void
-unreg_notice_func(struct userNode *user, privmsg_func_t handler)
+unreg_notice_func(struct userNode *user)
{
- unsigned int x;
-
- if (!user || handler)
- return; /* this really only works with users */
-
- memset(notice_funcs+user->num_local, 0, sizeof(privmsg_func_t));
-
- for (x = user->num_local+1; x < num_notice_funcs; x++)
- memmove(notice_funcs+x-1, notice_funcs+x, sizeof(privmsg_func_t));
+ if (!IsLocal(user) || user->num_local >= num_privmsg_funcs)
+ return; /* this really only works with users */
- memset(notice_funcs+user->num_local, 0, sizeof(privmsg_func_t));
- notice_funcs = realloc(notice_funcs, num_notice_funcs*sizeof(privmsg_func_t));
- num_notice_funcs--;
+ notice_funcs[user->num_local] = NULL;
}
void
typedef void (*privmsg_func_t) (struct userNode *user, struct userNode *target, const char *text, int server_qualified);
void reg_privmsg_func(struct userNode *user, privmsg_func_t handler);
void reg_notice_func(struct userNode *user, privmsg_func_t handler);
-void unreg_privmsg_func(struct userNode *user, privmsg_func_t handler);
-void unreg_notice_func(struct userNode *user, privmsg_func_t handler);
+void unreg_privmsg_func(struct userNode *user);
+void unreg_notice_func(struct userNode *user);
typedef void (*oper_func_t) (struct userNode *user);
void reg_oper_func(oper_func_t handler);