From b88940850002a3f1c25bc6488b95ad30eb80d696 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 20 Jul 2019 19:14:00 +0200 Subject: curl: support parallel transfers This is done by making sure each individual transfer is first added to a linked list as then they can be performed serially, or at will, in parallel. Closes #3804 --- src/tool_operate.h | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'src/tool_operate.h') diff --git a/src/tool_operate.h b/src/tool_operate.h index b84388bc5..60257fc60 100644 --- a/src/tool_operate.h +++ b/src/tool_operate.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2014, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2019, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -22,7 +22,53 @@ * ***************************************************************************/ #include "tool_setup.h" +#include "tool_cb_hdr.h" +#include "tool_cb_prg.h" +#include "tool_sdecls.h" + +struct per_transfer { + /* double linked */ + struct per_transfer *next; + struct per_transfer *prev; + struct OperationConfig *config; /* for this transfer */ + CURL *curl; + long retry_numretries; + long retry_sleep_default; + long retry_sleep; + struct timeval retrystart; + bool metalink; /* nonzero for metalink download. */ + bool metalink_next_res; + metalinkfile *mlfile; + metalink_resource *mlres; + char *this_url; + char *outfile; + bool infdopen; /* TRUE if infd needs closing */ + int infd; + struct ProgressData progressbar; + struct OutStruct outs; + struct OutStruct heads; + struct InStruct input; + struct HdrCbData hdrcbdata; + char errorbuffer[CURL_ERROR_SIZE]; + + bool added; /* set TRUE when added to the multi handle */ + + /* for parallel progress bar */ + curl_off_t dltotal; + curl_off_t dlnow; + curl_off_t ultotal; + curl_off_t ulnow; + bool dltotal_added; /* if the total has been added from this */ + bool ultotal_added; + + /* NULL or malloced */ + char *separator_err; + char *separator; + char *uploadfile; +}; CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[]); +extern struct per_transfer *transfers; /* first node */ + #endif /* HEADER_CURL_TOOL_OPERATE_H */ -- cgit v1.2.3