1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*************************************************************************** 29bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * _ _ ____ _ 39bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * Project ___| | | | _ \| | 49bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * / __| | | | |_) | | 59bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * | (__| |_| | _ <| |___ 69bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * \___|\___/|_| \_\_____| 79bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 88f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. 99bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * 10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which 11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms 128f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo * are also available at https://curl.haxx.se/docs/copyright.html. 13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell 15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is 16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file. 17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied. 20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * 21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/ 22e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/* argv1 = URL 239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels * argv2 = proxy with embedded user+password 249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels */ 259bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include "test.h" 279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 28e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#include "warnless.h" 299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#include "memdebug.h" 309bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 319bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsstruct data { 329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels char trace_ascii; /* 1 or 0 */ 339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels}; 349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsstatic 369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsvoid dump(const char *text, 379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels FILE *stream, unsigned char *ptr, size_t size, 389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels char nohex) 399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{ 409bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels size_t i; 419bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels size_t c; 429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 439bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels unsigned int width=0x10; 449bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels if(nohex) 469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* without the hex output, we can fit more on screen */ 479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels width = 0x40; 489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stream, "%s, %d bytes (0x%x)\n", text, (int)size, (int)size); 509bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 519bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels for(i=0; i<size; i+= width) { 529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 539bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stream, "%04x: ", (int)i); 549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels if(!nohex) { 569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* hex not disabled, show it */ 579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels for(c = 0; c < width; c++) 589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels if(i+c < size) 599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stream, "%02x ", ptr[i+c]); 609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels else 619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fputs(" ", stream); 629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels for(c = 0; (c < width) && (i+c < size); c++) { 659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* check for 0D0A; if found, skip past and start a new line of output */ 668f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo if(nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { 679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels i+=(c+2-width); 689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stream, "%c", 719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); 729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* check again for 0D0A, to avoid an extra \n if it's at width */ 738f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { 749bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels i+=(c+3-width); 759bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 769bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 779bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 789bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fputc('\n', stream); /* newline */ 799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fflush(stream); 819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels} 829bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 839bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsstatic 849bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint my_trace(CURL *handle, curl_infotype type, 859bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels char *data, size_t size, 869bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels void *userp) 879bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{ 889bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels struct data *config = (struct data *)userp; 899bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels const char *text; 909bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels (void)handle; /* prevent compiler warning */ 919bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels switch (type) { 939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_TEXT: 949bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stderr, "== Info: %s", (char *)data); 959bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels default: /* in case a new one is introduced to shock us */ 969bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return 0; 979bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 989bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_HEADER_OUT: 999bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels text = "=> Send header"; 1009bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 1019bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_DATA_OUT: 1029bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels text = "=> Send data"; 1039bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 1049bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_SSL_DATA_OUT: 1059bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels text = "=> Send SSL data"; 1069bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 1079bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_HEADER_IN: 1089bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels text = "<= Recv header"; 1099bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 1109bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_DATA_IN: 1119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels text = "<= Recv data"; 1129bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 1139bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels case CURLINFO_SSL_DATA_IN: 1149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels text = "<= Recv SSL data"; 1159bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels break; 1169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 1179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels dump(text, stderr, (unsigned char *)data, size, config->trace_ascii); 1199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return 0; 1209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels} 1219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsstatic size_t current_offset = 0; 1248f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic char databuf[70000]; /* MUST be more than 64k OR 1258f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo MAX_INITIAL_POST_SIZE */ 1269bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1279bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsstatic size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream) 1289bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{ 1299bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels size_t amount = nmemb * size; /* Total bytes curl wants */ 1308f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo size_t available = sizeof(databuf) - current_offset; /* What we have to 1318f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo give */ 1329bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels size_t given = amount < available ? amount : available; /* What is given */ 1339bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels (void)stream; 1349bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels memcpy(ptr, databuf + current_offset, given); 1359bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels current_offset += given; 1369bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return given; 1379bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels} 1389bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1399bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1408f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymostatic size_t write_callback(void *ptr, size_t size, size_t nmemb, 1418f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo void *stream) 1429bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{ 143e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET int amount = curlx_uztosi(size * nmemb); 144e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET printf("%.*s", amount, (char *)ptr); 1459bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels (void)stream; 1469bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return size * nmemb; 1479bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels} 1489bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1499bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 150cee0338be80bb81b15101686d6f60864455f1e6eElliott Hughesstatic curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp) 1519bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{ 1529bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels (void)clientp; 1538f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo if(cmd == CURLIOCMD_RESTARTREAD) { 1549bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels printf("APPLICATION: recieved a CURLIOCMD_RESTARTREAD request\n"); 1559bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels printf("APPLICATION: ** REWINDING! **\n"); 1569bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels current_offset = 0; 1579bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return CURLIOE_OK; 1589bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 1599bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels (void)handle; 1609bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return CURLIOE_UNKNOWNCMD; 1619bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels} 1629bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1639bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1649bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1659bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelsint test(char *URL) 1669bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels{ 1679bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels CURL *curl; 1689bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels CURLcode res = CURLE_OUT_OF_MEMORY; 1699bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels struct data config; 1709bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels size_t i; 1719bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels static const char fill[] = "test data"; 1729bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1739bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels config.trace_ascii = 1; /* enable ascii tracing */ 1749bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1759bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels if((curl = curl_easy_init()) == NULL) { 1769bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stderr, "curl_easy_init() failed\n"); 1779bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels curl_global_cleanup(); 1789bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return TEST_ERR_MAJOR_BAD; 1799bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels } 1809bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1819bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace); 1829bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_DEBUGDATA, &config); 1839bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* the DEBUGFUNCTION has no effect until we enable VERBOSE */ 1849bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_VERBOSE, 1L); 1859bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1869bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* setup repeated data string */ 1878f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo for(i=0; i < sizeof(databuf); ++i) 1889bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels databuf[i] = fill[i % sizeof fill]; 1899bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1909bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* Post */ 1919bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_POST, 1L); 1929bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1939bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#ifdef CURL_DOES_CONVERSIONS 1949bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* Convert the POST data to ASCII */ 1959bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_TRANSFERTEXT, 1L); 1969bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels#endif 1979bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 1989bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* Setup read callback */ 1999bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) sizeof(databuf)); 2009bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_READFUNCTION, read_callback); 2019bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2029bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* Write callback */ 2039bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); 2049bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2059bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels /* Ioctl function */ 2069bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback); 2079bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2089bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_PROXY, libtest_arg2); 2099bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2109bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_URL, URL); 2119bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2128f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo /* Accept any auth. But for this bug configure proxy with DIGEST, basic 2138f1a214b8a21b66f33454790dfba97ae2f818289Alex Deymo might work too, not NTLM */ 2149bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels test_setopt(curl, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY); 2159bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2169bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels res = curl_easy_perform(curl); 2179bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels fprintf(stderr, "curl_easy_perform = %d\n", (int)res); 2189bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2199bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckelstest_cleanup: 2209bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels 2219bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels curl_easy_cleanup(curl); 2229bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels curl_global_cleanup(); 2239bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels return (int)res; 2249bd90e6e25f1e55f50201c87a1b5837de7e5b64aLucas Eckels} 225