degesch: log outcoming CTCPs
This commit is contained in:
parent
2f6974c7ca
commit
6003cc7138
45
degesch.c
45
degesch.c
@ -2656,6 +2656,33 @@ ctime_now (char buf[26])
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void irc_send_ctcp_reply (struct app_context *ctx, const char *recipient,
|
||||||
|
const char *format, ...) ATTRIBUTE_PRINTF (3, 4);
|
||||||
|
|
||||||
|
static void
|
||||||
|
irc_send_ctcp_reply (struct app_context *ctx,
|
||||||
|
const char *recipient, const char *format, ...)
|
||||||
|
{
|
||||||
|
struct str m;
|
||||||
|
str_init (&m);
|
||||||
|
|
||||||
|
va_list ap;
|
||||||
|
va_start (ap, format);
|
||||||
|
str_append_vprintf (&m, format, ap);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
|
irc_send (ctx, "NOTICE %s :\x01%s\x01", recipient, m.str);
|
||||||
|
|
||||||
|
char *text_utf8 = irc_to_utf8 (ctx, m.str);
|
||||||
|
char *recipient_utf8 = irc_to_utf8 (ctx, recipient);
|
||||||
|
str_free (&m);
|
||||||
|
|
||||||
|
buffer_send_status (ctx, ctx->server_buffer,
|
||||||
|
"CTCP reply to %s: %s", recipient_utf8, text_utf8);
|
||||||
|
free (text_utf8);
|
||||||
|
free (recipient_utf8);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
irc_handle_ctcp_request (struct app_context *ctx,
|
irc_handle_ctcp_request (struct app_context *ctx,
|
||||||
const struct irc_message *msg, struct ctcp_chunk *chunk)
|
const struct irc_message *msg, struct ctcp_chunk *chunk)
|
||||||
@ -2672,25 +2699,19 @@ irc_handle_ctcp_request (struct app_context *ctx,
|
|||||||
if (irc_is_channel (ctx, target))
|
if (irc_is_channel (ctx, target))
|
||||||
recipient = target;
|
recipient = target;
|
||||||
|
|
||||||
// TODO: log a "CTCP reply to <recipient>: <whatever>
|
|
||||||
// Probably abstract the irc_send call to something like
|
|
||||||
// irc_send_ctcp_reply (ctx, recipient, fmt, ...)
|
|
||||||
|
|
||||||
if (!strcmp (chunk->tag.str, "CLIENTINFO"))
|
if (!strcmp (chunk->tag.str, "CLIENTINFO"))
|
||||||
irc_send (ctx, "NOTICE %s :\x01" "CLIENTINFO %s %s %s %s\x01",
|
irc_send_ctcp_reply (ctx, recipient, "CLIENTINFO %s %s %s %s",
|
||||||
recipient, "PING", "VERSION", "TIME", "CLIENTINFO");
|
"PING", "VERSION", "TIME", "CLIENTINFO");
|
||||||
else if (!strcmp (chunk->tag.str, "PING"))
|
else if (!strcmp (chunk->tag.str, "PING"))
|
||||||
irc_send (ctx, "NOTICE %s :\x01" "PING %s\x01",
|
irc_send_ctcp_reply (ctx, recipient, "PING %s", chunk->text.str);
|
||||||
recipient, chunk->text.str);
|
|
||||||
else if (!strcmp (chunk->tag.str, "VERSION"))
|
else if (!strcmp (chunk->tag.str, "VERSION"))
|
||||||
{
|
{
|
||||||
struct utsname info;
|
struct utsname info;
|
||||||
if (uname (&info))
|
if (uname (&info))
|
||||||
LOG_LIBC_FAILURE ("uname");
|
LOG_LIBC_FAILURE ("uname");
|
||||||
else
|
else
|
||||||
irc_send (ctx, "NOTICE %s :\x01" "VERSION %s %s on %s %s\x01",
|
irc_send_ctcp_reply (ctx, recipient, "VERSION %s %s on %s %s",
|
||||||
recipient, PROGRAM_NAME, PROGRAM_VERSION,
|
PROGRAM_NAME, PROGRAM_VERSION, info.sysname, info.machine);
|
||||||
info.sysname, info.machine);
|
|
||||||
}
|
}
|
||||||
else if (!strcmp (chunk->tag.str, "TIME"))
|
else if (!strcmp (chunk->tag.str, "TIME"))
|
||||||
{
|
{
|
||||||
@ -2698,7 +2719,7 @@ irc_handle_ctcp_request (struct app_context *ctx,
|
|||||||
if (!ctime_now (buf))
|
if (!ctime_now (buf))
|
||||||
LOG_LIBC_FAILURE ("asctime_r");
|
LOG_LIBC_FAILURE ("asctime_r");
|
||||||
else
|
else
|
||||||
irc_send (ctx, "NOTICE %s :\x01" "TIME %s\x01", recipient, buf);
|
irc_send_ctcp_reply (ctx, recipient, "TIME %s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (nickname);
|
free (nickname);
|
||||||
|
Loading…
Reference in New Issue
Block a user