static void iks_sasl_challenge(struct stream_data *data, iks *challenge) { char *message; iks *x; char *tmp; tmp = iks_cdata(iks_child(challenge)); if(!tmp) return; /* decode received blob */ message = iks_base64_decode(tmp, NULL); if(!message) return; /* reply the challenge */ if(strstr(message, "rspauth")) { x = iks_new("response"); } else { x = make_sasl_response(data, message); } if(x) { iks_insert_attrib(x, "xmlns", IKS_NS_XMPP_SASL); iks_send(data->prs, x); iks_delete(x); } iks_free(message); }
// xxx needs error return value static void send_sasl_challenge (ikss_Stream *self, iks *challenge) { char *message; iks *x; char *tmp; tmp = iks_cdata (iks_child (challenge)); if (!tmp) return; /* decode received blob */ message = iks_base64_decode (tmp); if (!message) return; /* reply the challenge */ if (strstr (message, "rspauth")) { x = iks_new ("response"); } else { x = make_sasl_response (self, message); } if (x) { iks_insert_attrib (x, "xmlns", IKS_NS_XMPP_SASL); ikss_Stream_send_node (self, x); // xxx check return value iks_delete (x); } iks_free (message); }