aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2014-10-10 23:20:53 -0300
committerdequis <dx@dxzone.com.ar>2014-10-10 23:20:53 -0300
commit7b40f17f9f514127c8a37c35ac3d1c3bd34c13d5 (patch)
tree2297eb213f70e0e5cc7ce50e878f805a47f55ad7 /lib
parent0e35ff67f314fb11522430e17d607ac4f5c13c90 (diff)
Add support for XEP-0203: Delayed delivery (message timestamps)
Very similar to XEP-0091 which is already supported, but was marked as obsolete, replaced by XEP-0203. The main differences are the tag name and the timestamp format. Due to the similarities, both XEPs are still supported.
Diffstat (limited to 'lib')
-rw-r--r--lib/xmltree.c15
-rw-r--r--lib/xmltree.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/xmltree.c b/lib/xmltree.c
index 0726d387..9d84fb7c 100644
--- a/lib/xmltree.c
+++ b/lib/xmltree.c
@@ -523,6 +523,21 @@ char *xt_find_attr( struct xt_node *node, const char *key )
return node->attr[i].value;
}
+struct xt_node *xt_find_node_by_attr( struct xt_node *xt, const char *tag, const char *key, const char *value ) {
+ struct xt_node *c;
+ char *s;
+
+ for( c = xt; ( c = xt_find_node( c, tag ) ); c = c->next )
+ {
+ if( ( s = xt_find_attr( c, key ) ) && strcmp( s, value ) == 0 )
+ {
+ return c;
+ }
+ }
+ return NULL;
+}
+
+
/* Strip a few non-printable characters that aren't allowed in XML streams
(and upset some XMPP servers for example). */
void xt_strip_text( char *in )
diff --git a/lib/xmltree.h b/lib/xmltree.h
index a41cbac1..aaf49cea 100644
--- a/lib/xmltree.h
+++ b/lib/xmltree.h
@@ -91,6 +91,7 @@ void xt_free( struct xt_parser *xt );
struct xt_node *xt_find_node( struct xt_node *node, const char *name );
struct xt_node *xt_find_path( struct xt_node *node, const char *name );
char *xt_find_attr( struct xt_node *node, const char *key );
+struct xt_node *xt_find_node_by_attr( struct xt_node *xt, const char *tag, const char *key, const char *value );
struct xt_node *xt_new_node( char *name, const char *text, struct xt_node *children );
void xt_add_child( struct xt_node *parent, struct xt_node *child );