comparison libpurple/protocols/irc/irc.c @ 20112:1b420901ca3b

Move prpl-irc to purple_connection_error_reason.
author Will Thompson <will.thompson@collabora.co.uk>
date Tue, 18 Sep 2007 21:56:56 +0000
parents 44b4e8bd759b
children 1cbda8e2b913
comparison
equal deleted inserted replaced
20111:b5ccce9a88a1 20112:1b420901ca3b
121 ret = do_send(irc, irc->outbuf->outptr, writelen); 121 ret = do_send(irc, irc->outbuf->outptr, writelen);
122 122
123 if (ret < 0 && errno == EAGAIN) 123 if (ret < 0 && errno == EAGAIN)
124 return; 124 return;
125 else if (ret <= 0) { 125 else if (ret <= 0) {
126 purple_connection_error(purple_account_get_connection(irc->account), 126 PurpleConnection *gc = purple_account_get_connection(irc->account);
127 _("Server has disconnected")); 127 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
128 _("Server has disconnected"));
128 return; 129 return;
129 } 130 }
130 131
131 purple_circ_buffer_mark_read(irc->outbuf, ret); 132 purple_circ_buffer_mark_read(irc->outbuf, ret);
132 133
159 } 160 }
160 161
161 /* purple_debug(PURPLE_DEBUG_MISC, "irc", "sent%s: %s", 162 /* purple_debug(PURPLE_DEBUG_MISC, "irc", "sent%s: %s",
162 irc->gsc ? " (ssl)" : "", tosend); */ 163 irc->gsc ? " (ssl)" : "", tosend); */
163 if (ret <= 0 && errno != EAGAIN) { 164 if (ret <= 0 && errno != EAGAIN) {
164 purple_connection_error(purple_account_get_connection(irc->account), 165 PurpleConnection *gc = purple_account_get_connection(irc->account);
165 _("Server has disconnected")); 166 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
167 _("Server has disconnected"));
166 } else if (ret < buflen) { 168 } else if (ret < buflen) {
167 if (ret < 0) 169 if (ret < 0)
168 ret = 0; 170 ret = 0;
169 if (!irc->writeh) 171 if (!irc->writeh)
170 irc->writeh = purple_input_add( 172 irc->writeh = purple_input_add(
293 295
294 gc = purple_account_get_connection(account); 296 gc = purple_account_get_connection(account);
295 gc->flags |= PURPLE_CONNECTION_NO_NEWLINES; 297 gc->flags |= PURPLE_CONNECTION_NO_NEWLINES;
296 298
297 if (strpbrk(username, " \t\v\r\n") != NULL) { 299 if (strpbrk(username, " \t\v\r\n") != NULL) {
298 purple_connection_error(gc, _("IRC nicks may not contain whitespace")); 300 purple_connection_error_reason (gc, PURPLE_REASON_INVALID_USERNAME,
301 _("IRC nicks may not contain whitespace"));
299 return; 302 return;
300 } 303 }
301 304
302 gc->proto_data = irc = g_new0(struct irc_conn, 1); 305 gc->proto_data = irc = g_new0(struct irc_conn, 1);
303 irc->fd = -1; 306 irc->fd = -1;
322 if (purple_ssl_is_supported()) { 325 if (purple_ssl_is_supported()) {
323 irc->gsc = purple_ssl_connect(account, irc->server, 326 irc->gsc = purple_ssl_connect(account, irc->server,
324 purple_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT), 327 purple_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT),
325 irc_login_cb_ssl, irc_ssl_connect_failure, gc); 328 irc_login_cb_ssl, irc_ssl_connect_failure, gc);
326 } else { 329 } else {
327 purple_connection_error(gc, _("SSL support unavailable")); 330 purple_connection_error_reason (gc, PURPLE_REASON_ENCRYPTION_ERROR,
331 _("SSL support unavailable"));
328 return; 332 return;
329 } 333 }
330 } 334 }
331 335
332 if (!irc->gsc) { 336 if (!irc->gsc) {
333 337
334 if (purple_proxy_connect(gc, account, irc->server, 338 if (purple_proxy_connect(gc, account, irc->server,
335 purple_account_get_int(account, "port", IRC_DEFAULT_PORT), 339 purple_account_get_int(account, "port", IRC_DEFAULT_PORT),
336 irc_login_cb, gc) == NULL) 340 irc_login_cb, gc) == NULL)
337 { 341 {
338 purple_connection_error(gc, _("Couldn't create socket")); 342 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
343 _("Couldn't create socket"));
339 return; 344 return;
340 } 345 }
341 } 346 }
342 } 347 }
343 348
416 { 421 {
417 PurpleConnection *gc = data; 422 PurpleConnection *gc = data;
418 struct irc_conn *irc = gc->proto_data; 423 struct irc_conn *irc = gc->proto_data;
419 424
420 if (source < 0) { 425 if (source < 0) {
421 purple_connection_error(gc, _("Couldn't connect to host")); 426 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
427 _("Couldn't connect to host"));
422 return; 428 return;
423 } 429 }
424 430
425 irc->fd = source; 431 irc->fd = source;
426 432
433 irc_ssl_connect_failure(PurpleSslConnection *gsc, PurpleSslErrorType error, 439 irc_ssl_connect_failure(PurpleSslConnection *gsc, PurpleSslErrorType error,
434 gpointer data) 440 gpointer data)
435 { 441 {
436 PurpleConnection *gc = data; 442 PurpleConnection *gc = data;
437 struct irc_conn *irc = gc->proto_data; 443 struct irc_conn *irc = gc->proto_data;
444 PurpleDisconnectReason reason;
438 445
439 irc->gsc = NULL; 446 irc->gsc = NULL;
440 447
441 purple_connection_error(gc, purple_ssl_strerror(error)); 448 switch (error) {
449 case PURPLE_SSL_HANDSHAKE_FAILED:
450 case PURPLE_SSL_CONNECT_FAILED:
451 reason = PURPLE_REASON_ENCRYPTION_ERROR;
452 break;
453 case PURPLE_SSL_CERTIFICATE_INVALID:
454 /* TODO: maybe PURPLE_SSL_* should be more specific? */
455 reason = PURPLE_REASON_CERT_OTHER_ERROR;
456 break;
457 default:
458 g_assert_not_reached ();
459 reason = PURPLE_REASON_ENCRYPTION_ERROR;
460 }
461
462 purple_connection_error_reason (gc, reason, purple_ssl_strerror(error));
442 } 463 }
443 464
444 static void irc_close(PurpleConnection *gc) 465 static void irc_close(PurpleConnection *gc)
445 { 466 {
446 struct irc_conn *irc = gc->proto_data; 467 struct irc_conn *irc = gc->proto_data;
604 625
605 if (len < 0 && errno == EAGAIN) { 626 if (len < 0 && errno == EAGAIN) {
606 /* Try again later */ 627 /* Try again later */
607 return; 628 return;
608 } else if (len < 0) { 629 } else if (len < 0) {
609 purple_connection_error(gc, _("Read error")); 630 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
631 _("Read error"));
610 return; 632 return;
611 } else if (len == 0) { 633 } else if (len == 0) {
612 purple_connection_error(gc, _("Server has disconnected")); 634 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
635 _("Server has disconnected"));
613 return; 636 return;
614 } 637 }
615 638
616 read_input(irc, len); 639 read_input(irc, len);
617 } 640 }
629 652
630 len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1); 653 len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1);
631 if (len < 0 && errno == EAGAIN) { 654 if (len < 0 && errno == EAGAIN) {
632 return; 655 return;
633 } else if (len < 0) { 656 } else if (len < 0) {
634 purple_connection_error(gc, _("Read error")); 657 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
658 _("Read error"));
635 return; 659 return;
636 } else if (len == 0) { 660 } else if (len == 0) {
637 purple_connection_error(gc, _("Server has disconnected")); 661 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR,
662 _("Server has disconnected"));
638 return; 663 return;
639 } 664 }
640 665
641 read_input(irc, len); 666 read_input(irc, len);
642 } 667 }