mirror of
https://github.com/NishiOwO/ircservices5.git
synced 2025-04-21 08:44:38 +00:00
Add files via upload
This commit is contained in:
parent
3c0416c420
commit
137ede1f76
333
modules/protocol/undernet-p9.c
Normal file
333
modules/protocol/undernet-p9.c
Normal file
@ -0,0 +1,333 @@
|
||||
/* Undernet 2.9.x (P9) protocol module for IRC Services.
|
||||
*
|
||||
* IRC Services is copyright (c) 1996-2009 Andrew Church.
|
||||
* E-mail: <achurch@achurch.org>
|
||||
* Parts written by Andrew Kempe and others.
|
||||
* This program is free but copyrighted software; see the file GPL.txt for
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include "services.h"
|
||||
#include "modules.h"
|
||||
#include "conffile.h"
|
||||
#include "language.h"
|
||||
#include "messages.h"
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static char *NetworkDomain = NULL;
|
||||
|
||||
/*************************************************************************/
|
||||
/************************** User/channel modes ***************************/
|
||||
/*************************************************************************/
|
||||
|
||||
struct modedata_init {
|
||||
uint8 mode;
|
||||
ModeData data;
|
||||
};
|
||||
|
||||
static const struct modedata_init new_usermodes[] = {
|
||||
};
|
||||
|
||||
static const struct modedata_init new_chanmodes[] = {
|
||||
};
|
||||
|
||||
static const struct modedata_init new_chanusermodes[] = {
|
||||
};
|
||||
|
||||
static void init_modes(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < lenof(new_usermodes); i++)
|
||||
usermodes[new_usermodes[i].mode] = new_usermodes[i].data;
|
||||
for (i = 0; i < lenof(new_chanmodes); i++)
|
||||
chanmodes[new_chanmodes[i].mode] = new_chanmodes[i].data;
|
||||
for (i = 0; i < lenof(new_chanusermodes); i++)
|
||||
chanusermodes[new_chanusermodes[i].mode] = new_chanusermodes[i].data;
|
||||
|
||||
mode_setup();
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
/************************* IRC message receiving *************************/
|
||||
/*************************************************************************/
|
||||
|
||||
static void m_nick(char *source, int ac, char **av)
|
||||
{
|
||||
/* ircu sends the server as the source for a NICK message for a new
|
||||
* user. */
|
||||
if (strchr(source, '.'))
|
||||
*source = 0;
|
||||
|
||||
if (*source) {
|
||||
/* Old user changing nicks. */
|
||||
if (ac != 2) {
|
||||
module_log_debug(1, "NICK message: wrong number of parameters"
|
||||
" (%d) for source `%s'", ac, source);
|
||||
} else {
|
||||
do_nick(source, ac, av);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* New user. */
|
||||
|
||||
if (ac != 7) {
|
||||
module_log_debug(1, "NICK message: wrong number of parameters (%d)"
|
||||
" for new user", ac);
|
||||
return;
|
||||
}
|
||||
do_nick(source, ac, av);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static Message undernet_p9_messages[] = {
|
||||
{ "GLINE", NULL },
|
||||
{ "NICK", m_nick },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
/************************** IRC message sending **************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a NICK command for a new user. */
|
||||
|
||||
static void do_send_nick(const char *nick, const char *user, const char *host,
|
||||
const char *server, const char *name,
|
||||
const char *modes)
|
||||
{
|
||||
send_cmd(ServerName, "NICK %s 1 %ld %s %s %s :%s", nick,
|
||||
(long)time(NULL), user, host, server, name);
|
||||
if (modes)
|
||||
send_cmd(nick, "MODE %s +%s", nick, modes);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a NICK command to change an existing user's nick. */
|
||||
|
||||
static void do_send_nickchange(const char *nick, const char *newnick)
|
||||
{
|
||||
send_cmd(nick, "NICK %s %ld", newnick, (long)time(NULL));
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a command to change a user's "real name". */
|
||||
|
||||
static void do_send_namechange(const char *nick, const char *newname)
|
||||
{
|
||||
/* Not supported by this protocol. */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a SERVER command, and anything else needed at the beginning of the
|
||||
* connection.
|
||||
*/
|
||||
|
||||
static void do_send_server(void)
|
||||
{
|
||||
send_cmd(NULL, "PASS :%s", RemotePassword);
|
||||
send_cmd(NULL, "SERVER %s 1 :%s", ServerName, ServerDesc);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a SERVER command for a remote (juped) server. */
|
||||
|
||||
static void do_send_server_remote(const char *server, const char *reason)
|
||||
{
|
||||
send_cmd(NULL, "SERVER %s 2 :%s", server, reason);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a WALLOPS. */
|
||||
|
||||
static void do_wallops(const char *source, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf[BUFSIZE];
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buf, sizeof(buf), fmt, args);
|
||||
va_end(args);
|
||||
send_cmd(source ? source : ServerName, "WALLOPS :%s", buf);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a NOTICE to all users on the network. */
|
||||
|
||||
static void do_notice_all(const char *source, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char msgbuf[BUFSIZE];
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
|
||||
va_end(args);
|
||||
if (NetworkDomain) {
|
||||
send_cmd(source, "NOTICE $*.%s :%s", NetworkDomain, msgbuf);
|
||||
} else {
|
||||
/* Go through all common top-level domains. If you have others,
|
||||
* add them here. */
|
||||
send_cmd(source, "NOTICE $*.com :%s", msgbuf);
|
||||
send_cmd(source, "NOTICE $*.net :%s", msgbuf);
|
||||
send_cmd(source, "NOTICE $*.org :%s", msgbuf);
|
||||
send_cmd(source, "NOTICE $*.edu :%s", msgbuf);
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Send a command which modifies channel status. */
|
||||
|
||||
static void do_send_channel_cmd(const char *source, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsend_cmd(source, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/******************************* Callbacks *******************************/
|
||||
/*************************************************************************/
|
||||
|
||||
static int do_set_topic(const char *source, Channel *c, const char *topic,
|
||||
const char *setter, time_t t)
|
||||
{
|
||||
if (setter)
|
||||
return 0;
|
||||
c->topic_time = t;
|
||||
send_cmd(source, "TOPIC %s %s %lu :%s", c->name, c->topic_setter,
|
||||
(long)c->topic_time, c->topic ? c->topic : "");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static int do_send_akill(const char *username, const char *host,
|
||||
time_t expires, const char *who, const char *reason)
|
||||
{
|
||||
time_t now = time(NULL);
|
||||
|
||||
send_cmd(ServerName, "GLINE * +%s@%s %ld :%s", username, host,
|
||||
(long)(expires && expires > now ? expires-now : (0x7FFFFFFE)-now),
|
||||
reason);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static int do_cancel_akill(const char *username, const char *host)
|
||||
{
|
||||
send_cmd(ServerName, "GLINE * -%s@%s", username, host);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/***************************** Module stuff ******************************/
|
||||
/*************************************************************************/
|
||||
|
||||
ConfigDirective module_config[] = {
|
||||
{ "NetworkDomain", { { CD_STRING, 0, &NetworkDomain } } },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static int do_load_module(Module *mod, const char *modname)
|
||||
{
|
||||
if (strcmp(modname, "operserv/akill") == 0) {
|
||||
if (!add_callback(mod, "send_akill", do_send_akill))
|
||||
module_log("Unable to add send_akill callback");
|
||||
if (!add_callback(mod, "cancel_akill", do_cancel_akill))
|
||||
module_log("Unable to add cancel_akill callback");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
static int do_unload_module(Module *mod)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
int init_module(void)
|
||||
{
|
||||
protocol_name = "Undernet";
|
||||
protocol_version = "2.9.x";
|
||||
protocol_features = 0;
|
||||
protocol_nickmax = 9;
|
||||
|
||||
if (!register_messages(undernet_p9_messages)) {
|
||||
module_log("Unable to register messages");
|
||||
exit_module(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!add_callback(NULL, "load module", do_load_module)
|
||||
|| !add_callback(NULL, "unload module", do_unload_module)
|
||||
|| !add_callback(NULL, "set topic", do_set_topic)
|
||||
) {
|
||||
module_log("Unable to add callbacks");
|
||||
exit_module(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
init_modes();
|
||||
|
||||
send_nick = do_send_nick;
|
||||
send_nickchange = do_send_nickchange;
|
||||
send_namechange = do_send_namechange;
|
||||
send_server = do_send_server;
|
||||
send_server_remote = do_send_server_remote;
|
||||
wallops = do_wallops;
|
||||
notice_all = do_notice_all;
|
||||
send_channel_cmd = do_send_channel_cmd;
|
||||
pseudoclient_modes = "";
|
||||
enforcer_modes = "";
|
||||
pseudoclient_oper = 1;
|
||||
|
||||
mapstring(OPER_BOUNCY_MODES, OPER_BOUNCY_MODES_U_LINE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
int exit_module(int shutdown)
|
||||
{
|
||||
if (!shutdown) {
|
||||
/* Do not allow removal */
|
||||
return 0;
|
||||
}
|
||||
|
||||
remove_callback(NULL, "set topic", do_set_topic);
|
||||
remove_callback(NULL, "unload module", do_unload_module);
|
||||
remove_callback(NULL, "load module", do_load_module);
|
||||
unregister_messages(undernet_p9_messages);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-file-style: "stroustrup"
|
||||
* c-file-offsets: ((case-label . *) (statement-case-intro . *))
|
||||
* indent-tabs-mode: nil
|
||||
* End:
|
||||
*
|
||||
* vim: expandtab shiftwidth=4:
|
||||
*/
|
2276
modules/protocol/unreal.c
Normal file
2276
modules/protocol/unreal.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user