services ts support, new splitbuf and seperate parse/spltbuf for ircu
This commit is contained in:
parent
2b4e42e1c0
commit
6deffae15e
8 changed files with 171 additions and 82 deletions
|
@ -30,6 +30,11 @@ NeoStats ChangeLog - Anything we add/remove/fix/change is in here (even our rant
|
||||||
the incoming text and let the NeoStats core process it (M)
|
the incoming text and let the NeoStats core process it (M)
|
||||||
- Added NICKV2 and UMODE2 support to Unreal (M)
|
- Added NICKV2 and UMODE2 support to Unreal (M)
|
||||||
- Set segv_module before calling bot chan messages (M)
|
- Set segv_module before calling bot chan messages (M)
|
||||||
|
- Added servicests support to Unreal and core (M)
|
||||||
|
- New style splif buffer function introduced to save splits and joins (M)
|
||||||
|
- Added system to overide the core parse and splitbuf functions for IRCu; will merge
|
||||||
|
back into core when IRCu support complete (M)
|
||||||
|
- Bug fix in NICKV2 for Unreal; realname was not parsed properly (M)
|
||||||
|
|
||||||
* NeoStats * Fish (F) * Version 2.5.14
|
* NeoStats * Fish (F) * Version 2.5.14
|
||||||
- Fix a bug with HostServ unable to load the database
|
- Fix a bug with HostServ unable to load the database
|
||||||
|
|
77
Ircu.c
77
Ircu.c
|
@ -420,3 +420,80 @@ static void
|
||||||
m_burst (char *origin, char **argv, int argc, int srv)
|
m_burst (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Override the core splitbuf and parse functions until
|
||||||
|
* IRCU support is complete
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
splitbuf (char *buf, char ***argv, int colon_special)
|
||||||
|
{
|
||||||
|
int argvsize = 8;
|
||||||
|
int argc;
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
SET_SEGV_LOCATION();
|
||||||
|
*argv = calloc (sizeof (char *) * argvsize, 1);
|
||||||
|
argc = 0;
|
||||||
|
while (*buf) {
|
||||||
|
if (argc == argvsize) {
|
||||||
|
argvsize += 8;
|
||||||
|
*argv = realloc (*argv, sizeof (char *) * argvsize);
|
||||||
|
}
|
||||||
|
s = strpbrk (buf, " ");
|
||||||
|
if (s) {
|
||||||
|
*s++ = 0;
|
||||||
|
while (isspace (*s))
|
||||||
|
s++;
|
||||||
|
} else {
|
||||||
|
s = buf + strnlen (buf, BUFSIZE);
|
||||||
|
}
|
||||||
|
if (*buf == 0) {
|
||||||
|
buf++;
|
||||||
|
}
|
||||||
|
(*argv)[argc++] = buf;
|
||||||
|
buf = s;
|
||||||
|
}
|
||||||
|
return argc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
parse (char *line)
|
||||||
|
{
|
||||||
|
char origin[64], cmd[64], *coreLine;
|
||||||
|
int cmdptr = 0;
|
||||||
|
int ac;
|
||||||
|
char **av;
|
||||||
|
|
||||||
|
SET_SEGV_LOCATION();
|
||||||
|
strip (line);
|
||||||
|
strlcpy (recbuf, line, BUFSIZE);
|
||||||
|
if (!(*line))
|
||||||
|
return;
|
||||||
|
nlog (LOG_DEBUG1, LOG_CORE, "R: %s", line);
|
||||||
|
if (!*line)
|
||||||
|
return;
|
||||||
|
coreLine = strpbrk (line, " ");
|
||||||
|
if (coreLine) {
|
||||||
|
*coreLine = 0;
|
||||||
|
while (isspace (*++coreLine));
|
||||||
|
} else
|
||||||
|
coreLine = line + strlen (line);
|
||||||
|
if ((!strcasecmp(line, "SERVER")) || (!strcasecmp(line, "PASS"))) {
|
||||||
|
strlcpy(cmd, line, sizeof(cmd));
|
||||||
|
ac = splitbuf(coreLine, &av, 1);
|
||||||
|
cmdptr = 0;
|
||||||
|
} else {
|
||||||
|
strlcpy(origin, line, sizeof(origin));
|
||||||
|
cmdptr = 1;
|
||||||
|
line = strpbrk (coreLine, " ");
|
||||||
|
if (line) {
|
||||||
|
*line = 0;
|
||||||
|
while (isspace (*++line));
|
||||||
|
} else
|
||||||
|
coreLine = line + strlen (line);
|
||||||
|
ac = splitbuf(line, &av, 0);
|
||||||
|
}
|
||||||
|
process_ircd_cmd (cmdptr, cmd, origin, av, ac);
|
||||||
|
free (av);
|
||||||
|
}
|
||||||
|
|
5
Ircu.h
5
Ircu.h
|
@ -58,6 +58,11 @@
|
||||||
/* we don't have automatic host cloaking support via Umode */
|
/* we don't have automatic host cloaking support via Umode */
|
||||||
#undef GOTUMODECLOAKING
|
#undef GOTUMODECLOAKING
|
||||||
|
|
||||||
|
/* Override NeoStats core splitbuf function */
|
||||||
|
#define IRCD_SPLITBUF
|
||||||
|
/* Override NeoStats core parse function */
|
||||||
|
#define IRCD_PARSE
|
||||||
|
|
||||||
/* buffer sizes */
|
/* buffer sizes */
|
||||||
#define MAXHOST (63 + 1)
|
#define MAXHOST (63 + 1)
|
||||||
#define MAXPASS (32 + 1)
|
#define MAXPASS (32 + 1)
|
||||||
|
|
66
Unreal.c
66
Unreal.c
|
@ -193,10 +193,11 @@ send_server (const char *name, const int numeric, const char *infoline)
|
||||||
void
|
void
|
||||||
send_server_connect (const char *name, const int numeric, const char *infoline, const char *pass)
|
send_server_connect (const char *name, const int numeric, const char *infoline, const char *pass)
|
||||||
{
|
{
|
||||||
#if 0
|
/* PROTOCTL NOQUIT TOKEN NICKv2 SJOIN SJOIN2 UMODE2 VL SJ3 NS SJB64 */
|
||||||
sts ("%s TOKEN SJOIN", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL));
|
#ifdef SJOIN
|
||||||
|
sts ("%s TOKEN NICKv2 SJOIN SJOIN2 UMODE2", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL));
|
||||||
#else
|
#else
|
||||||
sts ("%s TOKEN UMODE2 NICKv2", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL));
|
sts ("%s TOKEN NICKv2 UMODE2", (me.token ? TOK_PROTOCTL : MSG_PROTOCTL));
|
||||||
#endif
|
#endif
|
||||||
sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass);
|
sts ("%s %s", (me.token ? TOK_PASS : MSG_PASS), pass);
|
||||||
sts ("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
|
sts ("%s %s %d :%s", (me.token ? TOK_SERVER : MSG_SERVER), name, numeric, infoline);
|
||||||
|
@ -471,10 +472,7 @@ m_server (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_squit (char *origin, char **argv, int argc, int srv)
|
m_squit (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *tmpbuf;
|
SquitServer (argv[0], argv[1]);
|
||||||
tmpbuf = joinbuf(argv, argc, 1);
|
|
||||||
SquitServer (argv[0], tmpbuf);
|
|
||||||
free(tmpbuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_quit
|
/* m_quit
|
||||||
|
@ -483,10 +481,7 @@ m_squit (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_quit (char *origin, char **argv, int argc, int srv)
|
m_quit (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *tmpbuf;
|
UserQuit (origin, argv[0]);
|
||||||
tmpbuf = joinbuf(argv, argc, 0);
|
|
||||||
UserQuit (origin, tmpbuf);
|
|
||||||
free(tmpbuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_svsmode
|
/* m_svsmode
|
||||||
|
@ -499,9 +494,13 @@ m_svsmode (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
if (argv[0][0] == '#') {
|
if (argv[0][0] == '#') {
|
||||||
ChanMode (origin, argv, argc);
|
ChanMode (origin, argv, argc);
|
||||||
|
} else {
|
||||||
|
if (argv[2] && isdigit(*argv[2])) {
|
||||||
|
SetUserServicesTS(argv[0], argv[2]);
|
||||||
} else {
|
} else {
|
||||||
UserMode (argv[0], argv[1]);
|
UserMode (argv[0], argv[1]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_mode
|
/* m_mode
|
||||||
|
@ -541,10 +540,7 @@ m_umode2 (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_kill (char *origin, char **argv, int argc, int srv)
|
m_kill (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *tmpbuf;
|
KillUser (argv[0], argv[1]);
|
||||||
tmpbuf = joinbuf(argv, argc, 1);
|
|
||||||
KillUser (argv[0], tmpbuf);
|
|
||||||
free(tmpbuf);
|
|
||||||
}
|
}
|
||||||
static void
|
static void
|
||||||
m_vhost (char *origin, char **argv, int argc, int srv)
|
m_vhost (char *origin, char **argv, int argc, int srv)
|
||||||
|
@ -568,15 +564,7 @@ m_pong (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_away (char *origin, char **argv, int argc, int srv)
|
m_away (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *buf;
|
UserAway (origin, (argc > 0) ? argv[0] : NULL);
|
||||||
|
|
||||||
if (argc > 0) {
|
|
||||||
buf = joinbuf (argv, argc, 0);
|
|
||||||
UserAway (origin, buf);
|
|
||||||
free (buf);
|
|
||||||
} else {
|
|
||||||
UserAway (origin, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_nick
|
/* m_nick
|
||||||
|
@ -602,17 +590,12 @@ static void
|
||||||
m_nick (char *origin, char **argv, int argc, int srv)
|
m_nick (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
if(!srv) {
|
if(!srv) {
|
||||||
char *realname;
|
|
||||||
#ifdef NICKV2
|
#ifdef NICKV2
|
||||||
realname = joinbuf (argv, argc, 7);
|
AddUser (argv[0], argv[3], argv[4], argv[9], argv[5], NULL, argv[2]);
|
||||||
AddUser (argv[0], argv[3], argv[4], realname, argv[5], NULL, argv[2]);
|
|
||||||
free (realname);
|
|
||||||
UserMode (argv[0], argv[7]);
|
UserMode (argv[0], argv[7]);
|
||||||
SetUserVhost(argv[0], argv[8]);
|
SetUserVhost(argv[0], argv[8]);
|
||||||
#else
|
#else
|
||||||
realname = joinbuf (argv, argc, 7);
|
AddUser (argv[0], argv[3], argv[4], argv[7], argv[5], NULL, argv[2]);
|
||||||
AddUser (argv[0], argv[3], argv[4], realname, argv[5], NULL, argv[2]);
|
|
||||||
free (realname);
|
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
UserNick (origin, argv[0], NULL);
|
UserNick (origin, argv[0], NULL);
|
||||||
|
@ -631,11 +614,7 @@ m_nick (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_topic (char *origin, char **argv, int argc, int srv)
|
m_topic (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *buf;
|
ChanTopic (argv[1], argv[0], argv[2], argv[3]);
|
||||||
|
|
||||||
buf = joinbuf (argv, argc, 3);
|
|
||||||
ChanTopic (argv[1], argv[0], argv[2], buf);
|
|
||||||
free (buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_kick
|
/* m_kick
|
||||||
|
@ -646,10 +625,7 @@ m_topic (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_kick (char *origin, char **argv, int argc, int srv)
|
m_kick (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *tmpbuf;
|
kick_chan(argv[0], argv[1], origin, argv[2]);
|
||||||
tmpbuf = joinbuf(argv, argc, 2);
|
|
||||||
kick_chan(argv[0], argv[1], origin, tmpbuf);
|
|
||||||
free(tmpbuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_join
|
/* m_join
|
||||||
|
@ -669,10 +645,7 @@ m_join (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_part (char *origin, char **argv, int argc, int srv)
|
m_part (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *tmpbuf;
|
part_chan (finduser (origin), argv[0], argv[1]);
|
||||||
tmpbuf = joinbuf(argv, argc, 1);
|
|
||||||
part_chan (finduser (origin), argv[0], tmpbuf);
|
|
||||||
free(tmpbuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* m_ping
|
/* m_ping
|
||||||
|
@ -698,12 +671,9 @@ m_ping (char *origin, char **argv, int argc, int srv)
|
||||||
static void
|
static void
|
||||||
m_netinfo (char *origin, char **argv, int argc, int srv)
|
m_netinfo (char *origin, char **argv, int argc, int srv)
|
||||||
{
|
{
|
||||||
char *buf;
|
|
||||||
ircd_srv.uprot = atoi (argv[2]);
|
ircd_srv.uprot = atoi (argv[2]);
|
||||||
strlcpy (ircd_srv.cloak, argv[3], 10);
|
strlcpy (ircd_srv.cloak, argv[3], 10);
|
||||||
buf = joinbuf (argv, argc, 7);
|
strlcpy (me.netname, argv[7], MAXPASS);
|
||||||
strlcpy (me.netname, buf, MAXPASS);
|
|
||||||
free (buf);
|
|
||||||
send_netinfo ();
|
send_netinfo ();
|
||||||
init_services_bot ();
|
init_services_bot ();
|
||||||
globops (me.name, "Link with Network \2Complete!\2");
|
globops (me.name, "Link with Network \2Complete!\2");
|
||||||
|
|
3
Unreal.h
3
Unreal.h
|
@ -742,7 +742,8 @@
|
||||||
#define is_oper(x) ((x) && ((x->Umode & UMODE_OPER) || (x->Umode & UMODE_LOCOP)))
|
#define is_oper(x) ((x) && ((x->Umode & UMODE_OPER) || (x->Umode & UMODE_LOCOP)))
|
||||||
#define is_bot(x) ((x) && (x->Umode & UMODE_BOT))
|
#define is_bot(x) ((x) && (x->Umode & UMODE_BOT))
|
||||||
|
|
||||||
//#define NEW_STYLE_SPLITBUF
|
#define NEW_STYLE_SPLITBUF
|
||||||
#define NICKV2
|
#define NICKV2
|
||||||
|
/*#define SJOIN*/
|
||||||
|
|
||||||
#endif /* UNREAL_H Define */
|
#endif /* UNREAL_H Define */
|
||||||
|
|
83
ircd.c
83
ircd.c
|
@ -42,6 +42,11 @@ static char SmodeStringBuf[64];
|
||||||
#endif
|
#endif
|
||||||
static long services_bot_umode= 0;
|
static long services_bot_umode= 0;
|
||||||
|
|
||||||
|
/* Fully split buffer */
|
||||||
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
static char privmsgbuffer[BUFSIZE];
|
||||||
|
#endif
|
||||||
|
|
||||||
static int signon_newbot (const char *nick, const char *user, const char *host, const char *rname, long Umode);
|
static int signon_newbot (const char *nick, const char *user, const char *host, const char *rname, long Umode);
|
||||||
|
|
||||||
/** @brief init_ircd
|
/** @brief init_ircd
|
||||||
|
@ -232,7 +237,12 @@ signon_newbot (const char *nick, const char *user, const char *host, const char
|
||||||
sjoin_cmd (nick, me.chan);
|
sjoin_cmd (nick, me.chan);
|
||||||
schmode_cmd (me.name, me.chan, "+a", nick);
|
schmode_cmd (me.name, me.chan, "+a", nick);
|
||||||
#elif defined(UNREAL)
|
#elif defined(UNREAL)
|
||||||
|
#ifdef SJOIN
|
||||||
ssjoin_cmd(nick, me.chan, CMODE_CHANOP);
|
ssjoin_cmd(nick, me.chan, CMODE_CHANOP);
|
||||||
|
#else
|
||||||
|
sjoin_cmd (nick, me.chan);
|
||||||
|
schmode_cmd (me.name, me.chan, "+o", nick);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return NS_SUCCESS;
|
return NS_SUCCESS;
|
||||||
|
@ -376,29 +386,25 @@ CloakHost (ModUser *bot_ptr)
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
#ifndef IRCD_SPLITBUF
|
||||||
#ifdef NEW_STYLE_SPLITBUF
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
int
|
int
|
||||||
split_buf (char *buf, char ***argv, int colon_special)
|
splitbuf (char *buf, char ***argv, int colon_special)
|
||||||
{
|
{
|
||||||
int argvsize = 8;
|
int argvsize = 8;
|
||||||
int argc;
|
int argc;
|
||||||
char *s;
|
char *s;
|
||||||
#ifndef IRCU
|
|
||||||
int colcount = 0;
|
int colcount = 0;
|
||||||
#endif
|
|
||||||
SET_SEGV_LOCATION();
|
SET_SEGV_LOCATION();
|
||||||
*argv = calloc (sizeof (char *) * argvsize, 1);
|
*argv = calloc (sizeof (char *) * argvsize, 1);
|
||||||
argc = 0;
|
argc = 0;
|
||||||
#ifndef IRCU
|
|
||||||
if (*buf == ':')
|
if (*buf == ':')
|
||||||
buf++;
|
buf++;
|
||||||
#endif
|
|
||||||
while (*buf) {
|
while (*buf) {
|
||||||
if (argc == argvsize) {
|
if (argc == argvsize) {
|
||||||
argvsize += 8;
|
argvsize += 8;
|
||||||
*argv = realloc (*argv, sizeof (char *) * argvsize);
|
*argv = realloc (*argv, sizeof (char *) * argvsize);
|
||||||
}
|
}
|
||||||
#ifndef IRCU
|
|
||||||
if ((*buf == ':') && (colcount < 1)) {
|
if ((*buf == ':') && (colcount < 1)) {
|
||||||
buf++;
|
buf++;
|
||||||
colcount++;
|
colcount++;
|
||||||
|
@ -407,7 +413,6 @@ split_buf (char *buf, char ***argv, int colon_special)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
s = strpbrk (buf, " ");
|
s = strpbrk (buf, " ");
|
||||||
if (s) {
|
if (s) {
|
||||||
*s++ = 0;
|
*s++ = 0;
|
||||||
|
@ -425,6 +430,10 @@ split_buf (char *buf, char ***argv, int colon_special)
|
||||||
return argc;
|
return argc;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
#define splitbuf split_buf
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
split_buf (char *buf, char ***argv, int colon_special)
|
split_buf (char *buf, char ***argv, int colon_special)
|
||||||
{
|
{
|
||||||
|
@ -468,7 +477,6 @@ split_buf (char *buf, char ***argv, int colon_special)
|
||||||
}
|
}
|
||||||
return argc;
|
return argc;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @brief joinbuf
|
/** @brief joinbuf
|
||||||
*
|
*
|
||||||
|
@ -514,6 +522,10 @@ joinbuf (char **av, int ac, int from)
|
||||||
static void
|
static void
|
||||||
m_privmsg (int cmdptr, char* origin, char **av, int ac)
|
m_privmsg (int cmdptr, char* origin, char **av, int ac)
|
||||||
{
|
{
|
||||||
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
#endif
|
||||||
char target[64];
|
char target[64];
|
||||||
User *u;
|
User *u;
|
||||||
ModUser *mod_usr;
|
ModUser *mod_usr;
|
||||||
|
@ -526,12 +538,19 @@ m_privmsg (int cmdptr, char* origin, char **av, int ac)
|
||||||
strlcpy (target, av[0], 64);
|
strlcpy (target, av[0], 64);
|
||||||
av[0] = strtok (target, "@");
|
av[0] = strtok (target, "@");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcasecmp (s_Services, av[0])) {
|
if (!strcasecmp (s_Services, av[0])) {
|
||||||
if (flood (finduser (origin))) {
|
if (flood (finduser (origin))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* its to the Internal Services Bot */
|
/* its to the Internal Services Bot */
|
||||||
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
argc = split_buf (privmsgbuffer, &argv, 1);
|
||||||
|
servicesbot (origin, argv, argc);
|
||||||
|
free (argv);
|
||||||
|
#else
|
||||||
servicesbot (origin, av, ac);
|
servicesbot (origin, av, ac);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
mod_usr = findbot (av[0]);
|
mod_usr = findbot (av[0]);
|
||||||
|
@ -553,21 +572,39 @@ m_privmsg (int cmdptr, char* origin, char **av, int ac)
|
||||||
SET_SEGV_INMODULE(mod_usr->modname);
|
SET_SEGV_INMODULE(mod_usr->modname);
|
||||||
if (setjmp (sigvbuf) == 0) {
|
if (setjmp (sigvbuf) == 0) {
|
||||||
if(mod_usr->function) {
|
if(mod_usr->function) {
|
||||||
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
argc = split_buf (privmsgbuffer, &argv, 1);
|
||||||
|
mod_usr->function (origin, argv, argc);
|
||||||
|
free (argv);
|
||||||
|
#else
|
||||||
mod_usr->function (origin, av, ac);
|
mod_usr->function (origin, av, ac);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u = finduser (origin);
|
u = finduser (origin);
|
||||||
if (!u) {
|
if (!u) {
|
||||||
nlog (LOG_WARNING, LOG_CORE, "Unable to finduser %s (%s)", origin, mod_usr->nick);
|
nlog (LOG_WARNING, LOG_CORE, "Unable to finduser %s (%s)", origin, mod_usr->nick);
|
||||||
return;
|
} else {
|
||||||
}
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
argc = split_buf (privmsgbuffer, &argv, 1);
|
||||||
|
run_bot_cmd(mod_usr, u, argv, argc);
|
||||||
|
free (argv);
|
||||||
|
#else
|
||||||
run_bot_cmd(mod_usr, u, av, ac);
|
run_bot_cmd(mod_usr, u, av, ac);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CLEAR_SEGV_INMODULE();
|
CLEAR_SEGV_INMODULE();
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
argc = split_buf (privmsgbuffer, &argv, 1);
|
||||||
|
bot_chan_message (origin, argv, argc);
|
||||||
|
free (argv);
|
||||||
|
#else
|
||||||
bot_chan_message (origin, av, ac);
|
bot_chan_message (origin, av, ac);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -623,6 +660,7 @@ process_ircd_cmd (int cmdptr, char *cmd, char* origin, char **av, int ac)
|
||||||
*
|
*
|
||||||
* @return none
|
* @return none
|
||||||
*/
|
*/
|
||||||
|
#ifndef IRCD_PARSE
|
||||||
void
|
void
|
||||||
parse (char *line)
|
parse (char *line)
|
||||||
{
|
{
|
||||||
|
@ -637,7 +675,6 @@ parse (char *line)
|
||||||
if (!(*line))
|
if (!(*line))
|
||||||
return;
|
return;
|
||||||
nlog (LOG_DEBUG1, LOG_CORE, "R: %s", line);
|
nlog (LOG_DEBUG1, LOG_CORE, "R: %s", line);
|
||||||
#ifndef IRCU
|
|
||||||
if (*line == ':') {
|
if (*line == ':') {
|
||||||
coreLine = strpbrk (line, " ");
|
coreLine = strpbrk (line, " ");
|
||||||
if (!coreLine)
|
if (!coreLine)
|
||||||
|
@ -651,40 +688,24 @@ parse (char *line)
|
||||||
cmdptr = 0;
|
cmdptr = 0;
|
||||||
*origin = 0;
|
*origin = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if (!*line)
|
if (!*line)
|
||||||
return;
|
return;
|
||||||
coreLine = strpbrk (line, " ");
|
coreLine = strpbrk (line, " ");
|
||||||
if (coreLine) {
|
if (coreLine) {
|
||||||
*coreLine = 0;
|
*coreLine = 0;
|
||||||
while (isspace (*++coreLine));
|
while (isspace (*++coreLine));
|
||||||
} else
|
|
||||||
coreLine = line + strlen (line);
|
|
||||||
#ifdef IRCU
|
|
||||||
if ((!strcasecmp(line, "SERVER")) || (!strcasecmp(line, "PASS"))) {
|
|
||||||
strlcpy(cmd, line, sizeof(cmd));
|
|
||||||
ac = split_buf(coreLine, &av, 1);
|
|
||||||
cmdptr = 0;
|
|
||||||
} else {
|
} else {
|
||||||
strlcpy(origin, line, sizeof(origin));
|
|
||||||
cmdptr = 1;
|
|
||||||
line = strpbrk (coreLine, " ");
|
|
||||||
if (line) {
|
|
||||||
*line = 0;
|
|
||||||
while (isspace (*++line));
|
|
||||||
} else
|
|
||||||
coreLine = line + strlen (line);
|
coreLine = line + strlen (line);
|
||||||
ac = split_buf(line, &av, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
strlcpy (cmd, line, sizeof (cmd));
|
strlcpy (cmd, line, sizeof (cmd));
|
||||||
ac = split_buf (coreLine, &av, 1);
|
#ifdef NEW_STYLE_SPLITBUF
|
||||||
|
strlcpy (privmsgbuffer, coreLine, BUFSIZE);
|
||||||
#endif
|
#endif
|
||||||
|
ac = splitbuf (coreLine, &av, 1);
|
||||||
process_ircd_cmd (cmdptr, cmd, origin, av, ac);
|
process_ircd_cmd (cmdptr, cmd, origin, av, ac);
|
||||||
free (av);
|
free (av);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** @brief init_services_bot
|
/** @brief init_services_bot
|
||||||
*
|
*
|
||||||
|
|
1
stats.h
1
stats.h
|
@ -367,6 +367,7 @@ typedef struct User {
|
||||||
list_t *chans;
|
list_t *chans;
|
||||||
struct in_addr ipaddr;
|
struct in_addr ipaddr;
|
||||||
time_t TS;
|
time_t TS;
|
||||||
|
time_t servicesstamp;
|
||||||
long Smode;
|
long Smode;
|
||||||
void *moddata[NUM_MODULES];
|
void *moddata[NUM_MODULES];
|
||||||
long flags;
|
long flags;
|
||||||
|
|
9
users.c
9
users.c
|
@ -702,3 +702,12 @@ UserSMode (const char *nick, const char *modes)
|
||||||
nlog (LOG_DEBUG1, LOG_CORE, "UserSMode: smode for %s is now %p", u->nick, (int *)u->Smode);
|
nlog (LOG_DEBUG1, LOG_CORE, "UserSMode: smode for %s is now %p", u->nick, (int *)u->Smode);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void SetUserServicesTS(char* nick, char* ts)
|
||||||
|
{
|
||||||
|
User* u;
|
||||||
|
u = finduser(nick);
|
||||||
|
if(u) {
|
||||||
|
u->servicesstamp = strtoul(ts, NULL, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue