Lines Matching +full:- +full:- +full:config
21 * SPDX-License-Identifier: curl
109 struct OperationConfig *config,
193 switch(stat_buf->st_fab_rfm) { in VmsSpecialSize()
199 return stat_buf->st_size; in VmsSpecialSize()
223 transfersl->next = p; in add_per_transfer()
225 p->prev = transfersl; in add_per_transfer()
246 n = per->next; in del_per_transfer()
247 p = per->prev; in del_per_transfer()
250 p->next = n; in del_per_transfer()
255 n->prev = p; in del_per_transfer()
260 all_pers--; in del_per_transfer()
268 curl_off_t uploadfilesize = -1; in pre_transfer()
272 if(per->uploadfile && !stdin_upload(per->uploadfile)) { in pre_transfer()
279 * - Stat gives a size but this is UNRELIABLE in VMS. E.g. in pre_transfer()
289 per->infd = -1; in pre_transfer()
290 if(stat(per->uploadfile, &fileinfo) == 0) { in pre_transfer()
296 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY); in pre_transfer()
299 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY, in pre_transfer()
303 if(per->infd == -1) in pre_transfer()
305 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY); in pre_transfer()
306 if((per->infd == -1) || fstat(per->infd, &fileinfo)) in pre_transfer()
309 helpf(stderr, "Can't open '%s'!\n", per->uploadfile); in pre_transfer()
310 if(per->infd != -1) { in pre_transfer()
311 close(per->infd); in pre_transfer()
312 per->infd = STDIN_FILENO; in pre_transfer()
316 per->infdopen = TRUE; in pre_transfer()
322 if(uploadfilesize != -1) { in pre_transfer()
323 struct OperationConfig *config = per->config; /* for the macro below */ in pre_transfer() local
325 (void)config; in pre_transfer()
328 my_setopt(per->curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize); in pre_transfer()
330 per->input.fd = per->infd; in pre_transfer()
332 per->start = tvnow(); in pre_transfer()
340 struct OutStruct *outs = &per->outs; in AmigaSetComment()
341 if(!result && outs->s_isreg && outs->filename) { in AmigaSetComment()
343 if(strlen(per->this_url) > 78) in AmigaSetComment()
344 per->this_url[79] = '\0'; in AmigaSetComment()
345 SetComment(outs->filename, per->this_url); in AmigaSetComment()
355 void single_transfer_cleanup(struct OperationConfig *config) in single_transfer_cleanup() argument
357 if(config) { in single_transfer_cleanup()
358 struct State *state = &config->state; in single_transfer_cleanup()
359 if(state->urls) { in single_transfer_cleanup()
361 glob_cleanup(state->urls); in single_transfer_cleanup()
362 state->urls = NULL; in single_transfer_cleanup()
364 Curl_safefree(state->outfiles); in single_transfer_cleanup()
365 Curl_safefree(state->httpgetfields); in single_transfer_cleanup()
366 Curl_safefree(state->uploadfile); in single_transfer_cleanup()
367 if(state->inglob) { in single_transfer_cleanup()
369 glob_cleanup(state->inglob); in single_transfer_cleanup()
370 state->inglob = NULL; in single_transfer_cleanup()
384 struct OutStruct *outs = &per->outs; in post_per_transfer()
385 CURL *curl = per->curl; in post_per_transfer()
386 struct OperationConfig *config = per->config; in post_per_transfer() local
388 if(!curl || !config) in post_per_transfer()
394 if(per->infdopen) in post_per_transfer()
395 close(per->infd); in post_per_transfer()
400 if(global->silent && !global->showerror) in post_per_transfer()
405 if(!config->synthetic_error && result && in post_per_transfer()
406 (!global->silent || global->showerror)) { in post_per_transfer()
407 const char *msg = per->errorbuffer; in post_per_transfer()
413 else if(config->failwithbody) { in post_per_transfer()
418 if(!global->silent || global->showerror) in post_per_transfer()
426 if(!result && config->xattr && outs->fopened && outs->stream) { in post_per_transfer()
427 int rc = fwrite_xattr(curl, per->this_url, fileno(outs->stream)); in post_per_transfer()
429 warnf(config->global, "Error setting extended attributes on '%s': %s\n", in post_per_transfer()
430 outs->filename, strerror(errno)); in post_per_transfer()
433 if(!result && !outs->stream && !outs->bytes) { in post_per_transfer()
441 if(!cond_unmet && !tool_create_output_file(outs, config)) in post_per_transfer()
445 if(!outs->s_isreg && outs->stream) { in post_per_transfer()
447 int rc = fflush(outs->stream); in post_per_transfer()
451 if(!global->silent || global->showerror) in post_per_transfer()
456 /* if retry-max-time is non-zero, make sure we haven't exceeded the in post_per_transfer()
458 if(per->retry_numretries && in post_per_transfer()
459 (!config->retry_maxtime || in post_per_transfer()
460 (tvdiff(tvnow(), per->retrystart) < in post_per_transfer()
461 config->retry_maxtime*1000L)) ) { in post_per_transfer()
478 else if(config->retry_connrefused && in post_per_transfer()
486 ((config->failonerror || config->failwithbody) && in post_per_transfer()
509 * or close/re-open the file so that the next attempt starts in post_per_transfer()
536 if(result && !retry && config->retry_all_errors) in post_per_transfer()
551 sleeptime = per->retry_sleep; in post_per_transfer()
564 if(config->retry_maxtime) { in post_per_transfer()
565 curl_off_t seconds = tvdiff(tvnow(), per->retrystart)/1000; in post_per_transfer()
567 if((CURL_OFF_T_MAX - retry_after < seconds) || in post_per_transfer()
568 (seconds + retry_after > config->retry_maxtime)) { in post_per_transfer()
569 warnf(config->global, "The Retry-After: time would " in post_per_transfer()
577 warnf(config->global, "Problem %s. " in post_per_transfer()
580 m[retry], sleeptime/1000L, per->retry_numretries); in post_per_transfer()
582 per->retry_numretries--; in post_per_transfer()
583 if(!config->retry_delay) { in post_per_transfer()
584 per->retry_sleep *= 2; in post_per_transfer()
585 if(per->retry_sleep > RETRY_SLEEP_MAX) in post_per_transfer()
586 per->retry_sleep = RETRY_SLEEP_MAX; in post_per_transfer()
588 if(outs->bytes && outs->filename && outs->stream) { in post_per_transfer()
592 if(!global->silent) in post_per_transfer()
594 outs->bytes); in post_per_transfer()
595 fflush(outs->stream); in post_per_transfer()
598 if(ftruncate(fileno(outs->stream), outs->init)) { in post_per_transfer()
601 if(!global->silent || global->showerror) in post_per_transfer()
606 just truncated the file in a large file-safe way */ in post_per_transfer()
607 rc = fseek(outs->stream, 0, SEEK_END); in post_per_transfer()
611 work properly with large files on 32-bit systems, but in post_per_transfer()
613 rc = fseek(outs->stream, (long)outs->init, SEEK_SET); in post_per_transfer()
616 if(!global->silent || global->showerror) in post_per_transfer()
620 outs->bytes = 0; /* clear for next round */ in post_per_transfer()
629 if((global->progressmode == CURL_PROGRESS_BAR) && in post_per_transfer()
630 per->progressbar.calls) in post_per_transfer()
633 fputs("\n", per->progressbar.out); in post_per_transfer()
636 if(outs->fopened && outs->stream) { in post_per_transfer()
637 int rc = fclose(outs->stream); in post_per_transfer()
641 if(!global->silent || global->showerror) in post_per_transfer()
644 if(result && config->rm_partial) { in post_per_transfer()
645 notef(global, "Removing output file: %s\n", outs->filename); in post_per_transfer()
646 unlink(outs->filename); in post_per_transfer()
653 if(!result && config->remote_time && outs->s_isreg && outs->filename) { in post_per_transfer()
655 curl_off_t filetime = -1; in post_per_transfer()
657 setfiletime(filetime, outs->filename, global); in post_per_transfer()
660 /* Write the --write-out data before cleanup but after result is final */ in post_per_transfer()
661 if(config->writeout) in post_per_transfer()
662 ourWriteOut(config, per, result); in post_per_transfer()
664 /* Close function-local opened file descriptors */ in post_per_transfer()
665 if(per->heads.fopened && per->heads.stream) in post_per_transfer()
666 fclose(per->heads.stream); in post_per_transfer()
668 if(per->heads.alloc_filename) in post_per_transfer()
669 Curl_safefree(per->heads.filename); in post_per_transfer()
671 if(per->etag_save.fopened && per->etag_save.stream) in post_per_transfer()
672 fclose(per->etag_save.stream); in post_per_transfer()
674 if(per->etag_save.alloc_filename) in post_per_transfer()
675 Curl_safefree(per->etag_save.filename); in post_per_transfer()
677 curl_easy_cleanup(per->curl); in post_per_transfer()
678 if(outs->alloc_filename) in post_per_transfer()
679 free(outs->filename); in post_per_transfer()
680 free(per->this_url); in post_per_transfer()
681 free(per->outfile); in post_per_transfer()
682 free(per->uploadfile); in post_per_transfer()
683 if(global->parallel) in post_per_transfer()
684 free(per->errorbuffer); in post_per_transfer()
717 struct OperationConfig *config, in single_transfer() argument
724 bool orig_noprogress = global->noprogress; in single_transfer()
725 bool orig_isatty = global->isatty; in single_transfer()
726 struct State *state = &config->state; in single_transfer()
727 char *httpgetfields = state->httpgetfields; in single_transfer()
730 if(config->postfields) { in single_transfer()
731 if(config->use_httpget) { in single_transfer()
734 httpgetfields = state->httpgetfields = strdup(config->postfields); in single_transfer()
735 Curl_safefree(config->postfields); in single_transfer()
740 else if(SetHTTPrequest(config, in single_transfer()
741 (config->no_body?HTTPREQ_HEAD:HTTPREQ_GET), in single_transfer()
742 &config->httpreq)) { in single_transfer()
748 if(SetHTTPrequest(config, HTTPREQ_SIMPLEPOST, &config->httpreq)) in single_transfer()
752 single_transfer_cleanup(config); in single_transfer()
756 if(!state->urlnode) { in single_transfer()
758 state->urlnode = config->url_list; in single_transfer()
759 state->infilenum = 1; in single_transfer()
762 while(config->state.urlnode) { in single_transfer()
765 struct URLGlob *inglob = state->inglob; in single_transfer()
766 urlnode = config->state.urlnode; in single_transfer()
768 /* urlnode->url is the full URL (it might be NULL) */ in single_transfer()
770 if(!urlnode->url) { in single_transfer()
773 Curl_safefree(urlnode->outfile); in single_transfer()
774 Curl_safefree(urlnode->infile); in single_transfer()
775 urlnode->flags = 0; in single_transfer()
776 config->state.urlnode = urlnode->next; in single_transfer()
777 state->up = 0; in single_transfer()
780 warnf(config->global, "Got more output options than URLs\n"); in single_transfer()
787 if(urlnode->outfile && !state->outfiles) { in single_transfer()
788 state->outfiles = strdup(urlnode->outfile); in single_transfer()
789 if(!state->outfiles) { in single_transfer()
796 infiles = urlnode->infile; in single_transfer()
798 if(!config->globoff && infiles && !inglob) { in single_transfer()
800 result = glob_url(&inglob, infiles, &state->infilenum, in single_transfer()
801 (!global->silent || global->showerror)? in single_transfer()
805 config->state.inglob = inglob; in single_transfer()
811 if(!state->up && !infiles) in single_transfer()
814 if(!state->uploadfile) { in single_transfer()
816 result = glob_next_url(&state->uploadfile, inglob); in single_transfer()
820 else if(!state->up) { in single_transfer()
821 state->uploadfile = strdup(infiles); in single_transfer()
822 if(!state->uploadfile) { in single_transfer()
832 if(!state->urlnum) { in single_transfer()
833 if(!config->globoff) { in single_transfer()
836 result = glob_url(&state->urls, urlnode->url, &state->urlnum, in single_transfer()
837 (!global->silent || global->showerror)? in single_transfer()
841 urlnum = state->urlnum; in single_transfer()
847 urlnum = state->urlnum; in single_transfer()
849 if(state->up < state->infilenum) { in single_transfer()
860 /* --etag-save */ in single_transfer()
863 etag_save->stream = stdout; in single_transfer()
865 /* --etag-compare */ in single_transfer()
866 if(config->etag_compare_file) { in single_transfer()
872 FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT); in single_transfer()
873 if(!file && !config->etag_save_file) { in single_transfer()
875 "Failed to open %s\n", config->etag_compare_file); in single_transfer()
882 header = aprintf("If-None-Match: %s", etag_from_file); in single_transfer()
886 header = aprintf("If-None-Match: \"\""); in single_transfer()
898 pe = add2list(&config->headers, header); in single_transfer()
909 if(config->etag_save_file) { in single_transfer()
911 if(strcmp(config->etag_save_file, "-")) { in single_transfer()
912 FILE *newfile = fopen(config->etag_save_file, "wb"); in single_transfer()
915 "Skip this transfer\n", config->etag_save_file); in single_transfer()
916 Curl_safefree(state->outfiles); in single_transfer()
917 glob_cleanup(state->urls); in single_transfer()
921 etag_save->filename = config->etag_save_file; in single_transfer()
922 etag_save->s_isreg = TRUE; in single_transfer()
923 etag_save->fopened = TRUE; in single_transfer()
924 etag_save->stream = newfile; in single_transfer()
929 set_binmode(etag_save->stream); in single_transfer()
940 if(etag_save->fopened) in single_transfer()
941 fclose(etag_save->stream); in single_transfer()
944 per->etag_save = etag_first; /* copy the whole struct */ in single_transfer()
945 if(state->uploadfile) { in single_transfer()
946 per->uploadfile = strdup(state->uploadfile); in single_transfer()
947 if(!per->uploadfile) { in single_transfer()
952 if(SetHTTPrequest(config, HTTPREQ_PUT, &config->httpreq)) { in single_transfer()
953 Curl_safefree(per->uploadfile); in single_transfer()
960 per->config = config; in single_transfer()
961 per->curl = curl; in single_transfer()
962 per->urlnum = urlnode->num; in single_transfer()
965 heads = &per->heads; in single_transfer()
966 heads->stream = stdout; in single_transfer()
969 if(config->headerfile) { in single_transfer()
971 if(strcmp(config->headerfile, "-")) { in single_transfer()
983 if(!per->prev || per->prev->config != config) { in single_transfer()
984 newfile = fopen(config->headerfile, "wb"); in single_transfer()
988 newfile = fopen(config->headerfile, "ab"); in single_transfer()
991 errorf(global, "Failed to open %s\n", config->headerfile); in single_transfer()
996 heads->filename = config->headerfile; in single_transfer()
997 heads->s_isreg = TRUE; in single_transfer()
998 heads->fopened = TRUE; in single_transfer()
999 heads->stream = newfile; in single_transfer()
1004 set_binmode(heads->stream); in single_transfer()
1008 hdrcbdata = &per->hdrcbdata; in single_transfer()
1010 outs = &per->outs; in single_transfer()
1011 input = &per->input; in single_transfer()
1013 per->outfile = NULL; in single_transfer()
1014 per->infdopen = FALSE; in single_transfer()
1015 per->infd = STDIN_FILENO; in single_transfer()
1018 outs->stream = stdout; in single_transfer()
1020 if(state->urls) { in single_transfer()
1021 result = glob_next_url(&per->this_url, state->urls); in single_transfer()
1025 else if(!state->li) { in single_transfer()
1026 per->this_url = strdup(urlnode->url); in single_transfer()
1027 if(!per->this_url) { in single_transfer()
1033 per->this_url = NULL; in single_transfer()
1034 if(!per->this_url) in single_transfer()
1037 if(state->outfiles) { in single_transfer()
1038 per->outfile = strdup(state->outfiles); in single_transfer()
1039 if(!per->outfile) { in single_transfer()
1045 if(((urlnode->flags&GETOUT_USEREMOTE) || in single_transfer()
1046 (per->outfile && strcmp("-", per->outfile)))) { in single_transfer()
1053 if(!per->outfile) { in single_transfer()
1055 result = get_url_file_name(&per->outfile, per->this_url); in single_transfer()
1061 if(!*per->outfile && !config->content_disposition) { in single_transfer()
1067 else if(state->urls) { in single_transfer()
1069 char *storefile = per->outfile; in single_transfer()
1070 result = glob_match_url(&per->outfile, storefile, state->urls); in single_transfer()
1077 if(!*per->outfile) { in single_transfer()
1084 if(config->output_dir && *config->output_dir) { in single_transfer()
1085 char *d = aprintf("%s/%s", config->output_dir, per->outfile); in single_transfer()
1090 free(per->outfile); in single_transfer()
1091 per->outfile = d; in single_transfer()
1093 /* Create the directory hierarchy, if not pre-existent to a multiple in single_transfer()
1096 if(config->create_dirs) { in single_transfer()
1097 result = create_dir_hierarchy(per->outfile, stderr); in single_transfer()
1103 if((urlnode->flags & GETOUT_USEREMOTE) in single_transfer()
1104 && config->content_disposition) { in single_transfer()
1106 DEBUGASSERT(!outs->filename); in single_transfer()
1109 if(config->resume_from_current) { in single_transfer()
1113 /* VMS -- Danger, the filesize is only valid for stream files */ in single_transfer()
1114 if(0 == stat(per->outfile, &fileinfo)) in single_transfer()
1116 config->resume_from = fileinfo.st_size; in single_transfer()
1119 config->resume_from = 0; in single_transfer()
1122 if(config->resume_from) { in single_transfer()
1130 FILE *file = fopen(per->outfile, "ab"); in single_transfer()
1133 errorf(global, "Can't open '%s'!\n", per->outfile); in single_transfer()
1137 outs->fopened = TRUE; in single_transfer()
1138 outs->stream = file; in single_transfer()
1139 outs->init = config->resume_from; in single_transfer()
1142 outs->stream = NULL; /* open when needed */ in single_transfer()
1144 outs->filename = per->outfile; in single_transfer()
1145 outs->s_isreg = TRUE; in single_transfer()
1148 if(per->uploadfile && !stdin_upload(per->uploadfile)) { in single_transfer()
1150 * We have specified a file to upload and it isn't "-". in single_transfer()
1152 result = add_file_name_to_url(per->curl, &per->this_url, in single_transfer()
1153 per->uploadfile); in single_transfer()
1157 else if(per->uploadfile && stdin_upload(per->uploadfile)) { in single_transfer()
1163 if(config->authtype & (1UL << bitcheck++)) { in single_transfer()
1173 * If the user has also selected --anyauth or --proxy-anyauth in single_transfer()
1176 if(config->proxyanyauth || (authbits>1)) { in single_transfer()
1178 "Using --anyauth or --proxy-anyauth with upload from stdin" in single_transfer()
1183 DEBUGASSERT(per->infdopen == FALSE); in single_transfer()
1184 DEBUGASSERT(per->infd == STDIN_FILENO); in single_transfer()
1187 if(!strcmp(per->uploadfile, ".")) { in single_transfer()
1188 if(curlx_nonblock((curl_socket_t)per->infd, TRUE) < 0) in single_transfer()
1190 "fcntl failed on fd=%d: %s\n", per->infd, strerror(errno)); in single_transfer()
1194 if(per->uploadfile && config->resume_from_current) in single_transfer()
1195 config->resume_from = -1; /* -1 will then force get-it-yourself */ in single_transfer()
1197 if(output_expected(per->this_url, per->uploadfile) && outs->stream && in single_transfer()
1198 isatty(fileno(outs->stream))) in single_transfer()
1201 per->noprogress = global->noprogress = global->isatty = TRUE; in single_transfer()
1203 /* progress meter is per download, so restore config in single_transfer()
1205 per->noprogress = global->noprogress = orig_noprogress; in single_transfer()
1206 global->isatty = orig_isatty; in single_transfer()
1209 if(httpgetfields || config->query) { in single_transfer()
1210 char *q = httpgetfields ? httpgetfields : config->query; in single_transfer()
1214 uerr = curl_url_set(uh, CURLUPART_URL, per->this_url, in single_transfer()
1220 config->synthetic_error = TRUE; in single_transfer()
1231 Curl_safefree(per->this_url); /* free previous URL */ in single_transfer()
1232 per->this_url = updated; /* use our new URL instead! */ in single_transfer()
1241 if((!per->outfile || !strcmp(per->outfile, "-")) && in single_transfer()
1242 !config->use_ascii) { in single_transfer()
1249 config->terminal_binary_ok = in single_transfer()
1250 (per->outfile && !strcmp(per->outfile, "-")); in single_transfer()
1252 /* Avoid having this setopt added to the --libcurl source output. */ in single_transfer()
1257 use_proto = url_proto(per->this_url); in single_transfer()
1262 Note: avoid having this setopt added to the --libcurl source in single_transfer()
1268 if(!config->tcp_nodelay) in single_transfer()
1271 if(config->tcp_fastopen) in single_transfer()
1282 input->config = config; in single_transfer()
1283 input->per = per; in single_transfer()
1310 if(config->recvpersecond && in single_transfer()
1311 (config->recvpersecond < BUFFER_SIZE)) in single_transfer()
1313 my_setopt(curl, CURLOPT_BUFFERSIZE, (long)config->recvpersecond); in single_transfer()
1318 my_setopt_str(curl, CURLOPT_URL, per->this_url); in single_transfer()
1320 global->noprogress || global->silent?1L:0L); in single_transfer()
1321 if(config->no_body) in single_transfer()
1324 if(config->oauth_bearer) in single_transfer()
1325 my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->oauth_bearer); in single_transfer()
1327 my_setopt_str(curl, CURLOPT_PROXY, config->proxy); in single_transfer()
1329 if(config->proxy && result) { in single_transfer()
1331 config->synthetic_error = TRUE; in single_transfer()
1337 if(config->proxy) in single_transfer()
1338 my_setopt_enum(curl, CURLOPT_PROXYTYPE, config->proxyver); in single_transfer()
1340 my_setopt_str(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd); in single_transfer()
1343 my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel?1L:0L); in single_transfer()
1346 if(config->preproxy) in single_transfer()
1347 my_setopt_str(curl, CURLOPT_PRE_PROXY, config->preproxy); in single_transfer()
1350 if(config->proxyanyauth) in single_transfer()
1353 else if(config->proxynegotiate) in single_transfer()
1356 else if(config->proxyntlm) in single_transfer()
1359 else if(config->proxydigest) in single_transfer()
1362 else if(config->proxybasic) in single_transfer()
1367 my_setopt_str(curl, CURLOPT_NOPROXY, config->noproxy); in single_transfer()
1370 config->suppress_connect_headers?1L:0L); in single_transfer()
1372 my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror?1L:0L); in single_transfer()
1373 my_setopt(curl, CURLOPT_REQUEST_TARGET, config->request_target); in single_transfer()
1374 my_setopt(curl, CURLOPT_UPLOAD, per->uploadfile?1L:0L); in single_transfer()
1375 my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly?1L:0L); in single_transfer()
1376 my_setopt(curl, CURLOPT_APPEND, config->ftp_append?1L:0L); in single_transfer()
1378 if(config->netrc_opt) in single_transfer()
1380 else if(config->netrc || config->netrc_file) in single_transfer()
1385 if(config->netrc_file) in single_transfer()
1386 my_setopt_str(curl, CURLOPT_NETRC_FILE, config->netrc_file); in single_transfer()
1388 my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii?1L:0L); in single_transfer()
1389 if(config->login_options) in single_transfer()
1390 my_setopt_str(curl, CURLOPT_LOGIN_OPTIONS, config->login_options); in single_transfer()
1391 my_setopt_str(curl, CURLOPT_USERPWD, config->userpwd); in single_transfer()
1392 my_setopt_str(curl, CURLOPT_RANGE, config->range); in single_transfer()
1393 if(!global->parallel) { in single_transfer()
1394 per->errorbuffer = global_errorbuffer; in single_transfer()
1397 my_setopt(curl, CURLOPT_TIMEOUT_MS, config->timeout_ms); in single_transfer()
1399 switch(config->httpreq) { in single_transfer()
1402 config->postfields); in single_transfer()
1404 config->postfieldsize); in single_transfer()
1408 curl_mime_free(config->mimepost); in single_transfer()
1409 config->mimepost = NULL; in single_transfer()
1410 result = tool2curlmime(curl, config->mimeroot, &config->mimepost); in single_transfer()
1413 my_setopt_mimepost(curl, CURLOPT_MIMEPOST, config->mimepost); in single_transfer()
1422 if(config->mime_options) in single_transfer()
1423 my_setopt(curl, CURLOPT_MIME_OPTIONS, config->mime_options); in single_transfer()
1426 if(config->authtype) in single_transfer()
1427 my_setopt_bitmask(curl, CURLOPT_HTTPAUTH, (long)config->authtype); in single_transfer()
1429 my_setopt_slist(curl, CURLOPT_HTTPHEADER, config->headers); in single_transfer()
1432 my_setopt_str(curl, CURLOPT_REFERER, config->referer); in single_transfer()
1433 my_setopt_str(curl, CURLOPT_USERAGENT, config->useragent); in single_transfer()
1440 config->followlocation?1L:0L); in single_transfer()
1442 config->unrestricted_auth?1L:0L); in single_transfer()
1444 my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer?1L:0L); in single_transfer()
1447 if(config->proxyheaders) { in single_transfer()
1448 my_setopt_slist(curl, CURLOPT_PROXYHEADER, config->proxyheaders); in single_transfer()
1453 my_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs); in single_transfer()
1455 if(config->httpversion) in single_transfer()
1456 my_setopt_enum(curl, CURLOPT_HTTP_VERSION, config->httpversion); in single_transfer()
1462 if(config->post301) in single_transfer()
1464 if(config->post302) in single_transfer()
1466 if(config->post303) in single_transfer()
1471 if(config->encoding) in single_transfer()
1475 if(config->tr_encoding) in single_transfer()
1479 config->http09_allowed ? 1L : 0L); in single_transfer()
1488 my_setopt_str(curl, CURLOPT_FTPPORT, config->ftpport); in single_transfer()
1490 config->low_speed_limit); in single_transfer()
1491 my_setopt(curl, CURLOPT_LOW_SPEED_TIME, config->low_speed_time); in single_transfer()
1493 config->sendpersecond); in single_transfer()
1495 config->recvpersecond); in single_transfer()
1497 if(config->use_resume) in single_transfer()
1498 my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, config->resume_from); in single_transfer()
1502 my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd); in single_transfer()
1503 my_setopt_str(curl, CURLOPT_PROXY_KEYPASSWD, config->proxy_key_passwd); in single_transfer()
1507 /* SSH and SSL private key uses same command-line option */ in single_transfer()
1509 my_setopt_str(curl, CURLOPT_SSH_PRIVATE_KEYFILE, config->key); in single_transfer()
1511 my_setopt_str(curl, CURLOPT_SSH_PUBLIC_KEYFILE, config->pubkey); in single_transfer()
1516 config->hostpubmd5); in single_transfer()
1521 config->hostpubsha256); in single_transfer()
1524 if(config->ssh_compression) in single_transfer()
1528 if(config->cacert) in single_transfer()
1529 my_setopt_str(curl, CURLOPT_CAINFO, config->cacert); in single_transfer()
1530 if(config->proxy_cacert) in single_transfer()
1531 my_setopt_str(curl, CURLOPT_PROXY_CAINFO, config->proxy_cacert); in single_transfer()
1533 if(config->capath) { in single_transfer()
1534 result = res_setopt_str(curl, CURLOPT_CAPATH, config->capath); in single_transfer()
1538 "SSL_CERT_DIR environment variable":"--capath"); in single_transfer()
1543 /* For the time being if --proxy-capath is not set then we use the in single_transfer()
1544 --capath value for it, if any. See #1257 */ in single_transfer()
1545 if(config->proxy_capath || config->capath) { in single_transfer()
1547 (config->proxy_capath ? in single_transfer()
1548 config->proxy_capath : in single_transfer()
1549 config->capath)); in single_transfer()
1551 if(config->proxy_capath) { in single_transfer()
1553 "ignoring --proxy-capath, not supported by libcurl\n"); in single_transfer()
1560 if(config->crlfile) in single_transfer()
1561 my_setopt_str(curl, CURLOPT_CRLFILE, config->crlfile); in single_transfer()
1562 if(config->proxy_crlfile) in single_transfer()
1563 my_setopt_str(curl, CURLOPT_PROXY_CRLFILE, config->proxy_crlfile); in single_transfer()
1564 else if(config->crlfile) /* CURLOPT_PROXY_CRLFILE default is crlfile */ in single_transfer()
1565 my_setopt_str(curl, CURLOPT_PROXY_CRLFILE, config->crlfile); in single_transfer()
1567 if(config->pinnedpubkey) in single_transfer()
1568 my_setopt_str(curl, CURLOPT_PINNEDPUBLICKEY, config->pinnedpubkey); in single_transfer()
1570 if(config->ssl_ec_curves) in single_transfer()
1571 my_setopt_str(curl, CURLOPT_SSL_EC_CURVES, config->ssl_ec_curves); in single_transfer()
1573 if(config->writeout) in single_transfer()
1577 /* Check if config->cert is a PKCS#11 URI and set the in single_transfer()
1578 * config->cert_type if necessary */ in single_transfer()
1579 if(config->cert) { in single_transfer()
1580 if(!config->cert_type) { in single_transfer()
1581 if(is_pkcs11_uri(config->cert)) { in single_transfer()
1582 config->cert_type = strdup("ENG"); in single_transfer()
1587 /* Check if config->key is a PKCS#11 URI and set the in single_transfer()
1588 * config->key_type if necessary */ in single_transfer()
1589 if(config->key) { in single_transfer()
1590 if(!config->key_type) { in single_transfer()
1591 if(is_pkcs11_uri(config->key)) { in single_transfer()
1592 config->key_type = strdup("ENG"); in single_transfer()
1597 /* Check if config->proxy_cert is a PKCS#11 URI and set the in single_transfer()
1598 * config->proxy_type if necessary */ in single_transfer()
1599 if(config->proxy_cert) { in single_transfer()
1600 if(!config->proxy_cert_type) { in single_transfer()
1601 if(is_pkcs11_uri(config->proxy_cert)) { in single_transfer()
1602 config->proxy_cert_type = strdup("ENG"); in single_transfer()
1607 /* Check if config->proxy_key is a PKCS#11 URI and set the in single_transfer()
1608 * config->proxy_key_type if necessary */ in single_transfer()
1609 if(config->proxy_key) { in single_transfer()
1610 if(!config->proxy_key_type) { in single_transfer()
1611 if(is_pkcs11_uri(config->proxy_key)) { in single_transfer()
1612 config->proxy_key_type = strdup("ENG"); in single_transfer()
1618 * --cert loadmem=<filename>:<password> --cert-type p12 in single_transfer()
1620 * --cert <filename>:<password> --cert-type p12 in single_transfer()
1623 if(config->cert && (strlen(config->cert) > 8) && in single_transfer()
1624 (memcmp(config->cert, "loadmem=",8) == 0)) { in single_transfer()
1625 FILE *fInCert = fopen(config->cert + 8, "rb"); in single_transfer()
1658 my_setopt_str(curl, CURLOPT_SSLCERT, config->cert); in single_transfer()
1659 my_setopt_str(curl, CURLOPT_PROXY_SSLCERT, config->proxy_cert); in single_transfer()
1660 my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type); in single_transfer()
1662 config->proxy_cert_type); in single_transfer()
1666 if(config->key && (strlen(config->key) > 8) && in single_transfer()
1667 (memcmp(config->key, "loadmem=",8) == 0)) { in single_transfer()
1668 FILE *fInCert = fopen(config->key + 8, "rb"); in single_transfer()
1701 my_setopt_str(curl, CURLOPT_SSLKEY, config->key); in single_transfer()
1702 my_setopt_str(curl, CURLOPT_PROXY_SSLKEY, config->proxy_key); in single_transfer()
1703 my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type); in single_transfer()
1705 config->proxy_key_type); in single_transfer()
1707 config->aws_sigv4); in single_transfer()
1709 if(config->insecure_ok) { in single_transfer()
1715 /* libcurl default is strict verifyhost -> 2L */ in single_transfer()
1719 if(config->doh_insecure_ok) { in single_transfer()
1724 if(config->proxy_insecure_ok) { in single_transfer()
1732 if(config->verifystatus) in single_transfer()
1735 if(config->doh_verifystatus) in single_transfer()
1738 if(config->falsestart) in single_transfer()
1742 config->ssl_version | config->ssl_version_max); in single_transfer()
1743 if(config->proxy) in single_transfer()
1745 config->proxy_ssl_version); in single_transfer()
1749 (config->ssl_allow_beast ? in single_transfer()
1751 (config->ssl_no_revoke ? in single_transfer()
1753 (config->ssl_revoke_best_effort ? in single_transfer()
1755 (config->native_ca_store ? in single_transfer()
1757 (config->ssl_auto_client_cert ? in single_transfer()
1766 (config->proxy_ssl_allow_beast ? in single_transfer()
1768 (config->proxy_ssl_auto_client_cert ? in single_transfer()
1776 if(config->path_as_is) in single_transfer()
1780 !config->insecure_ok) { in single_transfer()
1796 if(config->no_body || config->remote_time) { in single_transfer()
1801 my_setopt(curl, CURLOPT_CRLF, config->crlf?1L:0L); in single_transfer()
1802 my_setopt_slist(curl, CURLOPT_QUOTE, config->quote); in single_transfer()
1803 my_setopt_slist(curl, CURLOPT_POSTQUOTE, config->postquote); in single_transfer()
1804 my_setopt_slist(curl, CURLOPT_PREQUOTE, config->prequote); in single_transfer()
1806 if(config->cookies) { in single_transfer()
1813 for(cl = config->cookies; cl; cl = cl->next) { in single_transfer()
1814 if(cl == config->cookies) in single_transfer()
1815 result = curlx_dyn_addf(&cookies, "%s", cl->data); in single_transfer()
1817 result = curlx_dyn_addf(&cookies, ";%s", cl->data); in single_transfer()
1831 if(config->cookiefiles) { in single_transfer()
1834 for(cfl = config->cookiefiles; cfl; cfl = cfl->next) in single_transfer()
1835 my_setopt_str(curl, CURLOPT_COOKIEFILE, cfl->data); in single_transfer()
1839 if(config->cookiejar) in single_transfer()
1840 my_setopt_str(curl, CURLOPT_COOKIEJAR, config->cookiejar); in single_transfer()
1843 my_setopt(curl, CURLOPT_COOKIESESSION, config->cookiesession?1L:0L); in single_transfer()
1845 my_setopt_enum(curl, CURLOPT_TIMECONDITION, (long)config->timecond); in single_transfer()
1846 my_setopt(curl, CURLOPT_TIMEVALUE_LARGE, config->condtime); in single_transfer()
1847 my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest); in single_transfer()
1848 customrequest_helper(config, config->httpreq, config->customrequest); in single_transfer()
1852 my_setopt_str(curl, CURLOPT_INTERFACE, config->iface); in single_transfer()
1853 my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel); in single_transfer()
1854 progressbarinit(&per->progressbar, config); in single_transfer()
1856 if((global->progressmode == CURL_PROGRESS_BAR) && in single_transfer()
1857 !global->noprogress && !global->silent) { in single_transfer()
1863 else if(per->uploadfile && !strcmp(per->uploadfile, ".")) { in single_transfer()
1864 /* when reading from stdin in non-blocking mode, we use the progress in single_transfer()
1872 if(config->dns_servers) in single_transfer()
1873 my_setopt_str(curl, CURLOPT_DNS_SERVERS, config->dns_servers); in single_transfer()
1876 if(config->dns_interface) in single_transfer()
1877 my_setopt_str(curl, CURLOPT_DNS_INTERFACE, config->dns_interface); in single_transfer()
1878 if(config->dns_ipv4_addr) in single_transfer()
1879 my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP4, config->dns_ipv4_addr); in single_transfer()
1880 if(config->dns_ipv6_addr) in single_transfer()
1881 my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP6, config->dns_ipv6_addr); in single_transfer()
1884 my_setopt_slist(curl, CURLOPT_TELNETOPTIONS, config->telnet_options); in single_transfer()
1887 my_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, config->connecttimeout_ms); in single_transfer()
1889 if(config->doh_url) in single_transfer()
1890 my_setopt_str(curl, CURLOPT_DOH_URL, config->doh_url); in single_transfer()
1892 if(config->cipher_list) in single_transfer()
1893 my_setopt_str(curl, CURLOPT_SSL_CIPHER_LIST, config->cipher_list); in single_transfer()
1895 if(config->proxy_cipher_list) in single_transfer()
1897 config->proxy_cipher_list); in single_transfer()
1899 if(config->cipher13_list) in single_transfer()
1900 my_setopt_str(curl, CURLOPT_TLS13_CIPHERS, config->cipher13_list); in single_transfer()
1902 if(config->proxy_cipher13_list) in single_transfer()
1904 config->proxy_cipher13_list); in single_transfer()
1907 if(config->disable_epsv) in single_transfer()
1912 if(config->disable_eprt) in single_transfer()
1916 if(global->tracetype != TRACE_NONE) { in single_transfer()
1918 my_setopt(curl, CURLOPT_DEBUGDATA, config); in single_transfer()
1923 if(config->engine) { in single_transfer()
1924 result = res_setopt_str(curl, CURLOPT_SSLENGINE, config->engine); in single_transfer()
1932 (long)(config->ftp_create_dirs? in single_transfer()
1937 if(config->max_filesize) in single_transfer()
1939 config->max_filesize); in single_transfer()
1941 my_setopt(curl, CURLOPT_IPRESOLVE, config->ip_version); in single_transfer()
1944 if(config->ftp_ssl_reqd) in single_transfer()
1948 else if(config->ftp_ssl) in single_transfer()
1952 else if(config->ftp_ssl_control) in single_transfer()
1956 if(config->ftp_ssl_ccc) in single_transfer()
1958 (long)config->ftp_ssl_ccc_mode); in single_transfer()
1961 if(config->socks5_gssapi_nec) in single_transfer()
1965 if(config->socks5_auth) in single_transfer()
1967 (long)config->socks5_auth); in single_transfer()
1970 if(config->proxy_service_name) in single_transfer()
1972 config->proxy_service_name); in single_transfer()
1975 if(config->service_name) in single_transfer()
1977 config->service_name); in single_transfer()
1980 my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account); in single_transfer()
1981 my_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, config->ignorecl?1L:0L); in single_transfer()
1984 my_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, config->ftp_skip_ip?1L:0L); in single_transfer()
1989 (long)config->ftp_filemethod); in single_transfer()
1992 if(config->localport) { in single_transfer()
1993 my_setopt(curl, CURLOPT_LOCALPORT, config->localport); in single_transfer()
1994 my_setopt_str(curl, CURLOPT_LOCALPORTRANGE, config->localportrange); in single_transfer()
1999 config->ftp_alternative_to_user); in single_transfer()
2002 if(config->disable_sessionid) in single_transfer()
2007 if(config->raw) { in single_transfer()
2013 if(!config->nokeepalive) { in single_transfer()
2015 if(config->alivetime) { in single_transfer()
2016 my_setopt(curl, CURLOPT_TCP_KEEPIDLE, config->alivetime); in single_transfer()
2017 my_setopt(curl, CURLOPT_TCP_KEEPINTVL, config->alivetime); in single_transfer()
2024 if(config->tftp_blksize && proto_tftp) in single_transfer()
2025 my_setopt(curl, CURLOPT_TFTP_BLKSIZE, config->tftp_blksize); in single_transfer()
2027 if(config->mail_from) in single_transfer()
2028 my_setopt_str(curl, CURLOPT_MAIL_FROM, config->mail_from); in single_transfer()
2030 if(config->mail_rcpt) in single_transfer()
2031 my_setopt_slist(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt); in single_transfer()
2035 config->mail_rcpt_allowfails ? 1L : 0L); in single_transfer()
2038 if(config->ftp_pret) in single_transfer()
2041 if(config->create_file_mode) in single_transfer()
2042 my_setopt(curl, CURLOPT_NEW_FILE_PERMS, config->create_file_mode); in single_transfer()
2044 if(config->proto_present) in single_transfer()
2045 my_setopt_str(curl, CURLOPT_PROTOCOLS_STR, config->proto_str); in single_transfer()
2046 if(config->proto_redir_present) in single_transfer()
2048 config->proto_redir_str); in single_transfer()
2050 if(config->content_disposition in single_transfer()
2051 && (urlnode->flags & GETOUT_USEREMOTE)) in single_transfer()
2052 hdrcbdata->honor_cd_filename = TRUE; in single_transfer()
2054 hdrcbdata->honor_cd_filename = FALSE; in single_transfer()
2056 hdrcbdata->outs = outs; in single_transfer()
2057 hdrcbdata->heads = heads; in single_transfer()
2058 hdrcbdata->etag_save = etag_save; in single_transfer()
2059 hdrcbdata->global = global; in single_transfer()
2060 hdrcbdata->config = config; in single_transfer()
2065 if(config->resolve) in single_transfer()
2067 my_setopt_slist(curl, CURLOPT_RESOLVE, config->resolve); in single_transfer()
2069 if(config->connect_to) in single_transfer()
2071 my_setopt_slist(curl, CURLOPT_CONNECT_TO, config->connect_to); in single_transfer()
2075 if(config->tls_username) in single_transfer()
2077 config->tls_username); in single_transfer()
2078 if(config->tls_password) in single_transfer()
2080 config->tls_password); in single_transfer()
2081 if(config->tls_authtype) in single_transfer()
2083 config->tls_authtype); in single_transfer()
2084 if(config->proxy_tls_username) in single_transfer()
2086 config->proxy_tls_username); in single_transfer()
2087 if(config->proxy_tls_password) in single_transfer()
2089 config->proxy_tls_password); in single_transfer()
2090 if(config->proxy_tls_authtype) in single_transfer()
2092 config->proxy_tls_authtype); in single_transfer()
2096 if(config->gssapi_delegation) in single_transfer()
2098 config->gssapi_delegation); in single_transfer()
2100 if(config->mail_auth) in single_transfer()
2101 my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth); in single_transfer()
2104 if(config->sasl_authzid) in single_transfer()
2105 my_setopt_str(curl, CURLOPT_SASL_AUTHZID, config->sasl_authzid); in single_transfer()
2108 if(config->sasl_ir) in single_transfer()
2111 if(config->noalpn) { in single_transfer()
2116 if(config->unix_socket_path) { in single_transfer()
2117 if(config->abstract_unix_socket) { in single_transfer()
2119 config->unix_socket_path); in single_transfer()
2123 config->unix_socket_path); in single_transfer()
2128 if(config->proto_default) in single_transfer()
2129 my_setopt_str(curl, CURLOPT_DEFAULT_PROTOCOL, config->proto_default); in single_transfer()
2132 if(config->expect100timeout_ms > 0) in single_transfer()
2134 config->expect100timeout_ms); in single_transfer()
2137 if(config->tftp_no_options && proto_tftp) in single_transfer()
2141 if(config->happy_eyeballs_timeout_ms != CURL_HET_DEFAULT) in single_transfer()
2143 config->happy_eyeballs_timeout_ms); in single_transfer()
2146 if(config->haproxy_protocol) in single_transfer()
2149 if(config->disallow_username_in_url) in single_transfer()
2152 if(config->altsvc) in single_transfer()
2153 my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc); in single_transfer()
2155 if(config->hsts) in single_transfer()
2156 my_setopt_str(curl, CURLOPT_HSTS, config->hsts); in single_transfer()
2159 per->retry_sleep_default = (config->retry_delay) ? in single_transfer()
2160 config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */ in single_transfer()
2161 per->retry_numretries = config->req_retry; in single_transfer()
2162 per->retry_sleep = per->retry_sleep_default; /* ms */ in single_transfer()
2163 per->retrystart = tvnow(); in single_transfer()
2165 state->li++; in single_transfer()
2167 if(state->li >= urlnum) { in single_transfer()
2168 state->li = 0; in single_transfer()
2169 state->urlnum = 0; /* forced reglob of URLs */ in single_transfer()
2170 glob_cleanup(state->urls); in single_transfer()
2171 state->urls = NULL; in single_transfer()
2172 state->up++; in single_transfer()
2173 Curl_safefree(state->uploadfile); /* clear it to get the next */ in single_transfer()
2179 Curl_safefree(urlnode->outfile); in single_transfer()
2180 Curl_safefree(urlnode->infile); in single_transfer()
2181 urlnode->flags = 0; in single_transfer()
2182 glob_cleanup(state->urls); in single_transfer()
2183 state->urls = NULL; in single_transfer()
2184 state->urlnum = 0; in single_transfer()
2186 Curl_safefree(state->outfiles); in single_transfer()
2187 Curl_safefree(state->uploadfile); in single_transfer()
2188 if(state->inglob) { in single_transfer()
2190 glob_cleanup(state->inglob); in single_transfer()
2191 state->inglob = NULL; in single_transfer()
2193 config->state.urlnode = urlnode->next; in single_transfer()
2194 state->up = 0; in single_transfer()
2200 Curl_safefree(state->outfiles); in single_transfer()
2204 single_transfer_cleanup(config); in single_transfer()
2229 if(all_pers < (global->parallel_max*2)) { in add_parallel_transfers()
2234 for(per = transfers; per && (all_added < global->parallel_max); in add_parallel_transfers()
2235 per = per->next) { in add_parallel_transfers()
2237 if(per->added) in add_parallel_transfers()
2240 if(per->startat && (time(NULL) < per->startat)) { in add_parallel_transfers()
2245 per->added = TRUE; in add_parallel_transfers()
2257 (void)curl_easy_setopt(per->curl, CURLOPT_PIPEWAIT, in add_parallel_transfers()
2258 global->parallel_connect ? 0L : 1L); in add_parallel_transfers()
2259 (void)curl_easy_setopt(per->curl, CURLOPT_PRIVATE, per); in add_parallel_transfers()
2260 (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFOFUNCTION, xferinfo_cb); in add_parallel_transfers()
2261 (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFODATA, per); in add_parallel_transfers()
2262 (void)curl_easy_setopt(per->curl, CURLOPT_NOPROGRESS, 0L); in add_parallel_transfers()
2264 mcode = curl_multi_add_handle(multi, per->curl); in add_parallel_transfers()
2277 (void)curl_easy_setopt(per->curl, CURLOPT_ERRORBUFFER, errorbuf); in add_parallel_transfers()
2278 per->errorbuffer = errorbuf; in add_parallel_transfers()
2279 per->added = TRUE; in add_parallel_transfers()
2315 /* If stopping prematurely (eg due to a --fail-early condition) then signal in parallel_transfers()
2322 for(per = transfers; per; per = per->next) { in parallel_transfers()
2323 if(per->added) in parallel_transfers()
2324 per->abort = TRUE; in parallel_transfers()
2346 CURL *easy = msg->easy_handle; in parallel_transfers()
2347 CURLcode tres = msg->data.result; in parallel_transfers()
2351 if(ended->abort && (tres == CURLE_ABORTED_BY_CALLBACK) && in parallel_transfers()
2352 ended->errorbuffer) { in parallel_transfers()
2353 msnprintf(ended->errorbuffer, CURL_ERROR_SIZE, in parallel_transfers()
2359 all_added--; /* one fewer added */ in parallel_transfers()
2362 ended->added = FALSE; /* add it again */ in parallel_transfers()
2364 ended->startat = delay ? time(NULL) + delay/1000 : 0; in parallel_transfers()
2369 if(tres && (!ended->abort || !result)) in parallel_transfers()
2371 if(is_fatal_error(result) || (result && global->fail_early)) in parallel_transfers()
2401 if(is_fatal_error(result) || (result && global->fail_early)) in parallel_transfers()
2445 if(global->libcurl) { in serial_transfers()
2452 if(global->test_event_based) in serial_transfers()
2453 result = curl_easy_perform_ev(per->curl); in serial_transfers()
2456 result = curl_easy_perform(per->curl); in serial_transfers()
2464 /* Bail out upon critical errors or --fail-early */ in serial_transfers()
2465 if(is_fatal_error(returncode) || (returncode && global->fail_early)) in serial_transfers()
2481 if(per && global->ms_per_transfer) { in serial_transfers()
2485 if(milli < global->ms_per_transfer) { in serial_transfers()
2486 notef(global, "Transfer took %ld ms, waits %ldms as set by --rate\n", in serial_transfers()
2487 milli, global->ms_per_transfer - milli); in serial_transfers()
2489 tool_go_sleep(global->ms_per_transfer - milli); in serial_transfers()
2498 single_transfer_cleanup(global->current); in serial_transfers()
2503 /* setup a transfer for the given config */
2505 struct OperationConfig *config, in transfer_per_config() argument
2514 if(!config->url_list || !config->url_list->url) { in transfer_per_config()
2519 /* On WIN32 we can't set the path to curl-ca-bundle.crt in transfer_per_config()
2525 * We support the environment variable thing for non-Windows platforms in transfer_per_config()
2529 if(!config->cacert && in transfer_per_config()
2530 !config->capath && in transfer_per_config()
2531 (!config->insecure_ok || (config->doh_url && !config->doh_insecure_ok))) { in transfer_per_config()
2547 * no environment-specified filename is found then check for CA bundle in transfer_per_config()
2548 * default filename curl-ca-bundle.crt in the user's PATH. in transfer_per_config()
2552 * specified by the user via CURLOPT_CAINFO / --cacert. in transfer_per_config()
2554 if(tls_backend_info->backend != CURLSSLBACKEND_SCHANNEL) { in transfer_per_config()
2558 config->cacert = strdup(env); in transfer_per_config()
2559 if(!config->cacert) { in transfer_per_config()
2569 config->capath = strdup(env); in transfer_per_config()
2570 if(!config->capath) { in transfer_per_config()
2581 config->cacert = strdup(env); in transfer_per_config()
2582 if(!config->cacert) { in transfer_per_config()
2596 result = FindWin32CACert(config, tls_backend_info->backend, in transfer_per_config()
2597 TEXT("curl-ca-bundle.crt")); in transfer_per_config()
2605 result = single_transfer(global, config, share, capath_from_env, added); in transfer_per_config()
2620 while(global->current) { in create_transfer()
2621 result = transfer_per_config(global, global->current, share, added); in create_transfer()
2624 global->current = global->current->next; in create_transfer()
2637 bool orig_noprogress = global->noprogress; in run_all_transfers()
2638 bool orig_isatty = global->isatty; in run_all_transfers()
2643 if(global->parallel) in run_all_transfers()
2659 clean_getout(per->config); in run_all_transfers()
2664 /* Reset the global config variables */ in run_all_transfers()
2665 global->noprogress = orig_noprogress; in run_all_transfers()
2666 global->isatty = orig_isatty; in run_all_transfers()
2685 (first_arg && strncmp(first_arg, "-q", 2) && in operate()
2686 !curl_strequal(first_arg, "--disable"))) { in operate()
2690 if((argc < 2) && (!global->first->url_list)) { in operate()
2706 tool_help(global->help_category); in operate()
2724 if(global->libcurl) { in operate()
2732 struct OperationConfig *operation = global->first; in operate()
2735 if(global->libcurl) { in operate()
2753 operation = operation->next; in operate()
2757 global->current = global->first; in operate()
2763 if(global->libcurl) { in operate()