Ver código fonte

* Clear out irc status flags when appropriate

Bryan Drewery 16 anos atrás
pai
commit
04e62c0fc5
2 arquivos alterados com 11 adições e 8 exclusões
  1. 4 4
      src/mod/irc.mod/chan.c
  2. 7 4
      src/mod/server.mod/servmsg.c

+ 4 - 4
src/mod/irc.mod/chan.c

@@ -2755,7 +2755,7 @@ static int gotpart(char *from, char *msg)
   if (chan && !shouldjoin(chan) && match_my_nick(nick)) {
     irc_log(chan, "Parting");    
     clear_channel(chan, 1);
-    chan->ircnet_status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
+    chan->ircnet_status = 0;
     return 0;
   }
   if (chan && !channel_pending(chan)) {
@@ -2782,7 +2782,7 @@ static int gotpart(char *from, char *msg)
     /* If it was me, all hell breaks loose... */
     if (match_my_nick(nick)) {
       clear_channel(chan, 1);
-      chan->ircnet_status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
+      chan->ircnet_status = 0;
       if (shouldjoin(chan)) {
 	dprintf(DP_MODE, "JOIN %s %s\n",
 	        (chan->name[0]) ? chan->name : chan->dname,
@@ -2812,7 +2812,7 @@ static int gotkick(char *from, char *origmsg)
   char *nick = newsplit(&msg);
 
   if (match_my_nick(nick) && channel_pending(chan) && shouldjoin(chan) && !channel_joining(chan)) {
-    chan->ircnet_status &= ~(CHAN_ACTIVE | CHAN_PEND);
+    chan->ircnet_status = 0;
     chan->ircnet_status |= CHAN_JOINING;
     dprintf(DP_MODE, "JOIN %s %s\n",
             (chan->name[0]) ? chan->name : chan->dname,
@@ -2861,7 +2861,7 @@ static int gotkick(char *from, char *origmsg)
     irc_log(chan, "%s was kicked by %s (%s)", s1, from, msg);
     /* Kicked ME?!? the sods! */
     if (match_my_nick(nick) && shouldjoin(chan) && !channel_joining(chan)) {
-      chan->ircnet_status &= ~(CHAN_ACTIVE | CHAN_PEND);
+      chan->ircnet_status = 0;
       dprintf(DP_MODE, "JOIN %s %s\n",
               (chan->name[0]) ? chan->name : chan->dname,
               chan->channel.key[0] ? chan->channel.key : chan->key_prot);

+ 7 - 4
src/mod/server.mod/servmsg.c

@@ -196,7 +196,8 @@ join_chans()
 {
   for (register struct chanset_t *chan = chanset; chan; chan = chan->next) {
     if (shouldjoin(chan)) {
-      chan->ircnet_status &= ~(CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING);
+      // Clear out all channel status flags
+      chan->ircnet_status = 0;
       dprintf(DP_SERVER, "JOIN %s %s\n", (chan->name[0]) ? chan->name : chan->dname,
                                          chan->channel.key[0] ? chan->channel.key : chan->key_prot);
       chan->ircnet_status |= CHAN_JOINING;
@@ -352,7 +353,7 @@ static int got442(char *from, char *msg)
     if (shouldjoin(chan) && !channel_joining(chan)) {
       putlog(LOG_MISC, chname, "Server says I'm not on channel: %s", chname);
       clear_channel(chan, 1);
-      chan->ircnet_status &= ~CHAN_ACTIVE;
+      chan->ircnet_status = 0;
       chan->ircnet_status |= CHAN_JOINING;
       dprintf(DP_MODE, "JOIN %s %s\n", chan->name,
 	      chan->channel.key[0] ? chan->channel.key : chan->key_prot);
@@ -1162,8 +1163,10 @@ static void kill_server(int idx, void *x)
   disconnect_server(idx, NO_LOST);	/* eof_server will lostdcc() it. */
 
   if (!segfaulted)		// don't bother if we've segfaulted, too many memory calls in this loop
-    for (struct chanset_t *chan = chanset; chan; chan = chan->next)
-       clear_channel(chan, 1);
+    for (struct chanset_t *chan = chanset; chan; chan = chan->next) {
+      chan->ircnet_status = 0;
+      clear_channel(chan, 1);
+    }
   /* A new server connection will be automatically initiated in
      about 2 seconds. */
 }