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