Lines Matching refs:per

211 static CURLcode add_per_transfer(struct per_transfer **per)
228 *per = p;
237 static struct per_transfer *del_per_transfer(struct per_transfer *per)
243 DEBUGASSERT(per);
245 n = per->next;
246 p = per->prev;
258 free(per);
265 struct per_transfer *per)
271 if(per->uploadfile && !stdin_upload(per->uploadfile)) {
288 per->infd = -1;
289 if(stat(per->uploadfile, &fileinfo) == 0) {
295 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY);
298 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY,
302 if(per->infd == -1)
304 per->infd = open(per->uploadfile, O_RDONLY | O_BINARY);
305 if((per->infd == -1) || fstat(per->infd, &fileinfo))
308 helpf(tool_stderr, "Can't open '%s'", per->uploadfile);
309 if(per->infd != -1) {
310 close(per->infd);
311 per->infd = STDIN_FILENO;
315 per->infdopen = TRUE;
333 struct OperationConfig *config = per->config; /* for the macro below */
338 my_setopt(per->curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize);
341 per->uploadfilesize = uploadfilesize;
342 per->start = tvnow();
372 struct per_transfer *per,
377 struct OutStruct *outs = &per->outs;
378 CURL *curl = per->curl;
379 struct OperationConfig *config = per->config;
388 if(per->infdopen)
389 close(per->infd);
401 const char *msg = per->errorbuffer;
421 rc = fwrite_xattr(curl, per->this_url, fileno(outs->stream));
457 if(per->retry_numretries &&
459 (tvdiff(tvnow(), per->retrystart) <
550 sleeptime = per->retry_sleep;
564 curl_off_t seconds = tvdiff(tvnow(), per->retrystart)/1000;
579 m[retry], sleeptime/1000L, per->retry_numretries);
581 per->retry_numretries--;
583 per->retry_sleep *= 2;
584 if(per->retry_sleep > RETRY_SLEEP_MAX)
585 per->retry_sleep = RETRY_SLEEP_MAX;
626 per->progressbar.calls)
629 fputs("\n", per->progressbar.out);
664 ourWriteOut(config, per, result);
667 if(per->heads.fopened && per->heads.stream)
668 fclose(per->heads.stream);
670 if(per->heads.alloc_filename)
671 Curl_safefree(per->heads.filename);
673 if(per->etag_save.fopened && per->etag_save.stream)
674 fclose(per->etag_save.stream);
676 if(per->etag_save.alloc_filename)
677 Curl_safefree(per->etag_save.filename);
679 curl_easy_cleanup(per->curl);
682 free(per->this_url);
683 free(per->outfile);
684 free(per->uploadfile);
686 free(per->errorbuffer);
867 struct per_transfer *per = NULL;
951 result = add_per_transfer(&per);
960 per->etag_save = etag_first; /* copy the whole struct */
962 per->uploadfile = strdup(state->uploadfile);
963 if(!per->uploadfile) {
969 Curl_safefree(per->uploadfile);
976 per->config = config;
977 per->curl = curl;
978 per->urlnum = urlnode->num;
981 heads = &per->heads;
999 if(!per->prev || per->prev->config != config) {
1024 hdrcbdata = &per->hdrcbdata;
1026 outs = &per->outs;
1028 per->outfile = NULL;
1029 per->infdopen = FALSE;
1030 per->infd = STDIN_FILENO;
1036 result = glob_next_url(&per->this_url, state->urls);
1041 per->this_url = strdup(urlnode->url);
1042 if(!per->this_url) {
1048 per->this_url = NULL;
1049 if(!per->this_url)
1053 per->outfile = strdup(state->outfiles);
1054 if(!per->outfile) {
1061 (per->outfile && strcmp("-", per->outfile)))) {
1068 if(!per->outfile) {
1070 result = get_url_file_name(&per->outfile, per->this_url);
1076 if(!*per->outfile && !config->content_disposition) {
1084 char *storefile = per->outfile;
1085 result = glob_match_url(&per->outfile, storefile, state->urls);
1092 if(!*per->outfile) {
1100 char *d = aprintf("%s/%s", config->output_dir, per->outfile);
1105 free(per->outfile);
1106 per->outfile = d;
1112 result = create_dir_hierarchy(per->outfile, global);
1129 if(0 == stat(per->outfile, &fileinfo))
1145 FILE *file = fopen(per->outfile, "ab");
1148 errorf(global, "Can't open '%s'", per->outfile);
1159 outs->filename = per->outfile;
1163 if(per->uploadfile && !stdin_upload(per->uploadfile)) {
1167 result = add_file_name_to_url(per->curl, &per->this_url,
1168 per->uploadfile);
1172 else if(per->uploadfile && stdin_upload(per->uploadfile)) {
1198 DEBUGASSERT(per->infdopen == FALSE);
1199 DEBUGASSERT(per->infd == STDIN_FILENO);
1202 if(!strcmp(per->uploadfile, ".")) {
1203 if(curlx_nonblock((curl_socket_t)per->infd, TRUE) < 0)
1205 "fcntl failed on fd=%d: %s", per->infd, strerror(errno));
1209 if(per->uploadfile && config->resume_from_current)
1212 if(output_expected(per->this_url, per->uploadfile) && outs->stream &&
1216 per->noprogress = global->noprogress = global->isatty = TRUE;
1218 /* progress meter is per download, so restore config
1220 per->noprogress = global->noprogress = orig_noprogress;
1229 uerr = curl_url_set(uh, CURLUPART_URL, per->this_url,
1246 Curl_safefree(per->this_url); /* free previous URL */
1247 per->this_url = updated; /* use our new URL instead! */
1256 if((!per->outfile || !strcmp(per->outfile, "-")) &&
1265 (per->outfile && !strcmp(per->outfile, "-"));
1273 result = url_proto(&per->this_url, config, &use_proto);
1293 my_setopt(curl, CURLOPT_WRITEDATA, per);
1294 my_setopt(curl, CURLOPT_INTERLEAVEDATA, per);
1306 my_setopt(curl, CURLOPT_READDATA, per);
1312 my_setopt(curl, CURLOPT_SEEKDATA, per);
1333 my_setopt_str(curl, CURLOPT_URL, per->this_url);
1389 my_setopt(curl, CURLOPT_UPLOAD, per->uploadfile?1L:0L);
1409 per->errorbuffer = global_errorbuffer;
1879 progressbarinit(&per->progressbar, config);
1886 my_setopt(curl, CURLOPT_XFERINFODATA, per);
1888 else if(per->uploadfile && !strcmp(per->uploadfile, ".")) {
1893 my_setopt(curl, CURLOPT_XFERINFODATA, per);
2088 my_setopt(curl, CURLOPT_HEADERDATA, per);
2189 per->retry_sleep_default = (config->retry_delay) ?
2191 per->retry_numretries = config->req_retry;
2192 per->retry_sleep = per->retry_sleep_default; /* ms */
2193 per->retrystart = tvnow();
2252 struct per_transfer *per;
2264 for(per = transfers; per && (all_added < global->parallel_max);
2265 per = per->next) {
2267 if(per->added)
2270 if(per->startat && (time(NULL) < per->startat)) {
2275 per->added = TRUE;
2277 result = pre_transfer(global, per);
2287 (void)curl_easy_setopt(per->curl, CURLOPT_PIPEWAIT,
2289 (void)curl_easy_setopt(per->curl, CURLOPT_PRIVATE, per);
2290 (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFOFUNCTION, xferinfo_cb);
2291 (void)curl_easy_setopt(per->curl, CURLOPT_XFERINFODATA, per);
2292 (void)curl_easy_setopt(per->curl, CURLOPT_NOPROGRESS, 0L);
2294 mcode = curl_multi_add_handle(multi, per->curl);
2307 (void)curl_easy_setopt(per->curl, CURLOPT_ERRORBUFFER, errorbuf);
2308 per->errorbuffer = errorbuf;
2309 per->added = TRUE;
2313 *morep = (per || sleeping) ? TRUE : FALSE;
2329 /* wrapitup_processed is set TRUE after the per transfer abort flag is set */
2351 struct per_transfer *per;
2352 for(per = transfers; per; per = per->next) {
2353 if(per->added)
2354 per->abort = TRUE;
2456 struct per_transfer *per;
2466 for(per = transfers; per;) {
2471 result = pre_transfer(global, per);
2483 result = curl_easy_perform_ev(per->curl);
2486 result = curl_easy_perform(per->curl);
2488 returncode = post_per_transfer(global, per, result, &retry, &delay_ms);
2506 per = del_per_transfer(per);
2511 if(per && global->ms_per_transfer) {
2670 struct per_transfer *per;
2681 for(per = transfers; per;) {
2684 CURLcode result2 = post_per_transfer(global, per, result, &retry, &delay);
2690 clean_getout(per->config);
2692 per = del_per_transfer(per);