about summary refs log tree commit diff stats
path: root/src/xmpp
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2023-05-11 08:45:46 +0200
committerGitHub <noreply@github.com>2023-05-11 08:45:46 +0200
commitea35a4ceb03a975b4c1dabc5eb71510162dbe25f (patch)
tree15c2735f04b414a1a8426499302f90fb9408a6f3 /src/xmpp
parent7f3fca2bd081a729d425184f7a0484025862257e (diff)
parent209a8f4bf5b2db2ca54f727d29e625228bccd170 (diff)
downloadprofani-tty-ea35a4ceb03a975b4c1dabc5eb71510162dbe25f.tar.gz
Merge branch 'master' into cleanup/gchar-char
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/connection.c2
-rw-r--r--src/xmpp/connection.h1
-rw-r--r--src/xmpp/iq.c41
-rw-r--r--src/xmpp/session.h1
-rw-r--r--src/xmpp/xmpp.h2
5 files changed, 24 insertions, 23 deletions
diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c
index eef395f1..2a022cc4 100644
--- a/src/xmpp/connection.c
+++ b/src/xmpp/connection.c
@@ -964,6 +964,7 @@ _connection_handler(xmpp_conn_t* const xmpp_conn, const xmpp_conn_event_t status
         conn.domain = strdup(my_jid->domainpart);
         jid_destroy(my_jid);
 
+        connection_clear_data();
         conn.features_by_jid = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)g_hash_table_destroy);
         g_hash_table_insert(conn.features_by_jid, strdup(conn.domain), g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL));
 
@@ -990,6 +991,7 @@ _connection_handler(xmpp_conn_t* const xmpp_conn, const xmpp_conn_event_t status
         conn.domain = strdup(my_raw_jid->domainpart);
         jid_destroy(my_raw_jid);
 
+        connection_clear_data();
         conn.features_by_jid = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)g_hash_table_destroy);
         g_hash_table_insert(conn.features_by_jid, strdup(conn.domain), g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL));
 
diff --git a/src/xmpp/connection.h b/src/xmpp/connection.h
index 79bee1d4..d4ade03a 100644
--- a/src/xmpp/connection.h
+++ b/src/xmpp/connection.h
@@ -48,7 +48,6 @@ jabber_conn_status_t connection_connect(const char* const fulljid, const char* c
                                         const char* const tls_policy, const char* const auth_policy);
 jabber_conn_status_t connection_register(const char* const altdomain, int port, const char* const tls_policy,
                                          const char* const username, const char* const password);
-void connection_disconnect(void);
 void connection_set_disconnected(void);
 
 void connection_set_priority(const int priority);
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c
index f09deead..4f6eea40 100644
--- a/src/xmpp/iq.c
+++ b/src/xmpp/iq.c
@@ -265,6 +265,7 @@ iq_handlers_init(void)
         xmpp_timed_handler_add(conn, _autoping_timed_send, millis, ctx);
     }
 
+    iq_rooms_cache_clear();
     iq_handlers_clear();
 
     id_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_iq_id_handler_free);
@@ -2651,6 +2652,18 @@ iq_mam_request_older(ProfChatWin* win)
     return;
 }
 
+static void
+_mam_userdata_free(MamRsmUserdata* data)
+{
+    free(data->end_datestr);
+    data->end_datestr = NULL;
+    free(data->start_datestr);
+    data->start_datestr = NULL;
+    free(data->barejid);
+    data->barejid = NULL;
+    free(data);
+}
+
 void
 _iq_mam_request(ProfChatWin* win, GDateTime* startdate, GDateTime* enddate)
 {
@@ -2694,7 +2707,7 @@ _iq_mam_request(ProfChatWin* win, GDateTime* startdate, GDateTime* enddate)
         data->fetch_next = fetch_next;
         data->win = win;
 
-        iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, data);
+        iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, (ProfIqFreeCallback)_mam_userdata_free, data);
     }
 
     iq_send_stanza(iq);
@@ -2742,13 +2755,13 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
 
             buffer_remove_entry(window->layout->buffer, 0);
 
-            char* start_str = NULL;
+            auto_char char* start_str = NULL;
             if (data->start_datestr) {
                 start_str = strdup(data->start_datestr);
                 // Convert to iso8601
                 start_str[strlen(start_str) - 3] = '\0';
             }
-            char* end_str = NULL;
+            auto_char char* end_str = NULL;
             if (data->end_datestr) {
                 end_str = strdup(data->end_datestr);
                 // Convert to iso8601
@@ -2757,24 +2770,10 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
 
             if (is_complete || !data->fetch_next) {
                 chatwin_db_history(data->win, is_complete ? NULL : start_str, end_str, TRUE);
-                // TODO free memory
-                if (start_str) {
-                    free(start_str);
-                    free(data->start_datestr);
-                }
-
-                if (end_str) {
-                    free(data->end_datestr);
-                }
-
-                free(data->barejid);
-                free(data);
                 return 0;
             }
 
             chatwin_db_history(data->win, start_str, end_str, TRUE);
-            if (start_str)
-                free(start_str);
 
             xmpp_stanza_t* set = xmpp_stanza_get_child_by_name_and_ns(fin, STANZA_TYPE_SET, STANZA_NS_RSM);
             if (set) {
@@ -2787,14 +2786,14 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
                 // 4.3.2. send same stanza with set,max stanza
                 xmpp_ctx_t* const ctx = connection_get_ctx();
 
-                if (end_str) {
+                if (data->end_datestr) {
                     free(data->end_datestr);
+                    data->end_datestr = NULL;
                 }
-                data->end_datestr = NULL;
-                xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, data->barejid, data->start_datestr, data->end_datestr, firstid, NULL);
+                xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, data->barejid, data->start_datestr, NULL, firstid, NULL);
                 free(firstid);
 
-                iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, data);
+                iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, (ProfIqFreeCallback)_mam_userdata_free, data);
 
                 iq_send_stanza(iq);
                 xmpp_stanza_release(iq);
diff --git a/src/xmpp/session.h b/src/xmpp/session.h
index e6facb93..d8565fa4 100644
--- a/src/xmpp/session.h
+++ b/src/xmpp/session.h
@@ -47,6 +47,5 @@ void session_init_activity(void);
 void session_check_autoaway(void);
 
 void session_reconnect(gchar* altdomain, unsigned short altport);
-void session_reconnect_now(void);
 
 #endif
diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h
index 539126cd..2babe536 100644
--- a/src/xmpp/xmpp.h
+++ b/src/xmpp/xmpp.h
@@ -186,7 +186,9 @@ void session_disconnect(void);
 void session_shutdown(void);
 void session_process_events(void);
 char* session_get_account_name(void);
+void session_reconnect_now(void);
 
+void connection_disconnect(void);
 jabber_conn_status_t connection_get_status(void);
 char* connection_get_presence_msg(void);
 void connection_set_presence_msg(const char* const message);