diff options
author | ulim <a.sporto+bee@gmail.com> | 2008-04-14 15:10:53 +0200 |
---|---|---|
committer | ulim <a.sporto+bee@gmail.com> | 2008-04-14 15:10:53 +0200 |
commit | b79308b943149d729b1daea8c56cff9fc02711a0 (patch) | |
tree | a5f80445ed63d864703941474dc6cf8998df3136 /protocols/jabber/iq.c | |
parent | 6cac643f6933e431b90fcb937dec505f989e6a53 (diff) | |
parent | aa311173a85020bcbbbf61135a5451e171d422f5 (diff) |
merged in upstream r379 (somewhere after 1.2-3).
Just one trivial conflict in the jabber Makefile, went smoothly.
Diffstat (limited to 'protocols/jabber/iq.c')
-rw-r--r-- | protocols/jabber/iq.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c index d45b7625..22aa3e7c 100644 --- a/protocols/jabber/iq.c +++ b/protocols/jabber/iq.c @@ -533,6 +533,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; @@ -548,13 +550,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; |