lib503.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "test.h"
  2. #include <sys/time.h>
  3. #include <sys/types.h>
  4. /*
  5. * Source code in here hugely as reported in bug report 651460 by
  6. * Christopher R. Palmer.
  7. *
  8. * Use multi interface to get HTTPS document over proxy, and provide
  9. * auth info.
  10. */
  11. int test(char *URL)
  12. {
  13. CURL *c;
  14. CURLM *m;
  15. curl_global_init(CURL_GLOBAL_ALL);
  16. c = curl_easy_init();
  17. curl_easy_setopt(c, CURLOPT_PROXY, arg2); /* set in first.c */
  18. curl_easy_setopt(c, CURLOPT_URL, URL);
  19. curl_easy_setopt(c, CURLOPT_USERPWD, "test:ing");
  20. curl_easy_setopt(c, CURLOPT_PROXYUSERPWD, "test:ing");
  21. curl_easy_setopt(c, CURLOPT_HTTPPROXYTUNNEL, 1);
  22. curl_easy_setopt(c, CURLOPT_HEADER, 1);
  23. {
  24. CURLMcode res;
  25. int running;
  26. char done=FALSE;
  27. m = curl_multi_init();
  28. res = curl_multi_add_handle(m, c);
  29. while(!done) {
  30. fd_set rd, wr, exc;
  31. int max_fd;
  32. struct timeval interval;
  33. interval.tv_sec = 1;
  34. interval.tv_usec = 0;
  35. while (res == CURLM_CALL_MULTI_PERFORM) {
  36. res = curl_multi_perform(m, &running);
  37. if (running <= 0) {
  38. done = TRUE;
  39. break;
  40. }
  41. }
  42. if(done)
  43. break;
  44. if (res != CURLM_OK) {
  45. fprintf(stderr, "not okay???\n");
  46. return 80;
  47. }
  48. FD_ZERO(&rd);
  49. FD_ZERO(&wr);
  50. FD_ZERO(&exc);
  51. max_fd = 0;
  52. if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
  53. fprintf(stderr, "unexpected failured of fdset.\n");
  54. return 89;
  55. }
  56. if (select(max_fd+1, &rd, &wr, &exc, &interval) == -1) {
  57. fprintf(stderr, "bad select??\n");
  58. return 95;
  59. }
  60. res = CURLM_CALL_MULTI_PERFORM;
  61. }
  62. }
  63. curl_multi_remove_handle(m, c);
  64. curl_easy_cleanup(c);
  65. curl_multi_cleanup(m);
  66. return CURLE_OK;
  67. }