X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/2f355b7e3cafdef3a614b723cc2a6c70a1d8339e..a4db1d4784bfda4e2fa7e4f7dd1899c90efe8bd3:/ircd/supported.c diff --git a/ircd/supported.c b/ircd/supported.c index c28ed9d0..4aa653ec 100644 --- a/ircd/supported.c +++ b/ircd/supported.c @@ -1,5 +1,5 @@ /* - * charybdis: A slightly useful ircd. + * Solanum: a slightly advanced ircd * supported.c: isupport (005) numeric * * Copyright (C) 2006 Jilles Tjoelker @@ -80,6 +80,7 @@ #include "chmode.h" #include "send.h" +static char allowed_chantypes[BUFSIZE]; rb_dlink_list isupportlist; struct isupportitem @@ -222,7 +223,7 @@ isupport_stringptr(const void *ptr) return *(char * const *)ptr; } -static const char * +const char * isupport_umode(const void *ptr) { const char *str; @@ -235,7 +236,7 @@ isupport_umode(const void *ptr) static const char * isupport_chanmodes(const void *ptr) { - static char result[80]; + static char result[300]; snprintf(result, sizeof result, "%s%sbq,k,%slj,%s", ConfigChannel.use_except ? "e" : "", @@ -245,19 +246,12 @@ isupport_chanmodes(const void *ptr) return result; } -static const char * -isupport_chantypes(const void *ptr) -{ - return ConfigChannel.disable_local_channels ? "#" : "&#"; -} - static const char * isupport_chanlimit(const void *ptr) { - static char result[30]; + static char result[BUFSIZE + 30]; - snprintf(result, sizeof result, "%s:%i", - ConfigChannel.disable_local_channels ? "#" : "&#", ConfigChannel.max_chans_per_user); + snprintf(result, sizeof result, "%s:%i", allowed_chantypes, ConfigChannel.max_chans_per_user); return result; } @@ -314,7 +308,7 @@ init_isupport(void) static int topiclen = TOPICLEN; static int maxnicklen = NICKLEN - 1; - add_isupport("CHANTYPES", isupport_chantypes, NULL); + add_isupport("CHANTYPES", isupport_string, allowed_chantypes); add_isupport("EXCEPTS", isupport_boolean, &ConfigChannel.use_except); add_isupport("INVEX", isupport_boolean, &ConfigChannel.use_invex); add_isupport("CHANMODES", isupport_chanmodes, NULL); @@ -324,7 +318,6 @@ init_isupport(void) add_isupport("MODES", isupport_intptr, &maxmodes); add_isupport("NETWORK", isupport_stringptr, &ServerInfo.network_name); add_isupport("STATUSMSG", isupport_string, "@+"); - add_isupport("CALLERID", isupport_umode, "g"); add_isupport("CASEMAPPING", isupport_string, "rfc1459"); add_isupport("NICKLEN", isupport_nicklen, NULL); add_isupport("MAXNICKLEN", isupport_intptr, &maxnicklen); @@ -333,5 +326,19 @@ init_isupport(void) add_isupport("DEAF", isupport_umode, "D"); add_isupport("TARGMAX", isupport_targmax, NULL); add_isupport("EXTBAN", isupport_extban, NULL); - add_isupport("CLIENTVER", isupport_string, "3.0"); +} + +void +chantypes_update(void) +{ + unsigned char *p; + memset(allowed_chantypes, '\0', sizeof allowed_chantypes); + + p = (unsigned char *) allowed_chantypes; + + for (unsigned int i = 0; i < 256; i++) + { + if (IsChanPrefix(i)) + *p++ = (unsigned char) i; + } }