代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/iSulad 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From d0b0baa3f2624b6de0ca92c051c154f0cff43f1a Mon Sep 17 00:00:00 2001
From: zhangxiaoyu <zhangxiaoyu58@huawei.com>
Date: Tue, 14 Mar 2023 10:33:38 +0800
Subject: [PATCH 41/53] use CURLOPT_XFERINFOFUNCTION instead of deprecated
CURLOPT_PROGRESSFUNCTION since curl 7.32.0
Signed-off-by: zhangxiaoyu <zhangxiaoyu58@huawei.com>
---
.../modules/image/oci/registry/http_request.c | 12 +++++++++++
src/utils/http/http.c | 21 ++++++++++++++-----
src/utils/http/http.h | 7 +++++++
test/image/oci/registry/registry_ut.cc | 8 +++++++
4 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/src/daemon/modules/image/oci/registry/http_request.c b/src/daemon/modules/image/oci/registry/http_request.c
index f29c2017..ce8b7667 100644
--- a/src/daemon/modules/image/oci/registry/http_request.c
+++ b/src/daemon/modules/image/oci/registry/http_request.c
@@ -691,6 +691,16 @@ static int progress(void *p, double dltotal, double dlnow, double ultotal, doubl
return 0;
}
+static int xfer(void *p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
+{
+ bool *cancel = p;
+ if (*cancel) {
+ // return nonzero code means abort transition
+ return -1;
+ }
+ return 0;
+}
+
int http_request_file(pull_descriptor *desc, const char *url, const char **custom_headers, char *file,
resp_data_type type, CURLcode *errcode)
{
@@ -721,6 +731,8 @@ int http_request_file(pull_descriptor *desc, const char *url, const char **custo
options->show_progress = 1;
options->progressinfo = &desc->cancel;
options->progress_info_op = progress;
+ options->xferinfo = &desc->cancel;
+ options->xferinfo_op = xfer;
options->timeout = true;
ret = setup_common_options(desc, options, url, custom_headers);
diff --git a/src/utils/http/http.c b/src/utils/http/http.c
index bf163d86..986f1f0d 100644
--- a/src/utils/http/http.c
+++ b/src/utils/http/http.c
@@ -219,12 +219,23 @@ static void http_custom_general_options(CURL *curl_handle, const struct http_get
/* disable progress meter, set to 0L to enable and disable debug output */
if (options->show_progress == 0) {
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
- } else if (options->show_progress && options->progressinfo && options->progress_info_op) {
- curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, options->progress_info_op);
- /* pass the struct pointer into the progress function */
- curl_easy_setopt(curl_handle, CURLOPT_PROGRESSDATA, options->progressinfo);
- curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 0L);
} else {
+ /* libcurl support option CURLOPT_XFERINFOFUNCTION when version >= 7.32.0
+ * #define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
+ * CURL_VERSION_BITS(7,32,0) = 0x072000 */
+#if (LIBCURL_VERSION_NUM >= 0x072000)
+ if (options->xferinfo && options->xferinfo_op) {
+ curl_easy_setopt(curl_handle, CURLOPT_XFERINFOFUNCTION, options->xferinfo_op);
+ /* pass the struct pointer into the progress function */
+ curl_easy_setopt(curl_handle, CURLOPT_XFERINFODATA, options->xferinfo);
+ }
+#else
+ if (options->progressinfo && options->progress_info_op) {
+ curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, options->progress_info_op);
+ /* pass the struct pointer into the progress function */
+ curl_easy_setopt(curl_handle, CURLOPT_PROGRESSDATA, options->progressinfo);
+ }
+#endif
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 0L);
}
diff --git a/src/utils/http/http.h b/src/utils/http/http.h
index 343d92c3..cdd6d64f 100644
--- a/src/utils/http/http.h
+++ b/src/utils/http/http.h
@@ -17,6 +17,7 @@
#include <stdbool.h>
#include <stddef.h>
+#include <curl/curl.h>
#ifdef __cplusplus
extern "C" {
@@ -25,6 +26,9 @@ extern "C" {
typedef int(*progress_info_func)(void *p,
double dltotal, double dlnow,
double ultotal, double ulnow);
+typedef int(*xferinfo_func)(void *p,
+ curl_off_t dltotal, curl_off_t dlnow,
+ curl_off_t ultotal, curl_off_t ulnow);
struct http_get_options {
unsigned with_head : 1, /* if set, means write output with response HEADER */
@@ -77,6 +81,9 @@ struct http_get_options {
void *progressinfo;
progress_info_func progress_info_op;
+
+ void *xferinfo;
+ xferinfo_func xferinfo_op;
};
#define HTTP_RES_OK 0
diff --git a/test/image/oci/registry/registry_ut.cc b/test/image/oci/registry/registry_ut.cc
index 8d9ea92b..f4f8a763 100644
--- a/test/image/oci/registry/registry_ut.cc
+++ b/test/image/oci/registry/registry_ut.cc
@@ -221,6 +221,14 @@ int invokeHttpRequestV2(const char *url, struct http_get_options *options, long
if (options->progress_info_op(options->progressinfo, 0, 0, 0, 0) != 0) {
return -1;
}
+
+ cancel = (bool *)options->xferinfo;
+ while (!(*cancel)) {
+ sleep(1); // schedule out to let cancel variable set to be true
+ }
+ if (options->xferinfo_op(options->xferinfo, 0, 0, 0, 0) != 0) {
+ return -1;
+ }
}
} else if (util_has_prefix(url, "http://hub-mirror.c.163.com/v2/library/busybox/blobs/sha256:91f30d77")) {
if (retry) {
--
2.25.1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。