diff --git a/man/ostree.repo-config.xml b/man/ostree.repo-config.xml index 388b9e627f..9378a6b951 100644 --- a/man/ostree.repo-config.xml +++ b/man/ostree.repo-config.xml @@ -222,6 +222,14 @@ Boston, MA 02111-1307, USA. Path to file containing trusted anchors instead of the system CA database. + + http2 + A boolean value, defaults to true. By + default, libostree will use HTTP2; setting this to false + will disable it. May be useful to work around broken servers. + + + unconfigured-state 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. diff --git a/src/libostree/ostree-fetcher-curl.c b/src/libostree/ostree-fetcher-curl.c index 58835529dc..a233a191fc 100644 --- a/src/libostree/ostree-fetcher-curl.c +++ b/src/libostree/ostree-fetcher-curl.c @@ -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); diff --git a/src/libostree/ostree-fetcher.h b/src/libostree/ostree-fetcher.h index 18aaec4000..9cd2f008db 100644 --- a/src/libostree/ostree-fetcher.h +++ b/src/libostree/ostree-fetcher.h @@ -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 { diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c index c6fe7625e9..8ac4850655 100644 --- a/src/libostree/ostree-repo-pull.c +++ b/src/libostree/ostree-repo-pull.c @@ -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); {