Add CHANNELLEN feature, analogous to NICKLEN feature.
authorMichael Poole <mdpoole@troilus.org>
Tue, 12 Jul 2005 02:47:09 +0000 (02:47 +0000)
committerMichael Poole <mdpoole@troilus.org>
Tue, 12 Jul 2005 02:47:09 +0000 (02:47 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@1443 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
doc/example.conf
doc/readme.features
include/ircd_features.h
include/supported.h
ircd/channel.c
ircd/ircd_features.c
ircd/m_join.c
ircd/m_names.c

index a468cb27cc047bab31f6960a686008aefae3fc7e..d0c853e8aabf119e5bdb9ffb21e86a6d31d24f87 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2005-07-11  Michael Poole <mdpoole@troilus.org>
+
+       * doc/readme.features: Document FEAT_CHANNELLEN.
+
+       * doc/example.conf: Give an example of it.
+
+       * ircd/m_join.c (ms_join): Do not clean channel names from remote
+       servers, to avoid desynchs.
+
+       * ircd/m_names.c (ms_names): Likewise.
+
+2005-07-11  Stephan Peijnik <speijnik@gmail.com>
+
+       * include/ircd_features.h: Declare new FEAT_CHANNELLEN.
+
+       * include/supported.h: Add it to the ISUPPORT display.
+
+       * ircd/channel.c (clean_channelname): Impose the lower limit
+       between FEAT_CHANNELLEN and CHANNELLEN.
+
+       * ircd/ircd_features.c: Define FEAT_CHANNELLEN.
+
 2005-07-11  Reed Loden <reed@reedloden.com>
 
        * include/sys.h: Move FD_SETSIZE redefinition to engine_select.c.
index 6407f1dead2488c692f0155e03133b77966481f7..da47f13aa134556d3bcb612ff8741126ce9a9e91 100644 (file)
@@ -805,6 +805,7 @@ features
 # "IPCHECK_CLONE_LIMIT" = "4";
 # "IPCHECK_CLONE_PERIOD" = "40";
 # "IPCHECK_CLONE_DELAY" = "600";
+# "CHANNELLEN" = "200";
 # "CONFIG_OPERCMDS" = "FALSE";
 # "OPLEVELS" = "TRUE";
 # "LOCAL_CHANNELS" = "TRUE";
index 4a3ed80cf2d3365acc76b619f871e19646840a59..63fa54d43ac6ce18e17740bf8163aeae0923a10d 100644 (file)
@@ -848,3 +848,11 @@ TOPIC_BURST
 If set, send the current topic value and timestamp for channels during
 burst.  This generally only makes sense for hubs to use, and it causes
 a large increase in net.burst size.
+
+CHANNELLEN
+ * Type: integer
+ * Default: 200
+
+This is the allowed length of locally created channels.  It may not be
+larger than the CHANNELLEN #define.  Like the NICKLEN feature, this is
+intended to ease changes in channel name length across a network.
index e4b2f4e3b5b298b815a8de5d8d59d348fd8d234e..fae743ceba5c33dbf32d3540881e33ba8359252b 100644 (file)
@@ -77,6 +77,7 @@ enum Feature {
   FEAT_IPCHECK_CLONE_LIMIT,
   FEAT_IPCHECK_CLONE_PERIOD,
   FEAT_IPCHECK_CLONE_DELAY,
+  FEAT_CHANNELLEN,
 
   /* Some misc. default paths */
   FEAT_MPATH,
index 74d16f18f91c828b679f5d95a005f0924a3429ed..09a581ce6fa85173ae8c1353f6d862fe335464a8 100644 (file)
@@ -47,7 +47,8 @@
                 " TOPICLEN=%i" \
                 " AWAYLEN=%i" \
                 " KICKLEN=%i" \
-                " CHANNELLEN=%i"
+                " CHANNELLEN=%i" \
+                " MAXCHANNELLEN=%i"
 
 #define FEATURES2 "CHANTYPES=%s" \
                 " PREFIX=%s" \
@@ -59,7 +60,8 @@
 #define FEATURESVALUES1 feature_int(FEAT_MAXSILES), MAXMODEPARAMS, \
                        feature_int(FEAT_MAXCHANNELSPERUSER), \
                         feature_int(FEAT_MAXBANS), feature_int(FEAT_NICKLEN), \
-                        NICKLEN, TOPICLEN, AWAYLEN, TOPICLEN, CHANNELLEN
+                        NICKLEN, TOPICLEN, AWAYLEN, TOPICLEN, \
+                        feature_int(FEAT_CHANNELLEN), CHANNELLEN
 
 #define FEATURESVALUES2 (feature_bool(FEAT_LOCAL_CHANNELS) ? "#&" : "#"), "(ov)@+", "@+", \
                         (feature_bool(FEAT_OPLEVELS) ? "b,AkU,l,imnpstrD" : "b,k,l,imnpstrD"), \
index ff12cc1cae844197758d43e402ced3a381d9f869..36f87272873b3c26fa39a68f16342dec5caa7c54 100644 (file)
@@ -1288,7 +1288,8 @@ void clean_channelname(char *cn)
   int i;
 
   for (i = 0; cn[i]; i++) {
-    if (i >= CHANNELLEN || !IsChannelChar(cn[i])) {
+    if (i >= IRCD_MIN(CHANNELLEN, feature_int(FEAT_CHANNELLEN))
+        || !IsChannelChar(cn[i])) {
       cn[i] = '\0';
       return;
     }
index aa5acf36f4c7e581f25b1fdb120bef74f0edd174..26a028977290fdfdc3b90a7daa8e5a91d85eb2d1 100644 (file)
@@ -316,6 +316,7 @@ static struct FeatureDesc {
   F_I(IPCHECK_CLONE_LIMIT, 0, 4, 0),
   F_I(IPCHECK_CLONE_PERIOD, 0, 40, 0),
   F_I(IPCHECK_CLONE_DELAY, 0, 600, 0),
+  F_I(CHANNELLEN, 0, 200, 0),
 
   /* Some misc. default paths */
   F_S(MPATH, FEAT_CASE | FEAT_MYOPER, "ircd.motd", motd_init),
index 7391139bb2ad128f437616fe9f96955ade4f776f..469fbd8f0a1ea09a06d14fbf523fb5d4dd1b6fba 100644 (file)
@@ -367,7 +367,6 @@ int ms_join(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
 
   for (name = ircd_strtok(&p, chanlist, ","); name;
        name = ircd_strtok(&p, 0, ",")) {
-    clean_channelname(name);
 
     if (join0(&join, cptr, sptr, name)) /* did client do a JOIN 0? */
       continue;
index a4627a3c1c6030224b97815875388e34a39094ad..6c74178d449953ace96c583123aac90af08c8aa6 100644 (file)
@@ -469,7 +469,6 @@ int ms_names(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    *  (As performed with each /join) - ** High frequency usage **
    */
 
-  clean_channelname(para);
   chptr = FindChannel(para); 
 
   if (chptr) {