diff options
Diffstat (limited to 'handle.c')
| -rw-r--r-- | handle.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/handle.c b/handle.c index 8e91404..9e8cb5f 100644 --- a/handle.c +++ b/handle.c @@ -282,6 +282,28 @@ quit(struct Message *msg, struct Peer *peer) } static int +setcreation(struct Message *msg, struct Peer *peer) +{ + ensure(peer->type == CONFIG, reply(peer, 481, "You're not a config file"), 0); + ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0); + + strlcpy(creation, msg->params[0], sizeof(creation)); + + return 0; +} + +static int +setinfo(struct Message *msg, struct Peer *peer) +{ + ensure(peer->type == CONFIG, reply(peer, 481, "You're not a config file"), 0); + ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0); + + strlcpy(info, msg->params[0], sizeof(info)); + + return 0; +} + +static int user(struct Message *msg, struct Peer *peer) { size_t i; @@ -304,6 +326,45 @@ user(struct Message *msg, struct Peer *peer) } static int +whois(struct Message *msg, struct Peer *peer) +{ + size_t i; + + ensure(peer->type, reply(peer, 451), 0); + ensure(msg->params[0] && *msg->params[0], reply(peer, 431), 0); + + for (i = 0; i < peers_c; ++i) + if (!strcmp(msg->params[0], peers[i].nick)) + break; + ensure(i != peers_c, reply(peer, 401, msg->params[0]), 0); + + reply( + peer, + 311, + peers[i].nick, + peers[i].user, + peers[i].host, + peers[i].real + ); + reply( + peer, + 312, + peers[i].nick, + hostname, + info + ); + if (peers[i].modes & OPER) + reply( + peer, + 313, + peers[i].nick + ); + reply(peer, 318, peer[i].nick); + + return 0; +} + +static int default_handler(struct Message *msg, struct Peer *peer) { ensure(peer->type, (void)0, 0); @@ -326,7 +387,10 @@ static struct Handler { { "pong", pong }, { "privmsg", privmsg }, { "quit", quit }, + { "setcreation", setcreation }, + { "setinfo", setinfo }, { "user", user }, + { "whois", whois }, }; Handler * |