Mercurial > pidgin
comparison libpurple/proxy.c @ 21121:35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
a locale-specific string in the locale-specific encoding, which isn't
guaranteed to be UTF-8. g_strerror will always return a UTF-8 string.
I left gg and zephyr untouched, since gg doesn't include glib headers yet,
and zephyr does something weird with a #define for strerror. Someone more
familliar with those should take a look.
And the win32 guys should check and see if I screwed something up, since
they had strerror #defined to something else.
This should fix #2247 (and maybe some mystery crashes)
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Sat, 03 Nov 2007 17:52:28 +0000 |
| parents | 787b3897ba9f |
| children | 01e814b7556b |
comparison
equal
deleted
inserted
replaced
| 21120:0cc12e6909e2 | 21121:35b4f1dc4c8d |
|---|---|
| 427 | 427 |
| 428 if (ret != 0 || error != 0) { | 428 if (ret != 0 || error != 0) { |
| 429 if (ret != 0) | 429 if (ret != 0) |
| 430 error = errno; | 430 error = errno; |
| 431 purple_debug_info("proxy", "Error connecting to %s:%d (%s).\n", | 431 purple_debug_info("proxy", "Error connecting to %s:%d (%s).\n", |
| 432 connect_data->host, connect_data->port, strerror(error)); | 432 connect_data->host, connect_data->port, g_strerror(error)); |
| 433 | 433 |
| 434 purple_proxy_connect_data_disconnect(connect_data, strerror(error)); | 434 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
| 435 return; | 435 return; |
| 436 } | 436 } |
| 437 | 437 |
| 438 purple_proxy_connect_data_connected(connect_data); | 438 purple_proxy_connect_data_connected(connect_data); |
| 439 } | 439 } |
| 456 | 456 |
| 457 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); | 457 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
| 458 if (connect_data->fd < 0) | 458 if (connect_data->fd < 0) |
| 459 { | 459 { |
| 460 purple_proxy_connect_data_disconnect_formatted(connect_data, | 460 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 461 _("Unable to create socket:\n%s"), strerror(errno)); | 461 _("Unable to create socket:\n%s"), g_strerror(errno)); |
| 462 return; | 462 return; |
| 463 } | 463 } |
| 464 | 464 |
| 465 flags = fcntl(connect_data->fd, F_GETFL); | 465 flags = fcntl(connect_data->fd, F_GETFL); |
| 466 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); | 466 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
| 476 connect_data->inpa = purple_input_add(connect_data->fd, | 476 connect_data->inpa = purple_input_add(connect_data->fd, |
| 477 PURPLE_INPUT_WRITE, socket_ready_cb, connect_data); | 477 PURPLE_INPUT_WRITE, socket_ready_cb, connect_data); |
| 478 } | 478 } |
| 479 else | 479 else |
| 480 { | 480 { |
| 481 purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); | 481 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
| 482 } | 482 } |
| 483 } | 483 } |
| 484 else | 484 else |
| 485 { | 485 { |
| 486 /* | 486 /* |
| 494 ret = purple_input_get_error(connect_data->fd, &error); | 494 ret = purple_input_get_error(connect_data->fd, &error); |
| 495 if ((ret != 0) || (error != 0)) | 495 if ((ret != 0) || (error != 0)) |
| 496 { | 496 { |
| 497 if (ret != 0) | 497 if (ret != 0) |
| 498 error = errno; | 498 error = errno; |
| 499 purple_proxy_connect_data_disconnect(connect_data, strerror(error)); | 499 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
| 500 return; | 500 return; |
| 501 } | 501 } |
| 502 | 502 |
| 503 /* | 503 /* |
| 504 * We want to call the "connected" callback eventually, but we | 504 * We want to call the "connected" callback eventually, but we |
| 532 if (errno == EAGAIN) | 532 if (errno == EAGAIN) |
| 533 /* No worries */ | 533 /* No worries */ |
| 534 return; | 534 return; |
| 535 | 535 |
| 536 /* Error! */ | 536 /* Error! */ |
| 537 purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); | 537 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
| 538 return; | 538 return; |
| 539 } | 539 } |
| 540 if (ret < request_len) { | 540 if (ret < request_len) { |
| 541 connect_data->written_len += ret; | 541 connect_data->written_len += ret; |
| 542 return; | 542 return; |
| 591 /* No worries */ | 591 /* No worries */ |
| 592 return; | 592 return; |
| 593 | 593 |
| 594 /* Error! */ | 594 /* Error! */ |
| 595 purple_proxy_connect_data_disconnect_formatted(connect_data, | 595 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 596 _("Lost connection with server:\n%s"), strerror(errno)); | 596 _("Lost connection with server:\n%s"), g_strerror(errno)); |
| 597 return; | 597 return; |
| 598 } | 598 } |
| 599 | 599 |
| 600 connect_data->read_len += len; | 600 connect_data->read_len += len; |
| 601 p[len] = '\0'; | 601 p[len] = '\0'; |
| 830 ret = purple_input_get_error(connect_data->fd, &error); | 830 ret = purple_input_get_error(connect_data->fd, &error); |
| 831 if ((ret != 0) || (error != 0)) | 831 if ((ret != 0) || (error != 0)) |
| 832 { | 832 { |
| 833 if (ret != 0) | 833 if (ret != 0) |
| 834 error = errno; | 834 error = errno; |
| 835 purple_proxy_connect_data_disconnect(connect_data, strerror(error)); | 835 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
| 836 return; | 836 return; |
| 837 } | 837 } |
| 838 | 838 |
| 839 purple_debug_info("proxy", "Using CONNECT tunneling for %s:%d\n", | 839 purple_debug_info("proxy", "Using CONNECT tunneling for %s:%d\n", |
| 840 connect_data->host, connect_data->port); | 840 connect_data->host, connect_data->port); |
| 897 | 897 |
| 898 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); | 898 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
| 899 if (connect_data->fd < 0) | 899 if (connect_data->fd < 0) |
| 900 { | 900 { |
| 901 purple_proxy_connect_data_disconnect_formatted(connect_data, | 901 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 902 _("Unable to create socket:\n%s"), strerror(errno)); | 902 _("Unable to create socket:\n%s"), g_strerror(errno)); |
| 903 return; | 903 return; |
| 904 } | 904 } |
| 905 | 905 |
| 906 flags = fcntl(connect_data->fd, F_GETFL); | 906 flags = fcntl(connect_data->fd, F_GETFL); |
| 907 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); | 907 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
| 935 purple_proxy_connect_data_connected(connect_data); | 935 purple_proxy_connect_data_connected(connect_data); |
| 936 } | 936 } |
| 937 } | 937 } |
| 938 else | 938 else |
| 939 { | 939 { |
| 940 purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); | 940 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
| 941 } | 941 } |
| 942 } | 942 } |
| 943 else | 943 else |
| 944 { | 944 { |
| 945 purple_debug_info("proxy", "Connected immediately.\n"); | 945 purple_debug_info("proxy", "Connected immediately.\n"); |
| 976 purple_proxy_connect_data_connected(connect_data); | 976 purple_proxy_connect_data_connected(connect_data); |
| 977 return; | 977 return; |
| 978 } | 978 } |
| 979 } | 979 } |
| 980 | 980 |
| 981 purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); | 981 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
| 982 } | 982 } |
| 983 | 983 |
| 984 static void | 984 static void |
| 985 s4_canwrite(gpointer data, gint source, PurpleInputCondition cond) | 985 s4_canwrite(gpointer data, gint source, PurpleInputCondition cond) |
| 986 { | 986 { |
| 1001 ret = purple_input_get_error(connect_data->fd, &error); | 1001 ret = purple_input_get_error(connect_data->fd, &error); |
| 1002 if ((ret != 0) || (error != 0)) | 1002 if ((ret != 0) || (error != 0)) |
| 1003 { | 1003 { |
| 1004 if (ret != 0) | 1004 if (ret != 0) |
| 1005 error = errno; | 1005 error = errno; |
| 1006 purple_proxy_connect_data_disconnect(connect_data, strerror(error)); | 1006 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
| 1007 return; | 1007 return; |
| 1008 } | 1008 } |
| 1009 | 1009 |
| 1010 /* | 1010 /* |
| 1011 * The socks4 spec doesn't include support for doing host name | 1011 * The socks4 spec doesn't include support for doing host name |
| 1056 | 1056 |
| 1057 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); | 1057 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
| 1058 if (connect_data->fd < 0) | 1058 if (connect_data->fd < 0) |
| 1059 { | 1059 { |
| 1060 purple_proxy_connect_data_disconnect_formatted(connect_data, | 1060 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 1061 _("Unable to create socket:\n%s"), strerror(errno)); | 1061 _("Unable to create socket:\n%s"), g_strerror(errno)); |
| 1062 return; | 1062 return; |
| 1063 } | 1063 } |
| 1064 | 1064 |
| 1065 flags = fcntl(connect_data->fd, F_GETFL); | 1065 flags = fcntl(connect_data->fd, F_GETFL); |
| 1066 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); | 1066 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
| 1076 connect_data->inpa = purple_input_add(connect_data->fd, | 1076 connect_data->inpa = purple_input_add(connect_data->fd, |
| 1077 PURPLE_INPUT_WRITE, s4_canwrite, connect_data); | 1077 PURPLE_INPUT_WRITE, s4_canwrite, connect_data); |
| 1078 } | 1078 } |
| 1079 else | 1079 else |
| 1080 { | 1080 { |
| 1081 purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); | 1081 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
| 1082 } | 1082 } |
| 1083 } | 1083 } |
| 1084 else | 1084 else |
| 1085 { | 1085 { |
| 1086 purple_debug_info("proxy", "Connected immediately.\n"); | 1086 purple_debug_info("proxy", "Connected immediately.\n"); |
| 1136 /* No worries */ | 1136 /* No worries */ |
| 1137 return; | 1137 return; |
| 1138 | 1138 |
| 1139 /* Error! */ | 1139 /* Error! */ |
| 1140 purple_proxy_connect_data_disconnect_formatted(connect_data, | 1140 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 1141 _("Lost connection with server:\n%s"), strerror(errno)); | 1141 _("Lost connection with server:\n%s"), g_strerror(errno)); |
| 1142 return; | 1142 return; |
| 1143 } | 1143 } |
| 1144 | 1144 |
| 1145 connect_data->read_len += len; | 1145 connect_data->read_len += len; |
| 1146 | 1146 |
| 1245 /* No worries */ | 1245 /* No worries */ |
| 1246 return; | 1246 return; |
| 1247 | 1247 |
| 1248 /* Error! */ | 1248 /* Error! */ |
| 1249 purple_proxy_connect_data_disconnect_formatted(connect_data, | 1249 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 1250 _("Lost connection with server:\n%s"), strerror(errno)); | 1250 _("Lost connection with server:\n%s"), g_strerror(errno)); |
| 1251 return; | 1251 return; |
| 1252 } | 1252 } |
| 1253 | 1253 |
| 1254 connect_data->read_len += len; | 1254 connect_data->read_len += len; |
| 1255 if (connect_data->read_len < 2) | 1255 if (connect_data->read_len < 2) |
| 1345 /* No worries */ | 1345 /* No worries */ |
| 1346 return; | 1346 return; |
| 1347 | 1347 |
| 1348 /* Error! */ | 1348 /* Error! */ |
| 1349 purple_proxy_connect_data_disconnect_formatted(connect_data, | 1349 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 1350 _("Lost connection with server:\n%s"), strerror(errno)); | 1350 _("Lost connection with server:\n%s"), g_strerror(errno)); |
| 1351 return; | 1351 return; |
| 1352 } | 1352 } |
| 1353 | 1353 |
| 1354 connect_data->read_len += len; | 1354 connect_data->read_len += len; |
| 1355 if (connect_data->read_len < 2) | 1355 if (connect_data->read_len < 2) |
| 1473 /* No worries */ | 1473 /* No worries */ |
| 1474 return; | 1474 return; |
| 1475 | 1475 |
| 1476 /* Error! */ | 1476 /* Error! */ |
| 1477 purple_proxy_connect_data_disconnect_formatted(connect_data, | 1477 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 1478 _("Lost connection with server:\n%s"), strerror(errno)); | 1478 _("Lost connection with server:\n%s"), g_strerror(errno)); |
| 1479 return; | 1479 return; |
| 1480 } | 1480 } |
| 1481 | 1481 |
| 1482 connect_data->read_len += len; | 1482 connect_data->read_len += len; |
| 1483 if (connect_data->read_len < 2) | 1483 if (connect_data->read_len < 2) |
| 1582 ret = purple_input_get_error(connect_data->fd, &error); | 1582 ret = purple_input_get_error(connect_data->fd, &error); |
| 1583 if ((ret != 0) || (error != 0)) | 1583 if ((ret != 0) || (error != 0)) |
| 1584 { | 1584 { |
| 1585 if (ret != 0) | 1585 if (ret != 0) |
| 1586 error = errno; | 1586 error = errno; |
| 1587 purple_proxy_connect_data_disconnect(connect_data, strerror(error)); | 1587 purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); |
| 1588 return; | 1588 return; |
| 1589 } | 1589 } |
| 1590 | 1590 |
| 1591 i = 0; | 1591 i = 0; |
| 1592 buf[0] = 0x05; /* SOCKS version 5 */ | 1592 buf[0] = 0x05; /* SOCKS version 5 */ |
| 1627 | 1627 |
| 1628 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); | 1628 connect_data->fd = socket(addr->sa_family, SOCK_STREAM, 0); |
| 1629 if (connect_data->fd < 0) | 1629 if (connect_data->fd < 0) |
| 1630 { | 1630 { |
| 1631 purple_proxy_connect_data_disconnect_formatted(connect_data, | 1631 purple_proxy_connect_data_disconnect_formatted(connect_data, |
| 1632 _("Unable to create socket:\n%s"), strerror(errno)); | 1632 _("Unable to create socket:\n%s"), g_strerror(errno)); |
| 1633 return; | 1633 return; |
| 1634 } | 1634 } |
| 1635 | 1635 |
| 1636 flags = fcntl(connect_data->fd, F_GETFL); | 1636 flags = fcntl(connect_data->fd, F_GETFL); |
| 1637 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); | 1637 fcntl(connect_data->fd, F_SETFL, flags | O_NONBLOCK); |
| 1647 connect_data->inpa = purple_input_add(connect_data->fd, | 1647 connect_data->inpa = purple_input_add(connect_data->fd, |
| 1648 PURPLE_INPUT_WRITE, s5_canwrite, connect_data); | 1648 PURPLE_INPUT_WRITE, s5_canwrite, connect_data); |
| 1649 } | 1649 } |
| 1650 else | 1650 else |
| 1651 { | 1651 { |
| 1652 purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); | 1652 purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); |
| 1653 } | 1653 } |
| 1654 } | 1654 } |
| 1655 else | 1655 else |
| 1656 { | 1656 { |
| 1657 purple_debug_info("proxy", "Connected immediately.\n"); | 1657 purple_debug_info("proxy", "Connected immediately.\n"); |
