1
0
mirror of https://github.com/anope/anope.git synced 2026-07-07 10:03:13 +02:00
Files
anope/src/ircd.c
T
Robin Burchell w00t@inspircd.org bd56c0fb93 Global NOTICE/PRIVMSG, QUIT.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1305 5417fbe8-f217-4b02-8779-1006273d7864
2008-10-02 08:37:14 +00:00

551 lines
11 KiB
C

/* Main ircd functions.
*
* (C) 2003-2008 Anope Team
* Contact us at info@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "services.h"
#include "extern.h"
IRCDProto *ircdproto;
IRCDModes ircd_modes;
/**
* Globals we want from the protocol file
**/
IRCDVar *ircd;
IRCDCAPAB *ircdcap;
char *version_protocol;
CBModeInfo *cbmodeinfos;
CUMode cumodes[128];
char *flood_mode_char_set;
char *flood_mode_char_remove;
CBMode cbmodes[128];
CMMode cmmodes[128];
char csmodes[128];
int UseTSMODE;
void pmodule_ircd_proto(IRCDProto *proto)
{
ircdproto = proto;
}
void anope_set_umode(User *user, int ac, const char **av)
{
ircdproto->set_umode(user, ac, av);
}
void anope_SendSVSNOOP(const char *server, int set)
{
ircdproto->SendSVSNOOP(server, set);
}
void anope_SendAkillDel(const char *user, const char *host)
{
ircdproto->SendAkillDel(user, host);
}
void anope_cmd_topic(const char *whosets, const char *chan, const char *whosetit, const char *topic, time_t when)
{
ircdproto->cmd_topic(whosets, chan, whosetit, topic, when);
}
void anope_SendVhostDel(User *u)
{
ircdproto->SendVhostDel(u);
}
void anope_SendAkill(const char *user, const char *host, const char *who, time_t when, time_t expires, const char *reason)
{
ircdproto->SendAkill(user, host, who, when, expires, reason);
}
void anope_SendSVSKill(const char *source, const char *user, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->SendSVSKill(source, user, buf);
}
void anope_SendSVSMode(User *u, int ac, const char **av)
{
ircdproto->SendSVSMode(u, ac, av);
}
void anope_SendGuestNick(const char *nick, const char *user, const char *host, const char *real, const char *modes)
{
ircdproto->SendGuestNick(nick, user, host, real, modes);
}
void anope_SendMode(const char *source, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->SendMode(source, dest, buf);
}
void anope_SendClientIntroduction(const char *nick, const char *user, const char *host, const char *real, const char *modes)
{
ircdproto->SendClientIntroduction(nick, user, host, real, modes);
}
void anope_SendKick(const char *source, const char *chan, const char *user, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->SendKick(source, chan, user, buf);
}
void anope_SendNoticeChanops(const char *source, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->SendNoticeChanops(source, dest, buf);
}
void anope_cmd_message(const char *source, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->cmd_message(source, dest, buf);
}
void anope_cmd_notice(const char *source, const char *dest, const char *msg)
{
ircdproto->cmd_notice(source, dest, msg);
}
void anope_cmd_action(const char *source, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "", actionbuf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
else return;
if (!*buf) return;
snprintf(actionbuf, BUFSIZE - 1, "%cACTION %s%c", 1, buf, 1);
ircdproto->cmd_privmsg(source, dest, actionbuf);
}
void anope_cmd_privmsg(const char *source, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->cmd_privmsg(source, dest, buf);
}
void anope_SendGlobalNotice(const char *source, const char *dest, const char *msg)
{
ircdproto->SendGlobalNotice(source, dest, msg);
}
void anope_SendGlobalPrivmsg(const char *source, const char *dest, const char *msg)
{
ircdproto->SendGlobalPrivmsg(source, dest, msg);
}
void anope_SendBotOp(const char *nick, const char *chan)
{
ircdproto->SendBotOp(nick, chan);
}
void anope_SendQuit(const char *source, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->SendQuit(source, buf);
}
void anope_cmd_pong(const char *servname, const char *who)
{
ircdproto->cmd_pong(servname, who);
}
void anope_cmd_join(const char *user, const char *channel, time_t chantime)
{
ircdproto->cmd_join(user, channel, chantime);
}
void anope_cmd_unsqline(const char *user)
{
ircdproto->cmd_unsqline(user);
}
void anope_cmd_invite(const char *source, const char *chan, const char *nick)
{
ircdproto->cmd_invite(source, chan, nick);
}
void anope_cmd_part(const char *nick, const char *chan, const char *fmt, ...)
{
if (fmt) {
va_list args;
char buf[BUFSIZE] = "";
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
ircdproto->cmd_part(nick, chan, buf);
}
else ircdproto->cmd_part(nick, chan, NULL);
}
void anope_cmd_global(const char *source, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->cmd_global(source, buf);
}
void anope_cmd_sqline(const char *mask, const char *reason)
{
ircdproto->cmd_sqline(mask, reason);
}
void anope_cmd_squit(const char *servname, const char *message)
{
ircdproto->cmd_squit(servname, message);
}
void anope_cmd_svso(const char *source, const char *nick, const char *flag)
{
ircdproto->cmd_svso(source, nick, flag);
}
void anope_cmd_chg_nick(const char *oldnick, const char *newnick)
{
ircdproto->cmd_chg_nick(oldnick, newnick);
}
void anope_cmd_svsnick(const char *source, const char *guest, time_t when)
{
ircdproto->cmd_svsnick(source, guest, when);
}
void anope_cmd_vhost_on(const char *nick, const char *vIdent, const char *vhost)
{
ircdproto->cmd_vhost_on(nick, vIdent, vhost);
}
void anope_cmd_connect()
{
ircdproto->cmd_connect();
}
void anope_cmd_svshold(const char *nick)
{
ircdproto->cmd_svshold(nick);
}
void anope_cmd_release_svshold(const char *nick)
{
ircdproto->cmd_release_svshold(nick);
}
void anope_cmd_unsgline(const char *mask)
{
ircdproto->cmd_unsgline(mask);
}
void anope_cmd_unszline(const char *mask)
{
ircdproto->cmd_unszline(mask);
}
void anope_cmd_szline(const char *mask, const char *reason, const char *whom)
{
ircdproto->cmd_szline(mask, reason, whom);
}
void anope_cmd_sgline(const char *mask, const char *reason)
{
ircdproto->cmd_sgline(mask, reason);
}
void anope_cmd_unban(const char *name, const char *nick)
{
ircdproto->cmd_unban(name, nick);
}
void anope_SendSVSMode_chan(const char *name, const char *mode, const char *nick)
{
ircdproto->SendSVSMode_chan(name, mode, nick);
}
void anope_cmd_svid_umode(const char *nick, time_t ts)
{
ircdproto->cmd_svid_umode(nick, ts);
}
void anope_cmd_nc_change(User *u)
{
ircdproto->cmd_nc_change(u);
}
void anope_cmd_svid_umode2(User *u, const char *ts)
{
ircdproto->cmd_svid_umode2(u, ts);
}
void anope_cmd_svid_umode3(User *u, const char *ts)
{
ircdproto->cmd_svid_umode3(u, ts);
}
void anope_cmd_svsjoin(const char *source, const char *nick, const char *chan, const char *param)
{
ircdproto->cmd_svsjoin(source, nick, chan, param);
}
void anope_cmd_svspart(const char *source, const char *nick, const char *chan)
{
ircdproto->cmd_svspart(source, nick, chan);
}
void anope_cmd_swhois(const char *source, const char *who, const char *mask)
{
ircdproto->cmd_swhois(source, who, mask);
}
void anope_cmd_eob()
{
ircdproto->cmd_eob();
}
int anope_flood_mode_check(const char *value)
{
return ircdproto->flood_mode_check(value);
}
void anope_cmd_jupe(const char *jserver, const char *who, const char *reason)
{
ircdproto->cmd_jupe(jserver, who, reason);
}
int anope_valid_nick(const char *nick)
{
return ircdproto->valid_nick(nick);
}
int anope_valid_chan(const char *chan)
{
return ircdproto->valid_chan(chan);
}
void anope_cmd_ctcp(const char *source, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->cmd_ctcp(source, dest, buf);
}
void anope_cmd_numeric(const char *source, int numeric, const char *dest, const char *fmt, ...)
{
va_list args;
char buf[BUFSIZE] = "";
if (fmt) {
va_start(args, fmt);
vsnprintf(buf, BUFSIZE - 1, fmt, args);
va_end(args);
}
ircdproto->cmd_numeric(source, numeric, dest, *buf ? buf : NULL);
}
/**
* Set routines for modules to set the prefered function for dealing with things.
**/
void pmodule_ircd_var(IRCDVar * ircdvar)
{
ircd = ircdvar;
}
void pmodule_ircd_cap(IRCDCAPAB * cap)
{
ircdcap = cap;
}
void pmodule_ircd_version(const char *version)
{
version_protocol = sstrdup(version);
}
void pmodule_ircd_cbmodeinfos(CBModeInfo * modeinfos)
{
cbmodeinfos = modeinfos;
}
void pmodule_ircd_cumodes(CUMode modes[128])
{
int i = 0;
for (i = 0; i < 128; i++) {
cumodes[i] = modes[i];
}
}
void pmodule_ircd_flood_mode_char_set(const char *mode)
{
flood_mode_char_set = sstrdup(mode);
}
void pmodule_ircd_flood_mode_char_remove(const char *mode)
{
flood_mode_char_remove = sstrdup(mode);
}
void pmodule_ircd_cbmodes(CBMode modes[128])
{
int i = 0;
for (i = 0; i < 128; i++) {
cbmodes[i] = modes[i];
}
}
void pmodule_ircd_cmmodes(CMMode modes[128])
{
int i = 0;
for (i = 0; i < 128; i++) {
cmmodes[i] = modes[i];
}
}
void pmodule_ircd_csmodes(char mode[128])
{
int i = 0;
for (i = 0; i < 128; i++) {
csmodes[i] = mode[i];
}
}
void pmodule_ircd_useTSMode(int use)
{
UseTSMODE = use;
}
/** mode stuff */
void pmodule_invis_umode(int mode)
{
ircd_modes.user_invis = mode;
}
void pmodule_oper_umode(int mode)
{
ircd_modes.user_oper = mode;
}
void pmodule_invite_cmode(int mode)
{
ircd_modes.chan_invite = mode;
}
void pmodule_secret_cmode(int mode)
{
ircd_modes.chan_secret = mode;
}
void pmodule_private_cmode(int mode)
{
ircd_modes.chan_private = mode;
}
void pmodule_key_mode(int mode)
{
ircd_modes.chan_key = mode;
}
void pmodule_limit_mode(int mode)
{
ircd_modes.chan_limit = mode;
}
int anope_get_invis_mode()
{
return ircd_modes.user_invis;
}
int anope_get_oper_mode()
{
return ircd_modes.user_oper;
}
int anope_get_invite_mode()
{
return ircd_modes.chan_invite;
}
int anope_get_secret_mode()
{
return ircd_modes.chan_secret;
}
int anope_get_private_mode()
{
return ircd_modes.chan_private;
}
int anope_get_key_mode()
{
return ircd_modes.chan_key;
}
int anope_get_limit_mode()
{
return ircd_modes.chan_limit;
}