summaryrefslogtreecommitdiff
path: root/src/servers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/servers.c')
-rw-r--r--src/servers.c79
1 files changed, 55 insertions, 24 deletions
diff --git a/src/servers.c b/src/servers.c
index 8a672f248..d69ac9afd 100644
--- a/src/servers.c
+++ b/src/servers.c
@@ -204,8 +204,13 @@ void do_server(const char *source, int ac, char **av)
{
Server *s;
- if (debug)
- alog("debug: Server introduced (%s) from %s", av[0], source);
+ if (debug) {
+ if (!*source) {
+ alog("debug: Server introduced (%s)", av[0]);
+ } else {
+ alog("debug: Server introduced (%s) from %s", av[0], source);
+ }
+ }
if (source[0] == '\0')
s = me_server;
@@ -263,77 +268,103 @@ void do_squit(const char *source, int ac, char **av)
void capab_parse(int ac, char **av)
{
int i;
+ char *s, *tmp;
+
+ char *temp;
for (i = 0; i < ac; i++) {
- if (!stricmp(av[i], "NOQUIT")) {
+ temp = av[i];
+
+ s = myStrGetToken(temp, '=', 0);
+ tmp = myStrGetTokenRemainder(temp, '=', 1);
+
+ if (!s) {
+ continue;
+ }
+
+ if (!stricmp(s, "NOQUIT")) {
uplink_capab |= CAPAB_NOQUIT;
}
- if (!stricmp(av[i], "TSMODE")) {
+ if (!stricmp(s, "TSMODE")) {
uplink_capab |= CAPAB_TSMODE;
}
if (!stricmp(av[i], "UNCONNECT")) {
uplink_capab |= CAPAB_UNCONNECT;
}
- if (!stricmp(av[i], "NICKIP")) {
+ if (!stricmp(s, "NICKIP")) {
uplink_capab |= CAPAB_NICKIP;
}
- if (!stricmp(av[i], "SSJOIN")) {
+ if (!stricmp(s, "SSJOIN")) {
uplink_capab |= CAPAB_NSJOIN;
}
- if (!stricmp(av[i], "ZIP")) {
+ if (!stricmp(s, "ZIP")) {
uplink_capab |= CAPAB_ZIP;
}
- if (!stricmp(av[i], "BURST")) {
+ if (!stricmp(s, "BURST")) {
uplink_capab |= CAPAB_BURST;
}
- if (!stricmp(av[i], "TS5")) {
+ if (!stricmp(s, "TS5")) {
uplink_capab |= CAPAB_TS5;
}
- if (!stricmp(av[i], "TS3")) {
+ if (!stricmp(s, "TS3")) {
uplink_capab |= CAPAB_TS3;
}
- if (!stricmp(av[i], "DKEY")) {
+ if (!stricmp(s, "DKEY")) {
uplink_capab |= CAPAB_DKEY;
}
- if (!stricmp(av[i], "PT4")) {
+ if (!stricmp(s, "PT4")) {
uplink_capab |= CAPAB_PT4;
}
- if (!stricmp(av[i], "SCS")) {
+ if (!stricmp(s, "SCS")) {
uplink_capab |= CAPAB_SCS;
}
- if (!stricmp(av[i], "QS")) {
+ if (!stricmp(s, "QS")) {
uplink_capab |= CAPAB_QS;
}
- if (!stricmp(av[i], "UID")) {
+ if (!stricmp(s, "UID")) {
uplink_capab |= CAPAB_UID;
}
- if (!stricmp(av[i], "KNOCK")) {
+ if (!stricmp(s, "KNOCK")) {
uplink_capab |= CAPAB_KNOCK;
}
- if (!stricmp(av[i], "CLIENT")) {
+ if (!stricmp(s, "CLIENT")) {
uplink_capab |= CAPAB_CLIENT;
}
- if (!stricmp(av[i], "IPV6")) {
+ if (!stricmp(s, "IPV6")) {
uplink_capab |= CAPAB_IPV6;
}
- if (!stricmp(av[i], "SSJ5")) {
+ if (!stricmp(s, "SSJ5")) {
uplink_capab |= CAPAB_SSJ5;
}
- if (!stricmp(av[i], "SN2")) {
+ if (!stricmp(s, "SN2")) {
uplink_capab |= CAPAB_SN2;
}
- if (!stricmp(av[i], "TOK1")) {
+ if (!stricmp(s, "TOK1")) {
uplink_capab |= CAPAB_TOKEN;
}
- if (!stricmp(av[i], "TOKEN")) {
+ if (!stricmp(s, "TOKEN")) {
uplink_capab |= CAPAB_TOKEN;
}
- if (!stricmp(av[i], "VHOST")) {
+ if (!stricmp(s, "VHOST")) {
uplink_capab |= CAPAB_VHOST;
}
- if (!stricmp(av[i], "SSJ3")) {
+ if (!stricmp(s, "SSJ3")) {
uplink_capab |= CAPAB_SSJ3;
}
+
+ if (!stricmp(s, "CHANMODES")) {
+ uplink_capab |= CAPAB_CHANMODE;
+ if (tmp) {
+ ircd->chanmodes = tmp;
+ }
+ }
+ if (s) {
+ free(s);
+ }
+ if (tmp) {
+ free(tmp);
+ }
+
}
}