pull: Add http2=false remote config option
authorColin Walters <walters@verbum.org>
Wed, 6 Dec 2017 22:07:48 +0000 (17:07 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Thu, 7 Dec 2017 19:08:01 +0000 (19:08 +0000)
This seems to work around
https://github.com/ostreedev/ostree/issues/1362

Though I'm not entirely sure why yet. But at least with this it'll be easier for
people to work around things locally.

Closes: #1368
Approved by: jlebon

man/ostree.repo-config.xml
src/libostree/ostree-fetcher-curl.c
src/libostree/ostree-fetcher.h
src/libostree/ostree-repo-pull.c

index 388b9e627f4c35e09f435cd09abb4d07b8d82262..9378a6b95155d2639481702af969ddc5fe767073 100644 (file)
@@ -222,6 +222,14 @@ Boston, MA 02111-1307, USA.
         <listitem><para>Path to file containing trusted anchors instead of the system CA database.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>http2</varname></term>
+        <listitem><para>A boolean value, defaults to true.  By
+        default, libostree will use HTTP2; setting this to <literal>false</literal>
+        will disable it.  May be useful to work around broken servers.
+        </para></listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>unconfigured-state</varname></term>
         <listitem><para>If set, pulls from this remote will fail with the configured text.  This is intended for OS vendors which have a subscription process to access content.</para></listitem>
index 58835529dc03442257a510c20b46f42bcdc35988..a233a191fceafd5a0b78ddcf054d4efee27d5f30 100644 (file)
@@ -771,14 +771,17 @@ initiate_next_curl_request (FetcherRequest *req,
    * there are numerous HTTP/2 fixes since the original version in
    * libcurl 7.43.0.
    */
+  if (!(self->config_flags & OSTREE_FETCHER_FLAGS_DISABLE_HTTP2))
+    {
 #if CURL_AT_LEAST_VERSION(7, 51, 0)
-  curl_easy_setopt (req->easy, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+      curl_easy_setopt (req->easy, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
 #endif
-  /* https://github.com/curl/curl/blob/curl-7_53_0/docs/examples/http2-download.c */
+      /* https://github.com/curl/curl/blob/curl-7_53_0/docs/examples/http2-download.c */
 #if (CURLPIPE_MULTIPLEX > 0)
-  /* wait for pipe connection to confirm */
-  curl_easy_setopt (req->easy, CURLOPT_PIPEWAIT, 1L);
+      /* wait for pipe connection to confirm */
+      curl_easy_setopt (req->easy, CURLOPT_PIPEWAIT, 1L);
 #endif
+    }
   curl_easy_setopt (req->easy, CURLOPT_WRITEFUNCTION, write_cb);
   if (g_getenv ("OSTREE_DEBUG_HTTP"))
     curl_easy_setopt (req->easy, CURLOPT_VERBOSE, 1L);
index 18aaec4000b48a036e0ed8d3a3e8807ce2f82afd..9cd2f008db9769cd6dd8bffb908dee5dea1e912e 100644 (file)
@@ -50,7 +50,8 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(OstreeFetcher, g_object_unref)
 typedef enum {
   OSTREE_FETCHER_FLAGS_NONE = 0,
   OSTREE_FETCHER_FLAGS_TLS_PERMISSIVE = (1 << 0),
-  OSTREE_FETCHER_FLAGS_TRANSFER_GZIP = (1 << 1)
+  OSTREE_FETCHER_FLAGS_TRANSFER_GZIP = (1 << 1),
+  OSTREE_FETCHER_FLAGS_DISABLE_HTTP2 = (1 << 2),
 } OstreeFetcherConfigFlags;
 
 typedef enum {
index c6fe7625e9f1a82dc0b2c452b785a38206274808..8ac4850655635f8d378f3cd194068161391825e1 100644 (file)
@@ -2690,6 +2690,15 @@ _ostree_repo_remote_new_fetcher (OstreeRepo  *self,
   if (gzip)
     fetcher_flags |= OSTREE_FETCHER_FLAGS_TRANSFER_GZIP;
 
+  { gboolean http2 = TRUE;
+    if (!ostree_repo_get_remote_boolean_option (self, remote_name,
+                                                "http2", TRUE,
+                                                &http2, error))
+      goto out;
+    if (!http2)
+      fetcher_flags |= OSTREE_FETCHER_FLAGS_DISABLE_HTTP2;
+  }
+
   fetcher = _ostree_fetcher_new (self->tmp_dir_fd, remote_name, fetcher_flags);
 
   {