From d0397f3da5ca659d86590e8730e6765609ef56ca Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 26 Mar 2016 15:50:16 +0000 Subject: Added stanza send hooks for plugins --- src/xmpp/presence.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'src/xmpp/presence.c') diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index fc723c03..c3b351b4 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -59,6 +59,7 @@ #include "xmpp/connection.h" #include "xmpp/stanza.h" #include "xmpp/xmpp.h" +#include "plugins/plugins.h" static Autocomplete sub_requests_ac; @@ -75,6 +76,9 @@ static int _presence_error_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const void _send_caps_request(char *node, char *caps_key, char *id, char *from); static void _send_room_presence(xmpp_conn_t *conn, xmpp_stanza_t *presence); +static void _send_presence_stanza(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza); +static void _send_iq_stanza(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza); + void presence_sub_requests_init(void) { @@ -134,7 +138,7 @@ presence_subscription(const char *const jid, const jabber_subscr_t action) xmpp_stanza_set_name(presence, STANZA_NAME_PRESENCE); xmpp_stanza_set_type(presence, type); xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, jidp->barejid); - xmpp_send(conn, presence); + _send_presence_stanza(conn, presence); xmpp_stanza_release(presence); jid_destroy(jidp); @@ -239,7 +243,7 @@ presence_send(const resource_presence_t presence_type, const char *const msg, co stanza_attach_last_activity(ctx, presence, idle); } stanza_attach_caps(ctx, presence); - xmpp_send(conn, presence); + _send_presence_stanza(conn, presence); _send_room_presence(conn, presence); xmpp_stanza_release(presence); @@ -269,7 +273,7 @@ _send_room_presence(xmpp_conn_t *conn, xmpp_stanza_t *presence) xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_room_jid); log_debug("Sending presence to room: %s", full_room_jid); - xmpp_send(conn, presence); + _send_presence_stanza(conn, presence); free(full_room_jid); } @@ -302,7 +306,7 @@ presence_join_room(char *room, char *nick, char * passwd) stanza_attach_priority(ctx, presence, pri); stanza_attach_caps(ctx, presence); - xmpp_send(conn, presence); + _send_presence_stanza(conn, presence); xmpp_stanza_release(presence); jid_destroy(jid); @@ -332,7 +336,7 @@ presence_change_room_nick(const char *const room, const char *const nick) stanza_attach_priority(ctx, presence, pri); stanza_attach_caps(ctx, presence); - xmpp_send(conn, presence); + _send_presence_stanza(conn, presence); xmpp_stanza_release(presence); free(full_room_jid); @@ -351,7 +355,7 @@ presence_leave_chat_room(const char *const room_jid) if (nick) { xmpp_stanza_t *presence = stanza_create_room_leave_presence(ctx, room_jid, nick); - xmpp_send(conn, presence); + _send_presence_stanza(conn, presence); xmpp_stanza_release(presence); } } @@ -649,7 +653,7 @@ _send_caps_request(char *node, char *caps_key, char *id, char *from) if (!caps_contains(caps_key)) { log_debug("Capabilities not cached for '%s', sending discovery IQ.", from); xmpp_stanza_t *iq = stanza_create_disco_info_iq(ctx, id, from, node); - xmpp_send(conn, iq); + _send_iq_stanza(conn, iq); xmpp_stanza_release(iq); } else { log_debug("Capabilities already cached, for %s", caps_key); @@ -811,3 +815,33 @@ _muc_user_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *co return 1; } + +static void +_send_presence_stanza(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza) +{ + char *text; + size_t text_size; + xmpp_stanza_to_text(stanza, &text, &text_size); + + char *plugin_text = plugins_on_presence_stanza_send(text); + if (plugin_text) { + xmpp_send_raw(conn, plugin_text, strlen(plugin_text)); + } else { + xmpp_send_raw(conn, text, text_size); + } +} + +static void +_send_iq_stanza(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza) +{ + char *text; + size_t text_size; + xmpp_stanza_to_text(stanza, &text, &text_size); + + char *plugin_text = plugins_on_iq_stanza_send(text); + if (plugin_text) { + xmpp_send_raw(conn, plugin_text, strlen(plugin_text)); + } else { + xmpp_send_raw(conn, text, text_size); + } +} -- cgit 1.4.1-2-gfad0