Moved stanza_to_string
This commit is contained in:
@@ -53,6 +53,58 @@ stanza_new(const char *name, const char **attributes)
|
|||||||
return stanza;
|
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
|
static void
|
||||||
start_element(void *data, const char *element, const char **attributes)
|
start_element(void *data, const char *element, const char **attributes)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,5 +40,6 @@ typedef struct xmpp_stanza_t {
|
|||||||
|
|
||||||
XMPPStanza* stanza_new(const char *name, const char **attributes);
|
XMPPStanza* stanza_new(const char *name, const char **attributes);
|
||||||
XMPPStanza* parse_stanza(char *stanza_text);
|
XMPPStanza* parse_stanza(char *stanza_text);
|
||||||
|
char* stanza_to_string(XMPPStanza *stanza);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -31,58 +31,6 @@
|
|||||||
pthread_mutex_t stanzas_lock;
|
pthread_mutex_t stanzas_lock;
|
||||||
static GList *stanzas;
|
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
|
int
|
||||||
stanzas_contains_id(char *id)
|
stanzas_contains_id(char *id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,6 +44,4 @@ int stanzas_contains_id(char *id);
|
|||||||
void stanza_free(XMPPStanza *stanza);
|
void stanza_free(XMPPStanza *stanza);
|
||||||
void stanza_free_all(void);
|
void stanza_free_all(void);
|
||||||
|
|
||||||
char* stanza_to_string(XMPPStanza *stanza);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user