#include "modules.h"
#include "packet.h"
#include "chmode.h"
+#include "ratelimit.h"
static int m_join(struct Client *, struct Client *, int, const char **);
static int ms_join(struct Client *, struct Client *, int, const char **);
char *key, int *err)
{
int depth = 0, i;
- char *next = NULL;
+ const char *next = NULL;
/* The caller (m_join) is only interested in the reason
* for the original channel.
while (depth < 16)
{
+ if (next == NULL)
+ return NULL;
chptr = find_channel(next);
/* Can only forward to existing channels */
if (chptr == NULL)
i = can_join(source_p, chptr, key, &next);
if (i == 0)
return chptr;
- if (next == NULL)
- return NULL;
depth++;
}
if(moduledata.approved != 0)
{
+#ifdef XXX_NOTYET
sendto_one(source_p, form_str(moduledata.approved),
me.name, source_p->name, name);
+#endif
continue;
}
* see extensions/chm_operonly.c for other comments on this
* -- dwr
*/
+#ifdef XXX_NOTYET
if(i != ERR_CUSTOM)
sendto_one(source_p, form_str(i), me.name, source_p->name, name);
-
+#endif
continue;
}
else if(chptr != chptr2)
}
chptr->join_count++;
+ /* credit user for join */
+ credit_client_join(source_p);
+
/* we send the user their join here, because we could have to
* send a mode out next.
*/
sendto_one(source_p, form_str(RPL_TOPICWHOTIME),
me.name, source_p->name, chptr->chname,
- chptr->topic_info, chptr->topic_time);
+ chptr->topic_info,
+ (unsigned long)chptr->topic_time);
}
channel_member_names(chptr, source_p, 1);
time_t newts;
int isnew;
int keep_our_modes = YES;
- int keep_new_modes = YES;
rb_dlink_node *ptr, *next_ptr;
/* special case for join 0 */
keep_our_modes = NO;
chptr->channelts = newts;
}
- else
- keep_new_modes = NO;
/* Lost the TS, other side wins, so remove modes on this side */
if(!keep_our_modes)
banptr = ptr->data;
/* trailing space, and the mode letter itself */
- plen = strlen(banptr->banstr) + 2;
+ plen = strlen(banptr->banstr) +
+ (banptr->forward ? strlen(banptr->forward) + 1 : 0) + 2;
if(count >= MAXMODEPARAMS || (cur_len + plen) > BUFSIZE - 4)
{
*mbuf++ = c;
cur_len += plen;
- pbuf += rb_sprintf(pbuf, "%s ", banptr->banstr);
+ if (banptr->forward)
+ pbuf += rb_sprintf(pbuf, "%s$%s ", banptr->banstr, banptr->forward);
+ else
+ pbuf += rb_sprintf(pbuf, "%s ", banptr->banstr);
count++;
free_ban(banptr);