Mercurial > pidgin.yaz
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 } |