2 * IRC - Internet Relay Chat, ircd/m_proto.c
3 * Copyright (C) 1990 Jarkko Oikarinen and
4 * University of Oulu, Computing Center
6 * See file AUTHORS in IRC package for additional names of
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 1, or (at your option)
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 #include "ircd_reply.h"
30 #include "ircd_snprintf.h"
41 /* Report a protocol violation warning to anyone listening. This can be
42 * easily used to cleanup the last couple of parts of the code up.
45 int protocol_violation(struct Client* cptr, const char* pattern, ...)
52 vd.vd_format = pattern;
53 va_start(vd.vd_args, pattern);
55 sendcmdto_flag_butone(&me, CMD_DESYNCH, NULL, FLAGS_DEBUG,
56 ":Protocol Violation from %s: %v", cli_name(cptr), &vd);
62 int need_more_params(struct Client* cptr, const char* cmd)
67 * shouldn't try to do more than one thing at a time,
68 * call protocol_violation explicitly where it's needed and
69 * context is available.
72 protocol_violation(cptr, "Not enough parameters for %s",cmd);
74 send_reply(cptr, ERR_NEEDMOREPARAMS, cmd);
78 int send_reply(struct Client *to, int reply, ...)
82 const struct Numeric *num;
87 num = get_error_numeric(reply & ~SND_EXPLICIT); /* get reply... */
89 va_start(vd.vd_args, reply);
91 if (reply & SND_EXPLICIT) /* get right pattern */
92 vd.vd_format = (const char *) va_arg(vd.vd_args, char *);
94 vd.vd_format = num->format;
96 assert(0 != vd.vd_format);
99 mb = msgq_make(cli_from(to), "%:#C %s %C %v", &me, num->str, to, &vd);
103 /* send it to the user */
104 send_buffer(to, mb, 0);
108 return 0; /* convenience return */