about summary refs log tree commit diff stats
path: root/src/xmpp/presence.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-03-26 15:50:16 +0000
committerJames Booth <boothj5@gmail.com>2016-03-26 15:50:16 +0000
commitd0397f3da5ca659d86590e8730e6765609ef56ca (patch)
tree9ee2be97b1cd9c059f3024d46131fa118a251218 /src/xmpp/presence.c
parentce9b0836a0cdbf81b8fdc47f163b8a165d331101 (diff)
downloadprofani-tty-d0397f3da5ca659d86590e8730e6765609ef56ca.tar.gz
Added stanza send hooks for plugins
Diffstat (limited to 'src/xmpp/presence.c')
-rw-r--r--src/xmpp/presence.c48
1 files changed, 41 insertions, 7 deletions
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);
+    }
+}