aboutsummaryrefslogtreecommitdiffstats
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
parent37bff517e244def9f87a711a0154b182c89f07b3 (diff)
parent2d88d25aeb62d90e4288f8b83979baaff96cb7f2 (diff)
more upstream changes
-rw-r--r--protocols/jabber/iq.c27
-rw-r--r--tests/check_help.c7
-rw-r--r--tests/check_jabber_sasl.c2
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[] = {