diff options
author | Michael Vetter <jubalh@iodoru.org> | 2021-06-29 22:52:45 +0200 |
---|---|---|
committer | Michael Vetter <jubalh@iodoru.org> | 2021-06-29 22:52:45 +0200 |
commit | 2f5aa124cacae454e4b49c2ecbc7ca72bdf63d1c (patch) | |
tree | 1ea78bfc99bbc6ff917bd7de78f5ed0d53e2d1da /src/xmpp/stanza.c | |
parent | 3c648ee2f5715998e440c316ea9eadfd8205463c (diff) | |
download | profani-tty-2f5aa124cacae454e4b49c2ecbc7ca72bdf63d1c.tar.gz |
XEP-0157: Parse contact address stanza
Diffstat (limited to 'src/xmpp/stanza.c')
-rw-r--r-- | src/xmpp/stanza.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index 235a7dee..96c47dc7 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -2838,3 +2838,34 @@ stanza_create_muc_register_nick(xmpp_ctx_t* ctx, const char* const id, const cha return iq; } + +void +stanza_get_service_contact_addresses(xmpp_ctx_t* ctx, xmpp_stanza_t* stanza) +{ + xmpp_stanza_t* fields = xmpp_stanza_get_children(stanza); + while (fields) { + const char* child_name = xmpp_stanza_get_name(fields); + const char* child_type = xmpp_stanza_get_type(fields); + + 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) { + 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 + xmpp_free(ctx, value_text); + } + } + } + } + + fields = xmpp_stanza_get_next(fields); + } +} |