Преглед изворни кода

* Use 1 function for joining chans to ensure proper checks

Bryan Drewery пре 16 година
родитељ
комит
d33c0017b2

+ 4 - 8
src/mod/channels.mod/channels.c

@@ -388,10 +388,8 @@ check_slowjoinpart(struct chanset_t *chan)
   } else if ((chan->channel.jointime) && (chan->channel.jointime < now)) {
   } else if ((chan->channel.jointime) && (chan->channel.jointime < now)) {
       chan->status &= ~CHAN_INACTIVE;
       chan->status &= ~CHAN_INACTIVE;
       chan->channel.jointime = 0;
       chan->channel.jointime = 0;
-    if (shouldjoin(chan) && !channel_active(chan) && !channel_joining(chan)) {
-      dprintf(DP_MODE, "JOIN %s %s\n", chan->dname, chan->key_prot);
-      chan->ircnet_status |= CHAN_JOINING;
-    }
+    if (shouldjoin(chan) && !channel_active(chan))
+      join_chan(chan);
   } else if (channel_closed(chan)) {
   } else if (channel_closed(chan)) {
     enforce_closed(chan);
     enforce_closed(chan);
   }
   }
@@ -483,10 +481,8 @@ static void got_jn(int idx, char *code, char *par)
   if (chan->channel.jointime && channel_inactive(chan)) {
   if (chan->channel.jointime && channel_inactive(chan)) {
     chan->status &= ~CHAN_INACTIVE;
     chan->status &= ~CHAN_INACTIVE;
     chan->channel.jointime = 0;
     chan->channel.jointime = 0;
-    if (!conf.bot->hub && shouldjoin(chan) && !channel_active(chan) && !channel_joining(chan)) {
-      dprintf(DP_MODE, "JOIN %s %s\n", chan->name, chan->key_prot);
-      chan->ircnet_status |= CHAN_JOINING;
-    }
+    if (!conf.bot->hub && shouldjoin(chan) && !channel_active(chan))
+      join_chan(chan);
   }
   }
 }
 }
 #endif
 #endif

+ 2 - 4
src/mod/channels.mod/cmdschan.c

@@ -605,10 +605,8 @@ static void cmd_slowjoin(int idx, char *par)
 
 
   dprintf(idx, "%i bots joining %s during the next %i seconds\n", count, chan->dname, delay);
   dprintf(idx, "%i bots joining %s during the next %i seconds\n", count, chan->dname, delay);
 
 
-  if (!conf.bot->hub && shouldjoin(chan) && !channel_joining(chan)) {
-    dprintf(DP_MODE, "JOIN %s %s\n", chan->name, chan->key_prot);
-    chan->ircnet_status |= CHAN_JOINING;
-  }
+  if (!conf.bot->hub && shouldjoin(chan))
+    join_chan(chan);
 }
 }
 
 
 static void cmd_slowpart(int idx, char *par)
 static void cmd_slowpart(int idx, char *par)

+ 3 - 7
src/mod/channels.mod/tclchan.c

