/*
- * charybdis: A slightly useful ircd.
+ * Solanum: a slightly advanced ircd
* supported.c: isupport (005) numeric
*
* Copyright (C) 2006 Jilles Tjoelker
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: supported.c 3568 2007-09-09 18:59:08Z jilles $
*/
/* From the old supported.h which is
#include "stdinc.h"
#include "client.h"
-#include "common.h"
#include "numeric.h"
#include "ircd.h"
#include "s_conf.h"
#include "chmode.h"
#include "send.h"
+static char allowed_chantypes[BUFSIZE];
rb_dlink_list isupportlist;
struct isupportitem
isupport_intptr(const void *ptr)
{
static char buf[15];
- rb_snprintf(buf, sizeof buf, "%d", *(const int *)ptr);
+ snprintf(buf, sizeof buf, "%d", *(const int *)ptr);
return buf;
}
return *(char * const *)ptr;
}
-static const char *
+const char *
isupport_umode(const void *ptr)
{
const char *str;
static const char *
isupport_chanmodes(const void *ptr)
{
- static char result[80];
+ static char result[300];
- rb_snprintf(result, sizeof result, "%s%sbq,k,%slj,%s",
+ snprintf(result, sizeof result, "%s%sbq,k,%slj,%s",
ConfigChannel.use_except ? "e" : "",
ConfigChannel.use_invex ? "I" : "",
ConfigChannel.use_forward ? "f" : "",
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];
- rb_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;
}
{
static char result[30];
- rb_snprintf(result, sizeof result, "bq%s%s:%i",
+ snprintf(result, sizeof result, "bq%s%s:%i",
ConfigChannel.use_except ? "e" : "",
ConfigChannel.use_invex ? "I" : "",
ConfigChannel.max_bans);
{
static char result[200];
- rb_snprintf(result, sizeof result, "NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:%d,NOTICE:%d,ACCEPT:,MONITOR:",
+ snprintf(result, sizeof result, "NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:%d,NOTICE:%d,ACCEPT:,MONITOR:",
ConfigFileEntry.max_targets,
ConfigFileEntry.max_targets);
return result;
p = get_extban_string();
if (EmptyString(p))
return NULL;
- rb_snprintf(result, sizeof result, "$,%s", p);
+ snprintf(result, sizeof result, "$,%s", p);
return result;
}
{
static char result[200];
- rb_snprintf(result, sizeof result, "%u", ConfigFileEntry.nicklen - 1);
+ snprintf(result, sizeof result, "%u", ConfigFileEntry.nicklen - 1);
return result;
}
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);
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);
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;
+ }
}