* 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"
#include "numeric.h"
#include "send.h"
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
#include <string.h>
/*
assert(cptr == sptr);
assert(0 != cli_user(sptr));
- cli_flags(sptr) &= ~FLAGS_TS8;
+ ClrFlag(sptr, FLAG_TS8);
-#ifdef IDLE_FROM_MSG
- cli_user(sptr)->last = CurrentTime;
-#endif
+ if (feature_bool(FEAT_IDLE_FROM_MSG))
+ cli_user(sptr)->last = CurrentTime;
if (parc < 2 || EmptyString(parv[1]))
return send_reply(sptr, ERR_NORECIPIENT, MSG_PRIVATE);
}
/*
- * 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;
- cli_flags(sptr) &= ~FLAGS_TS8;
+ ClrFlag(sptr, FLAG_TS8);
if (parc < 3) {
/*
assert(cptr == sptr);
assert(0 != cli_user(sptr));
- cli_flags(sptr) &= ~FLAGS_TS8;
+ ClrFlag(sptr, FLAG_TS8);
-#ifdef IDLE_FROM_MSG
- cli_user(sptr)->last = CurrentTime;
-#endif
+ if (feature_bool(FEAT_IDLE_FROM_MSG))
+ cli_user(sptr)->last = CurrentTime;
if (parc < 2 || EmptyString(parv[1]))
return send_reply(sptr, ERR_NORECIPIENT, MSG_PRIVATE);
}
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); /* XXX DEAD */
-
- if (parc < 3 || EmptyString(parv[parc - 1]))
- return send_error_to_client(sptr, ERR_NOTEXTTOSEND); /* XXX DEAD */
-
-
-#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, /* XXX DEAD */
- parv[0], (notice ? TOK_NOTICE : TOK_PRIVATE),
- chptr->chname, parv[parc - 1]);
- }
- else if (!notice)
- sendto_one(sptr, err_str(ERR_CANNOTSENDTOCHAN), /* XXX DEAD */
- 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), /* XXX DEAD */
- 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", /* XXX DEAD */
- parv[0], cmd, acptr->name, parv[parc - 1]);
- }
- else
- sendto_prefix_one(acptr, sptr, ":%s %s %s%s :%s", /* XXX DEAD */
- 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); /* XXX DEAD */
- else
- sendto_one(sptr, /* XXX DEAD */
- ":%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); /* XXX DEAD */
- continue;
- }
- while (*++s)
- if (*s == '.' || *s == '*' || *s == '?')
- break;
- if (*s == '*' || *s == '?')
- {
- sendto_one(sptr, err_str(ERR_WILDTOPLEVEL), me.name, parv[0], nick); /* XXX DEAD */
- continue;
- }
- }
- sendto_match_butone(IsServer(cptr) ? cptr : 0, /* XXX DEAD */
- 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 <server> is me first
- */
- if (!IsMe(acptr))
- {
- sendto_one(acptr, ":%s %s %s :%s", parv[0], cmd, nick, parv[parc - 1]); /* XXX DEAD */
- continue;
- }
-
- /* Look for an user whose NICK is equal to <nick> and then
- * check if it's hostname matches <host> 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", /* XXX DEAD */
- parv[0], cmd, nick, parv[parc - 1]);
- continue;
- }
- }
- if (IsChannelName(nick))
- sendto_one(sptr, err_str(ERR_NOSUCHCHANNEL), me.name, parv[0], nick); /* XXX DEAD */
- else
- sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], nick); /* XXX DEAD */
- }
- 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