diff --git a/src/server/stanza.c b/src/server/stanza.c index 4a283a2..c24c1e6 100644 --- a/src/server/stanza.c +++ b/src/server/stanza.c @@ -111,6 +111,39 @@ stanza_add_child(XMPPStanza *parent, XMPPStanza *child) parent->children = g_list_append(parent->children, child); } +XMPPStanza* +stanza_get_child_by_ns(XMPPStanza *stanza, char *ns) +{ + if (!stanza) { + return NULL; + } + + if (!stanza->children) { + return NULL; + } + + GList *curr_child = stanza->children; + while (curr_child) { + XMPPStanza *child = curr_child->data; + if (!child->attrs) { + return NULL; + } + GList *curr_attr = child->attrs; + while (curr_attr) { + XMPPAttr *attr = curr_attr->data; + if ((g_strcmp0(attr->name, "xmlns") == 0) && (g_strcmp0(attr->value, ns) == 0)) { + return child; + } + + curr_attr = g_list_next(curr_attr); + } + + curr_child = g_list_next(curr_child); + } + + return NULL; +} + static void start_element(void *data, const char *element, const char **attributes) { diff --git a/src/server/stanza.h b/src/server/stanza.h index 432a08c..29e2817 100644 --- a/src/server/stanza.h +++ b/src/server/stanza.h @@ -42,5 +42,6 @@ XMPPStanza* stanza_new(const char *name, const char **attributes); XMPPStanza* parse_stanza(char *stanza_text); char* stanza_to_string(XMPPStanza *stanza); void stanza_add_child(XMPPStanza *parent, XMPPStanza *child); +XMPPStanza* stanza_get_child_by_ns(XMPPStanza *stanza, char *ns); #endif diff --git a/src/server/stanzas.c b/src/server/stanzas.c index eb0efc7..40ad6ff 100644 --- a/src/server/stanzas.c +++ b/src/server/stanzas.c @@ -62,39 +62,6 @@ stanza_add(XMPPStanza *stanza) pthread_mutex_unlock(&stanzas_lock); } -XMPPStanza* -stanza_get_child_by_ns(XMPPStanza *stanza, char *ns) -{ - if (!stanza) { - return NULL; - } - - if (!stanza->children) { - return NULL; - } - - GList *curr_child = stanza->children; - while (curr_child) { - XMPPStanza *child = curr_child->data; - if (!child->attrs) { - return NULL; - } - GList *curr_attr = child->attrs; - while (curr_attr) { - XMPPAttr *attr = curr_attr->data; - if ((g_strcmp0(attr->name, "xmlns") == 0) && (g_strcmp0(attr->value, ns) == 0)) { - return child; - } - - curr_attr = g_list_next(curr_attr); - } - - curr_child = g_list_next(curr_child); - } - - return NULL; -} - XMPPStanza* stanza_get_child_by_name(XMPPStanza *stanza, char *name) { diff --git a/src/server/stanzas.h b/src/server/stanzas.h index fd87509..c963335 100644 --- a/src/server/stanzas.h +++ b/src/server/stanzas.h @@ -32,7 +32,6 @@ const char* stanza_get_id(XMPPStanza *stanza); void stanza_set_id(XMPPStanza *stanza, const char *id); const char *stanza_get_query_request(XMPPStanza *stanza); -XMPPStanza* stanza_get_child_by_ns(XMPPStanza *stanza, char *ns); XMPPStanza* stanza_get_child_by_name(XMPPStanza *stanza, char *name); int stanza_verify_any(XMPPStanza *stanza);