summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--handle.c16
-rw-r--r--reply.c5
2 files changed, 21 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 },
diff --git a/reply.c b/reply.c
index f89a8c9..5da4094 100644
--- a/reply.c
+++ b/reply.c
@@ -104,6 +104,11 @@ vreply(const struct Peer *peer, int number, va_list ap)
 		getnick(peer),
 		channel
 	), channel, _);
+	REPLY(409, WRITE(
+		":%s 409 %s :No origin specified",
+		hostname,
+		getnick(peer)
+	), _);
 	REPLY(411, WRITE(
 		":%s 411 %s :No recipient given (PRIVMSG)",
 		hostname,