add plexus 3 protocol file - being tested, added to SVN so it not get lost :)

This commit is contained in:
DNB 2006-05-16 02:07:17 +00:00
parent 10acef33db
commit 642aebbe1a
3 changed files with 248 additions and 0 deletions

1
.gitattributes vendored
View file

@ -447,6 +447,7 @@ modules/protocol/nefarious.c -text
modules/protocol/nefarious.vcproj -text modules/protocol/nefarious.vcproj -text
modules/protocol/plexus.c -text modules/protocol/plexus.c -text
modules/protocol/plexus.vcproj -text modules/protocol/plexus.vcproj -text
modules/protocol/plexus3.c -text
modules/protocol/protocol.txt -text modules/protocol/protocol.txt -text
modules/protocol/ultimate2.c eol=lf modules/protocol/ultimate2.c eol=lf
modules/protocol/ultimate2.vcproj -text modules/protocol/ultimate2.vcproj -text

View file

@ -4,6 +4,7 @@ Anything we add/remove/fix/change is in here (even our rants)
Fish (F), Mark (M), DeadNotBuried (D) Fish (F), Mark (M), DeadNotBuried (D)
=============================================================================== ===============================================================================
* NeoStats * Version 3.0.b1-dev * NeoStats * Version 3.0.b1-dev
- add plexus 3 protocol file for reference (D)
- Fix compile errors on GCC 2.95.4 (D) - Fix compile errors on GCC 2.95.4 (D)
- QuoteServ shouldn't send signon messages to Neo Bots (F) - QuoteServ shouldn't send signon messages to Neo Bots (F)
- Fix LimitServ timer to not set limits every time (F) - Fix LimitServ timer to not set limits every time (F)

246
modules/protocol/plexus3.c Normal file
View file

