changeset 1150:4c9d2d5d126f

irccd: add CTCP support in Irccd.Server, closes #2532
author David Demelier <markand@malikania.fr>
date Sun, 06 Feb 2022 15:03:59 +0100
parents 323d6d34ec1b
children b6a0d9515c82
files irccd/jsapi-server.c man/irccd-api-server.3
diffstat 2 files changed, 45 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/irccd/jsapi-server.c	Fri Feb 04 09:56:43 2022 +0100
+++ b/irccd/jsapi-server.c	Sun Feb 06 15:03:59 2022 +0100
@@ -144,6 +144,30 @@
 	duk_pop_n(ctx, 2);
 }
 
+static inline void
+get_ctcp(duk_context *ctx, struct irc_server *s)
+{
+	duk_get_prop_string(ctx, 0, "ctcp");
+
+	if (!duk_is_object(ctx, -1)) {
+		duk_pop(ctx);
+		return;
+	}
+
+	duk_get_prop_string(ctx, -1, "version");
+
+	if (duk_is_string(ctx, -1))
+		irc_util_strlcpy(s->ident.ctcpversion, duk_to_string(ctx, -1), sizeof (s->ident.ctcpversion));
+
+	duk_pop(ctx);
+	duk_get_prop_string(ctx, -1, "source");
+
+	if (duk_is_string(ctx, -1))
+		irc_util_strlcpy(s->ident.ctcpsource, duk_to_string(ctx, -1), sizeof (s->ident.ctcpsource));
+
+	duk_pop_2(ctx);
+}
+
 static int
 Server_prototype_info(duk_context *ctx)
 {
@@ -170,6 +194,14 @@
 	duk_push_string(ctx, s->ident.username);
 	duk_put_prop_string(ctx, -2, "username");
 
+	/* CTCP. */
+	duk_push_object(ctx);
+	duk_push_string(ctx, s->ident.ctcpversion);
+	duk_put_prop_string(ctx, -2, "version");
+	duk_push_string(ctx, s->ident.ctcpsource);
+	duk_put_prop_string(ctx, -2, "source");
+	duk_put_prop_string(ctx, -2, "ctcp");
+
 	/* Prefixes. */
 	duk_push_array(ctx);
 
@@ -408,6 +440,7 @@
 	get_ip(ctx, s);
 	get_ssl(ctx, s);
 	get_channels(ctx, s);
+	get_ctcp(ctx, s);
 
 	irc_server_incref(s);
 
--- a/man/irccd-api-server.3	Fri Feb 04 09:56:43 2022 +0100
+++ b/man/irccd-api-server.3	Sun Feb 06 15:03:59 2022 +0100
@@ -107,6 +107,10 @@
 Real name, (Optional, default: IRC Client Daemon).
 .It Fa prefix No (string)
 Plugin prefix character, (Optional, default: "!").
+.It Fa ctcp No (object)
+An object with CTCP variables to send, see
+.Fn Irccd.Server.prototype.info
+method for possible values.
 .El
 .Pp
 .\" Irccd.Server.prototype.info
@@ -144,6 +148,14 @@
 The user name.
 .It Va nickname No (string)
 The current nickname.
+.It Va ctcp No (object)
+An object with CTCP properties, currently:
+.Bl -tag -width "Va version"
+.It Va version
+User version.
+.It Va source
+SCM source.
+.El
 .El
 .Pp
 .\" Irccd.Server.prototype.invite