cleanups and fixes
authorEntrope <entrope@clan-dk.org>
Thu, 19 Feb 2004 22:36:42 +0000 (22:36 +0000)
committerEntrope <entrope@clan-dk.org>
Thu, 19 Feb 2004 22:36:42 +0000 (22:36 +0000)
Fix the response when trying to set an option to an invalid access level.

Put accurate headers on zoot_list !users output.

Reduce default addban/addtimedban/delban access levels to 250.

Add advertising/support plug for #srvx.

Handle (but report) IRC socket connection errors.
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-3

src/chanserv.c
src/hash.c
src/modcmd.c
tests/test-driver.pl

index 32e7c0b48be1c331145d72bdcf7635e55b8622cd..c14a7f08262cd387ebde8ae33f589845acd55258 100644 (file)
@@ -3298,7 +3298,7 @@ static void
 zoot_list(struct listData *list)
 {
     struct userData *uData;
-    unsigned int start, curr;
+    unsigned int start, curr, highest, lowest;
     struct helpfile_table tmp_table;
     const char **temp, *msg;
 
@@ -3314,16 +3314,18 @@ zoot_list(struct listData *list)
     tmp_table.width = list->table.width;
     tmp_table.flags = list->table.flags;
     list->table.contents[0][0] = " ";
+    highest = list->highest;
+    lowest = (highest < 100) ? 0 : (highest - 100);
     for(start = curr = 1; curr < list->table.length; )
     {
         uData = list->users[curr-1];
         list->table.contents[curr++][0] = " ";
-        if((curr == list->table.length) || (list->users[curr-1]->access != uData->access))
+        if((curr == list->table.length) || (list->users[curr-1]->access < lowest))
         {
             if(list->search)
-                send_message(list->user, list->bot, "CSMSG_ACCESS_SEARCH_HEADER", list->channel->name, list->lowest, list->highest, list->search);
+                send_message(list->user, list->bot, "CSMSG_ACCESS_SEARCH_HEADER", list->channel->name, lowest, highest, list->search);
             else
-                send_message(list->user, list->bot, "CSMSG_ACCESS_ALL_HEADER", list->channel->name, list->lowest, list->highest);
+                send_message(list->user, list->bot, "CSMSG_ACCESS_ALL_HEADER", list->channel->name, lowest, highest);
             temp = list->table.contents[--start];
             list->table.contents[start] = list->table.contents[0];
             tmp_table.contents = list->table.contents + start;
@@ -3331,6 +3333,8 @@ zoot_list(struct listData *list)
             table_send(list->bot, list->user->nick, 0, NULL, tmp_table);
             list->table.contents[start] = temp;
             start = curr;
+            highest = lowest - 1;
+            lowest = (highest < 100) ? 0 : (highest - 99);
         }
     }
 }
@@ -4937,7 +4941,7 @@ channel_level_option(enum levelOption option, struct userNode *user, struct chan
         value = user_level_from_name(argv[1], UL_OWNER+1);
         if(!value && !isdigit(argv[1][0]))
        {
-           reply("CSMSG_INVALID_ACCESS", index);
+           reply("CSMSG_INVALID_ACCESS", argv[1]);
             return 0;
         }
         uData = GetChannelUser(cData, user->handle_info);
@@ -6966,9 +6970,9 @@ init_chanserv(const char *nick)
     DEFINE_COMMAND(resync, 1, MODCMD_REQUIRE_CHANUSER, "access", "master", NULL);
 
     DEFINE_COMMAND(events, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog", "access", "coowner", NULL);
-    DEFINE_COMMAND(addban, 2, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL);
-    DEFINE_COMMAND(addtimedban, 3, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL);
-    DEFINE_COMMAND(delban, 2, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL);
+    DEFINE_COMMAND(addban, 2, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL);
+    DEFINE_COMMAND(addtimedban, 3, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL);
+    DEFINE_COMMAND(delban, 2, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL);
     DEFINE_COMMAND(uset, 1, MODCMD_REQUIRE_CHANUSER, "access", "peon", NULL);
 
     DEFINE_COMMAND(bans, 1, MODCMD_REQUIRE_REGCHAN, "access", "peon", "flags", "+nolog", NULL);
index b63da6d7458a916c3260df09cd01abc506ee265b..bd205afa7d969c1a13a8a1073b33f17107f6d3eb 100644 (file)
@@ -518,8 +518,7 @@ LockChannel(struct chanNode* channel)
 void
 UnlockChannel(struct chanNode *channel)
 {
-    if (!channel->locks)
-        return;
+    assert(channel->locks > 0);
     if (!--channel->locks && !channel->members.used)
         DelChannel(channel);
 }
index 834efabe31c51a94f201f1efc3bd6c32e526b3aa..4dc89289deb292d47907e4b719eb8574660f44ef 100644 (file)
@@ -1716,7 +1716,7 @@ static MODCMD_FUNC(cmd_dump_messages) {
 
 static MODCMD_FUNC(cmd_version) {
     reply("MCMSG_VERSION");
-    send_message_type(4, user, cmd->parent->bot, "Copyright 2000-2004 srvx Development Team.\nThe srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others.");
+    send_message_type(4, user, cmd->parent->bot, "Copyright 2000-2004 srvx Development Team.\nThe srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others.\nThe srvx Development Team can be reached at http://sf.net/projects/srvx/ or in #srvx on irc.gamesurge.net.");
     if ((argc > 1) && !irccasecmp(argv[1], "arch"))
         send_message_type(4, user, cmd->parent->bot, "%s", ARCH_VERSION);
     return 1;
index 669623555d032bccfaeff984e2890da6ff94fcc4..161f2611177bf801bc8bf442effcf86c5e25fd48 100755 (executable)
@@ -86,6 +86,7 @@ POE::Session->create(inline_states =>
                       irc_topic => sub {},
                       irc_error => \&irc_error,
                       irc_disconnected => \&irc_disconnected,
+                      irc_socketerr => \&irc_socketerr,
                      },
                      args => [@ARGV]);
 
@@ -420,6 +421,26 @@ sub irc_disconnected {
   }
 }
 
+sub irc_socketerr {
+  my ($kernel, $session, $heap, $sender, $msg) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0];
+  my $client = $heap->{sessions}->{$sender};
+  print "Client $client->{name} (re-)connect error: $_[ARG0]\n";
+  if ($client->{quitting}) {
+    $kernel->call($sender, 'unregister', 'all');
+    delete $heap->{sessions}->{$sender};
+    delete $heap->{clients}->{$client->{name}};
+  } else {
+    if ($client->{disconnect_expected}) {
+      delete $client->{disconnect_expected};
+    } else {
+      print "Got unexpected disconnect for $client->{name} (nick $client->{nick})\n";
+    }
+    $kernel->call($session, 'disable_client', $client);
+    $kernel->delay_set('reconnect', $client->{throttled} ? THROTTLED_TIMEOUT : RECONNECT_TIMEOUT, $client);
+    delete $client->{throttled};
+  }
+}
+
 sub irc_notice {
   my ($kernel, $session, $heap, $sender, $from, $to, $text) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0, ARG1, ARG2];
   my $client = $heap->{sessions}->{$sender};