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.
25 #include "ircd_reply.h"
28 #include "ircd_snprintf.h"
39 /* Report a protocol violation warning to anyone listening. This can be
40 * easily used to cleanup the last couple of parts of the code up.
43 int protocol_violation(struct Client* cptr, const char* pattern, ...)
50 vd.vd_format = pattern;
51 va_start(vd.vd_args, pattern);
53 sendcmdto_flag_butone(&me, CMD_DESYNCH, NULL, FLAGS_DEBUG,
54 ":Protocol Violation from %s: %v", cptr->name, &vd);
60 int need_more_params(struct Client* cptr, const char* cmd)
63 protocol_violation(cptr,"Not enough parameters for %s",cmd);
64 send_reply(cptr, ERR_NEEDMOREPARAMS, cmd);
68 int send_reply(struct Client *to, int reply, ...)
72 const struct Numeric *num;
77 num = get_error_numeric(reply & ~SND_EXPLICIT); /* get reply... */
79 va_start(vd.vd_args, reply);
81 if (reply & SND_EXPLICIT) /* get right pattern */
82 vd.vd_format = (const char *) va_arg(vd.vd_args, char *);
84 vd.vd_format = num->format;
86 assert(0 != vd.vd_format);
89 mb = msgq_make(to->from, "%:#C %s %C %v", &me, num->str, to, &vd);
93 /* send it to the user */
94 send_buffer(to, mb, 0);
98 return 0; /* convenience return */
101 int send_admin_info(struct Client* sptr)
103 const struct LocalConf* admin = conf_get_local();
106 send_reply(sptr, RPL_ADMINME, me.name);
107 send_reply(sptr, RPL_ADMINLOC1, admin->location1);
108 send_reply(sptr, RPL_ADMINLOC2, admin->location2);
109 send_reply(sptr, RPL_ADMINEMAIL, admin->contact);