aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/jabber/iq.c
diff options
context:
space:
mode:
authorSven Moritz Hallberg <sm@khjk.org>2008-02-17 03:12:09 +0100
committerSven Moritz Hallberg <sm@khjk.org>2008-02-17 03:12:09 +0100
commit2ecfe3987effa418806ab23bc24c82e3f14ca30f (patch)
tree3a99e6f0225ea71ab54d530fb742d29d4385f353 /protocols/jabber/iq.c
parent37bff517e244def9f87a711a0154b182c89f07b3 (diff)
parent2d88d25aeb62d90e4288f8b83979baaff96cb7f2 (diff)
more upstream changes
Diffstat (limited to 'protocols/jabber/iq.c')
-rw-r--r--protocols/jabber/iq.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c
index c88bc0b0..38c5a5a9 100644
--- a/protocols/jabber/iq.c
+++ b/protocols/jabber/iq.c
@@ -525,6 +525,8 @@ static xt_status jabber_iq_display_vcard( struct im_connection *ic, struct xt_no
return XT_HANDLED;
}
+static xt_status jabber_add_to_roster_callback( struct im_connection *ic, struct xt_node *node, struct xt_node *orig );
+
int jabber_add_to_roster( struct im_connection *ic, char *handle, char *name )
{
struct xt_node *node;
@@ -540,13 +542,36 @@ int jabber_add_to_roster( struct im_connection *ic, char *handle, char *name )
node = xt_new_node( "query", NULL, node );
xt_add_attr( node, "xmlns", XMLNS_ROSTER );
node = jabber_make_packet( "iq", "set", NULL, node );
+ jabber_cache_add( ic, node, jabber_add_to_roster_callback );
st = jabber_write_packet( ic, node );
- xt_free_node( node );
return st;
}
+static xt_status jabber_add_to_roster_callback( struct im_connection *ic, struct xt_node *node, struct xt_node *orig )
+{
+ char *s, *jid = NULL;
+ struct xt_node *c;
+
+ if( ( c = xt_find_node( orig->children, "query" ) ) &&
+ ( c = xt_find_node( c->children, "item" ) ) &&
+ ( jid = xt_find_attr( c, "jid" ) ) &&
+ ( s = xt_find_attr( node, "type" ) ) &&
+ strcmp( s, "result" ) == 0 )
+ {
+ if( imcb_find_buddy( ic, jid ) == NULL )
+ imcb_add_buddy( ic, jid, NULL );
+ }
+ else
+ {
+ imcb_log( ic, "Error while adding `%s' to your contact list.",
+ jid ? jid : "(unknown handle)" );
+ }
+
+ return XT_HANDLED;
+}
+
int jabber_remove_from_roster( struct im_connection *ic, char *handle )
{
struct xt_node *node;