about summary refs log tree commit diff stats
path: root/src/xmpp
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2021-06-30 10:42:36 +0200
committerMichael Vetter <jubalh@iodoru.org>2021-06-30 10:45:59 +0200
commitef96bea82e945d2c00426cac21b6578fdce62eb2 (patch)
treeac1223e030696800020fc2ed91785f439144e200 /src/xmpp
parent2f5aa124cacae454e4b49c2ecbc7ca72bdf63d1c (diff)
downloadprofani-tty-ef96bea82e945d2c00426cac21b6578fdce62eb2.tar.gz
XEP-0157: Print contact addresses
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/iq.c19
-rw-r--r--src/xmpp/stanza.c13
-rw-r--r--src/xmpp/stanza.h2
3 files changed, 14 insertions, 20 deletions
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c
index 7af477e6..19b620e2 100644
--- a/src/xmpp/iq.c
+++ b/src/xmpp/iq.c
@@ -2343,22 +2343,9 @@ _disco_info_response_id_handler(xmpp_stanza_t* const stanza, void* const userdat
                     }
                 }
             } else if (g_strcmp0(child_type, STANZA_TYPE_RESULT) == 0) {
-                /*
-                DataForm* form = form_create(child);
-                ProfConfWin* confwin = (ProfConfWin*)wins_new_config(from, form, NULL, NULL, NULL);
-                confwin_handle_configuration(confwin, form);
-                */
-                /*g_hash_table_new () with field var='security-addresses' as key
-                 * a list of  <value>xmpp:security@shakespeare.lit</value> as value
-                 */
-                stanza_get_service_contact_addresses(connection_get_ctx(), child);
-                    /*
-                char* text;
-                size_t text_size;
-                xmpp_stanza_to_text(child, &text, &text_size);
-                cons_show(text);
-                free(text);
-                */
+                GHashTable *adr = stanza_get_service_contact_addresses(connection_get_ctx(), child);
+                cons_show_disco_contact_information(adr);
+                g_hash_table_destroy(adr);
             }
 
             child = xmpp_stanza_get_next(child);
diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c
index 96c47dc7..27e6d647 100644
--- a/src/xmpp/stanza.c
+++ b/src/xmpp/stanza.c
@@ -2839,9 +2839,11 @@ stanza_create_muc_register_nick(xmpp_ctx_t* ctx, const char* const id, const cha
     return iq;
 }
 
-void
+GHashTable*
 stanza_get_service_contact_addresses(xmpp_ctx_t* ctx, xmpp_stanza_t* stanza)
 {
+    GHashTable* addresses = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+
     xmpp_stanza_t* fields = xmpp_stanza_get_children(stanza);
     while (fields) {
         const char* child_name = xmpp_stanza_get_name(fields);
@@ -2850,22 +2852,27 @@ stanza_get_service_contact_addresses(xmpp_ctx_t* ctx, xmpp_stanza_t* stanza)
         if (g_strcmp0(child_name, STANZA_NAME_FIELD) == 0 && g_strcmp0(child_type, STANZA_TYPE_LIST_MULTI) == 0) {
             // key
             const char* var = xmpp_stanza_get_attribute(fields, STANZA_ATTR_VAR );
-            var = var;
 
             // values
             xmpp_stanza_t* values = xmpp_stanza_get_children(fields);
-            if (values) {
+            while (values) {
                 const char* value_name = xmpp_stanza_get_name(values);
                 if (value_name && (g_strcmp0(value_name, STANZA_NAME_VALUE) == 0)) {
                     char* value_text = xmpp_stanza_get_text(values);
                     if (value_text) {
                         //add to list
+                        g_hash_table_insert(addresses, g_strdup(var), g_strdup(value_text));
+
                         xmpp_free(ctx, value_text);
                     }
                 }
+
+                values = xmpp_stanza_get_next(values);
             }
         }
 
         fields = xmpp_stanza_get_next(fields);
     }
+
+    return addresses;
 }
diff --git a/src/xmpp/stanza.h b/src/xmpp/stanza.h
index 7856a739..aeddf6a2 100644
--- a/src/xmpp/stanza.h
+++ b/src/xmpp/stanza.h
@@ -389,7 +389,7 @@ char* stanza_get_muc_destroy_reason(xmpp_stanza_t* stanza);
 const char* stanza_get_actor(xmpp_stanza_t* stanza);
 char* stanza_get_reason(xmpp_stanza_t* stanza);
 
-void stanza_get_service_contact_addresses(xmpp_ctx_t* ctx, xmpp_stanza_t* stanza);
+GHashTable* stanza_get_service_contact_addresses(xmpp_ctx_t* ctx, xmpp_stanza_t* stanza);
 
 Resource* stanza_resource_from_presence(XMPPPresence* presence);
 XMPPPresence* stanza_parse_presence(xmpp_stanza_t* stanza, int* err);
321'>321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362