comparison src/protocols/jabber/auth.c @ 8401:c13a4913a071

[gaim-migrate @ 9130] better error processing for jabber committer: Tailor Script <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Fri, 05 Mar 2004 23:42:34 +0000
parents b63debdf5a92
children a5bd6d78717d
comparison
equal deleted inserted replaced
8400:0383e55cd658 8401:c13a4913a071
176 const char *type = xmlnode_get_attrib(packet, "type"); 176 const char *type = xmlnode_get_attrib(packet, "type");
177 177
178 if(type && !strcmp(type, "result")) { 178 if(type && !strcmp(type, "result")) {
179 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED); 179 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED);
180 } else { 180 } else {
181 xmlnode *error = xmlnode_get_child(packet, "error"); 181 char *msg = jabber_parse_error(js, packet);
182 const char *err_code = NULL; 182 xmlnode *error;
183 char *err_text = NULL; 183 const char *err_code;
184 char *buf; 184
185 185 if((error = xmlnode_get_child(packet, "error")) &&
186 if(error) { 186 (err_code = xmlnode_get_attrib(error, "code")) &&
187 err_code = xmlnode_get_attrib(error, "code"); 187 !strcmp(err_code, "401")) {
188 err_text = xmlnode_get_data(error);
189 }
190
191 if(!err_code)
192 err_code = "";
193 if(!err_text)
194 err_text = g_strdup(_("Unknown"));
195
196 if(!strcmp(err_code, "401"))
197 js->gc->wants_to_die = TRUE; 188 js->gc->wants_to_die = TRUE;
198 189 }
199 buf = g_strdup_printf("Error %s: %s", 190
200 err_code, err_text); 191 gaim_connection_error(js->gc, msg);
201 192 g_free(msg);
202 gaim_connection_error(js->gc, buf);
203 g_free(err_text);
204 g_free(buf);
205 } 193 }
206 } 194 }
207 195
208 static void auth_old_cb(JabberStream *js, xmlnode *packet, gpointer data) 196 static void auth_old_cb(JabberStream *js, xmlnode *packet, gpointer data)
209 { 197 {
214 202
215 if(!type) { 203 if(!type) {
216 gaim_connection_error(js->gc, _("Invalid response from server.")); 204 gaim_connection_error(js->gc, _("Invalid response from server."));
217 return; 205 return;
218 } else if(!strcmp(type, "error")) { 206 } else if(!strcmp(type, "error")) {
219 /* XXX: still need to handle XMPP-style errors */ 207 char *msg = jabber_parse_error(js, packet);
220 xmlnode *error; 208 gaim_connection_error(js->gc, msg);
221 char *buf, *err_txt = NULL; 209 g_free(msg);
222 const char *code = NULL;
223 if((error = xmlnode_get_child(packet, "error"))) {
224 code = xmlnode_get_attrib(error, "code");
225 err_txt = xmlnode_get_data(error);
226 }
227 buf = g_strdup_printf("%s%s%s", code ? code : "", code ? ": " : "",
228 err_txt ? err_txt : _("Unknown Error"));
229 gaim_connection_error(js->gc, buf);
230 if(err_txt)
231 g_free(err_txt);
232 g_free(buf);
233 } else if(!strcmp(type, "result")) { 210 } else if(!strcmp(type, "result")) {
234 query = xmlnode_get_child(packet, "query"); 211 query = xmlnode_get_child(packet, "query");
235 if(js->stream_id && xmlnode_get_child(query, "digest")) { 212 if(js->stream_id && xmlnode_get_child(query, "digest")) {
236 unsigned char hashval[20]; 213 unsigned char hashval[20];
237 char *s, h[41], *p; 214 char *s, h[41], *p;
479 jabber_stream_set_state(js, JABBER_STREAM_REINITIALIZING); 456 jabber_stream_set_state(js, JABBER_STREAM_REINITIALIZING);
480 } 457 }
481 458
482 void jabber_auth_handle_failure(JabberStream *js, xmlnode *packet) 459 void jabber_auth_handle_failure(JabberStream *js, xmlnode *packet)
483 { 460 {
484 const char *ns = xmlnode_get_attrib(packet, "xmlns"); 461 char *msg = jabber_parse_error(js, packet);
485 462
486 if(!ns) 463 if(!msg) {
487 gaim_connection_error(js->gc, _("Invalid response from server.")); 464 gaim_connection_error(js->gc, _("Invalid response from server."));
488 else if(!strcmp(ns, "urn:ietf:params:xml:ns:xmpp-sasl")) { 465 } else {
489 if(xmlnode_get_child(packet, "bad-protocol")) { 466 gaim_connection_error(js->gc, msg);
490 gaim_connection_error(js->gc, _("Bad Protocol")); 467 g_free(msg);
491 } else if(xmlnode_get_child(packet, "encryption-required")) { 468 }
492 js->gc->wants_to_die = TRUE; 469 }
493 gaim_connection_error(js->gc, _("Encryption Required"));
494 } else if(xmlnode_get_child(packet, "invalid-authzid")) {
495 js->gc->wants_to_die = TRUE;
496 gaim_connection_error(js->gc, _("Invalid authzid"));
497 } else if(xmlnode_get_child(packet, "invalid-mechanism")) {
498 js->gc->wants_to_die = TRUE;
499 gaim_connection_error(js->gc, _("Invalid Mechanism"));
500 } else if(xmlnode_get_child(packet, "invalid-realm")) {
501 gaim_connection_error(js->gc, _("Invalid Realm"));
502 } else if(xmlnode_get_child(packet, "mechanism-too-weak")) {
503 js->gc->wants_to_die = TRUE;
504 gaim_connection_error(js->gc, _("Mechanism Too Weak"));
505 } else if(xmlnode_get_child(packet, "not-authorized")) {
506 js->gc->wants_to_die = TRUE;
507 gaim_connection_error(js->gc, _("Not Authorized"));
508 } else if(xmlnode_get_child(packet, "temporary-auth-failure")) {
509 gaim_connection_error(js->gc,
510 _("Temporary Authentication Failure"));
511 } else {
512 gaim_connection_error(js->gc, _("Authentication Failure"));
513 }
514 }
515 }