void ignore_signal_ctcp_inbound(gpointer *params) { session *sess = params[0]; gchar *nick = params[2]; gchar *to = params[3]; struct User *user = userlist_find(sess, nick); gchar *hostmask; if (user != NULL) { hostmask = g_strjoin("!", user->nick, user->hostname, NULL); if (!is_channel(sess->server, to)) { if (ignore_check(hostmask, IGNORE_PRIVATE | IGNORE_CTCP)) signal_stop_current(); } else { if (ignore_check(hostmask, IGNORE_PUBLIC | IGNORE_CTCP)) signal_stop_current(); } g_free(hostmask); } }
static void sig_message_nick(SERVER_REC *server, const char *newnick, const char *oldnick, const char *address) { if (ignore_check(server, oldnick, address, NULL, NULL, MSGLEVEL_NICKS) || ignore_check(server, newnick, address, NULL, NULL, MSGLEVEL_NICKS)) signal_stop(); }
static void sig_message_irc_action(IRC_SERVER_REC *server, const char *msg, const char *nick, const char *address, const char *target) { void *item; const char *oldtarget; char *freemsg = NULL; int level; oldtarget = target; target = skip_target(IRC_SERVER(server), target); level = MSGLEVEL_ACTIONS | (ischannel(*target) ? MSGLEVEL_PUBLIC : MSGLEVEL_MSGS); if (ignore_check(SERVER(server), nick, address, target, msg, level)) return; if (ignore_check(SERVER(server), nick, address, target, msg, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; if (ischannel(*target)) item = irc_channel_find(server, target); else item = privmsg_get_query(SERVER(server), nick, FALSE, level); if (settings_get_bool("emphasis")) msg = freemsg = expand_emphasis(item, msg); if (ischannel(*target)) { /* channel action */ if (window_item_is_active(item) && target == oldtarget) { /* message to active channel in window */ printformat(server, target, level, IRCTXT_ACTION_PUBLIC, nick, msg); } else { /* message to not existing/active channel, or to @/+ */ printformat(server, target, level, IRCTXT_ACTION_PUBLIC_CHANNEL, nick, oldtarget, msg); } } else { /* private action */ printformat(server, nick, MSGLEVEL_ACTIONS | MSGLEVEL_MSGS, item == NULL ? IRCTXT_ACTION_PRIVATE : IRCTXT_ACTION_PRIVATE_QUERY, nick, address == NULL ? "" : address, msg); } g_free_not_null(freemsg); }
static void event_mode(const char *data, IRC_SERVER_REC *server, const char *nick, const char *addr) { char *params, *channel, *mode; g_return_if_fail(data != NULL); if (nick == NULL) nick = server->real_address; params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &channel, &mode); if (ignore_check(SERVER(server), nick, addr, channel, mode, MSGLEVEL_MODES)) { g_free(params); return; } if (!ischannel(*channel)) { /* user mode change */ printformat(server, NULL, MSGLEVEL_MODES, IRCTXT_USERMODE_CHANGE, mode, channel); } else if (addr == NULL) { /* channel mode changed by server */ printformat(server, channel, MSGLEVEL_MODES, IRCTXT_SERVER_CHANMODE_CHANGE, channel, mode, nick); } else { /* channel mode changed by normal user */ printformat(server, channel, MSGLEVEL_MODES, IRCTXT_CHANMODE_CHANGE, channel, mode, nick); } g_free(params); }
static void sig_message_public(SERVER_REC *server, const char *msg, const char *nick, const char *address, const char *target) { if (ignore_check(server, nick, address, target, msg, MSGLEVEL_PUBLIC)) signal_stop(); }
static void sig_message_part(SERVER_REC *server, const char *channel, const char *nick, const char *address, const char *reason) { if (ignore_check(server, nick, address, channel, NULL, MSGLEVEL_PARTS)) signal_stop(); }
/* FIXME: should be moved to fe-common/core/fe-messages.c.. */ static void sig_message_mode(IRC_SERVER_REC *server, const char *channel, const char *nick, const char *addr, const char *mode) { if (nick == NULL) nick = server->real_address; if (ignore_check(SERVER(server), nick, addr, channel, mode, MSGLEVEL_MODES)) return; if (!ischannel(*channel)) { /* user mode change */ printformat(server, NULL, MSGLEVEL_MODES, IRCTXT_USERMODE_CHANGE, mode, channel); } else if (addr == NULL) { /* channel mode changed by server */ printformat(server, channel, MSGLEVEL_MODES, IRCTXT_SERVER_CHANMODE_CHANGE, channel, mode, nick); } else { /* channel mode changed by normal user */ IRC_CHANNEL_REC *chanrec; chanrec = !group_multi_mode ? NULL : irc_channel_find(server, channel); if (chanrec != NULL) msg_multi_mode(chanrec, nick, addr, mode); else { printformat(server, channel, MSGLEVEL_MODES, IRCTXT_CHANMODE_CHANGE, channel, mode, nick); } } }
static void sig_message_private(SERVER_REC *server, const char *msg, const char *nick, const char *address, const char *target) { QUERY_REC *query; char *freemsg = NULL; int level = MSGLEVEL_MSGS; /* own message returned by bouncer? */ int own = (!g_strcmp0(nick, server->nick)); query = query_find(server, own ? target : nick); if (settings_get_bool("emphasis")) msg = freemsg = expand_emphasis((WI_ITEM_REC *) query, msg); if (ignore_check(server, nick, address, NULL, msg, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; if (own) { printformat(server, target, level, query == NULL ? TXT_OWN_MSG_PRIVATE : TXT_OWN_MSG_PRIVATE_QUERY, target, msg, server->nick); } else { printformat(server, nick, level, query == NULL ? TXT_MSG_PRIVATE : TXT_MSG_PRIVATE_QUERY, nick, address, msg); } g_free_not_null(freemsg); }
static void msg_join(IRC_SERVER_REC *server, const char *channel, const char *nick, const char *address) { NETSPLIT_REC *split; NETJOIN_REC *netjoin; if (!IS_IRC_SERVER(server)) return; if (ignore_check(SERVER(server), nick, address, channel, NULL, MSGLEVEL_JOINS)) return; split = netsplit_find(server, nick, address); netjoin = netjoin_find(server, nick); if (split == NULL && netjoin == NULL) return; if (join_tag == -1) { join_tag = g_timeout_add(1000, (GSourceFunc) sig_check_netjoins, NULL); signal_add("print starting", (SIGNAL_FUNC) sig_print_starting); } if (netjoin == NULL) netjoin = netjoin_add(server, nick, split->channels); netjoin->now_channels = g_slist_append(netjoin->now_channels, g_strdup(channel)); signal_stop(); }
static void sig_message_kick(SERVER_REC *server, const char *channel, const char *nick, const char *kicker, const char *address, const char *reason) { if (ignore_check(server, kicker, address, channel, reason, MSGLEVEL_KICKS)) signal_stop(); }
static void sig_message_invite(SERVER_REC *server, const char *channel, const char *nick, const char *address) { if (*channel == '\0' || ignore_check(server, nick, address, channel, NULL, MSGLEVEL_INVITES)) signal_stop(); }
static void sig_message_topic(SERVER_REC *server, const char *channel, const char *topic, const char *nick, const char *address) { if (ignore_check(server, nick, address, channel, topic, MSGLEVEL_TOPICS)) signal_stop(); }
static void sig_message_kick(SERVER_REC *server, const char *channel, const char *nick, const char *kicker, const char *address, const char *reason) { /* never ignore if you were kicked */ if (g_strcasecmp(nick, server->nick) != 0 && ignore_check(server, kicker, address, channel, reason, MSGLEVEL_KICKS)) signal_stop(); }
static void msg_join(IRC_SERVER_REC *server, const char *channel, const char *nick, const char *address) { NETSPLIT_REC *split; NETJOIN_REC *netjoin; GSList *channels; int rejoin = 1; if (!IS_IRC_SERVER(server)) return; if (ignore_check(SERVER(server), nick, address, channel, NULL, MSGLEVEL_JOINS)) return; split = netsplit_find(server, nick, address); netjoin = netjoin_find(server, nick); if (split == NULL && netjoin == NULL) return; /* if this was not a channel they split from, treat it normally */ if (netjoin != NULL) { if (!gslist_find_icase_string(netjoin->old_channels, channel)) return; } else { channels = split->channels; while (channels != NULL) { NETSPLIT_CHAN_REC *schannel = channels->data; if (!strcasecmp(schannel->name, channel)) break; channels = channels->next; } /* we still need to create a NETJOIN_REC now as the * NETSPLIT_REC will be destroyed */ if (channels == NULL) rejoin = 0; } if (join_tag == -1) { join_tag = g_timeout_add(1000, (GSourceFunc) sig_check_netjoins, NULL); signal_add("print starting", (SIGNAL_FUNC) sig_print_starting); } if (netjoin == NULL) netjoin = netjoin_add(server, nick, split->channels); if (rejoin) { netjoin->now_channels = g_slist_append(netjoin->now_channels, g_strconcat(" ", channel, NULL)); signal_stop(); } }
static void sig_message_irc_notice(SERVER_REC *server, const char *msg, const char *nick, const char *address, const char *target) { const char *oldtarget; int level = MSGLEVEL_NOTICES; oldtarget = target; target = skip_target(IRC_SERVER(server), target); if (address == NULL || *address == '\0') { /* notice from server */ if (!ignore_check(server, nick, "", target, msg, MSGLEVEL_SNOTES)) { printformat(server, target, MSGLEVEL_SNOTES, IRCTXT_NOTICE_SERVER, nick, msg); } return; } if (ignore_check(server, nick, address, ischannel(*target) ? target : NULL, msg, level)) return; if (ignore_check(server, nick, address, ischannel(*target) ? target : NULL, msg, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; if (ischannel(*target)) { /* notice in some channel */ printformat(server, target, level, IRCTXT_NOTICE_PUBLIC, nick, oldtarget, msg); } else { /* private notice */ privmsg_get_query(SERVER(server), nick, FALSE, MSGLEVEL_NOTICES); printformat(server, nick, level, IRCTXT_NOTICE_PRIVATE, nick, address, msg); } }
static void sig_message_join(SERVER_REC *server, const char *channel, const char *nick, const char *address) { int level = MSGLEVEL_JOINS; if (ignore_check(server, nick, address, channel, NULL, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; printformat(server, channel, level, TXT_JOIN, nick, address, channel); }
static void event_notice(const char *data, IRC_SERVER_REC *server, const char *nick, const char *addr) { char *params, *target, *msg; int op_notice; g_return_if_fail(data != NULL); params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg); if (nick == NULL) { nick = server->real_address == NULL ? server->connrec->address : server->real_address; } if (addr == NULL) { /* notice from server */ if (*msg != 1 && !ignore_check(SERVER(server), nick, "", target, msg, MSGLEVEL_SNOTES)) printformat(server, target, MSGLEVEL_SNOTES, IRCTXT_NOTICE_SERVER, nick, msg); } else { op_notice = *target == '@' && ischannel(target[1]); if (op_notice) target++; if (ignore_check(SERVER(server), nick, addr, ischannel(*target) ? target : NULL, msg, MSGLEVEL_NOTICES)) return; if (ischannel(*target)) { /* notice in some channel */ printformat(server, target, MSGLEVEL_NOTICES, op_notice ? IRCTXT_NOTICE_PUBLIC_OPS : IRCTXT_NOTICE_PUBLIC, nick, target, msg); } else { /* private notice */ privmsg_get_query(SERVER(server), nick, FALSE, MSGLEVEL_NOTICES); printformat(server, nick, MSGLEVEL_NOTICES, IRCTXT_NOTICE_PRIVATE, nick, addr, msg); } } g_free(params); }
static void sig_message_part(SERVER_REC *server, const char *channel, const char *nick, const char *address, const char *reason) { int level = MSGLEVEL_PARTS; if (ignore_check(server, nick, address, channel, NULL, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; printformat(server, channel, level, TXT_PART, nick, address, channel, reason); }
static void sig_message_kick(SERVER_REC *server, const char *channel, const char *nick, const char *kicker, const char *address, const char *reason) { int level = MSGLEVEL_KICKS; if (ignore_check(server, kicker, address, channel, reason, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; printformat(server, channel, level, TXT_KICK, nick, channel, kicker, reason, address); }
static void print_nick_change_channel(SERVER_REC *server, const char *channel, const char *newnick, const char *oldnick, const char *address, int ownnick) { int level; if (ignore_check(server, oldnick, address, channel, newnick, MSGLEVEL_NICKS)) return; level = MSGLEVEL_NICKS; if (ownnick) level |= MSGLEVEL_NO_ACT; if (!(level & MSGLEVEL_NO_ACT) && ignore_check(server, oldnick, address, channel, newnick, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; printformat(server, channel, level, ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED, oldnick, newnick, channel, address); }
static void print_nick_change_channel(SERVER_REC *server, const char *channel, const char *newnick, const char *oldnick, const char *address, int ownnick) { if (ignore_check(server, oldnick, address, channel, newnick, MSGLEVEL_NICKS)) return; printformat(server, channel, MSGLEVEL_NICKS, ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED, oldnick, newnick, channel); }
static void sig_message_topic(SERVER_REC *server, const char *channel, const char *topic, const char *nick, const char *address) { int level = MSGLEVEL_TOPICS; if (ignore_check(server, nick, address, channel, topic, level | MSGLEVEL_NO_ACT)) level |= MSGLEVEL_NO_ACT; printformat(server, channel, level, *topic != '\0' ? TXT_NEW_TOPIC : TXT_TOPIC_UNSET, nick, channel, topic, address); }
static void sig_message_irc_notice(SERVER_REC *server, const char *msg, const char *nick, const char *address, const char *target) { int op_notice; if (address == NULL) { /* notice from server */ if (!ignore_check(server, nick, "", target, msg, MSGLEVEL_SNOTES)) { printformat(server, target, MSGLEVEL_SNOTES, IRCTXT_NOTICE_SERVER, nick, msg); } return; } op_notice = *target == '@' && ischannel(target[1]); if (op_notice) target++; if (ignore_check(server, nick, address, ischannel(*target) ? target : NULL, msg, MSGLEVEL_NOTICES)) return; if (ischannel(*target)) { /* notice in some channel */ printformat(server, target, MSGLEVEL_NOTICES, op_notice ? IRCTXT_NOTICE_PUBLIC_OPS : IRCTXT_NOTICE_PUBLIC, nick, target, msg); } else { /* private notice */ privmsg_get_query(SERVER(server), nick, FALSE, MSGLEVEL_NOTICES); printformat(server, nick, MSGLEVEL_NOTICES, IRCTXT_NOTICE_PRIVATE, nick, address, msg); } }
static void flood_ctcp(const char *data, IRC_SERVER_REC *server, const char *nick, const char *addr, const char *target) { int level; g_return_if_fail(data != NULL); g_return_if_fail(server != NULL); if (addr == NULL || g_strcasecmp(nick, server->nick) == 0) return; level = g_strncasecmp(data, "ACTION ", 7) != 0 ? MSGLEVEL_CTCPS : (ischannel(*target) ? MSGLEVEL_PUBLIC : MSGLEVEL_MSGS); if (!ignore_check(server, nick, addr, target, data, level)) flood_newmsg(server, level, nick, addr, target); }
static void flood_notice(const char *data, IRC_SERVER_REC *server, const char *nick, const char *addr) { char *params, *target, *text; g_return_if_fail(data != NULL); g_return_if_fail(server != NULL); if (addr == NULL || g_strcasecmp(nick, server->nick) == 0) return; params = event_get_params(data, 2, &target, &text); if (!ignore_check(server, nick, addr, target, text, MSGLEVEL_NOTICES)) flood_newmsg(server, MSGLEVEL_NOTICES, nick, addr, target); g_free(params); }
static void ctcp_reply(const char *data, IRC_SERVER_REC *server, const char *nick, const char *addr, const char *target) { char *args, *str; if (ignore_check(server, nick, addr, target, data, MSGLEVEL_CTCPS)) return; str = g_strconcat("ctcp reply ", data, NULL); args = strchr(str+11, ' '); if (args != NULL) *args++ = '\0'; else args = ""; g_strdown(str+11); if (!signal_emit(str, 5, args, server, nick, addr, target)) signal_emit("default ctcp reply", 5, data, server, nick, addr, target); g_free(str); }
void ignore_signal_channel_modes_raw(gpointer *params) { session *sess = params[0]; gchar *nick = params[1]; struct User *user = userlist_find(sess, nick); gchar *hostmask; if (user != NULL) { hostmask = g_strjoin("!", user->nick, user->hostname, NULL); if (ignore_check(hostmask, IGNORE_MODES)) signal_stop_current(); g_free(hostmask); } }
static PyObject *PyServer_ignore_check(PyServer *self, PyObject *args, PyObject *kwds) { static char *kwlist[] = {"nick", "host", "channel", "text", "level", NULL}; char *nick = ""; char *host = ""; char *channel = ""; char *text = ""; int level = 0; RET_NULL_IF_INVALID(self->data); if (!PyArg_ParseTupleAndKeywords(args, kwds, "ssssi", kwlist, &nick, &host, &channel, &text, &level)) return NULL; return PyBool_FromLong(ignore_check(self->data, nick, host, channel, text, level)); }
void ignore_signal_action_public(gpointer *params) { session *sess = params[0]; gchar *from = params[1]; struct User *user = userlist_find(sess, from); gchar *hostmask; if (user != NULL) { hostmask = g_strjoin("!", user->nick, user->hostname, NULL); if (ignore_check(hostmask, IGNORE_PUBLIC | IGNORE_ACTION)) signal_stop_current(); g_free(hostmask); } }
void ignore_signal_query_quit(gpointer *params) { session *sess = params[0]; gchar *nick = params[1]; struct User *user = userlist_find(sess, nick); gchar *hostmask; if (user != NULL) { hostmask = g_strjoin("!", user->nick, user->hostname, NULL); if (ignore_check(hostmask, IGNORE_PRIVATE | IGNORE_QUITS)) signal_stop_current(); g_free(hostmask); } }