degesch: fix /ctcp with CAP echo-message
This commit is contained in:
parent
a1fa9d187e
commit
db6939bd60
35
degesch.c
35
degesch.c
|
@ -2554,6 +2554,11 @@ log_full (struct app_context *ctx, struct server *s, struct buffer *buffer,
|
||||||
#define log_outcoming_action(s, buffer, who, text) \
|
#define log_outcoming_action(s, buffer, who, text) \
|
||||||
log_server ((s), (buffer), 0, " #a*#r #n #m", ATTR_ACTION, (who), (text))
|
log_server ((s), (buffer), 0, " #a*#r #n #m", ATTR_ACTION, (who), (text))
|
||||||
|
|
||||||
|
#define log_ctcp_query(s, target, tag) \
|
||||||
|
log_server_status ((s), (s)->buffer, "CTCP query to #S: #S", target, tag)
|
||||||
|
#define log_ctcp_reply(s, target, reply /* freed! */) \
|
||||||
|
log_server_status ((s), (s)->buffer, "CTCP reply to #S: #&S", target, reply)
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
static struct buffer *
|
static struct buffer *
|
||||||
|
@ -4593,6 +4598,11 @@ static void
|
||||||
irc_handle_ctcp_reply (struct server *s,
|
irc_handle_ctcp_reply (struct server *s,
|
||||||
const struct irc_message *msg, struct ctcp_chunk *chunk)
|
const struct irc_message *msg, struct ctcp_chunk *chunk)
|
||||||
{
|
{
|
||||||
|
const char *target = msg->params.vector[0];
|
||||||
|
if (irc_is_this_us (s, msg->prefix))
|
||||||
|
log_ctcp_reply (s, target,
|
||||||
|
xstrdup_printf ("%s %s", chunk->tag.str, chunk->text.str));
|
||||||
|
else
|
||||||
log_server_status (s, s->buffer, "CTCP reply from #n: #S #S",
|
log_server_status (s, s->buffer, "CTCP reply from #n: #S #S",
|
||||||
msg->prefix, chunk->tag.str, chunk->text.str);
|
msg->prefix, chunk->tag.str, chunk->text.str);
|
||||||
}
|
}
|
||||||
|
@ -4716,24 +4726,26 @@ irc_send_ctcp_reply (struct server *s,
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
irc_send (s, "NOTICE %s :\x01%s\x01", recipient, m.str);
|
irc_send (s, "NOTICE %s :\x01%s\x01", recipient, m.str);
|
||||||
// FIXME: CAP echo-message?
|
if (!s->cap_echo_message)
|
||||||
log_server_status (s, s->buffer,
|
log_ctcp_reply (s, recipient, str_steal (&m));
|
||||||
"CTCP reply to #S: #&S", recipient, str_steal (&m));
|
else
|
||||||
|
str_free (&m);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
irc_handle_ctcp_request (struct server *s,
|
irc_handle_ctcp_request (struct server *s,
|
||||||
const struct irc_message *msg, struct ctcp_chunk *chunk)
|
const struct irc_message *msg, struct ctcp_chunk *chunk)
|
||||||
{
|
{
|
||||||
char *nickname = irc_cut_nickname (msg->prefix);
|
const char *target = msg->params.vector[0];
|
||||||
|
if (irc_is_this_us (s, msg->prefix))
|
||||||
|
log_ctcp_query (s, target, chunk->tag.str);
|
||||||
|
|
||||||
log_server_status (s, s->buffer,
|
log_server_status (s, s->buffer,
|
||||||
"CTCP requested by #n: #S", nickname, chunk->tag.str);
|
"CTCP requested by #n: #S", msg->prefix, chunk->tag.str);
|
||||||
|
|
||||||
const char *target = msg->params.vector[0];
|
char *recipient = irc_is_channel (s, target)
|
||||||
const char *recipient = nickname;
|
? irc_cut_nickname (msg->prefix)
|
||||||
if (irc_is_channel (s, target))
|
: xstrdup (target);
|
||||||
recipient = target;
|
|
||||||
|
|
||||||
if (!strcmp (chunk->tag.str, "CLIENTINFO"))
|
if (!strcmp (chunk->tag.str, "CLIENTINFO"))
|
||||||
irc_send_ctcp_reply (s, recipient, "CLIENTINFO %s %s %s %s",
|
irc_send_ctcp_reply (s, recipient, "CLIENTINFO %s %s %s %s",
|
||||||
|
@ -4758,7 +4770,7 @@ irc_handle_ctcp_request (struct server *s,
|
||||||
irc_send_ctcp_reply (s, recipient, "TIME %s", buf);
|
irc_send_ctcp_reply (s, recipient, "TIME %s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (nickname);
|
free (recipient);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -6366,7 +6378,8 @@ handle_command_ctcp (struct handler_args *a)
|
||||||
else
|
else
|
||||||
irc_send (a->s, "PRIVMSG %s :\x01%s\x01", target, tag);
|
irc_send (a->s, "PRIVMSG %s :\x01%s\x01", target, tag);
|
||||||
|
|
||||||
log_server_status (a->s, a->s->buffer, "CTCP query to #S: #S", target, tag);
|
if (!a->s->cap_echo_message)
|
||||||
|
log_ctcp_query (a->s, target, tag);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue