]> granicus.if.org Git - curl/commitdiff
used this to verify bug report 651460
authorDaniel Stenberg <daniel@haxx.se>
Fri, 13 Dec 2002 16:21:18 +0000 (16:21 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 13 Dec 2002 16:21:18 +0000 (16:21 +0000)
tests/libtest/lib503.c [new file with mode: 0644]

diff --git a/tests/libtest/lib503.c b/tests/libtest/lib503.c
new file mode 100644 (file)
index 0000000..a6f5d3f
--- /dev/null
@@ -0,0 +1,77 @@
+#include "test.h"
+
+/*
+ * Source code in here hugely as reported in bug report 651460 by
+ * Christopher R. Palmer.
+ *
+ * Use multi interface to get HTTPS document over proxy, and provide
+ * auth info.
+ */
+
+CURLcode test(char *URL)
+{
+  CURL *c;
+  CURLM *m;
+
+  curl_global_init(CURL_GLOBAL_ALL);
+  c = curl_easy_init();
+  curl_easy_setopt(c, CURLOPT_PROXY, arg2); /* set in first.c */
+  curl_easy_setopt(c, CURLOPT_URL, URL);
+  curl_easy_setopt(c, CURLOPT_USERPWD, "test:ing");
+  curl_easy_setopt(c, CURLOPT_PROXYUSERPWD, "test:ing");
+  curl_easy_setopt(c, CURLOPT_HTTPPROXYTUNNEL, 1);
+  curl_easy_setopt(c, CURLOPT_HEADER, 1);
+
+  {
+    CURLMcode res;
+    int running;
+    char done=FALSE;
+
+    m = curl_multi_init();
+
+    res = curl_multi_add_handle(m, c);
+
+    while(!done) {
+      fd_set rd, wr, exc;
+      int max_fd;
+
+      while (res == CURLM_CALL_MULTI_PERFORM) {
+        res = curl_multi_perform(m, &running);
+        if (running <= 0) {
+          done = TRUE;
+          break;
+        }
+      }
+      if(done)
+        break;
+      
+      if (res != CURLM_OK) {
+        fprintf(stderr, "not okay???\n");
+        return 80;
+      }
+
+      FD_ZERO(&rd);
+      FD_ZERO(&wr);
+      FD_ZERO(&exc);
+      max_fd = 0;
+
+      if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+        fprintf(stderr, "unexpected failured of fdset.\n");
+        return 89;
+      }
+
+      if (select(max_fd+1, &rd, &wr, &exc, NULL) == -1) {
+        fprintf(stderr, "bad select??\n");
+        return 95;
+      }
+
+      res = CURLM_CALL_MULTI_PERFORM;
+    }
+  }
+  curl_multi_remove_handle(m, c);
+  curl_easy_cleanup(c);
+  curl_multi_cleanup(m);
+       
+  return 0;
+}
+