Remove use of gnulib (part 1)
[gnupg.git] / dirmngr / ks-engine-http.c
index 2ce1b19..e4c2b78 100644 (file)
@@ -38,12 +38,13 @@ ks_http_help (ctrl_t ctrl, parsed_uri_t uri)
   const char const data[] =
     "Handler for HTTP URLs:\n"
     "  http://\n"
+    "  https://\n"
     "Supported methods: fetch\n";
   gpg_error_t err;
 
   if (!uri)
     err = ks_print_help (ctrl, "  http");
-  else if (uri->is_http)
+  else if (uri->is_http && strcmp (uri->scheme, "hkp"))
     err = ks_print_help (ctrl, data);
   else
     err = 0;
@@ -58,20 +59,28 @@ gpg_error_t
 ks_http_fetch (ctrl_t ctrl, const char *url, estream_t *r_fp)
 {
   gpg_error_t err;
+  http_session_t session = NULL;
   http_t http = NULL;
   int redirects_left = MAX_REDIRECTS;
   estream_t fp = NULL;
   char *request_buffer = NULL;
 
+  err = http_session_new (&session, NULL);
+  if (err)
+    goto leave;
+  http_session_set_log_cb (session, cert_log_cb);
+
   *r_fp = NULL;
  once_more:
   err = http_open (&http,
                    HTTP_REQ_GET,
                    url,
+                   /* httphost */ NULL,
                    /* fixme: AUTH */ NULL,
                    0,
                    /* fixme: proxy*/ NULL,
-                   NULL, NULL,
+                   session,
+                   NULL,
                    /*FIXME curl->srvtag*/NULL);
   if (!err)
     {
@@ -88,7 +97,7 @@ ks_http_fetch (ctrl_t ctrl, const char *url, estream_t *r_fp)
   if (err)
     {
       /* Fixme: After a redirection we show the old host name.  */
-      log_error (_("error connecting to `%s': %s\n"),
+      log_error (_("error connecting to '%s': %s\n"),
                  url, gpg_strerror (err));
       goto leave;
     }
@@ -98,7 +107,7 @@ ks_http_fetch (ctrl_t ctrl, const char *url, estream_t *r_fp)
   err = http_wait_response (http);
   if (err)
     {
-      log_error (_("error reading HTTP response for `%s': %s\n"),
+      log_error (_("error reading HTTP response for '%s': %s\n"),
                  url, gpg_strerror (err));
       goto leave;
     }
@@ -111,10 +120,11 @@ ks_http_fetch (ctrl_t ctrl, const char *url, estream_t *r_fp)
 
     case 301:
     case 302:
+    case 307:
       {
         const char *s = http_get_header (http, "Location");
 
-        log_info (_("URL `%s' redirected to `%s' (%u)\n"),
+        log_info (_("URL '%s' redirected to '%s' (%u)\n"),
                   url, s?s:"[none]", http_get_status_code (http));
         if (s && *s && redirects_left-- )
           {
@@ -136,7 +146,7 @@ ks_http_fetch (ctrl_t ctrl, const char *url, estream_t *r_fp)
       goto leave;
 
     default:
-      log_error (_("error accessing `%s': http status %u\n"),
+      log_error (_("error accessing '%s': http status %u\n"),
                  url, http_get_status_code (http));
       err = gpg_error (GPG_ERR_NO_DATA);
       goto leave;
@@ -156,6 +166,7 @@ ks_http_fetch (ctrl_t ctrl, const char *url, estream_t *r_fp)
 
  leave:
   http_close (http, 0);
+  http_session_release (session);
   xfree (request_buffer);
   return err;
 }