@@ -805,12 +805,8 @@ int channel_modify(char *result, struct chanset_t *chan, int items, char **item,
     if ((old_status ^ chan->status) & (CHAN_INACTIVE | CHAN_BACKUP)) {
     if ((old_status ^ chan->status) & (CHAN_INACTIVE | CHAN_BACKUP)) {
       if (!shouldjoin(chan) && (chan->ircnet_status & (CHAN_ACTIVE | CHAN_PEND)))
       if (!shouldjoin(chan) && (chan->ircnet_status & (CHAN_ACTIVE | CHAN_PEND)))
         dprintf(DP_SERVER, "PART %s\n", chan->name[0] ? chan->name : chan->dname);
         dprintf(DP_SERVER, "PART %s\n", chan->name[0] ? chan->name : chan->dname);
-      if (shouldjoin(chan) && !(chan->ircnet_status & (CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING))) {
-        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;
+      if (shouldjoin(chan) && !(chan->status & (CHAN_ACTIVE | CHAN_PEND | CHAN_JOINING))) {
+        join_chan(chan);
       }
       }
     }
     }
     if (me_op(chan)) {
     if (me_op(chan)) {
@@ -1038,6 +1034,6 @@ int channel_add(char *result, char *newname, char *options, bool isdefault)
 
 
   free(item);
   free(item);
   if (join && shouldjoin(chan))
   if (join && shouldjoin(chan))
-    dprintf(DP_SERVER, "JOIN %s %s\n", chan->dname, chan->key_prot);
+    join_chan(chan);
   return ret;
   return ret;
 }
 }

+ 11 - 25
src/mod/irc.mod/chan.c

@@ -2022,10 +2022,7 @@ static int got315(char *from, char *msg)
     putlog(LOG_MISC | LOG_JOIN, chan->dname, "Oops, I'm not really on %s.", chan->dname);
     putlog(LOG_MISC | LOG_JOIN, chan->dname, "Oops, I'm not really on %s.", chan->dname);
     clear_channel(chan, 1);
     clear_channel(chan, 1);
     chan->ircnet_status &= ~CHAN_ACTIVE;
     chan->ircnet_status &= ~CHAN_ACTIVE;
-    chan->ircnet_status |= CHAN_JOINING;
-    dprintf(DP_MODE, "JOIN %s %s\n",
-	    (chan->name[0]) ? chan->name : chan->dname,
-	    chan->channel.key[0] ? chan->channel.key : chan->key_prot);
+    join_chan(chan);
   } else {
   } else {
     if (me_op(chan))
     if (me_op(chan))
       recheck_channel(chan, 2);
       recheck_channel(chan, 2);
@@ -2252,8 +2249,8 @@ static int got403(char *from, char *msg)
       putlog(LOG_MISC, "*",
       putlog(LOG_MISC, "*",
              "Unique channel %s does not exist... Attempting to join with "
              "Unique channel %s does not exist... Attempting to join with "
              "short name.", chname);
              "short name.", chname);
-      dprintf(DP_SERVER, "JOIN %s\n", chan->dname);
-      chan->ircnet_status |= CHAN_JOINING;
+      chan->name[0] = 0;
+      join_chan(chan);
     } else {
     } else {
       /* We have found the channel, so the server has given us the short
       /* We have found the channel, so the server has given us the short
        * name. Prefix another '!' to it, and attempt the join again...
        * name. Prefix another '!' to it, and attempt the join again...
@@ -2391,7 +2388,7 @@ static int got475(char *from, char *msg)
     if (chan->channel.key[0]) {
     if (chan->channel.key[0]) {
       free(chan->channel.key);
       free(chan->channel.key);
       chan->channel.key = (char *) my_calloc(1, 1);
       chan->channel.key = (char *) my_calloc(1, 1);
-      dprintf(DP_MODE, "JOIN %s %s\n", chan->dname, chan->key_prot);
+      join_chan(chan);
     } else {
     } else {
       request_in(chan);
       request_in(chan);
 /* need: key */
 /* need: key */
@@ -2429,8 +2426,7 @@ static int gotinvite(char *from, char *msg)
     if (channel_pending(chan) || channel_active(chan))
     if (channel_pending(chan) || channel_active(chan))
       dprintf(DP_HELP, "NOTICE %s :I'm already here.\n", nick);
       dprintf(DP_HELP, "NOTICE %s :I'm already here.\n", nick);
     else if (shouldjoin(chan))
     else if (shouldjoin(chan))
-      dprintf(DP_MODE, "JOIN %s %s\n", (chan->name[0]) ? chan->name : chan->dname,
-              chan->channel.key[0] ? chan->channel.key : chan->key_prot);
+      join_chan(chan);
   }
   }
   return 0;
   return 0;
 }
 }
@@ -2814,12 +2810,8 @@ static int gotpart(char *from, char *msg)
     if (match_my_nick(nick)) {
     if (match_my_nick(nick)) {
       clear_channel(chan, 1);
       clear_channel(chan, 1);
       chan->ircnet_status = 0;
       chan->ircnet_status = 0;
-      if (shouldjoin(chan)) {
-	dprintf(DP_MODE, "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;
-      }
+      if (shouldjoin(chan))
+        join_chan(chan);
     } else
     } else
       check_lonely_channel(chan);
       check_lonely_channel(chan);
   }
   }