@ -0,0 +1,246 @@
/* NeoStats - IRC Statistical Services
** Copyright (c) 1999-2006 Adam Rutter, Justin Hammond, Mark Hetherington
** http://www.neostats.net/
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
** USA
**
** NeoStats CVS Identification
** $Id: plexus.c 3021 2006-01-26 15:30:22Z Fish $
*/
#include "neostats.h"
#include "protocol.h"
#include "services.h"
/* Messages/Tokens */
char *MSG_EOB = "EOB"; /* end of burst */
char *MSG_PRIVATE = "PRIVMSG"; /* PRIV */
char *MSG_NICK = "NICK"; /* NICK */
char *MSG_SERVER = "SERVER"; /* SERV */
char *MSG_TOPIC = "TOPIC"; /* TOPI */
char *MSG_INVITE = "INVITE"; /* INVI */
char *MSG_VERSION = "VERSION"; /* VERS */
char *MSG_QUIT = "QUIT"; /* QUIT */
char *MSG_SQUIT = "SQUIT"; /* SQUI */
char *MSG_KILL = "KILL"; /* KILL */
char *MSG_STATS = "STATS"; /* STAT */
char *MSG_ERROR = "ERROR"; /* ERRO */
char *MSG_AWAY = "AWAY"; /* AWAY */
char *MSG_PING = "PING"; /* PING */
char *MSG_PONG = "PONG"; /* PONG */
char *MSG_PASS = "PASS"; /* PASS */
char *MSG_WALLOPS = "WALLOPS"; /* WALL */
char *MSG_ADMIN = "ADMIN"; /* ADMI */
char *MSG_NOTICE = "NOTICE"; /* NOTI */
char *MSG_JOIN = "JOIN"; /* JOIN */
char *MSG_PART = "PART"; /* PART */
char *MSG_MOTD = "MOTD"; /* MOTD */
char *MSG_MODE = "MODE"; /* MODE */
char *MSG_KICK = "KICK"; /* KICK */
char *MSG_KLINE = "KLINE"; /* KLINE */
char *MSG_UNKLINE = "UNKLINE"; /* UNKLINE */
char *MSG_CHATOPS = "CHATOPS"; /* CHATOPS */
char *MSG_NETINFO = "NETINFO"; /* NETINFO */
char *MSG_CREDITS = "CREDITS";
char *MSG_SNETINFO = "SNETINFO"; /* SNetInfo */
char *MSG_SVINFO = "SVINFO";
char *MSG_CAPAB = "CAPAB";
char *MSG_SJOIN = "SJOIN";
/* Umodes */
#define UMODE_SERVNOTICE 0x00100000 /* server notices such as kill */
#define UMODE_REJ 0x00200000 /* Bot Rejections */
#define UMODE_SKILL 0x00400000 /* Server Killed */
#define UMODE_FULL 0x00800000 /* Full messages */
#define UMODE_SPY 0x01000000 /* see STATS / LINKS */
#define UMODE_DEBUG 0x02000000 /* 'debugging' info */
#define UMODE_NCHANGE 0x04000000 /* Nick change notice */
#define UMODE_OPERWALL 0x08000000 /* Operwalls */
#define UMODE_BOTS 0x10000000 /* shows bots */
#define UMODE_EXTERNAL 0x20000000 /* show servers introduced and splitting */
#define UMODE_CALLERID 0x40000000 /* block unless caller id's */
#define UMODE_UNAUTH 0x80000000 /* show unauth connects here */
/* Channel Visibility macros */
#define CMODE_INVEX 0x02000000
#define CMODE_HIDEOPS 0x04000000
static void m_server( char *origin, char **argv, int argc, int srv );
static void m_nick( char *origin, char **argv, int argc, int srv );
static void m_topic( char *origin, char **argv, int argc, int srv );
static void m_sjoin( char *origin, char **argv, int argc, int srv );
ProtocolInfo protocol_info =
{
/* Protocol options required by this IRCd */
PROTOCOL_SJOIN,
/* Protocol options negotiated at link by this IRCd */
PROTOCOL_UNKLN,
/* Features supported by this IRCd */
0,
/* Max host length */
128,
/* Max password length */
32,
/* Max nick length */
32,
/* Max user length */
10,
/* Max real name length */
50,
/* Max channel name length */
200,
/* Max topic length */
512,
/* Default operator modes for NeoStats service bots */
"+o",
/* Default channel mode for NeoStats service bots */
"+o",
};
/* this is the command list and associated functions to run */
irc_cmd cmd_list[] =
{
/* Command Token Function usage */
{&MSG_SERVER, 0, m_server, 0},
{&MSG_NICK, 0, m_nick, 0},
{&MSG_TOPIC, 0, m_topic, 0},
{&MSG_SJOIN, 0, m_sjoin, 0},
IRC_CMD_END()
};
mode_init chan_umodes[] =
{
{'h', CUMODE_HALFOP, 0, '%'},
MODE_INIT_END()
};
mode_init chan_modes[] =
{
{'e', CMODE_EXCEPT, MODEPARAM, 0},
{'I', CMODE_INVEX, MODEPARAM, 0},
{'a', CMODE_HIDEOPS, 0, 0},
MODE_INIT_END()
};
mode_init user_umodes[] =
{
{'d', UMODE_DEBUG, 0, 0},
{'a', UMODE_ADMIN, 0, 0},
{'l', UMODE_LOCOP, 0, 0},
{'b', UMODE_BOTS, 0, 0},
{'c', UMODE_CLIENT, 0, 0},
{'f', UMODE_FULL, 0, 0},
{'g', UMODE_CALLERID, 0, 0},
{'k', UMODE_SKILL, 0, 0},
{'n', UMODE_NCHANGE, 0, 0},
{'r', UMODE_REJ, 0, 0},
{'s', UMODE_SERVNOTICE, 0, 0},
{'u', UMODE_UNAUTH, 0, 0},
{'w', UMODE_WALLOP, 0, 0},
{'x', UMODE_EXTERNAL, 0, 0},
{'y', UMODE_SPY, 0, 0},
{'z', UMODE_OPERWALL, 0, 0},
MODE_INIT_END()
};
void send_server_connect( const char *name, const int numeric, const char *infoline, const char *pass, const unsigned long tsboot, const unsigned long tslink )
{
send_cmd( "%s %s :TS", MSG_PASS, pass );
send_cmd( "CAPAB :TS EX CHW IE EOB KLN GLN KNOCK HOPS HUB AOPS MX" );
send_cmd( "%s %s %d :%s", MSG_SERVER, name, numeric, infoline );
}
void send_sjoin( const char *source, const char *target, const char *chan, const unsigned long ts )
{
send_cmd( ":%s %s %lu %s + :%s", source, MSG_SJOIN, ts, chan, target );
}
void send_cmode( const char *sourceserver, const char *sourceuser, const char *chan, const char *mode, const char *args, const unsigned long ts )
{
send_cmd( ":%s %s %s %s %s %lu", sourceuser, MSG_MODE, chan, mode, args, ts );
}
void send_nick( const char *nick, const unsigned long ts, const char *newmode, const char *ident, const char *host, const char *server, const char *realname )
{
send_cmd( "%s %s 1 %lu %s %s %s %s %s %s%lu :%s", MSG_NICK, nick, ts, newmode, ident, host, server, nick, host, ts, realname );
}
/* there isn't an akill on Hybrid, so we send a kline to all servers! */
void send_akill( const char *source, const char *host, const char *ident, const char *setby, const unsigned long length, const char *reason, const unsigned long ts )
{
send_cmd( ":%s %s * %lu %s %s :%s", setby, MSG_KLINE, length, ident, host, reason );
}
void send_rakill( const char *source, const char *host, const char *ident )
{
if( ircd_srv.protocol & PROTOCOL_UNKLN ) {
send_cmd( ":%s %s %s %s", source, MSG_UNKLINE, ident, host );
} else {
irc_chanalert( ns_botptr, "Please Manually remove KLINES using /unkline on each server" );
}
}
/* source SJOIN unsigned long chan modes param:" */
static void m_sjoin( char *origin, char **argv, int argc, int srv )
{
do_sjoin( argv[0], argv[1], ( ( argc <= 2 ) ? argv[1] : argv[2] ), argv[4], argv, argc );
}
static void m_server( char *origin, char **argv, int argc, int srv )
{
do_server( argv[0], origin, argv[1], NULL, argv[2], srv );
}
/* m_nick
* argv[0] = nickname
* argv[1] = hop count
* argv[2] = TS
* argv[3] = umode
* argv[4] = username
* argv[5] = hostname
* argv[6] = server
* argv[7] = svsid
* argv[8] = vhost
* argv[9] = ircname
*/
static void m_nick( char *origin, char **argv, int argc, int srv )
{
if( !srv ) {
do_nick( argv[0], argv[1], argv[2], argv[4], argv[5], argv[6], NULL, NULL, argv[3], argv[8], argv[9], NULL, NULL );
} else {
do_nickchange( origin, argv[0], NULL );
}
}
static void m_topic( char *origin, char **argv, int argc, int srv )
{
/*
** Hybrid uses two different formats for the topic change protocol...
** :user TOPIC channel :topic
** and
** :server TOPIC channel author topicts :topic
** Both forms must be accepted.
** - Hwy
*/
if( FindUser( origin ) ) {
do_topic( argv[0], origin, NULL, argv[1] );
} else if( FindServer( origin ) ) {
do_topic( argv[0], argv[1], argv[2], argv[3] );
} else {
nlog( LOG_WARNING, "m_topic: can't find topic setter %s for topic %s", origin, argv[1] );
}
}