aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-03-21 13:46:32 +0100
committerMarius Halden <marius.h@lden.org>2016-03-29 15:41:14 +0200
commite5a81f6ab3b9fa74ba1ac55524826469ed16b25a (patch)
tree4ee8438db2b55842967c880ed8d5f040bf4c7371
parent64b42638fae4c2af5d334e64e96d748841f8618e (diff)
Add irc_send_tagged_msg* to send tagged messagestagged_msg
Add support for tagged messages by adding the functions irc_send_tagged_msg*, the old irc_send_msg* functions are now wrappers for these functions without any tags.
-rw-r--r--irc.h6
-rw-r--r--irc_send.c56
2 files changed, 54 insertions, 8 deletions
diff --git a/irc.h b/irc.h
index 2e0cc3d5..49e17c98 100644
--- a/irc.h
+++ b/irc.h
@@ -339,6 +339,12 @@ void irc_send_who(irc_t *irc, GSList *l, const char *channel);
void irc_send_msg(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix);
void irc_send_msg_raw(irc_user_t *iu, const char *type, const char *dst, const char *msg);
void irc_send_msg_f(irc_user_t *iu, const char *type, const char *dst, const char *format, ...) G_GNUC_PRINTF(4, 5);
+
+void irc_send_tagged_msg(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix, const char *tags);
+void irc_send_tagged_msg_raw(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *tags);
+void irc_send_tagged_msg_f(irc_user_t *iu, const char *type, const char *dst, const char *tags, const char *format, ...) G_GNUC_PRINTF(5, 6);
+void irc_send_tagged_msg_vf(irc_user_t *iu, const char *type, const char *dst, const char *tags, const char *format, va_list params);
+
void irc_send_nick(irc_user_t *iu, const char *new_nick);
void irc_send_channel_user_mode_diff(irc_channel_t *ic, irc_user_t *iu,
irc_channel_user_flags_t old_flags, irc_channel_user_flags_t new_flags);
diff --git a/irc_send.c b/irc_send.c
index adf8211e..9932bc27 100644
--- a/irc_send.c
+++ b/irc_send.c
@@ -366,6 +366,11 @@ void irc_send_who(irc_t *irc, GSList *l, const char *channel)
void irc_send_msg(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix)
{
+ irc_send_tagged_msg(iu, type, dst, msg, prefix, NULL);
+}
+
+void irc_send_tagged_msg(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *prefix, const char *tags)
+{
char last = 0;
const char *s = msg, *line = msg;
char raw_msg[strlen(msg) + 1024];
@@ -385,14 +390,14 @@ void irc_send_msg(irc_user_t *iu, const char *type, const char *dst, const char
strcpy(raw_msg, "\001ACTION ");
strncat(raw_msg, line + 4, s - line - 4);
strcat(raw_msg, "\001");
- irc_send_msg_raw(iu, type, dst, raw_msg);
+ irc_send_tagged_msg_raw(iu, type, dst, raw_msg, tags);
} else {
*raw_msg = '\0';
if (prefix && *prefix) {
strcpy(raw_msg, prefix);
}
strncat(raw_msg, line, s - line);
- irc_send_msg_raw(iu, type, dst, raw_msg);
+ irc_send_tagged_msg_raw(iu, type, dst, raw_msg, tags);
}
line = s + 1;
}
@@ -402,21 +407,56 @@ void irc_send_msg(irc_user_t *iu, const char *type, const char *dst, const char
void irc_send_msg_raw(irc_user_t *iu, const char *type, const char *dst, const char *msg)
{
- irc_write(iu->irc, ":%s!%s@%s %s %s :%s",
- iu->nick, iu->user, iu->host, type, dst, msg && *msg ? msg : " ");
+ irc_send_tagged_msg_raw(iu, type, dst, msg, NULL);
+}
+
+void irc_send_tagged_msg_raw(irc_user_t *iu, const char *type, const char *dst, const char *msg, const char *tags)
+{
+ if (!tags || !*tags) {
+ irc_write(iu->irc, ":%s!%s@%s %s %s :%s",
+ iu->nick, iu->user, iu->host,
+ type, dst, msg && *msg ? msg : " ");
+ } else {
+ irc_write(iu->irc, "@%s :%s!%s@%s %s %s :%s",
+ tags, iu->nick, iu->user, iu->host,
+ type, dst, msg && *msg ? msg : " ");
+ }
}
void irc_send_msg_f(irc_user_t *iu, const char *type, const char *dst, const char *format, ...)
{
- char text[IRC_MAX_LINE];
va_list params;
va_start(params, format);
- g_vsnprintf(text, IRC_MAX_LINE, format, params);
+ irc_send_tagged_msg_vf(iu, type, dst, NULL, format, params);
+ va_end(params);
+
+}
+
+void irc_send_tagged_msg_f(irc_user_t *iu, const char *type, const char *dst, const char *tags, const char *format, ...)
+{
+ va_list params;
+
+ va_start(params, format);
+ irc_send_tagged_msg_vf(iu, type, dst, tags, format, params);
va_end(params);
+}
- irc_write(iu->irc, ":%s!%s@%s %s %s :%s",
- iu->nick, iu->user, iu->host, type, dst, text);
+void irc_send_tagged_msg_vf(irc_user_t *iu, const char *type, const char *dst, const char *tags, const char *format, va_list params)
+{
+ char text[IRC_MAX_LINE];
+
+ g_vsnprintf(text, IRC_MAX_LINE, format, params);
+
+ if (!tags || !*tags) {
+ irc_write(iu->irc, ":%s!%s@%s %s %s :%s",
+ iu->nick, iu->user, iu->host,
+ type, dst, text);
+ } else {
+ irc_write(iu->irc, "@%s :%s!%s@%s %s %s :%s",
+ tags, iu->nick, iu->user, iu->host,
+ type, dst, text);
+ }
}
void irc_send_nick(irc_user_t *iu, const char *new)