diff options
author | Sven Moritz Hallberg <sm@khjk.org> | 2008-02-17 03:12:09 +0100 |
---|---|---|
committer | Sven Moritz Hallberg <sm@khjk.org> | 2008-02-17 03:12:09 +0100 |
commit | 2ecfe3987effa418806ab23bc24c82e3f14ca30f (patch) | |
tree | 3a99e6f0225ea71ab54d530fb742d29d4385f353 | |
parent | 37bff517e244def9f87a711a0154b182c89f07b3 (diff) | |
parent | 2d88d25aeb62d90e4288f8b83979baaff96cb7f2 (diff) |
more upstream changes
-rw-r--r-- | protocols/jabber/iq.c | 27 | ||||
-rw-r--r-- | tests/check_help.c | 7 | ||||
-rw-r--r-- | tests/check_jabber_sasl.c | 2 |
3 files changed, 32 insertions, 4 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; diff --git a/tests/check_help.c b/tests/check_help.c index 7e5283e3..5a2f28d9 100644 --- a/tests/check_help.c +++ b/tests/check_help.c @@ -6,11 +6,14 @@ #include <stdio.h> #include "help.h" -START_TEST(test_help_none) +START_TEST(test_help_initfree) help_t *h, *r; r = help_init(&h, "/dev/null"); fail_if(r == NULL); fail_if(r != h); + + help_free(&h); + fail_if(h != NULL); END_TEST START_TEST(test_help_nonexistent) @@ -24,7 +27,7 @@ Suite *help_suite (void) Suite *s = suite_create("Help"); TCase *tc_core = tcase_create("Core"); suite_add_tcase (s, tc_core); - tcase_add_test (tc_core, test_help_none); + tcase_add_test (tc_core, test_help_initfree); tcase_add_test (tc_core, test_help_nonexistent); return s; } diff --git a/tests/check_jabber_sasl.c b/tests/check_jabber_sasl.c index 96c05837..6bceeb88 100644 --- a/tests/check_jabber_sasl.c +++ b/tests/check_jabber_sasl.c @@ -17,7 +17,7 @@ char *sasl_get_part( char *data, char *field ); struct { - const char *challenge; + char *challenge; char *key; char *value; } get_part_tests[] = { |