• Home
  • Raw
  • Download

Lines Matching +full:multi +full:- +full:config

21  * SPDX-License-Identifier: curl
108 struct OperationConfig *config,
192 switch(stat_buf->st_fab_rfm) { in VmsSpecialSize()
198 return stat_buf->st_size; in VmsSpecialSize()
222 transfersl->next = p; in add_per_transfer()
224 p->prev = transfersl; in add_per_transfer()
245 n = per->next; in del_per_transfer()
246 p = per->prev; in del_per_transfer()
249 p->next = n; in del_per_transfer()
254 n->prev = p; in del_per_transfer()
259 all_pers--; in del_per_transfer()
267 curl_off_t uploadfilesize = -1; in pre_transfer()
271 if(per->uploadfile && !stdin_upload(per->uploadfile)) { in pre_transfer()
278 * - Stat gives a size but this is UNRELIABLE in VMS. E.g. in pre_transfer()
288 per->infd = -1; in pre_transfer()
289 if(stat(per->uploadfile, &fileinfo) == 0) { in pre_transfer()
295 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY); in pre_transfer()
298 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY, in pre_transfer()
302 if(per->infd == -1) in pre_transfer()
304 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY); in pre_transfer()
305 if((per->infd == -1) || fstat(per->infd, &fileinfo)) in pre_transfer()
308 helpf(tool_stderr, "Can't open '%s'", per->uploadfile); in pre_transfer()
309 if(per->infd != -1) { in pre_transfer()
310 close(per->infd); in pre_transfer()
311 per->infd = STDIN_FILENO; in pre_transfer()
315 per->infdopen = TRUE; in pre_transfer()
332 if(uploadfilesize != -1) { in pre_transfer()
333 struct OperationConfig *config = per->config; /* for the macro below */ in pre_transfer() local
335 (void)config; in pre_transfer()
338 my_setopt(per->curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize); in pre_transfer()
341 per->uploadfilesize = uploadfilesize; in pre_transfer()
342 per->start = tvnow(); in pre_transfer()
349 void single_transfer_cleanup(struct OperationConfig *config) in single_transfer_cleanup() argument
351 if(config) { in single_transfer_cleanup()
352 struct State *state = &config->state; in single_transfer_cleanup()
353 if(state->urls) { in single_transfer_cleanup()
355 glob_cleanup(state->urls); in single_transfer_cleanup()
356 state->urls = NULL; in single_transfer_cleanup()
358 Curl_safefree(state->outfiles); in single_transfer_cleanup()
359 Curl_safefree(state->uploadfile); in single_transfer_cleanup()
360 if(state->inglob) { in single_transfer_cleanup()
362 glob_cleanup(state->inglob); in single_transfer_cleanup()
363 state->inglob = NULL; in single_transfer_cleanup()
377 struct OutStruct *outs = &per->outs; in post_per_transfer()
378 CURL *curl = per->curl; in post_per_transfer()
379 struct OperationConfig *config = per->config; in post_per_transfer() local
385 if(!curl || !config) in post_per_transfer()
388 if(per->infdopen) in post_per_transfer()
389 close(per->infd); in post_per_transfer()
394 if(global->silent && !global->showerror) in post_per_transfer()
399 if(!config->synthetic_error && result && in post_per_transfer()
400 (!global->silent || global->showerror)) { in post_per_transfer()
401 const char *msg = per->errorbuffer; in post_per_transfer()
407 else if(config->failwithbody) { in post_per_transfer()
412 if(!global->silent || global->showerror) in post_per_transfer()
420 if(!result && config->xattr && outs->fopened && outs->stream) { in post_per_transfer()
421 rc = fwrite_xattr(curl, per->this_url, fileno(outs->stream)); in post_per_transfer()
423 warnf(config->global, "Error setting extended attributes on '%s': %s", in post_per_transfer()
424 outs->filename, strerror(errno)); in post_per_transfer()
427 if(!result && !outs->stream && !outs->bytes) { in post_per_transfer()
435 if(!cond_unmet && !tool_create_output_file(outs, config)) in post_per_transfer()
439 if(!outs->s_isreg && outs->stream) { in post_per_transfer()
441 rc = fflush(outs->stream); in post_per_transfer()
450 /* Discard incomplete UTF-8 sequence buffered from body */ in post_per_transfer()
451 if(outs->utf8seq[0]) in post_per_transfer()
452 memset(outs->utf8seq, 0, sizeof(outs->utf8seq)); in post_per_transfer()
455 /* if retry-max-time is non-zero, make sure we haven't exceeded the in post_per_transfer()
457 if(per->retry_numretries && in post_per_transfer()
458 (!config->retry_maxtime || in post_per_transfer()
459 (tvdiff(tvnow(), per->retrystart) < in post_per_transfer()
460 config->retry_maxtime*1000L)) ) { in post_per_transfer()
477 else if(config->retry_connrefused && in post_per_transfer()
485 ((config->failonerror || config->failwithbody) && in post_per_transfer()
508 * or close/re-open the file so that the next attempt starts in post_per_transfer()
535 if(result && !retry && config->retry_all_errors) in post_per_transfer()
550 sleeptime = per->retry_sleep; in post_per_transfer()
563 if(config->retry_maxtime) { in post_per_transfer()
564 curl_off_t seconds = tvdiff(tvnow(), per->retrystart)/1000; in post_per_transfer()
566 if((CURL_OFF_T_MAX - retry_after < seconds) || in post_per_transfer()
567 (seconds + retry_after > config->retry_maxtime)) { in post_per_transfer()
568 warnf(config->global, "The Retry-After: time would " in post_per_transfer()
576 warnf(config->global, "Problem %s. " in post_per_transfer()
579 m[retry], sleeptime/1000L, per->retry_numretries); in post_per_transfer()
581 per->retry_numretries--; in post_per_transfer()
582 if(!config->retry_delay) { in post_per_transfer()
583 per->retry_sleep *= 2; in post_per_transfer()
584 if(per->retry_sleep > RETRY_SLEEP_MAX) in post_per_transfer()
585 per->retry_sleep = RETRY_SLEEP_MAX; in post_per_transfer()
587 if(outs->bytes && outs->filename && outs->stream) { in post_per_transfer()
590 notef(config->global, in post_per_transfer()
592 outs->bytes); in post_per_transfer()
593 fflush(outs->stream); in post_per_transfer()
596 if(ftruncate(fileno(outs->stream), outs->init)) { in post_per_transfer()
599 errorf(config->global, "Failed to truncate file"); in post_per_transfer()
603 just truncated the file in a large file-safe way */ in post_per_transfer()
604 rc = fseek(outs->stream, 0, SEEK_END); in post_per_transfer()
608 work properly with large files on 32-bit systems, but in post_per_transfer()
610 rc = fseek(outs->stream, (long)outs->init, SEEK_SET); in post_per_transfer()
613 errorf(config->global, "Failed seeking to end of file"); in post_per_transfer()
616 outs->bytes = 0; /* clear for next round */ in post_per_transfer()
625 if((global->progressmode == CURL_PROGRESS_BAR) && in post_per_transfer()
626 per->progressbar.calls) in post_per_transfer()
629 fputs("\n", per->progressbar.out); in post_per_transfer()
632 if(outs->fopened && outs->stream) { in post_per_transfer()
633 rc = fclose(outs->stream); in post_per_transfer()
637 errorf(config->global, "curl: (%d) Failed writing body", result); in post_per_transfer()
639 if(result && config->rm_partial) { in post_per_transfer()
641 if(!stat(outs->filename, &st) && in post_per_transfer()
643 if(!unlink(outs->filename)) in post_per_transfer()
644 notef(global, "Removed output file: %s", outs->filename); in post_per_transfer()
646 warnf(global, "Failed removing: %s", outs->filename); in post_per_transfer()
650 outs->filename); in post_per_transfer()
655 if(!result && config->remote_time && outs->s_isreg && outs->filename) { in post_per_transfer()
657 curl_off_t filetime = -1; in post_per_transfer()
659 setfiletime(filetime, outs->filename, global); in post_per_transfer()
662 /* Write the --write-out data before cleanup but after result is final */ in post_per_transfer()
663 if(config->writeout) in post_per_transfer()
664 ourWriteOut(config, per, result); in post_per_transfer()
666 /* Close function-local opened file descriptors */ in post_per_transfer()
667 if(per->heads.fopened && per->heads.stream) in post_per_transfer()
668 fclose(per->heads.stream); in post_per_transfer()
670 if(per->heads.alloc_filename) in post_per_transfer()
671 Curl_safefree(per->heads.filename); in post_per_transfer()
673 if(per->etag_save.fopened && per->etag_save.stream) in post_per_transfer()
674 fclose(per->etag_save.stream); in post_per_transfer()
676 if(per->etag_save.alloc_filename) in post_per_transfer()
677 Curl_safefree(per->etag_save.filename); in post_per_transfer()
679 curl_easy_cleanup(per->curl); in post_per_transfer()
680 if(outs->alloc_filename) in post_per_transfer()
681 free(outs->filename); in post_per_transfer()
682 free(per->this_url); in post_per_transfer()
683 free(per->outfile); in post_per_transfer()
684 free(per->uploadfile); in post_per_transfer()
685 if(global->parallel) in post_per_transfer()
686 free(per->errorbuffer); in post_per_transfer()
695 struct OperationConfig *config, in url_proto() argument
713 result = ipfs_url_rewrite(uh, schemep, url, config); in url_proto()
714 /* short-circuit proto_token, we know it's ipfs or ipns */ in url_proto()
720 config->synthetic_error = TRUE; in url_proto()
737 struct OperationConfig *config, in single_transfer() argument
744 bool orig_noprogress = global->noprogress; in single_transfer()
745 bool orig_isatty = global->isatty; in single_transfer()
746 struct State *state = &config->state; in single_transfer()
747 char *httpgetfields = state->httpgetfields; in single_transfer()
751 if(config->postfields) { in single_transfer()
752 if(config->use_httpget) { in single_transfer()
755 httpgetfields = state->httpgetfields = config->postfields; in single_transfer()
756 config->postfields = NULL; in single_transfer()
757 if(SetHTTPrequest(config, in single_transfer()
758 (config->no_body?HTTPREQ_HEAD:HTTPREQ_GET), in single_transfer()
759 &config->httpreq)) { in single_transfer()
765 if(SetHTTPrequest(config, HTTPREQ_SIMPLEPOST, &config->httpreq)) in single_transfer()
769 single_transfer_cleanup(config); in single_transfer()
773 if(!state->urlnode) { in single_transfer()
775 state->urlnode = config->url_list; in single_transfer()
776 state->infilenum = 1; in single_transfer()
779 while(config->state.urlnode) { in single_transfer()
782 struct URLGlob *inglob = state->inglob; in single_transfer()
783 urlnode = config->state.urlnode; in single_transfer()
785 /* urlnode->url is the full URL (it might be NULL) */ in single_transfer()
787 if(!urlnode->url) { in single_transfer()
790 Curl_safefree(urlnode->outfile); in single_transfer()
791 Curl_safefree(urlnode->infile); in single_transfer()
792 urlnode->flags = 0; in single_transfer()
793 config->state.urlnode = urlnode->next; in single_transfer()
794 state->up = 0; in single_transfer()
797 warnf(config->global, "Got more output options than URLs"); in single_transfer()
804 if(urlnode->outfile && !state->outfiles) { in single_transfer()
805 state->outfiles = strdup(urlnode->outfile); in single_transfer()
806 if(!state->outfiles) { in single_transfer()
813 infiles = urlnode->infile; in single_transfer()
815 if(!config->globoff && infiles && !inglob) { in single_transfer()
817 result = glob_url(&inglob, infiles, &state->infilenum, in single_transfer()
818 (!global->silent || global->showerror)? in single_transfer()
822 config->state.inglob = inglob; in single_transfer()
828 if(!state->up && !infiles) in single_transfer()
831 if(!state->uploadfile) { in single_transfer()
833 result = glob_next_url(&state->uploadfile, inglob); in single_transfer()
837 else if(!state->up) { in single_transfer()
838 state->uploadfile = strdup(infiles); in single_transfer()
839 if(!state->uploadfile) { in single_transfer()
849 if(!state->urlnum) { in single_transfer()
850 if(!config->globoff) { in single_transfer()
853 result = glob_url(&state->urls, urlnode->url, &state->urlnum, in single_transfer()
854 (!global->silent || global->showerror)? in single_transfer()
858 urlnum = state->urlnum; in single_transfer()
864 urlnum = state->urlnum; in single_transfer()
866 if(state->up < state->infilenum) { in single_transfer()
876 /* --etag-save */ in single_transfer()
879 etag_save->stream = stdout; in single_transfer()
881 /* --etag-compare */ in single_transfer()
882 if(config->etag_compare_file) { in single_transfer()
888 FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT); in single_transfer()
889 if(!file && !config->etag_save_file) { in single_transfer()
891 "Failed to open %s", config->etag_compare_file); in single_transfer()
898 header = aprintf("If-None-Match: %s", etag_from_file); in single_transfer()
902 header = aprintf("If-None-Match: \"\""); in single_transfer()
914 pe = add2list(&config->headers, header); in single_transfer()
925 if(config->etag_save_file) { in single_transfer()
927 if(strcmp(config->etag_save_file, "-")) { in single_transfer()
928 FILE *newfile = fopen(config->etag_save_file, "ab"); in single_transfer()
931 "Skip this transfer", config->etag_save_file); in single_transfer()
932 Curl_safefree(state->outfiles); in single_transfer()
933 glob_cleanup(state->urls); in single_transfer()
937 etag_save->filename = config->etag_save_file; in single_transfer()
938 etag_save->s_isreg = TRUE; in single_transfer()
939 etag_save->fopened = TRUE; in single_transfer()
940 etag_save->stream = newfile; in single_transfer()
945 set_binmode(etag_save->stream); in single_transfer()
956 if(etag_save->fopened) in single_transfer()
957 fclose(etag_save->stream); in single_transfer()
960 per->etag_save = etag_first; /* copy the whole struct */ in single_transfer()
961 if(state->uploadfile) { in single_transfer()
962 per->uploadfile = strdup(state->uploadfile); in single_transfer()
963 if(!per->uploadfile) { in single_transfer()
968 if(SetHTTPrequest(config, HTTPREQ_PUT, &config->httpreq)) { in single_transfer()
969 Curl_safefree(per->uploadfile); in single_transfer()
976 per->config = config; in single_transfer()
977 per->curl = curl; in single_transfer()
978 per->urlnum = (unsigned int)urlnode->num; in single_transfer()
981 heads = &per->heads; in single_transfer()
982 heads->stream = stdout; in single_transfer()
985 if(config->headerfile) { in single_transfer()
987 if(strcmp(config->headerfile, "-")) { in single_transfer()
999 if(!per->prev || per->prev->config != config) { in single_transfer()
1000 newfile = fopen(config->headerfile, "wb"); in single_transfer()
1004 newfile = fopen(config->headerfile, "ab"); in single_transfer()
1007 errorf(global, "Failed to open %s", config->headerfile); in single_transfer()
1012 heads->filename = config->headerfile; in single_transfer()
1013 heads->s_isreg = TRUE; in single_transfer()
1014 heads->fopened = TRUE; in single_transfer()
1015 heads->stream = newfile; in single_transfer()
1020 set_binmode(heads->stream); in single_transfer()
1024 hdrcbdata = &per->hdrcbdata; in single_transfer()
1026 outs = &per->outs; in single_transfer()
1028 per->outfile = NULL; in single_transfer()
1029 per->infdopen = FALSE; in single_transfer()
1030 per->infd = STDIN_FILENO; in single_transfer()
1033 outs->stream = stdout; in single_transfer()
1035 if(state->urls) { in single_transfer()
1036 result = glob_next_url(&per->this_url, state->urls); in single_transfer()
1040 else if(!state->li) { in single_transfer()
1041 per->this_url = strdup(urlnode->url); in single_transfer()
1042 if(!per->this_url) { in single_transfer()
1048 per->this_url = NULL; in single_transfer()
1049 if(!per->this_url) in single_transfer()
1052 if(state->outfiles) { in single_transfer()
1053 per->outfile = strdup(state->outfiles); in single_transfer()
1054 if(!per->outfile) { in single_transfer()
1060 if(((urlnode->flags&GETOUT_USEREMOTE) || in single_transfer()
1061 (per->outfile && strcmp("-", per->outfile)))) { in single_transfer()
1068 if(!per->outfile) { in single_transfer()
1070 result = get_url_file_name(&per->outfile, per->this_url); in single_transfer()
1076 if(!*per->outfile && !config->content_disposition) { in single_transfer()
1082 else if(state->urls) { in single_transfer()
1084 char *storefile = per->outfile; in single_transfer()
1085 result = glob_match_url(&per->outfile, storefile, state->urls); in single_transfer()
1092 if(!*per->outfile) { in single_transfer()
1099 if(config->output_dir && *config->output_dir) { in single_transfer()
1100 char *d = aprintf("%s/%s", config->output_dir, per->outfile); in single_transfer()
1105 free(per->outfile); in single_transfer()
1106 per->outfile = d; in single_transfer()
1108 /* Create the directory hierarchy, if not pre-existent to a multiple in single_transfer()
1111 if(config->create_dirs) { in single_transfer()
1112 result = create_dir_hierarchy(per->outfile, global); in single_transfer()
1118 if((urlnode->flags & GETOUT_USEREMOTE) in single_transfer()
1119 && config->content_disposition) { in single_transfer()
1121 DEBUGASSERT(!outs->filename); in single_transfer()
1124 if(config->resume_from_current) { in single_transfer()
1128 /* VMS -- Danger, the filesize is only valid for stream files */ in single_transfer()
1129 if(0 == stat(per->outfile, &fileinfo)) in single_transfer()
1131 config->resume_from = fileinfo.st_size; in single_transfer()
1134 config->resume_from = 0; in single_transfer()
1137 if(config->resume_from) { in single_transfer()
1145 FILE *file = fopen(per->outfile, "ab"); in single_transfer()
1148 errorf(global, "Can't open '%s'", per->outfile); in single_transfer()
1152 outs->fopened = TRUE; in single_transfer()
1153 outs->stream = file; in single_transfer()
1154 outs->init = config->resume_from; in single_transfer()
1157 outs->stream = NULL; /* open when needed */ in single_transfer()
1159 outs->filename = per->outfile; in single_transfer()
1160 outs->s_isreg = TRUE; in single_transfer()
1163 if(per->uploadfile && !stdin_upload(per->uploadfile)) { in single_transfer()
1165 * We have specified a file to upload and it isn't "-". in single_transfer()
1167 result = add_file_name_to_url(per->curl, &per->this_url, in single_transfer()
1168 per->uploadfile); in single_transfer()
1172 else if(per->uploadfile && stdin_upload(per->uploadfile)) { in single_transfer()
1178 if(config->authtype & (1UL << bitcheck++)) { in single_transfer()
1188 * If the user has also selected --anyauth or --proxy-anyauth in single_transfer()
1191 if(config->proxyanyauth || (authbits>1)) { in single_transfer()
1193 "Using --anyauth or --proxy-anyauth with upload from stdin" in single_transfer()
1198 DEBUGASSERT(per->infdopen == FALSE); in single_transfer()
1199 DEBUGASSERT(per->infd == STDIN_FILENO); in single_transfer()
1202 if(!strcmp(per->uploadfile, ".")) { in single_transfer()
1203 if(curlx_nonblock((curl_socket_t)per->infd, TRUE) < 0) in single_transfer()
1205 "fcntl failed on fd=%d: %s", per->infd, strerror(errno)); in single_transfer()
1209 if(per->uploadfile && config->resume_from_current) in single_transfer()
1210 config->resume_from = -1; /* -1 will then force get-it-yourself */ in single_transfer()
1212 if(output_expected(per->this_url, per->uploadfile) && outs->stream && in single_transfer()
1213 isatty(fileno(outs->stream))) in single_transfer()
1216 per->noprogress = global->noprogress = global->isatty = TRUE; in single_transfer()
1218 /* progress meter is per download, so restore config in single_transfer()
1220 per->noprogress = global->noprogress = orig_noprogress; in single_transfer()
1221 global->isatty = orig_isatty; in single_transfer()
1224 if(httpgetfields || config->query) { in single_transfer()
1225 char *q = httpgetfields ? httpgetfields : config->query; in single_transfer()
1229 uerr = curl_url_set(uh, CURLUPART_URL, per->this_url, in single_transfer()
1235 config->synthetic_error = TRUE; in single_transfer()
1246 Curl_safefree(per->this_url); /* free previous URL */ in single_transfer()
1247 per->this_url = updated; /* use our new URL instead! */ in single_transfer()
1256 if((!per->outfile || !strcmp(per->outfile, "-")) && in single_transfer()
1257 !config->use_ascii) { in single_transfer()
1264 config->terminal_binary_ok = in single_transfer()
1265 (per->outfile && !strcmp(per->outfile, "-")); in single_transfer()
1267 /* Avoid having this setopt added to the --libcurl source output. */ in single_transfer()
1273 result = url_proto(&per->this_url, config, &use_proto); in single_transfer()
1281 Note: avoid having this setopt added to the --libcurl source in single_transfer()
1288 if(!config->tcp_nodelay) in single_transfer()
1291 if(config->tcp_fastopen) in single_transfer()
1327 if(config->recvpersecond && in single_transfer()
1328 (config->recvpersecond < BUFFER_SIZE)) in single_transfer()
1330 my_setopt(curl, CURLOPT_BUFFERSIZE, (long)config->recvpersecond); in single_transfer()
1335 my_setopt_str(curl, CURLOPT_URL, per->this_url); in single_transfer()
1337 global->noprogress || global->silent?1L:0L); in single_transfer()
1338 if(config->no_body) in single_transfer()
1341 if(config->oauth_bearer) in single_transfer()
1342 my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->oauth_bearer); in single_transfer()
1344 my_setopt_str(curl, CURLOPT_PROXY, config->proxy); in single_transfer()
1346 if(config->proxy && result) { in single_transfer()
1348 config->synthetic_error = TRUE; in single_transfer()
1354 if(config->proxy) in single_transfer()
1355 my_setopt_enum(curl, CURLOPT_PROXYTYPE, config->proxyver); in single_transfer()
1357 my_setopt_str(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd); in single_transfer()
1360 my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel?1L:0L); in single_transfer()
1363 if(config->preproxy) in single_transfer()
1364 my_setopt_str(curl, CURLOPT_PRE_PROXY, config->preproxy); in single_transfer()
1367 if(config->proxyanyauth) in single_transfer()
1370 else if(config->proxynegotiate) in single_transfer()
1373 else if(config->proxyntlm) in single_transfer()
1376 else if(config->proxydigest) in single_transfer()
1379 else if(config->proxybasic) in single_transfer()
1384 my_setopt_str(curl, CURLOPT_NOPROXY, config->noproxy); in single_transfer()
1387 config->suppress_connect_headers?1L:0L); in single_transfer()
1389 my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror?1L:0L); in single_transfer()
1390 my_setopt(curl, CURLOPT_REQUEST_TARGET, config->request_target); in single_transfer()
1391 my_setopt(curl, CURLOPT_UPLOAD, per->uploadfile?1L:0L); in single_transfer()
1392 my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly?1L:0L); in single_transfer()
1393 my_setopt(curl, CURLOPT_APPEND, config->ftp_append?1L:0L); in single_transfer()
1395 if(config->netrc_opt) in single_transfer()
1397 else if(config->netrc || config->netrc_file) in single_transfer()
1402 if(config->netrc_file) in single_transfer()
1403 my_setopt_str(curl, CURLOPT_NETRC_FILE, config->netrc_file); in single_transfer()
1405 my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii?1L:0L); in single_transfer()
1406 if(config->login_options) in single_transfer()
1407 my_setopt_str(curl, CURLOPT_LOGIN_OPTIONS, config->login_options); in single_transfer()
1408 my_setopt_str(curl, CURLOPT_USERPWD, config->userpwd); in single_transfer()
1409 my_setopt_str(curl, CURLOPT_RANGE, config->range); in single_transfer()
1410 if(!global->parallel) { in single_transfer()
1411 per->errorbuffer = global_errorbuffer; in single_transfer()
1414 my_setopt(curl, CURLOPT_TIMEOUT_MS, config->timeout_ms); in single_transfer()
1416 switch(config->httpreq) { in single_transfer()
1418 if(config->resume_from) { in single_transfer()
1419 errorf(global, "cannot mix --continue-at with --data"); in single_transfer()
1424 curlx_dyn_ptr(&config->postdata)); in single_transfer()
1426 (curl_off_t)curlx_dyn_len(&config->postdata)); in single_transfer()
1431 curl_mime_free(config->mimepost); in single_transfer()
1432 config->mimepost = NULL; in single_transfer()
1433 if(config->resume_from) { in single_transfer()
1434 errorf(global, "cannot mix --continue-at with --form"); in single_transfer()
1438 result = tool2curlmime(curl, config->mimeroot, &config->mimepost); in single_transfer()
1440 my_setopt_mimepost(curl, CURLOPT_MIMEPOST, config->mimepost); in single_transfer()
1450 if(config->mime_options) in single_transfer()
1451 my_setopt(curl, CURLOPT_MIME_OPTIONS, config->mime_options); in single_transfer()
1454 if(config->authtype) in single_transfer()
1455 my_setopt_bitmask(curl, CURLOPT_HTTPAUTH, (long)config->authtype); in single_transfer()
1457 my_setopt_slist(curl, CURLOPT_HTTPHEADER, config->headers); in single_transfer()
1460 my_setopt_str(curl, CURLOPT_REFERER, config->referer); in single_transfer()
1461 my_setopt_str(curl, CURLOPT_USERAGENT, config->useragent); in single_transfer()
1468 config->followlocation?1L:0L); in single_transfer()
1470 config->unrestricted_auth?1L:0L); in single_transfer()
1471 my_setopt_str(curl, CURLOPT_AWS_SIGV4, config->aws_sigv4); in single_transfer()
1472 my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer?1L:0L); in single_transfer()
1475 if(config->proxyheaders) { in single_transfer()
1476 my_setopt_slist(curl, CURLOPT_PROXYHEADER, config->proxyheaders); in single_transfer()
1481 my_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs); in single_transfer()
1483 if(config->httpversion) in single_transfer()
1484 my_setopt_enum(curl, CURLOPT_HTTP_VERSION, config->httpversion); in single_transfer()
1490 if(config->post301) in single_transfer()
1492 if(config->post302) in single_transfer()
1494 if(config->post303) in single_transfer()
1499 if(config->encoding) in single_transfer()
1503 if(config->tr_encoding) in single_transfer()
1507 config->http09_allowed ? 1L : 0L); in single_transfer()
1516 my_setopt_str(curl, CURLOPT_FTPPORT, config->ftpport); in single_transfer()
1518 config->low_speed_limit); in single_transfer()
1519 my_setopt(curl, CURLOPT_LOW_SPEED_TIME, config->low_speed_time); in single_transfer()
1521 config->sendpersecond); in single_transfer()
1523 config->recvpersecond); in single_transfer()
1525 if(config->use_resume) in single_transfer()
1526 my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, config->resume_from); in single_transfer()
1530 my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd); in single_transfer()
1531 my_setopt_str(curl, CURLOPT_PROXY_KEYPASSWD, config->proxy_key_passwd); in single_transfer()
1534 /* SSH and SSL private key uses same command-line option */ in single_transfer()
1536 my_setopt_str(curl, CURLOPT_SSH_PRIVATE_KEYFILE, config->key); in single_transfer()
1538 my_setopt_str(curl, CURLOPT_SSH_PUBLIC_KEYFILE, config->pubkey); in single_transfer()
1543 config->hostpubmd5); in single_transfer()
1548 config->hostpubsha256); in single_transfer()
1551 if(config->ssh_compression) in single_transfer()
1555 if(config->cacert) in single_transfer()
1556 my_setopt_str(curl, CURLOPT_CAINFO, config->cacert); in single_transfer()
1557 if(config->proxy_cacert) in single_transfer()
1558 my_setopt_str(curl, CURLOPT_PROXY_CAINFO, config->proxy_cacert); in single_transfer()
1560 if(config->capath) { in single_transfer()
1561 result = res_setopt_str(curl, CURLOPT_CAPATH, config->capath); in single_transfer()
1565 "SSL_CERT_DIR environment variable":"--capath"); in single_transfer()
1570 /* For the time being if --proxy-capath is not set then we use the in single_transfer()
1571 --capath value for it, if any. See #1257 */ in single_transfer()
1572 if(config->proxy_capath || config->capath) { in single_transfer()
1574 (config->proxy_capath ? in single_transfer()
1575 config->proxy_capath : in single_transfer()
1576 config->capath)); in single_transfer()
1579 if(config->proxy_capath) { in single_transfer()
1581 "ignoring --proxy-capath, not supported by libcurl"); in single_transfer()
1588 if(config->crlfile) in single_transfer()
1589 my_setopt_str(curl, CURLOPT_CRLFILE, config->crlfile); in single_transfer()
1590 if(config->proxy_crlfile) in single_transfer()
1591 my_setopt_str(curl, CURLOPT_PROXY_CRLFILE, config->proxy_crlfile); in single_transfer()
1592 else if(config->crlfile) /* CURLOPT_PROXY_CRLFILE default is crlfile */ in single_transfer()
1593 my_setopt_str(curl, CURLOPT_PROXY_CRLFILE, config->crlfile); in single_transfer()
1595 if(config->pinnedpubkey) in single_transfer()
1596 my_setopt_str(curl, CURLOPT_PINNEDPUBLICKEY, config->pinnedpubkey); in single_transfer()
1598 if(config->ssl_ec_curves) in single_transfer()
1599 my_setopt_str(curl, CURLOPT_SSL_EC_CURVES, config->ssl_ec_curves); in single_transfer()
1601 if(config->writeout) in single_transfer()
1605 /* Check if config->cert is a PKCS#11 URI and set the in single_transfer()
1606 * config->cert_type if necessary */ in single_transfer()
1607 if(config->cert) { in single_transfer()
1608 if(!config->cert_type) { in single_transfer()
1609 if(is_pkcs11_uri(config->cert)) { in single_transfer()
1610 config->cert_type = strdup("ENG"); in single_transfer()
1615 /* Check if config->key is a PKCS#11 URI and set the in single_transfer()
1616 * config->key_type if necessary */ in single_transfer()
1617 if(config->key) { in single_transfer()
1618 if(!config->key_type) { in single_transfer()
1619 if(is_pkcs11_uri(config->key)) { in single_transfer()
1620 config->key_type = strdup("ENG"); in single_transfer()
1625 /* Check if config->proxy_cert is a PKCS#11 URI and set the in single_transfer()
1626 * config->proxy_type if necessary */ in single_transfer()
1627 if(config->proxy_cert) { in single_transfer()
1628 if(!config->proxy_cert_type) { in single_transfer()
1629 if(is_pkcs11_uri(config->proxy_cert)) { in single_transfer()
1630 config->proxy_cert_type = strdup("ENG"); in single_transfer()
1635 /* Check if config->proxy_key is a PKCS#11 URI and set the in single_transfer()
1636 * config->proxy_key_type if necessary */ in single_transfer()
1637 if(config->proxy_key) { in single_transfer()
1638 if(!config->proxy_key_type) { in single_transfer()
1639 if(is_pkcs11_uri(config->proxy_key)) { in single_transfer()
1640 config->proxy_key_type = strdup("ENG"); in single_transfer()
1646 * --cert loadmem=<filename>:<password> --cert-type p12 in single_transfer()
1648 * --cert <filename>:<password> --cert-type p12 in single_transfer()
1651 if(config->cert && (strlen(config->cert) > 8) && in single_transfer()
1652 (memcmp(config->cert, "loadmem=",8) == 0)) { in single_transfer()
1653 FILE *fInCert = fopen(config->cert + 8, "rb"); in single_transfer()
1686 my_setopt_str(curl, CURLOPT_SSLCERT, config->cert); in single_transfer()
1687 my_setopt_str(curl, CURLOPT_PROXY_SSLCERT, config->proxy_cert); in single_transfer()
1688 my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type); in single_transfer()
1690 config->proxy_cert_type); in single_transfer()
1694 if(config->key && (strlen(config->key) > 8) && in single_transfer()
1695 (memcmp(config->key, "loadmem=",8) == 0)) { in single_transfer()
1696 FILE *fInCert = fopen(config->key + 8, "rb"); in single_transfer()
1729 my_setopt_str(curl, CURLOPT_SSLKEY, config->key); in single_transfer()
1730 my_setopt_str(curl, CURLOPT_PROXY_SSLKEY, config->proxy_key); in single_transfer()
1731 my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type); in single_transfer()
1733 config->proxy_key_type); in single_transfer()
1734 if(config->insecure_ok) { in single_transfer()
1740 /* libcurl default is strict verifyhost -> 2L */ in single_transfer()
1744 if(config->doh_insecure_ok) { in single_transfer()
1749 if(config->proxy_insecure_ok) { in single_transfer()
1757 if(config->verifystatus) in single_transfer()
1760 if(config->doh_verifystatus) in single_transfer()
1763 if(config->falsestart) in single_transfer()
1767 config->ssl_version | config->ssl_version_max); in single_transfer()
1768 if(config->proxy) in single_transfer()
1770 config->proxy_ssl_version); in single_transfer()
1774 (config->ssl_allow_beast ? in single_transfer()
1776 (config->ssl_no_revoke ? in single_transfer()
1778 (config->ssl_revoke_best_effort ? in single_transfer()
1780 (config->native_ca_store ? in single_transfer()
1782 (config->ssl_auto_client_cert ? in single_transfer()
1791 (config->proxy_ssl_allow_beast ? in single_transfer()
1793 (config->proxy_ssl_auto_client_cert ? in single_transfer()
1795 (config->proxy_native_ca_store ? in single_transfer()
1803 if(config->path_as_is) in single_transfer()
1807 !config->insecure_ok) { in single_transfer()
1823 if(config->no_body || config->remote_time) { in single_transfer()
1828 my_setopt(curl, CURLOPT_CRLF, config->crlf?1L:0L); in single_transfer()
1829 my_setopt_slist(curl, CURLOPT_QUOTE, config->quote); in single_transfer()
1830 my_setopt_slist(curl, CURLOPT_POSTQUOTE, config->postquote); in single_transfer()
1831 my_setopt_slist(curl, CURLOPT_PREQUOTE, config->prequote); in single_transfer()
1833 if(config->cookies) { in single_transfer()
1840 for(cl = config->cookies; cl; cl = cl->next) { in single_transfer()
1841 if(cl == config->cookies) in single_transfer()
1842 result = curlx_dyn_addf(&cookies, "%s", cl->data); in single_transfer()
1844 result = curlx_dyn_addf(&cookies, ";%s", cl->data); in single_transfer()
1858 if(config->cookiefiles) { in single_transfer()
1861 for(cfl = config->cookiefiles; cfl; cfl = cfl->next) in single_transfer()
1862 my_setopt_str(curl, CURLOPT_COOKIEFILE, cfl->data); in single_transfer()
1866 if(config->cookiejar) in single_transfer()
1867 my_setopt_str(curl, CURLOPT_COOKIEJAR, config->cookiejar); in single_transfer()
1870 my_setopt(curl, CURLOPT_COOKIESESSION, config->cookiesession?1L:0L); in single_transfer()
1872 my_setopt_enum(curl, CURLOPT_TIMECONDITION, (long)config->timecond); in single_transfer()
1873 my_setopt(curl, CURLOPT_TIMEVALUE_LARGE, config->condtime); in single_transfer()
1874 my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest); in single_transfer()
1875 customrequest_helper(config, config->httpreq, config->customrequest); in single_transfer()
1879 my_setopt_str(curl, CURLOPT_INTERFACE, config->iface); in single_transfer()
1880 my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel); in single_transfer()
1881 progressbarinit(&per->progressbar, config); in single_transfer()
1883 if((global->progressmode == CURL_PROGRESS_BAR) && in single_transfer()
1884 !global->noprogress && !global->silent) { in single_transfer()
1890 else if(per->uploadfile && !strcmp(per->uploadfile, ".")) { in single_transfer()
1891 /* when reading from stdin in non-blocking mode, we use the progress in single_transfer()
1899 if(config->dns_servers) in single_transfer()
1900 my_setopt_str(curl, CURLOPT_DNS_SERVERS, config->dns_servers); in single_transfer()
1903 if(config->dns_interface) in single_transfer()
1904 my_setopt_str(curl, CURLOPT_DNS_INTERFACE, config->dns_interface); in single_transfer()
1905 if(config->dns_ipv4_addr) in single_transfer()
1906 my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP4, config->dns_ipv4_addr); in single_transfer()
1907 if(config->dns_ipv6_addr) in single_transfer()
1908 my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP6, config->dns_ipv6_addr); in single_transfer()
1911 my_setopt_slist(curl, CURLOPT_TELNETOPTIONS, config->telnet_options); in single_transfer()
1914 my_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, config->connecttimeout_ms); in single_transfer()
1916 if(config->doh_url) in single_transfer()
1917 my_setopt_str(curl, CURLOPT_DOH_URL, config->doh_url); in single_transfer()
1919 if(config->cipher_list) in single_transfer()
1920 my_setopt_str(curl, CURLOPT_SSL_CIPHER_LIST, config->cipher_list); in single_transfer()
1922 if(config->proxy_cipher_list) in single_transfer()
1924 config->proxy_cipher_list); in single_transfer()
1926 if(config->cipher13_list) in single_transfer()
1927 my_setopt_str(curl, CURLOPT_TLS13_CIPHERS, config->cipher13_list); in single_transfer()
1929 if(config->proxy_cipher13_list) in single_transfer()
1931 config->proxy_cipher13_list); in single_transfer()
1934 if(config->disable_epsv) in single_transfer()
1939 if(config->disable_eprt) in single_transfer()
1943 if(global->tracetype != TRACE_NONE) { in single_transfer()
1945 my_setopt(curl, CURLOPT_DEBUGDATA, config); in single_transfer()
1950 if(config->engine) { in single_transfer()
1951 result = res_setopt_str(curl, CURLOPT_SSLENGINE, config->engine); in single_transfer()
1959 (long)(config->ftp_create_dirs? in single_transfer()
1964 if(config->max_filesize) in single_transfer()
1966 config->max_filesize); in single_transfer()
1968 my_setopt(curl, CURLOPT_IPRESOLVE, config->ip_version); in single_transfer()
1971 if(config->ftp_ssl_reqd) in single_transfer()
1975 else if(config->ftp_ssl) in single_transfer()
1979 else if(config->ftp_ssl_control) in single_transfer()
1983 if(config->ftp_ssl_ccc) in single_transfer()
1985 (long)config->ftp_ssl_ccc_mode); in single_transfer()
1988 if(config->socks5_gssapi_nec) in single_transfer()
1992 if(config->socks5_auth) in single_transfer()
1994 (long)config->socks5_auth); in single_transfer()
1997 if(config->proxy_service_name) in single_transfer()
1999 config->proxy_service_name); in single_transfer()
2002 if(config->service_name) in single_transfer()
2004 config->service_name); in single_transfer()
2007 my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account); in single_transfer()
2008 my_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, config->ignorecl?1L:0L); in single_transfer()
2011 my_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, config->ftp_skip_ip?1L:0L); in single_transfer()
2016 (long)config->ftp_filemethod); in single_transfer()
2019 if(config->localport) { in single_transfer()
2020 my_setopt(curl, CURLOPT_LOCALPORT, config->localport); in single_transfer()
2021 my_setopt_str(curl, CURLOPT_LOCALPORTRANGE, config->localportrange); in single_transfer()
2026 config->ftp_alternative_to_user); in single_transfer()
2029 if(config->disable_sessionid) in single_transfer()
2034 if(config->raw) { in single_transfer()
2040 if(!config->nokeepalive) { in single_transfer()
2042 if(config->alivetime) { in single_transfer()
2043 my_setopt(curl, CURLOPT_TCP_KEEPIDLE, config->alivetime); in single_transfer()
2044 my_setopt(curl, CURLOPT_TCP_KEEPINTVL, config->alivetime); in single_transfer()
2051 if(config->tftp_blksize && proto_tftp) in single_transfer()
2052 my_setopt(curl, CURLOPT_TFTP_BLKSIZE, config->tftp_blksize); in single_transfer()
2054 if(config->mail_from) in single_transfer()
2055 my_setopt_str(curl, CURLOPT_MAIL_FROM, config->mail_from); in single_transfer()
2057 if(config->mail_rcpt) in single_transfer()
2058 my_setopt_slist(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt); in single_transfer()
2062 config->mail_rcpt_allowfails ? 1L : 0L); in single_transfer()
2065 if(config->ftp_pret) in single_transfer()
2068 if(config->create_file_mode) in single_transfer()
2069 my_setopt(curl, CURLOPT_NEW_FILE_PERMS, config->create_file_mode); in single_transfer()
2071 if(config->proto_present) in single_transfer()
2072 my_setopt_str(curl, CURLOPT_PROTOCOLS_STR, config->proto_str); in single_transfer()
2073 if(config->proto_redir_present) in single_transfer()
2075 config->proto_redir_str); in single_transfer()
2077 if(config->content_disposition in single_transfer()
2078 && (urlnode->flags & GETOUT_USEREMOTE)) in single_transfer()
2079 hdrcbdata->honor_cd_filename = TRUE; in single_transfer()
2081 hdrcbdata->honor_cd_filename = FALSE; in single_transfer()
2083 hdrcbdata->outs = outs; in single_transfer()
2084 hdrcbdata->heads = heads; in single_transfer()
2085 hdrcbdata->etag_save = etag_save; in single_transfer()
2086 hdrcbdata->global = global; in single_transfer()
2087 hdrcbdata->config = config; in single_transfer()
2092 if(config->resolve) in single_transfer()
2094 my_setopt_slist(curl, CURLOPT_RESOLVE, config->resolve); in single_transfer()
2096 if(config->connect_to) in single_transfer()
2098 my_setopt_slist(curl, CURLOPT_CONNECT_TO, config->connect_to); in single_transfer()
2102 if(config->tls_username) in single_transfer()
2104 config->tls_username); in single_transfer()
2105 if(config->tls_password) in single_transfer()
2107 config->tls_password); in single_transfer()
2108 if(config->tls_authtype) in single_transfer()
2110 config->tls_authtype); in single_transfer()
2111 if(config->proxy_tls_username) in single_transfer()
2113 config->proxy_tls_username); in single_transfer()
2114 if(config->proxy_tls_password) in single_transfer()
2116 config->proxy_tls_password); in single_transfer()
2117 if(config->proxy_tls_authtype) in single_transfer()
2119 config->proxy_tls_authtype); in single_transfer()
2123 if(config->gssapi_delegation) in single_transfer()
2125 config->gssapi_delegation); in single_transfer()
2127 if(config->mail_auth) in single_transfer()
2128 my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth); in single_transfer()
2131 if(config->sasl_authzid) in single_transfer()
2132 my_setopt_str(curl, CURLOPT_SASL_AUTHZID, config->sasl_authzid); in single_transfer()
2135 if(config->sasl_ir) in single_transfer()
2138 if(config->noalpn) { in single_transfer()
2143 if(config->unix_socket_path) { in single_transfer()
2144 if(config->abstract_unix_socket) { in single_transfer()
2146 config->unix_socket_path); in single_transfer()
2150 config->unix_socket_path); in single_transfer()
2155 if(config->proto_default) in single_transfer()
2156 my_setopt_str(curl, CURLOPT_DEFAULT_PROTOCOL, config->proto_default); in single_transfer()
2159 if(config->expect100timeout_ms > 0) in single_transfer()
2161 config->expect100timeout_ms); in single_transfer()
2164 if(config->tftp_no_options && proto_tftp) in single_transfer()
2168 if(config->happy_eyeballs_timeout_ms != CURL_HET_DEFAULT) in single_transfer()
2170 config->happy_eyeballs_timeout_ms); in single_transfer()
2173 if(config->haproxy_protocol) in single_transfer()
2177 if(config->haproxy_clientip) in single_transfer()
2179 config->haproxy_clientip); in single_transfer()
2181 if(config->disallow_username_in_url) in single_transfer()
2184 if(config->altsvc) in single_transfer()
2185 my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc); in single_transfer()
2187 if(config->hsts) in single_transfer()
2188 my_setopt_str(curl, CURLOPT_HSTS, config->hsts); in single_transfer()
2192 if(config->ech) /* only if set (optional) */ in single_transfer()
2193 my_setopt_str(curl, CURLOPT_ECH, config->ech); in single_transfer()
2194 if(config->ech_public) /* only if set (optional) */ in single_transfer()
2195 my_setopt_str(curl, CURLOPT_ECH, config->ech_public); in single_transfer()
2196 if(config->ech_config) /* only if set (optional) */ in single_transfer()
2197 my_setopt_str(curl, CURLOPT_ECH, config->ech_config); in single_transfer()
2201 per->retry_sleep_default = (config->retry_delay) ? in single_transfer()
2202 config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */ in single_transfer()
2203 per->retry_numretries = config->req_retry; in single_transfer()
2204 per->retry_sleep = per->retry_sleep_default; /* ms */ in single_transfer()
2205 per->retrystart = tvnow(); in single_transfer()
2207 state->li++; in single_transfer()
2209 if(state->li >= urlnum) { in single_transfer()
2210 state->li = 0; in single_transfer()
2211 state->urlnum = 0; /* forced reglob of URLs */ in single_transfer()
2212 glob_cleanup(state->urls); in single_transfer()
2213 state->urls = NULL; in single_transfer()
2214 state->up++; in single_transfer()
2215 Curl_safefree(state->uploadfile); /* clear it to get the next */ in single_transfer()
2221 Curl_safefree(urlnode->outfile); in single_transfer()
2222 Curl_safefree(urlnode->infile); in single_transfer()
2223 urlnode->flags = 0; in single_transfer()
2224 glob_cleanup(state->urls); in single_transfer()
2225 state->urls = NULL; in single_transfer()
2226 state->urlnum = 0; in single_transfer()
2228 Curl_safefree(state->outfiles); in single_transfer()
2229 Curl_safefree(state->uploadfile); in single_transfer()
2230 if(state->inglob) { in single_transfer()
2232 glob_cleanup(state->inglob); in single_transfer()
2233 state->inglob = NULL; in single_transfer()
2235 config->state.urlnode = urlnode->next; in single_transfer()
2236 state->up = 0; in single_transfer()
2242 Curl_safefree(state->outfiles); in single_transfer()
2246 single_transfer_cleanup(config); in single_transfer()
2259 CURLM *multi, in add_parallel_transfers() argument
2271 if(all_pers < (global->parallel_max*2)) { in add_parallel_transfers()
2276 for(per = transfers; per && (all_added < global->parallel_max); in add_parallel_transfers()
2277 per = per->next) { in add_parallel_transfers()
2279 if(per->added) in add_parallel_transfers()
2282 if(per->startat && (time(NULL) < per->startat)) { in add_parallel_transfers()
2287 per->added = TRUE; in add_parallel_transfers()
2299 (void)curl_easy_setopt(per->curl, CURLOPT_PIPEWAIT, in add_parallel_transfers()
2300 global->parallel_connect ? 0L : 1L); in add_parallel_transfers()
2301 (void)curl_easy_setopt(per->curl, CURLOPT_PRIVATE, per); in add_parallel_transfers()
2302 (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFOFUNCTION, xferinfo_cb); in add_parallel_transfers()
2303 (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFODATA, per); in add_parallel_transfers()
2304 (void)curl_easy_setopt(per->curl, CURLOPT_NOPROGRESS, 0L); in add_parallel_transfers()
2306 mcode = curl_multi_add_handle(multi, per->curl); in add_parallel_transfers()
2319 (void)curl_easy_setopt(per->curl, CURLOPT_ERRORBUFFER, errorbuf); in add_parallel_transfers()
2320 per->errorbuffer = errorbuf; in add_parallel_transfers()
2321 per->added = TRUE; in add_parallel_transfers()
2332 CURLM *multi; in parallel_transfers() local
2345 multi = curl_multi_init(); in parallel_transfers()
2346 if(!multi) in parallel_transfers()
2349 result = add_parallel_transfers(global, multi, share, in parallel_transfers()
2352 curl_multi_cleanup(multi); in parallel_transfers()
2357 /* If stopping prematurely (eg due to a --fail-early condition) then signal in parallel_transfers()
2358 that any transfers in the multi should abort (via progress callback). */ in parallel_transfers()
2364 for(per = transfers; per; per = per->next) { in parallel_transfers()
2365 if(per->added) in parallel_transfers()
2366 per->abort = TRUE; in parallel_transfers()
2372 mcode = curl_multi_poll(multi, NULL, 0, 1000, NULL); in parallel_transfers()
2374 mcode = curl_multi_perform(multi, &still_running); in parallel_transfers()
2383 msg = curl_multi_info_read(multi, &rc); in parallel_transfers()
2388 CURL *easy = msg->easy_handle; in parallel_transfers()
2389 CURLcode tres = msg->data.result; in parallel_transfers()
2391 curl_multi_remove_handle(multi, easy); in parallel_transfers()
2393 if(ended->abort && (tres == CURLE_ABORTED_BY_CALLBACK) && in parallel_transfers()
2394 ended->errorbuffer) { in parallel_transfers()
2395 msnprintf(ended->errorbuffer, CURL_ERROR_SIZE, in parallel_transfers()
2401 all_added--; /* one fewer added */ in parallel_transfers()
2404 ended->added = FALSE; /* add it again */ in parallel_transfers()
2406 ended->startat = delay ? time(NULL) + delay/1000 : 0; in parallel_transfers()
2411 if(tres && (!ended->abort || !result)) in parallel_transfers()
2413 if(is_fatal_error(result) || (result && global->fail_early)) in parallel_transfers()
2434 CURLcode tres = add_parallel_transfers(global, multi, share, in parallel_transfers()
2443 if(is_fatal_error(result) || (result && global->fail_early)) in parallel_transfers()
2450 /* Make sure to return some kind of error if there was a multi problem */ in parallel_transfers()
2453 /* The other multi errors should never happen, so return in parallel_transfers()
2458 curl_multi_cleanup(multi); in parallel_transfers()
2487 if(global->libcurl) { in serial_transfers()
2494 if(global->test_event_based) in serial_transfers()
2495 result = curl_easy_perform_ev(per->curl); in serial_transfers()
2498 result = curl_easy_perform(per->curl); in serial_transfers()
2506 /* Bail out upon critical errors or --fail-early */ in serial_transfers()
2507 if(is_fatal_error(returncode) || (returncode && global->fail_early)) in serial_transfers()
2523 if(per && global->ms_per_transfer) { in serial_transfers()
2527 if(milli < global->ms_per_transfer) { in serial_transfers()
2528 notef(global, "Transfer took %ld ms, waits %ldms as set by --rate", in serial_transfers()
2529 milli, global->ms_per_transfer - milli); in serial_transfers()
2531 tool_go_sleep(global->ms_per_transfer - milli); in serial_transfers()
2540 single_transfer_cleanup(global->current); in serial_transfers()
2545 /* setup a transfer for the given config */
2547 struct OperationConfig *config, in transfer_per_config() argument
2556 if(!config->url_list || !config->url_list->url) { in transfer_per_config()
2561 /* On WIN32 we can't set the path to curl-ca-bundle.crt in transfer_per_config()
2567 * We support the environment variable thing for non-Windows platforms in transfer_per_config()
2571 if(!config->cacert && in transfer_per_config()
2572 !config->capath && in transfer_per_config()
2573 (!config->insecure_ok || (config->doh_url && !config->doh_insecure_ok))) { in transfer_per_config()
2589 * no environment-specified filename is found then check for CA bundle in transfer_per_config()
2590 * default filename curl-ca-bundle.crt in the user's PATH. in transfer_per_config()
2594 * specified by the user via CURLOPT_CAINFO / --cacert. in transfer_per_config()
2596 if(tls_backend_info->backend != CURLSSLBACKEND_SCHANNEL) { in transfer_per_config()
2600 config->cacert = strdup(env); in transfer_per_config()
2602 if(!config->cacert) { in transfer_per_config()
2611 config->capath = strdup(env); in transfer_per_config()
2613 if(!config->capath) { in transfer_per_config()
2622 config->cacert = strdup(env); in transfer_per_config()
2624 if(!config->cacert) { in transfer_per_config()
2626 free(config->capath); in transfer_per_config()
2636 result = FindWin32CACert(config, tls_backend_info->backend, in transfer_per_config()
2637 TEXT("curl-ca-bundle.crt")); in transfer_per_config()
2644 result = single_transfer(global, config, share, capath_from_env, added); in transfer_per_config()
2659 while(global->current) { in create_transfer()
2660 result = transfer_per_config(global, global->current, share, added); in create_transfer()
2663 global->current = global->current->next; in create_transfer()
2676 bool orig_noprogress = global->noprogress; in run_all_transfers()
2677 bool orig_isatty = global->isatty; in run_all_transfers()
2682 if(global->parallel) in run_all_transfers()
2698 clean_getout(per->config); in run_all_transfers()
2703 /* Reset the global config variables */ in run_all_transfers()
2704 global->noprogress = orig_noprogress; in run_all_transfers()
2705 global->isatty = orig_isatty; in run_all_transfers()
2724 (first_arg && strncmp(first_arg, "-q", 2) && in operate()
2725 !curl_strequal(first_arg, "--disable"))) { in operate()
2729 if((argc < 2) && (!global->first->url_list)) { in operate()
2745 tool_help(global->help_category); in operate()
2763 if(global->libcurl) { in operate()
2771 struct OperationConfig *operation = global->first; in operate()
2774 if(global->libcurl) { in operate()
2794 operation = operation->next; in operate()
2798 global->current = global->first; in operate()
2804 if(global->libcurl) { in operate()