@@ -2844,11 +2836,8 @@ static int gotkick(char *from, char *origmsg)
 
 
   if (match_my_nick(nick) && channel_pending(chan)) {
   if (match_my_nick(nick) && channel_pending(chan)) {
     chan->ircnet_status = 0;
     chan->ircnet_status = 0;
-    if (shouldjoin(chan) && !channel_joining(chan)) {
-      chan->ircnet_status |= CHAN_JOINING;
-      dprintf(DP_MODE, "JOIN %s %s\n",
-              (chan->name[0]) ? chan->name : chan->dname,
-              chan->channel.key[0] ? chan->channel.key : chan->key_prot);
+    if (shouldjoin(chan)) {
+      join_chan(chan);
       clear_channel(chan, 1);
       clear_channel(chan, 1);
     } else
     } else
       clear_channel(chan, 0);
       clear_channel(chan, 0);
@@ -2894,11 +2883,8 @@ static int gotkick(char *from, char *origmsg)
     /* Kicked ME?!? the sods! */
     /* Kicked ME?!? the sods! */
     if (match_my_nick(nick)) {
     if (match_my_nick(nick)) {
       chan->ircnet_status = 0;
       chan->ircnet_status = 0;
-      if (shouldjoin(chan) && !channel_joining(chan)) {
-        dprintf(DP_MODE, "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;
+      if (shouldjoin(chan)) {
+        join_chan(chan);
         clear_channel(chan, 1);
         clear_channel(chan, 1);
       } else
       } else
         clear_channel(chan, 0);
         clear_channel(chan, 0);

+ 12 - 6
src/mod/irc.mod/irc.c

@@ -605,8 +605,7 @@ getin_request(char *botnick, char *code, char *par)
         chan->channel.key = strdup(nick);
         chan->channel.key = strdup(nick);
 
 
         putlog(LOG_GETIN, "*", "Got key for %s from %s (%s) - Joining", chan->dname, botnick, chan->channel.key);
         putlog(LOG_GETIN, "*", "Got key for %s from %s (%s) - Joining", chan->dname, botnick, chan->channel.key);
-        dprintf(DP_MODE, "JOIN %s %s\n", chan->name[0] ? chan->name : chan->dname, chan->channel.key);
-        chan->ircnet_status |= CHAN_JOINING;
+        join_chan(chan);
       } else {
       } else {
         putlog(LOG_GETIN, "*", "Got key for %s from %s - I'm already in the channel", chan->dname, botnick);
         putlog(LOG_GETIN, "*", "Got key for %s from %s - I'm already in the channel", chan->dname, botnick);
       }
       }
@@ -1346,6 +1345,16 @@ static void send_chan_who(int queue, struct chanset_t *chan) {
       dprintf(queue, "WHO %s\n", chan->name);
       dprintf(queue, "WHO %s\n", chan->name);
 }
 }
 
 
+void join_chan(struct chanset_t* chan, int idx) {
+  if (shouldjoin(chan) && !channel_joining(chan)) {
+    dprintf(idx, "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;
+    clear_channel(chan, 1);
+  }
+}
+
 /* If i'm the only person on the channel, and i'm not op'd,
 /* If i'm the only person on the channel, and i'm not op'd,
  * might as well leave and rejoin. If i'm NOT the only person
  * might as well leave and rejoin. If i'm NOT the only person
  * on the channel, but i'm still not op'd, demand ops.
  * on the channel, but i'm still not op'd, demand ops.
@@ -1590,10 +1599,7 @@ check_expired_chanstuff(struct chanset_t *chan)
     }
     }
     check_lonely_channel(chan);
     check_lonely_channel(chan);
   } else if (shouldjoin(chan) && !channel_pending(chan)) {
   } else if (shouldjoin(chan) && !channel_pending(chan)) {
-    dprintf(DP_MODE, "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;
+    join_chan(chan);
   }
   }
 }
 }
 
 

+ 2 - 0
src/mod/irc.mod/irc.h

@@ -109,6 +109,8 @@ static void get_channel_masks(struct chanset_t* chan);
 
 
 #endif /* MAKING_IRC */
 #endif /* MAKING_IRC */
 
 
+void join_chan(struct chanset_t* chan, int idx = DP_MODE);
+
 int check_bind_authc(char *, Auth *, char *, char *);
 int check_bind_authc(char *, Auth *, char *, char *);
 void notice_invite(struct chanset_t *, char *, char *, char *, bool);
 void notice_invite(struct chanset_t *, char *, char *, char *, bool);
 void real_add_mode(struct chanset_t *, const char, const char, const char *, bool);
 void real_add_mode(struct chanset_t *, const char, const char, const char *, bool);

+ 2 - 6
src/mod/server.mod/servmsg.c

@@ -207,9 +207,7 @@ join_chans()
     if (shouldjoin(chan)) {
     if (shouldjoin(chan)) {
       // Clear out all channel status flags
       // Clear out all channel status flags
       chan->ircnet_status = 0;
       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;
+      join_chan(chan, DP_SERVER);
     }
     }
   }
   }
 }
 }
@@ -382,9 +380,7 @@ static int got442(char *from, char *msg)
       putlog(LOG_MISC, chname, "Server says I'm not on channel: %s", chname);
       putlog(LOG_MISC, chname, "Server says I'm not on channel: %s", chname);
       clear_channel(chan, 1);
       clear_channel(chan, 1);
       chan->ircnet_status = 0;
       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);
+      join_chan(chan);
     }
     }
 
 
   return 0;
   return 0;