Moved stanza_to_string

This commit is contained in:
James Booth
2015-06-06 22:44:53 +01:00
parent c1910b052f
commit 4d641963e4
4 changed files with 53 additions and 54 deletions

View File

@@ -53,6 +53,58 @@ stanza_new(const char *name, const char **attributes)
return stanza;
}
char *
stanza_to_string(XMPPStanza *stanza)
{
GString *stanza_str = g_string_new("<");
g_string_append(stanza_str, stanza->name);
if (stanza->attrs) {
GList *curr = stanza->attrs;
while (curr) {
XMPPAttr *attr = curr->data;
g_string_append(stanza_str, " ");
g_string_append(stanza_str, attr->name);
g_string_append(stanza_str, "=\"");
g_string_append(stanza_str, attr->value);
g_string_append(stanza_str, "\"");
curr = g_list_next(curr);
}
}
if (stanza->content) {
g_string_append(stanza_str, ">");
g_string_append(stanza_str, stanza->content->str);
g_string_append(stanza_str, "</");
g_string_append(stanza_str, stanza->name);
g_string_append(stanza_str, ">");
} else if (stanza->children) {
g_string_append(stanza_str, ">");
GList *curr = stanza->children;
while (curr) {
XMPPStanza *child = curr->data;
char *child_str = stanza_to_string(child);
g_string_append(stanza_str, child_str);
free(child_str);
curr = g_list_next(curr);
}
g_string_append(stanza_str, "</");
g_string_append(stanza_str, stanza->name);
g_string_append(stanza_str, ">");
} else {
g_string_append(stanza_str, "/>");
}
char *result = stanza_str->str;
g_string_free(stanza_str, FALSE);
return result;
}
static void
start_element(void *data, const char *element, const char **attributes)
{

View File

@@ -40,5 +40,6 @@ typedef struct xmpp_stanza_t {
XMPPStanza* stanza_new(const char *name, const char **attributes);
XMPPStanza* parse_stanza(char *stanza_text);
char* stanza_to_string(XMPPStanza *stanza);
#endif

View File

@@ -31,58 +31,6 @@
pthread_mutex_t stanzas_lock;
static GList *stanzas;
char *
stanza_to_string(XMPPStanza *stanza)
{
GString *stanza_str = g_string_new("<");
g_string_append(stanza_str, stanza->name);
if (stanza->attrs) {
GList *curr = stanza->attrs;
while (curr) {
XMPPAttr *attr = curr->data;
g_string_append(stanza_str, " ");
g_string_append(stanza_str, attr->name);
g_string_append(stanza_str, "=\"");
g_string_append(stanza_str, attr->value);
g_string_append(stanza_str, "\"");
curr = g_list_next(curr);
}
}
if (stanza->content) {
g_string_append(stanza_str, ">");
g_string_append(stanza_str, stanza->content->str);
g_string_append(stanza_str, "</");
g_string_append(stanza_str, stanza->name);
g_string_append(stanza_str, ">");
} else if (stanza->children) {
g_string_append(stanza_str, ">");
GList *curr = stanza->children;
while (curr) {
XMPPStanza *child = curr->data;
char *child_str = stanza_to_string(child);
g_string_append(stanza_str, child_str);
free(child_str);
curr = g_list_next(curr);
}
g_string_append(stanza_str, "</");
g_string_append(stanza_str, stanza->name);
g_string_append(stanza_str, ">");
} else {
g_string_append(stanza_str, "/>");
}
char *result = stanza_str->str;
g_string_free(stanza_str, FALSE);
return result;
}
int
stanzas_contains_id(char *id)
{

View File

@@ -44,6 +44,4 @@ int stanzas_contains_id(char *id);
void stanza_free(XMPPStanza *stanza);
void stanza_free_all(void);
char* stanza_to_string(XMPPStanza *stanza);
#endif