X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_endburst.c;h=46d51ae0a105ad8f84bc684ef35dcbb081ad982b;hb=refs%2Fheads%2Fupstream-ssl;hp=242614505d3219127a51669e48cc12cefea099a7;hpb=ae91ef6320f611af74e70a0db2620c338fbaa7d5;p=ircu2.10.12-pk.git diff --git a/ircd/m_endburst.c b/ircd/m_endburst.c index 2426145..46d51ae 100644 --- a/ircd/m_endburst.c +++ b/ircd/m_endburst.c @@ -79,24 +79,21 @@ * note: it is guaranteed that parv[0]..parv[parc-1] are all * non-NULL pointers. */ -#if 0 -/* - * No need to include handlers.h here the signatures must match - * and we don't need to force a rebuild of all the handlers everytime - * we add a new one to the list. --Bleep - */ -#include "handlers.h" -#endif /* 0 */ +#include "config.h" + +#include "channel.h" #include "client.h" #include "hash.h" #include "ircd.h" +#include "ircd_log.h" #include "ircd_reply.h" #include "ircd_string.h" +#include "msg.h" #include "numeric.h" #include "numnicks.h" #include "send.h" -#include +/* #include -- Now using assert in ircd_log.h */ /* * ms_end_of_burst - server message handler @@ -106,21 +103,36 @@ * This the last message in a net.burst. * It clears a flag for the server sending the burst. * + * As of 10.11, to fix a bug in the way BURST is processed, it also + * makes sure empty channels are deleted + * * parv[0] - sender prefix */ int ms_end_of_burst(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { + struct Channel *chan, *next_chan; + assert(0 != cptr); assert(0 != sptr); - if (!IsServer(sptr)) - return 0; - sendto_op_mask(SNO_NETWORK, "Completed net.burst from %s.", sptr->name); - sendto_serv_butone(cptr, "%s EB", NumServ(sptr)); + sendto_opmask_butone(0, SNO_NETWORK, "Completed net.burst from %C.", + sptr); + sendcmdto_serv_butone(sptr, CMD_END_OF_BURST, cptr, ""); ClearBurst(sptr); SetBurstAck(sptr); if (MyConnect(sptr)) - sendto_one(sptr, "%s EA", NumServ(&me)); + sendcmdto_one(&me, CMD_END_OF_BURST_ACK, sptr, ""); + + /* Count through channels... */ + for (chan = GlobalChannelList; chan; chan = next_chan) { + next_chan = chan->next; + if (!chan->members && (chan->mode.mode & MODE_BURSTADDED)) { + /* Newly empty channel, schedule it for removal. */ + chan->mode.mode &= ~MODE_BURSTADDED; + sub1_from_channel(chan); + } else + chan->mode.mode &= ~MODE_BURSTADDED; + } return 0; } @@ -138,57 +150,10 @@ int ms_end_of_burst_ack(struct Client *cptr, struct Client *sptr, int parc, char if (!IsServer(sptr)) return 0; - sendto_op_mask(SNO_NETWORK, "%s acknowledged end of net.burst.", sptr->name); - sendto_serv_butone(cptr, "%s EA", NumServ(sptr)); - ClearBurstAck(sptr); - - return 0; -} - - -#if 0 -/* - * m_end_of_burst - Added Xorath 6-14-96, rewritten by Run 24-7-96 - * - and fixed by record and Kev 8/1/96 - * - and really fixed by Run 15/8/96 :p - * This the last message in a net.burst. - * It clears a flag for the server sending the burst. - * - * parv[0] - sender prefix - */ -int m_end_of_burst(struct Client *cptr, struct Client *sptr, int parc, char **parv) -{ - if (!IsServer(sptr)) - return 0; - - sendto_op_mask(SNO_NETWORK, "Completed net.burst from %s.", sptr->name); - sendto_serv_butone(cptr, "%s EB", NumServ(sptr)); - ClearBurst(sptr); - SetBurstAck(sptr); - if (MyConnect(sptr)) - sendto_one(sptr, "%s EA", NumServ(&me)); - - return 0; -} -/* - * m_end_of_burst_ack - * - * This the acknowledge message of the `END_OF_BURST' message. - * It clears a flag for the server receiving the burst. - * - * parv[0] - sender prefix - */ -int m_end_of_burst_ack(struct Client *cptr, struct Client *sptr, int parc, char **parv) -{ - if (!IsServer(sptr)) - return 0; - - sendto_op_mask(SNO_NETWORK, "%s acknowledged end of net.burst.", sptr->name); - sendto_serv_butone(cptr, "%s EA", NumServ(sptr)); + sendto_opmask_butone(0, SNO_NETWORK, "%C acknowledged end of net.burst.", + sptr); + sendcmdto_serv_butone(sptr, CMD_END_OF_BURST_ACK, cptr, ""); ClearBurstAck(sptr); return 0; } - -#endif /* 0 */ -