diff options
| -rw-r--r-- | handle.c | 25 | ||||
| -rw-r--r-- | ircd.h | 1 | ||||
| -rw-r--r-- | writef.c | 22 |
3 files changed, 26 insertions, 22 deletions
diff --git a/handle.c b/handle.c index 0515ac2..038a300 100644 --- a/handle.c +++ b/handle.c @@ -210,39 +210,20 @@ privmsg(struct Message *msg, struct Peer *peer) static int quit(struct Message *msg, struct Peer *peer) { - size_t i, j; + size_t i; ensure(peer->type, (void)0, 1) - writef( - peer->fd, + announce( + peer, ":%s!%s@%s QUIT :%s", getnick(peer), peer->user, peer->host, msg->params[0] ? msg->params[0] : "Client Quit" ); - for (i = 0; i < peer->channels_c; ++i) - { channel_exit(peer->channels[i], peer); - for (j = 0; j < peer->channels[i]->users_c; ++j) - peer->channels[i]->users[j]->flags |= ANNOUNCE; - } - - for (i = 0; i < peers_c; ++i) - if (peers[i].flags & ANNOUNCE) - { - writef( - peers[i].fd, - ":%s!%s@%s QUIT :%s", - getnick(peer), - peer->user, - peer->host, - msg->params[0] ? msg->params[0] : "Client Quit" - ); - peers[i].flags &= ~ANNOUNCE; - } return 1; } diff --git a/ircd.h b/ircd.h index 8def73a..0cb20dc 100644 --- a/ircd.h +++ b/ircd.h @@ -98,6 +98,7 @@ int parse_message(char *buf, struct Message *msg); int handle(struct Peer *peer); int reply(const struct Peer *peer, int number, ...); Handler *find(const char *command); +void announce(struct Peer *peer, const char *fmt, ...); int writef(int fd, const char *fmt, ...); int writechanf(const struct Peer *except, const struct Channel *channel, const char *fmt, ...); void ircd(void); diff --git a/writef.c b/writef.c index e010ca4..c7baa0a 100644 --- a/writef.c +++ b/writef.c @@ -65,3 +65,25 @@ writechanf(const struct Peer *except, const struct Channel *channel, const char return count; } + +void +announce(struct Peer *peer, const char *fmt, ...) +{ + va_list args; + size_t i, j; + + va_start(args, fmt); + vstoref(fmt, args); + va_end(args); + + for (i = 0; i < peer->channels_c; ++i) + for (j = 0; j < peer->channels[i]->users_c; ++j) + peer->channels[i]->users[j]->flags |= ANNOUNCE; + + for (i = 0; i < peers_c; ++i) + if (peers[i].flags & ANNOUNCE) + { + write(peers[i].fd, buf, written); + peers[i].flags &= ~ANNOUNCE; + } +} |