# HG changeset patch # User David Demelier # Date 1644156239 -3600 # Node ID 4c9d2d5d126f1f6865fb33112405a104679419a9 # Parent 323d6d34ec1bfa945dd21301559ecae611d78426 irccd: add CTCP support in Irccd.Server, closes #2532 diff -r 323d6d34ec1b -r 4c9d2d5d126f irccd/jsapi-server.c --- 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); diff -r 323d6d34ec1b -r 4c9d2d5d126f man/irccd-api-server.3 --- 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