Mercurial > pidgin.yaz
comparison libpurple/proxy.c @ 23391:5c70d953a497
propagate from branch 'im.pidgin.pidgin.2.4.3' (head 709ec9c29e9d76eebbded25061107ef0a2a2b148)
to branch 'im.pidgin.pidgin' (head e8d624d4b86e9505bb225f2a6e7b29ec6c8affed)
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Thu, 26 Jun 2008 09:07:56 +0000 |
parents | 8a1798bcddc6 242fd82b5fe6 |
children | 64585aab233a |
comparison
equal
deleted
inserted
replaced
23057:d04d24b1db9b | 23391:5c70d953a497 |
---|---|
1141 guchar *dest, *buf; | 1141 guchar *dest, *buf; |
1142 PurpleProxyConnectData *connect_data = data; | 1142 PurpleProxyConnectData *connect_data = data; |
1143 int len; | 1143 int len; |
1144 | 1144 |
1145 if (connect_data->read_buffer == NULL) { | 1145 if (connect_data->read_buffer == NULL) { |
1146 connect_data->read_buf_len = 4; | 1146 connect_data->read_buf_len = 5; |
1147 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); | 1147 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); |
1148 connect_data->read_len = 0; | 1148 connect_data->read_len = 0; |
1149 } | 1149 } |
1150 | 1150 |
1151 dest = connect_data->read_buffer + connect_data->read_len; | 1151 dest = connect_data->read_buffer + connect_data->read_len; |
1210 case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ | 1210 case 0x04: /* the address is a version-6 IP address, with a length of 16 octets */ |
1211 if(!s5_ensure_buffer_length(connect_data, 4 + 16)) | 1211 if(!s5_ensure_buffer_length(connect_data, 4 + 16)) |
1212 return; | 1212 return; |
1213 buf += 4 + 16; | 1213 buf += 4 + 16; |
1214 break; | 1214 break; |
1215 default: | |
1216 purple_debug_error("socks5 proxy", "Invalid ATYP received (0x%X)\n", buf[3]); | |
1217 purple_proxy_connect_data_disconnect(connect_data, | |
1218 _("Received invalid data on connection with server.")); | |
1219 return; | |
1215 } | 1220 } |
1216 | 1221 |
1217 /* Skip past BND.PORT */ | 1222 /* Skip past BND.PORT */ |
1218 if(!s5_ensure_buffer_length(connect_data, (buf - connect_data->read_buffer) + 2)) | 1223 if(!s5_ensure_buffer_length(connect_data, (buf - connect_data->read_buffer) + 2)) |
1219 return; | 1224 return; |
1726 * of IP addresses returned to us by purple_dnsquery_a() and attemps | 1731 * of IP addresses returned to us by purple_dnsquery_a() and attemps |
1727 * to connect to each one. This is called after the hostname is | 1732 * to connect to each one. This is called after the hostname is |
1728 * resolved, and each time a connection attempt fails (assuming there | 1733 * resolved, and each time a connection attempt fails (assuming there |
1729 * is another IP address to try). | 1734 * is another IP address to try). |
1730 */ | 1735 */ |
1736 #ifndef INET6_ADDRSTRLEN | |
1737 #define INET6_ADDRSTRLEN 46 | |
1738 #endif | |
1739 | |
1731 static void try_connect(PurpleProxyConnectData *connect_data) | 1740 static void try_connect(PurpleProxyConnectData *connect_data) |
1732 { | 1741 { |
1733 size_t addrlen; | 1742 size_t addrlen; |
1734 struct sockaddr *addr; | 1743 struct sockaddr *addr; |
1735 char ipaddr[INET6_ADDRSTRLEN]; | 1744 char ipaddr[INET6_ADDRSTRLEN]; |
1736 | 1745 |
1737 addrlen = GPOINTER_TO_INT(connect_data->hosts->data); | 1746 addrlen = GPOINTER_TO_INT(connect_data->hosts->data); |
1738 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); | 1747 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
1739 addr = connect_data->hosts->data; | 1748 addr = connect_data->hosts->data; |
1740 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); | 1749 connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); |
1741 | 1750 #ifdef HAVE_INET_NTOP |
1742 inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, | 1751 inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, |
1743 ipaddr, sizeof(ipaddr)); | 1752 ipaddr, sizeof(ipaddr)); |
1753 #else | |
1754 memcpy(ipaddr,inet_ntoa(((struct sockaddr_in *)addr)->sin_addr), | |
1755 sizeof(ipaddr)); | |
1756 #endif | |
1744 purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr); | 1757 purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr); |
1745 | 1758 |
1746 switch (purple_proxy_info_get_type(connect_data->gpi)) { | 1759 switch (purple_proxy_info_get_type(connect_data->gpi)) { |
1747 case PURPLE_PROXY_NONE: | 1760 case PURPLE_PROXY_NONE: |
1748 proxy_connect_none(connect_data, addr, addrlen); | 1761 proxy_connect_none(connect_data, addr, addrlen); |