comparison libpurple/proxy.c @ 26162:0a19fa42f8ce

propagate from branch 'im.pidgin.pidgin' (head eeaad582dcb34b6753c78371c4aa03af92b095f5) to branch 'im.pidgin.soc.2008.yahoo' (head 182668e30410a6c12e970fad010f219ee6b59e73)
author Sulabh Mahajan <sulabh@soc.pidgin.im>
date Tue, 20 Jan 2009 17:44:36 +0000
parents 95ef7beb926b
children de01d4aa4571 a6e3cb32cdd2 4670851af098
comparison
equal deleted inserted replaced
26161:90ffe6f71fa9 26162:0a19fa42f8ce
619 * was destroyed via purple_proxy_connect_cancel(), we may get here with a freed connect_data. 619 * was destroyed via purple_proxy_connect_cancel(), we may get here with a freed connect_data.
620 */ 620 */
621 if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) 621 if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data))
622 return; 622 return;
623 623
624 purple_debug_info("proxy", "Connected to %s:%d.\n", 624 purple_debug_info("proxy", "Connecting to %s:%d.\n",
625 connect_data->host, connect_data->port); 625 connect_data->host, connect_data->port);
626 626
627 /* 627 /*
628 * purple_input_get_error after a non-blocking connect returns -1 if something is 628 * purple_input_get_error after a non-blocking connect returns -1 if something is
629 * really messed up (bad descriptor, usually). Otherwise, it returns 0 and 629 * really messed up (bad descriptor, usually). Otherwise, it returns 0 and
942 942
943 g_free(response); 943 g_free(response);
944 944
945 } else if((header = g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: Basic"))) { 945 } else if((header = g_strrstr((const char *)connect_data->read_buffer, "Proxy-Authenticate: Basic"))) {
946 gchar *t1, *t2; 946 gchar *t1, *t2;
947 const char *username, *password;
948
949 username = purple_proxy_info_get_username(connect_data->gpi);
950 password = purple_proxy_info_get_password(connect_data->gpi);
947 951
948 t1 = g_strdup_printf("%s:%s", 952 t1 = g_strdup_printf("%s:%s",
949 purple_proxy_info_get_username(connect_data->gpi), 953 username ? username : "",
950 purple_proxy_info_get_password(connect_data->gpi) ? 954 password ? password : "");
951 purple_proxy_info_get_password(connect_data->gpi) : ""); 955 t2 = purple_base64_encode((guchar *)t1, strlen(t1));
952 t2 = purple_base64_encode((const guchar *)t1, strlen(t1));
953 g_free(t1); 956 g_free(t1);
954 957
955 request = g_strdup_printf( 958 request = g_strdup_printf(
956 "CONNECT %s:%d HTTP/1.1\r\n" 959 "CONNECT %s:%d HTTP/1.1\r\n"
957 "Host: %s:%d\r\n" 960 "Host: %s:%d\r\n"
1340 if(connect_data->read_len < 4) 1343 if(connect_data->read_len < 4)
1341 return; 1344 return;
1342 1345
1343 if ((buf[0] != 0x05) || (buf[1] != 0x00)) { 1346 if ((buf[0] != 0x05) || (buf[1] != 0x00)) {
1344 if ((buf[0] == 0x05) && (buf[1] < 0x09)) { 1347 if ((buf[0] == 0x05) && (buf[1] < 0x09)) {
1345 purple_debug_error("socks5 proxy", socks5errors[buf[1]]); 1348 purple_debug_error("socks5 proxy", "%s", socks5errors[buf[1]]);
1346 purple_proxy_connect_data_disconnect(connect_data, 1349 purple_proxy_connect_data_disconnect(connect_data,
1347 socks5errors[buf[1]]); 1350 socks5errors[buf[1]]);
1348 } else { 1351 } else {
1349 purple_debug_error("socks5 proxy", "Bad data.\n"); 1352 purple_debug_error("socks5 proxy", "Bad data.\n");
1350 purple_proxy_connect_data_disconnect(connect_data, 1353 purple_proxy_connect_data_disconnect(connect_data,