about summary refs log tree commit diff stats
path: root/src/plugins/plugins.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2017-01-22 18:08:29 +0000
committerJames Booth <boothj5@gmail.com>2017-01-22 18:09:04 +0000
commit83385cdbc0106c5aae61d87975a2e082abdbf634 (patch)
tree6445a23a717d34b474efbc46267c04134fda54a5 /src/plugins/plugins.c
parent7090f85d853b32ac6799bdc5641cd81502ff65dc (diff)
downloadprofani-tty-83385cdbc0106c5aae61d87975a2e082abdbf634.tar.gz
Add pre chat and room message blocking
Diffstat (limited to 'src/plugins/plugins.c')
-rw-r--r--src/plugins/plugins.c52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c
index 054cb8e1..f190a8d0 100644
--- a/src/plugins/plugins.c
+++ b/src/plugins/plugins.c
@@ -413,11 +413,18 @@ plugins_pre_chat_message_send(const char * const barejid, const char *message)
     GList *curr = values;
     while (curr) {
         ProfPlugin *plugin = curr->data;
-        new_message = plugin->pre_chat_message_send(plugin, barejid, curr_message);
-        if (new_message) {
-            free(curr_message);
-            curr_message = strdup(new_message);
-            free(new_message);
+        if (plugin->contains_hook(plugin, "prof_pre_chat_message_send")) {
+            new_message = plugin->pre_chat_message_send(plugin, barejid, curr_message);
+            if (new_message) {
+                free(curr_message);
+                curr_message = strdup(new_message);
+                free(new_message);
+            } else {
+                free(curr_message);
+                g_list_free(values);
+
+                return NULL;
+            }
         }
         curr = g_list_next(curr);
     }
@@ -485,11 +492,18 @@ plugins_pre_room_message_send(const char * const barejid, const char *message)
     GList *curr = values;
     while (curr) {
         ProfPlugin *plugin = curr->data;
-        new_message = plugin->pre_room_message_send(plugin, barejid, curr_message);
-        if (new_message) {
-            free(curr_message);
-            curr_message = strdup(new_message);
-            free(new_message);
+        if (plugin->contains_hook(plugin, "prof_pre_room_message_send")) {
+            new_message = plugin->pre_room_message_send(plugin, barejid, curr_message);
+            if (new_message) {
+                free(curr_message);
+                curr_message = strdup(new_message);
+                free(new_message);
+            } else {
+                free(curr_message);
+                g_list_free(values);
+
+                return NULL;
+            }
         }
         curr = g_list_next(curr);
     }
@@ -587,11 +601,19 @@ plugins_pre_priv_message_send(const char * const fulljid, const char * const mes
     GList *curr = values;
     while (curr) {
         ProfPlugin *plugin = curr->data;
-        new_message = plugin->pre_priv_message_send(plugin, jidp->barejid, jidp->resourcepart, curr_message);
-        if (new_message) {
-            free(curr_message);
-            curr_message = strdup(new_message);
-            free(new_message);
+        if (plugin->contains_hook(plugin, "prof_pre_priv_message_send")) {
+            new_message = plugin->pre_priv_message_send(plugin, jidp->barejid, jidp->resourcepart, curr_message);
+            if (new_message) {
+                free(curr_message);
+                curr_message = strdup(new_message);
+                free(new_message);
+            } else {
+                free(curr_message);
+                g_list_free(values);
+                jid_destroy(jidp);
+
+                return NULL;
+            }
         }
         curr = g_list_next(curr);
     }