Index: res/res_jabber.c
===================================================================
--- res/res_jabber.c (revision 337971)
+++ res/res_jabber.c (working copy)
@@ -1767,6 +1767,8 @@
case IKS_NODE_START:
if (client->state == AJI_DISCONNECTED) {
char secret[160], shasum[320], *handshake;
+
+ client->state = AJI_CONNECTING;
sprintf(secret, "%s%s", pak->id, client->password);
ast_sha1_hash(shasum, secret);
@@ -1776,12 +1778,16 @@
ast_free(handshake);
handshake = NULL;
}
- client->state = AJI_CONNECTING;
- if (aji_recv(client, 1) == 2) /*XXX proper result for iksemel library on iks_recv of XXX*/
+
+ /* Upon successful authentication, the server will send empty handshake element, "",
+ which is proper, but iksemel returns IKS_BADXML; so check for this return code and
+ indicate we are connected; this probably should be improved upon */
+ if (aji_recv(client, 1) == IKS_BADXML) {
client->state = AJI_CONNECTED;
- else
+ } else {
ast_log(LOG_WARNING, "Jabber didn't seem to handshake, failed to authenticate.\n");
- break;
+ client->state = AJI_DISCONNECTED;
+ }
}
break;