
curl_multi_download_internal() is the main loop that creates up to 'ParallelDownloads' easy curl handles, adds them to mcurl and then performs curl execution. This is when the paralled downloads happens. Once any of the downloads complete the function checks its result. In case if the download fails it initiates retry with the next server from payload->servers list. At the download completion all the payload resources are cleaned up. curl_multi_check_finished_download() is essentially refactored version of curl_download_internal() adopted for multi_curl. Once mcurl porting is complete curl_download_internal() will be removed. Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
63 lines
1.8 KiB
C
63 lines
1.8 KiB
C
/*
|
|
* dload.h
|
|
*
|
|
* Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
|
|
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef ALPM_DLOAD_H
|
|
#define ALPM_DLOAD_H
|
|
|
|
#include "alpm_list.h"
|
|
#include "alpm.h"
|
|
|
|
struct dload_payload {
|
|
alpm_handle_t *handle;
|
|
const char *tempfile_openmode;
|
|
char *remote_name;
|
|
char *tempfile_name;
|
|
char *destfile_name;
|
|
char *content_disp_name;
|
|
char *fileurl;
|
|
char *filepath; /* download URL path */
|
|
alpm_list_t *servers;
|
|
long respcode;
|
|
off_t initial_size;
|
|
off_t max_size;
|
|
off_t prevprogress;
|
|
int force;
|
|
int allow_resume;
|
|
int errors_ok;
|
|
int unlink_on_fail;
|
|
int trust_remote_name;
|
|
int cb_initialized;
|
|
#ifdef HAVE_LIBCURL
|
|
CURL *curl;
|
|
char error_buffer[CURL_ERROR_SIZE];
|
|
FILE *localf; /* temp download file */
|
|
#endif
|
|
};
|
|
|
|
void _alpm_dload_payload_reset(struct dload_payload *payload);
|
|
void _alpm_dload_payload_reset_for_retry(struct dload_payload *payload);
|
|
|
|
int _alpm_download(struct dload_payload *payload, const char *localpath,
|
|
char **final_file, const char **final_url);
|
|
|
|
int _alpm_multi_download(alpm_handle_t *handle,
|
|
alpm_list_t *payloads /* struct dload_payload */,
|
|
const char *localpath);
|
|
|
|
#endif /* ALPM_DLOAD_H */
|