Mercurial > pidgin
comparison src/proxy.c @ 14099:7b030f6ed1c3
[gaim-migrate @ 16728]
Extremely minor error message improvements
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sat, 12 Aug 2006 22:16:23 +0000 |
parents | 7ded3834168f |
children | eec0c7fd8529 |
comparison
equal
deleted
inserted
replaced
14098:a8c9d714658c | 14099:7b030f6ed1c3 |
---|---|
295 /** | 295 /** |
296 * @param error An error message explaining why the connection | 296 * @param error An error message explaining why the connection |
297 * failed. This will be passed to the callback function | 297 * failed. This will be passed to the callback function |
298 * specified in the call to gaim_proxy_connect(). | 298 * specified in the call to gaim_proxy_connect(). |
299 */ | 299 */ |
300 /* | |
301 * TODO: Make sure all callers of this function pass a really really | |
302 * good error_message. | |
303 */ | |
300 static void | 304 static void |
301 gaim_proxy_connect_info_error(GaimProxyConnectInfo *connect_info, const gchar *error_message) | 305 gaim_proxy_connect_info_error(GaimProxyConnectInfo *connect_info, const gchar *error_message) |
302 { | 306 { |
303 if (connect_info->error_cb == NULL) | 307 if (connect_info->error_cb == NULL) |
304 { | 308 { |
1064 fcntl(fd, F_SETFL, O_NONBLOCK); | 1068 fcntl(fd, F_SETFL, O_NONBLOCK); |
1065 #ifndef _WIN32 | 1069 #ifndef _WIN32 |
1066 fcntl(fd, F_SETFD, FD_CLOEXEC); | 1070 fcntl(fd, F_SETFD, FD_CLOEXEC); |
1067 #endif | 1071 #endif |
1068 | 1072 |
1069 if (connect(fd, (struct sockaddr *)addr, addrlen) < 0) { | 1073 if (connect(fd, (struct sockaddr *)addr, addrlen) != 0) |
1074 { | |
1070 if ((errno == EINPROGRESS) || (errno == EINTR)) { | 1075 if ((errno == EINPROGRESS) || (errno == EINTR)) { |
1071 /* This just confuses people. */ | 1076 /* This just confuses people. */ |
1072 /* gaim_debug_warning("proxy", | 1077 /* gaim_debug_warning("proxy", |
1073 "Connect would have blocked.\n"); */ | 1078 "Connect would have blocked.\n"); */ |
1074 connect_info->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, no_one_calls, connect_info); | 1079 connect_info->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, no_one_calls, connect_info); |
1083 else { | 1088 else { |
1084 socklen_t len; | 1089 socklen_t len; |
1085 int error = ETIMEDOUT; | 1090 int error = ETIMEDOUT; |
1086 gaim_debug_misc("proxy", "Connect didn't block.\n"); | 1091 gaim_debug_misc("proxy", "Connect didn't block.\n"); |
1087 len = sizeof(error); | 1092 len = sizeof(error); |
1088 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { | 1093 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) |
1094 { | |
1089 gaim_debug_error("proxy", "getsockopt failed.\n"); | 1095 gaim_debug_error("proxy", "getsockopt failed.\n"); |
1090 close(fd); | 1096 close(fd); |
1091 return -1; | 1097 return -1; |
1092 } | 1098 } |
1093 /* TODO: Why is the following line so strange? */ | 1099 /* TODO: Why is the following line so strange? */ |
1453 fcntl(fd, F_SETFL, O_NONBLOCK); | 1459 fcntl(fd, F_SETFL, O_NONBLOCK); |
1454 #ifndef _WIN32 | 1460 #ifndef _WIN32 |
1455 fcntl(fd, F_SETFD, FD_CLOEXEC); | 1461 fcntl(fd, F_SETFD, FD_CLOEXEC); |
1456 #endif | 1462 #endif |
1457 | 1463 |
1458 if (connect(fd, addr, addrlen) < 0) { | 1464 if (connect(fd, addr, addrlen) != 0) |
1465 { | |
1459 if ((errno == EINPROGRESS) || (errno == EINTR)) { | 1466 if ((errno == EINPROGRESS) || (errno == EINTR)) { |
1460 gaim_debug_warning("http proxy", | 1467 gaim_debug_warning("http proxy", |
1461 "Connect would have blocked.\n"); | 1468 "Connect would have blocked.\n"); |
1462 | 1469 |
1463 if (connect_info->port != 80) { | 1470 if (connect_info->port != 80) { |
1479 | 1486 |
1480 gaim_debug_misc("http proxy", | 1487 gaim_debug_misc("http proxy", |
1481 "Connect didn't block.\n"); | 1488 "Connect didn't block.\n"); |
1482 | 1489 |
1483 len = sizeof(error); | 1490 len = sizeof(error); |
1484 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { | 1491 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) |
1492 { | |
1485 close(fd); | 1493 close(fd); |
1486 return -1; | 1494 return -1; |
1487 } | 1495 } |
1488 http_canwrite(connect_info, fd, GAIM_INPUT_WRITE); | 1496 http_canwrite(connect_info, fd, GAIM_INPUT_WRITE); |
1489 } | 1497 } |
1610 fcntl(fd, F_SETFL, O_NONBLOCK); | 1618 fcntl(fd, F_SETFL, O_NONBLOCK); |
1611 #ifndef _WIN32 | 1619 #ifndef _WIN32 |
1612 fcntl(fd, F_SETFD, FD_CLOEXEC); | 1620 fcntl(fd, F_SETFD, FD_CLOEXEC); |
1613 #endif | 1621 #endif |
1614 | 1622 |
1615 if (connect(fd, addr, addrlen) < 0) { | 1623 if (connect(fd, addr, addrlen) != 0) |
1624 { | |
1616 if ((errno == EINPROGRESS) || (errno == EINTR)) { | 1625 if ((errno == EINPROGRESS) || (errno == EINTR)) { |
1617 gaim_debug_warning("socks4 proxy", | 1626 gaim_debug_warning("socks4 proxy", |
1618 "Connect would have blocked.\n"); | 1627 "Connect would have blocked.\n"); |
1619 connect_info->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s4_canwrite, connect_info); | 1628 connect_info->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s4_canwrite, connect_info); |
1620 } | 1629 } |
1629 gaim_debug_misc("socks4 proxy", | 1638 gaim_debug_misc("socks4 proxy", |
1630 "Connect didn't block.\n"); | 1639 "Connect didn't block.\n"); |
1631 | 1640 |
1632 len = sizeof(error); | 1641 len = sizeof(error); |
1633 | 1642 |
1634 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { | 1643 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) |
1644 { | |
1635 close(fd); | 1645 close(fd); |
1636 return -1; | 1646 return -1; |
1637 } | 1647 } |
1638 | 1648 |
1639 s4_canwrite(connect_info, fd, GAIM_INPUT_WRITE); | 1649 s4_canwrite(connect_info, fd, GAIM_INPUT_WRITE); |
2157 fcntl(fd, F_SETFL, O_NONBLOCK); | 2167 fcntl(fd, F_SETFL, O_NONBLOCK); |
2158 #ifndef _WIN32 | 2168 #ifndef _WIN32 |
2159 fcntl(fd, F_SETFD, FD_CLOEXEC); | 2169 fcntl(fd, F_SETFD, FD_CLOEXEC); |
2160 #endif | 2170 #endif |
2161 | 2171 |
2162 if (connect(fd, addr, addrlen) < 0) { | 2172 if (connect(fd, addr, addrlen) != 0) |
2173 { | |
2163 if ((errno == EINPROGRESS) || (errno == EINTR)) { | 2174 if ((errno == EINPROGRESS) || (errno == EINTR)) { |
2164 gaim_debug_warning("socks5 proxy", | 2175 gaim_debug_warning("socks5 proxy", |
2165 "Connect would have blocked.\n"); | 2176 "Connect would have blocked.\n"); |
2166 | 2177 |
2167 connect_info->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s5_canwrite, connect_info); | 2178 connect_info->inpa = gaim_input_add(fd, GAIM_INPUT_WRITE, s5_canwrite, connect_info); |
2177 | 2188 |
2178 gaim_debug_misc("socks5 proxy", "Connect didn't block.\n"); | 2189 gaim_debug_misc("socks5 proxy", "Connect didn't block.\n"); |
2179 | 2190 |
2180 len = sizeof(error); | 2191 len = sizeof(error); |
2181 | 2192 |
2182 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { | 2193 if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) |
2194 { | |
2183 close(fd); | 2195 close(fd); |
2184 return -1; | 2196 return -1; |
2185 } | 2197 } |
2186 | 2198 |
2187 s5_canwrite(connect_info, fd, GAIM_INPUT_WRITE); | 2199 s5_canwrite(connect_info, fd, GAIM_INPUT_WRITE); |
2194 { | 2206 { |
2195 size_t addrlen; | 2207 size_t addrlen; |
2196 struct sockaddr *addr; | 2208 struct sockaddr *addr; |
2197 int ret = -1; | 2209 int ret = -1; |
2198 | 2210 |
2199 while (connect_info->hosts) { | 2211 if (connect_info->hosts == NULL) |
2212 { | |
2213 gaim_proxy_connect_info_error(connect_info, _("Could not resolve host name")); | |
2214 return; | |
2215 } | |
2216 | |
2217 while (connect_info->hosts) | |
2218 { | |
2200 addrlen = GPOINTER_TO_INT(connect_info->hosts->data); | 2219 addrlen = GPOINTER_TO_INT(connect_info->hosts->data); |
2201 connect_info->hosts = g_slist_remove(connect_info->hosts, connect_info->hosts->data); | 2220 connect_info->hosts = g_slist_remove(connect_info->hosts, connect_info->hosts->data); |
2202 addr = connect_info->hosts->data; | 2221 addr = connect_info->hosts->data; |
2203 connect_info->hosts = g_slist_remove(connect_info->hosts, connect_info->hosts->data); | 2222 connect_info->hosts = g_slist_remove(connect_info->hosts, connect_info->hosts->data); |
2204 | 2223 |
2227 break; | 2246 break; |
2228 } | 2247 } |
2229 | 2248 |
2230 g_free(addr); | 2249 g_free(addr); |
2231 | 2250 |
2232 if (ret > 0) | 2251 if (ret >= 0) |
2233 break; | 2252 break; |
2234 } | 2253 } |
2235 | 2254 |
2236 if (ret < 0) { | 2255 if (ret < 0) { |
2237 gaim_proxy_connect_info_error(connect_info, _("TODO")); | 2256 gaim_proxy_connect_info_error(connect_info, _("Unable to establish a connection")); |
2238 } | 2257 } |
2239 } | 2258 } |
2240 | 2259 |
2241 static void | 2260 static void |
2242 connection_host_resolved(GSList *hosts, gpointer data, | 2261 connection_host_resolved(GSList *hosts, gpointer data, |
2243 const char *error_message) | 2262 const char *error_message) |
2244 { | 2263 { |
2245 GaimProxyConnectInfo *connect_info; | 2264 GaimProxyConnectInfo *connect_info; |
2265 | |
2266 if (error_message != NULL) | |
2267 { | |
2268 gaim_debug_info("proxy", "Error while resolving hostname: %s\n", error_message); | |
2269 /* TODO: Destroy connect_info and return? */ | |
2270 } | |
2246 | 2271 |
2247 connect_info = data; | 2272 connect_info = data; |
2248 connect_info->hosts = hosts; | 2273 connect_info->hosts = hosts; |
2249 | 2274 |
2250 try_connect(connect_info); | 2275 try_connect(connect_info); |