summary refs log tree commit diff
path: root/handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'handle.c')
-rw-r--r--handle.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/handle.c b/handle.c
index 1b9f8e6..df36e1f 100644
--- a/handle.c
+++ b/handle.c
@@ -152,6 +152,21 @@ part(struct Message *msg, struct Peer *peer)
 }
 
 static int
+ping(struct Message *msg, struct Peer *peer)
+{
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 409), 0);
+
+	writef(
+		peer->fd,
+		":%s PONG :%s",
+		hostname,
+		msg->params[0]
+	);
+
+	return 0;
+}
+
+static int
 privmsg(struct Message *msg, struct Peer *peer)
 {
 	size_t i;
@@ -274,6 +289,7 @@ static struct Handler {
 	{ "nick", nick },
 	{ "notice", privmsg },
 	{ "part", part },
+	{ "ping", ping },
 	{ "privmsg", privmsg },
 	{ "quit", quit },
 	{ "user", user },