Mercurial > pidgin
comparison libpurple/protocols/irc/irc.c @ 20812:88aa557b997f
propagate from branch 'im.pidgin.pidgin' (head 017296ee954fb91349806c809983c916842603da)
to branch 'im.pidgin.cpw.resiak.disconnectreason' (head 8648cc67b0f11cdb0c5d48a703bca11b56606a16)
author | Will Thompson <will.thompson@collabora.co.uk> |
---|---|
date | Sun, 07 Oct 2007 10:28:32 +0000 |
parents | 682543aced31 |
children | efa448405f3d |
comparison
equal
deleted
inserted
replaced
20811:368d79355aba | 20812:88aa557b997f |
---|---|
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 gc->wants_to_die = TRUE; |
301 purple_connection_error_reason (gc, PURPLE_REASON_INVALID_SETTINGS, | |
302 _("IRC nicks may not contain whitespace")); | |
299 return; | 303 return; |
300 } | 304 } |
301 | 305 |
302 gc->proto_data = irc = g_new0(struct irc_conn, 1); | 306 gc->proto_data = irc = g_new0(struct irc_conn, 1); |
303 irc->fd = -1; | 307 irc->fd = -1; |
322 if (purple_ssl_is_supported()) { | 326 if (purple_ssl_is_supported()) { |
323 irc->gsc = purple_ssl_connect(account, irc->server, | 327 irc->gsc = purple_ssl_connect(account, irc->server, |
324 purple_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT), | 328 purple_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT), |
325 irc_login_cb_ssl, irc_ssl_connect_failure, gc); | 329 irc_login_cb_ssl, irc_ssl_connect_failure, gc); |
326 } else { | 330 } else { |
327 purple_connection_error(gc, _("SSL support unavailable")); | 331 gc->wants_to_die = TRUE; |
332 purple_connection_error_reason (gc, PURPLE_REASON_NO_SSL_SUPPORT, | |
333 _("SSL support unavailable")); | |
328 return; | 334 return; |
329 } | 335 } |
330 } | 336 } |
331 | 337 |
332 if (!irc->gsc) { | 338 if (!irc->gsc) { |
333 | 339 |
334 if (purple_proxy_connect(gc, account, irc->server, | 340 if (purple_proxy_connect(gc, account, irc->server, |
335 purple_account_get_int(account, "port", IRC_DEFAULT_PORT), | 341 purple_account_get_int(account, "port", IRC_DEFAULT_PORT), |
336 irc_login_cb, gc) == NULL) | 342 irc_login_cb, gc) == NULL) |
337 { | 343 { |
338 purple_connection_error(gc, _("Couldn't create socket")); | 344 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR, |
345 _("Couldn't create socket")); | |
339 return; | 346 return; |
340 } | 347 } |
341 } | 348 } |
342 } | 349 } |
343 | 350 |
350 int ret; | 357 int ret; |
351 | 358 |
352 if (pass && *pass) { | 359 if (pass && *pass) { |
353 buf = irc_format(irc, "vv", "PASS", pass); | 360 buf = irc_format(irc, "vv", "PASS", pass); |
354 if (irc_send(irc, buf) < 0) { | 361 if (irc_send(irc, buf) < 0) { |
355 /* purple_connection_error(gc, "Error sending password"); */ | |
356 g_free(buf); | 362 g_free(buf); |
357 return FALSE; | 363 return FALSE; |
358 } | 364 } |
359 g_free(buf); | 365 g_free(buf); |
360 } | 366 } |
382 | 388 |
383 buf = irc_format(irc, "vvvv:", "USER", tmp ? tmp : username, hostname, irc->server, | 389 buf = irc_format(irc, "vvvv:", "USER", tmp ? tmp : username, hostname, irc->server, |
384 strlen(realname) ? realname : IRC_DEFAULT_ALIAS); | 390 strlen(realname) ? realname : IRC_DEFAULT_ALIAS); |
385 g_free(tmp); | 391 g_free(tmp); |
386 if (irc_send(irc, buf) < 0) { | 392 if (irc_send(irc, buf) < 0) { |
387 /* purple_connection_error(gc, "Error registering with server");*/ | |
388 g_free(buf); | 393 g_free(buf); |
389 return FALSE; | 394 return FALSE; |
390 } | 395 } |
391 g_free(buf); | 396 g_free(buf); |
392 buf = irc_format(irc, "vn", "NICK", purple_connection_get_display_name(gc)); | 397 buf = irc_format(irc, "vn", "NICK", purple_connection_get_display_name(gc)); |
393 if (irc_send(irc, buf) < 0) { | 398 if (irc_send(irc, buf) < 0) { |
394 /* purple_connection_error(gc, "Error sending nickname");*/ | |
395 g_free(buf); | 399 g_free(buf); |
396 return FALSE; | 400 return FALSE; |
397 } | 401 } |
398 g_free(buf); | 402 g_free(buf); |
399 | 403 |
416 { | 420 { |
417 PurpleConnection *gc = data; | 421 PurpleConnection *gc = data; |
418 struct irc_conn *irc = gc->proto_data; | 422 struct irc_conn *irc = gc->proto_data; |
419 | 423 |
420 if (source < 0) { | 424 if (source < 0) { |
421 purple_connection_error(gc, _("Couldn't connect to host")); | 425 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR, |
426 _("Couldn't connect to host")); | |
422 return; | 427 return; |
423 } | 428 } |
424 | 429 |
425 irc->fd = source; | 430 irc->fd = source; |
426 | 431 |
436 PurpleConnection *gc = data; | 441 PurpleConnection *gc = data; |
437 struct irc_conn *irc = gc->proto_data; | 442 struct irc_conn *irc = gc->proto_data; |
438 | 443 |
439 irc->gsc = NULL; | 444 irc->gsc = NULL; |
440 | 445 |
441 purple_connection_error(gc, purple_ssl_strerror(error)); | 446 purple_connection_ssl_error (gc, error); |
442 } | 447 } |
443 | 448 |
444 static void irc_close(PurpleConnection *gc) | 449 static void irc_close(PurpleConnection *gc) |
445 { | 450 { |
446 struct irc_conn *irc = gc->proto_data; | 451 struct irc_conn *irc = gc->proto_data; |
604 | 609 |
605 if (len < 0 && errno == EAGAIN) { | 610 if (len < 0 && errno == EAGAIN) { |
606 /* Try again later */ | 611 /* Try again later */ |
607 return; | 612 return; |
608 } else if (len < 0) { | 613 } else if (len < 0) { |
609 purple_connection_error(gc, _("Read error")); | 614 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR, |
615 _("Read error")); | |
610 return; | 616 return; |
611 } else if (len == 0) { | 617 } else if (len == 0) { |
612 purple_connection_error(gc, _("Server has disconnected")); | 618 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR, |
619 _("Server has disconnected")); | |
613 return; | 620 return; |
614 } | 621 } |
615 | 622 |
616 read_input(irc, len); | 623 read_input(irc, len); |
617 } | 624 } |
629 | 636 |
630 len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1); | 637 len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1); |
631 if (len < 0 && errno == EAGAIN) { | 638 if (len < 0 && errno == EAGAIN) { |
632 return; | 639 return; |
633 } else if (len < 0) { | 640 } else if (len < 0) { |
634 purple_connection_error(gc, _("Read error")); | 641 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR, |
642 _("Read error")); | |
635 return; | 643 return; |
636 } else if (len == 0) { | 644 } else if (len == 0) { |
637 purple_connection_error(gc, _("Server has disconnected")); | 645 purple_connection_error_reason (gc, PURPLE_REASON_NETWORK_ERROR, |
646 _("Server has disconnected")); | |
638 return; | 647 return; |
639 } | 648 } |
640 | 649 |
641 read_input(irc, len); | 650 read_input(irc, len); |
642 } | 651 } |