X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_privmsg.c;h=b9928dc192b146d85bf6d52991eb6701cbebe101;hb=refs%2Fheads%2Fupstream;hp=3a6f0594239ee5585412e4c1aa664de6a82f85b6;hpb=ae91ef6320f611af74e70a0db2620c338fbaa7d5;p=ircu2.10.12-pk.git diff --git a/ircd/m_privmsg.c b/ircd/m_privmsg.c index 3a6f059..b9928dc 100644 --- a/ircd/m_privmsg.c +++ b/ircd/m_privmsg.c @@ -79,17 +79,13 @@ * note: it is guaranteed that parv[0]..parv[parc-1] are all * non-NULL pointers. */ -#if 0 -/* - * No need to include handlers.h here the signatures must match - * and we don't need to force a rebuild of all the handlers everytime - * we add a new one to the list. --Bleep - */ -#include "handlers.h" -#endif /* 0 */ +#include "config.h" + #include "client.h" #include "ircd.h" #include "ircd_chattr.h" +#include "ircd_features.h" +#include "ircd_log.h" #include "ircd_relay.h" #include "ircd_reply.h" #include "ircd_string.h" @@ -98,7 +94,7 @@ #include "numeric.h" #include "send.h" -#include +/* #include -- Now using assert in ircd_log.h */ #include /* @@ -114,19 +110,18 @@ int m_privmsg(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) assert(0 != cptr); assert(cptr == sptr); - assert(0 != sptr->user); + assert(0 != cli_user(sptr)); - sptr->flags &= ~FLAGS_TS8; + ClrFlag(sptr, FLAG_TS8); -#ifdef IDLE_FROM_MSG - sptr->user->last = CurrentTime; -#endif + if (feature_bool(FEAT_IDLE_FROM_MSG)) + cli_user(sptr)->last = CurrentTime; if (parc < 2 || EmptyString(parv[1])) - return send_error_to_client(sptr, ERR_NORECIPIENT, MSG_PRIVATE); + return send_reply(sptr, ERR_NORECIPIENT, MSG_PRIVATE); if (parc < 3 || EmptyString(parv[parc - 1])) - return send_error_to_client(sptr, ERR_NOTEXTTOSEND); + return send_reply(sptr, ERR_NOTEXTTOSEND); count = unique_name_vector(parv[1], ',', vector, MAXTARGETS); @@ -151,14 +146,14 @@ int m_privmsg(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) } /* - * ms_privmsg - server message handler template + * ms_privmsg - server message handler */ int ms_privmsg(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { char* name; char* server; - sptr->flags &= ~FLAGS_TS8; + ClrFlag(sptr, FLAG_TS8); if (parc < 3) { /* @@ -205,19 +200,18 @@ int mo_privmsg(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) char* vector[MAXTARGETS]; assert(0 != cptr); assert(cptr == sptr); - assert(0 != sptr->user); + assert(0 != cli_user(sptr)); - sptr->flags &= ~FLAGS_TS8; + ClrFlag(sptr, FLAG_TS8); -#ifdef IDLE_FROM_MSG - sptr->user->last = CurrentTime; -#endif + if (feature_bool(FEAT_IDLE_FROM_MSG)) + cli_user(sptr)->last = CurrentTime; if (parc < 2 || EmptyString(parv[1])) - return send_error_to_client(sptr, ERR_NORECIPIENT, MSG_PRIVATE); + return send_reply(sptr, ERR_NORECIPIENT, MSG_PRIVATE); if (parc < 3 || EmptyString(parv[parc - 1])) - return send_error_to_client(sptr, ERR_NOTEXTTOSEND); + return send_reply(sptr, ERR_NOTEXTTOSEND); count = unique_name_vector(parv[1], ',', vector, MAXTARGETS); @@ -240,220 +234,3 @@ int mo_privmsg(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) } return 0; } - - -#if 0 -/* - * m_message (used in m_private() and m_notice()) - * - * The general function to deliver MSG's between users/channels - * - * parv[0] = sender prefix - * parv[1] = receiver list - * parv[parc-1] = message text - * - * massive cleanup - * rev argv 6/91 - */ -static int m_message(struct Client *cptr, struct Client *sptr, - int parc, char *parv[], int notice) -{ - struct Client* acptr; - char* s; - struct Channel* chptr; - char* nick; - char* server; - char* cmd; - char* host; - int i; - int count; - char* vector[MAXTARGETS]; - - sptr->flags &= ~FLAGS_TS8; - - cmd = notice ? MSG_NOTICE : MSG_PRIVATE; - - if (parc < 2 || EmptyString(parv[1])) - return send_error_to_client(sptr, ERR_NORECIPIENT, cmd); - - if (parc < 3 || EmptyString(parv[parc - 1])) - return send_error_to_client(sptr, ERR_NOTEXTTOSEND); - - -#if 0 - if (MyUser(sptr)) - parv[1] = canonize(parv[1]); - for (p = 0, nick = ircd_strtok(&p, parv[1], ","); nick; - nick = ircd_strtok(&p, 0, ",")) -#endif - - count = unique_name_vector(parv[1], ',', vector, MAXTARGETS); - for (i = 0; i < count; ++i) { - nick = vector[i]; - /* - * channel msg? - */ - if (IsChannelName(nick)) - { - if ((chptr = FindChannel(nick))) - { - /* This first: Almost never a server/service */ - if (client_can_send_to_channel(sptr, chptr) || IsChannelService(sptr)) - { - if (MyUser(sptr) && (chptr->mode.mode & MODE_NOPRIVMSGS) && - check_target_limit(sptr, chptr, chptr->chname, 0)) - continue; - sendmsgto_channel_butone(cptr, sptr, chptr, - parv[0], (notice ? TOK_NOTICE : TOK_PRIVATE), - chptr->chname, parv[parc - 1]); - } - else if (!notice) - sendto_one(sptr, err_str(ERR_CANNOTSENDTOCHAN), - me.name, parv[0], chptr->chname); - continue; - } - } - else if (*nick != '$' && !strchr(nick, '@')) - { - /* - * nickname addressed? - */ - if (MyUser(sptr)) - acptr = FindUser(nick); - else if ((acptr = findNUser(nick)) && !IsUser(acptr)) - acptr = 0; - if (acptr) - { - if (MyUser(sptr) && check_target_limit(sptr, acptr, acptr->name, 0)) - continue; - if (!is_silenced(sptr, acptr)) - { - if (!notice && MyConnect(sptr) && acptr->user && acptr->user->away) - sendto_one(sptr, rpl_str(RPL_AWAY), - me.name, parv[0], acptr->name, acptr->user->away); - if (MyUser(acptr)) - { - add_target(acptr, sptr); - sendto_prefix_one(acptr, sptr, ":%s %s %s :%s", - parv[0], cmd, acptr->name, parv[parc - 1]); - } - else - sendto_prefix_one(acptr, sptr, ":%s %s %s%s :%s", - parv[0], (notice ? TOK_NOTICE : TOK_PRIVATE), - NumNick(acptr), parv[parc - 1]); - } - } - else if (MyUser(sptr)) - sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], nick); - else - sendto_one(sptr, - ":%s %d %s * :Target left UnderNet. Failed to deliver: [%.50s]", - me.name, ERR_NOSUCHNICK, sptr->name, parv[parc - 1]); - continue; - } - /* - * The following two cases allow masks in NOTICEs - * (for OPERs only) - * - * Armin, 8Jun90 (gruner@informatik.tu-muenchen.de) - */ - if ((*nick == '$' || *nick == '#') && IsAnOper(sptr)) - { - if (MyConnect(sptr)) - { - if (!(s = strrchr(nick, '.'))) - { - sendto_one(sptr, err_str(ERR_NOTOPLEVEL), me.name, parv[0], nick); - continue; - } - while (*++s) - if (*s == '.' || *s == '*' || *s == '?') - break; - if (*s == '*' || *s == '?') - { - sendto_one(sptr, err_str(ERR_WILDTOPLEVEL), me.name, parv[0], nick); - continue; - } - } - sendto_match_butone(IsServer(cptr) ? cptr : 0, - sptr, nick + 1, (*nick == '#') ? MATCH_HOST : MATCH_SERVER, - ":%s %s %s :%s", parv[0], cmd, nick, parv[parc - 1]); - continue; - } - else if ((server = strchr(nick, '@')) && (acptr = FindServer(server + 1))) - { - /* - * NICK[%host]@server addressed? See if is me first - */ - if (!IsMe(acptr)) - { - sendto_one(acptr, ":%s %s %s :%s", parv[0], cmd, nick, parv[parc - 1]); - continue; - } - - /* Look for an user whose NICK is equal to and then - * check if it's hostname matches and if it's a local - * user. */ - *server = '\0'; - if ((host = strchr(nick, '%'))) - *host++ = '\0'; - - if ((!(acptr = FindUser(nick))) || - (!(MyUser(acptr))) || - ((!(EmptyString(host))) && match(host, acptr->user->host))) - acptr = 0; - - *server = '@'; - if (host) - *--host = '%'; - - if (acptr) - { - if (!(is_silenced(sptr, acptr))) - sendto_prefix_one(acptr, sptr, ":%s %s %s :%s", - parv[0], cmd, nick, parv[parc - 1]); - continue; - } - } - if (IsChannelName(nick)) - sendto_one(sptr, err_str(ERR_NOSUCHCHANNEL), me.name, parv[0], nick); - else - sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], nick); - } - return 0; -} - -/* - * m_private - * - * parv[0] = sender prefix - * parv[1] = receiver list - * parv[parc-1] = message text - */ -int m_private(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) -{ - return m_message(cptr, sptr, parc, parv, 0); -} - -#if !defined(XXX_BOGUS_TEMP_HACK) -#include "handlers.h" -#endif -/* - * m_notice - * - * parv[0] = sender prefix - * parv[1] = receiver list - * parv[parc-1] = notice text - */ -int m_notice(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) -{ - if (MyUser(sptr) && parv[1] && parv[1][0] == '@' && - IsChannelName(&parv[1][1])) - { - parv[1]++; /* Get rid of '@' */ - return m_wallchops(cptr, sptr, parc, parv); - } - return m_message(cptr, sptr, parc, parv, 1); -} - -#endif