• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:no +full:- +full:transfer +full:- +full:progress

21  * SPDX-License-Identifier: curl
57 #include "transfer.h"
64 #include "progress.h"
92 /* true globals -- for curl_global_init() and curl_global_cleanup() */
111 * ways, but at this point it must be defined as the system-supplied strdup
127 * If a memory-using function (like curl_getenv) is used before
221 initialized--; /* undo the increase */ in global_init()
296 if(--initialized) { in curl_global_cleanup()
401 if(timeout_ms == -1) in events_timer()
408 ev->ms = timeout_ms; in events_timer()
409 ev->msbump = TRUE; in events_timer()
467 m = ev->list; in events_socket()
469 if(m->socket.fd == s) { in events_socket()
472 struct socketmonitor *nxt = m->next; in events_socket()
475 prev->next = nxt; in events_socket()
477 ev->list = nxt; in events_socket()
485 m->socket.events = socketcb2poll(what); in events_socket()
493 m = m->next; /* move to next node */ in events_socket()
505 m->next = ev->list; in events_socket()
506 m->socket.fd = s; in events_socket()
507 m->socket.events = socketcb2poll(what); in events_socket()
508 m->socket.revents = 0; in events_socket()
509 ev->list = m; in events_socket()
526 * Do the multi handle setups that only event-based transfers need.
563 for(m = ev->list, f = &fds[0]; m; m = m->next) { in wait_or_timeout()
564 f->fd = m->socket.fd; in wait_or_timeout()
565 f->events = m->socket.events; in wait_or_timeout()
566 f->revents = 0; in wait_or_timeout()
567 /* fprintf(stderr, "poll() %d check socket %d\n", numfds, f->fd); */ in wait_or_timeout()
576 pollrc = Curl_poll(fds, numfds, ev->ms); in wait_or_timeout()
582 ev->msbump = FALSE; /* reset here */ in wait_or_timeout()
586 ev->ms = 0; in wait_or_timeout()
589 &ev->running_handles); in wait_or_timeout()
599 infof(multi->easyp, "call curl_multi_socket_action(socket %d)", in wait_or_timeout()
602 &ev->running_handles); in wait_or_timeout()
606 if(!ev->msbump) { in wait_or_timeout()
612 if(timediff > ev->ms) in wait_or_timeout()
613 ev->ms = 0; in wait_or_timeout()
615 ev->ms -= (long)timediff; in wait_or_timeout()
627 result = msg->data.result; in wait_or_timeout()
638 * Runs a transfer in a blocking manner using the events-based API
646 /* if running event-based, do some further multi inits */ in easy_events()
675 result = msg->data.result; in easy_transfer()
695 * transfer as previously setup.
698 * runs curl_multi_perform() until the transfer is done, then detaches the
704 * function, the same multi handle must be re-used so that the same pools and
720 if(data->set.errorbuffer) in easy_perform()
722 data->set.errorbuffer[0] = 0; in easy_perform()
724 if(data->multi) { in easy_perform()
729 if(data->multi_easy) in easy_perform()
730 multi = data->multi_easy; in easy_perform()
737 data->multi_easy = multi; in easy_perform()
740 if(multi->in_callback) in easy_perform()
744 curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, data->set.maxconnects); in easy_perform()
749 data->multi_easy = NULL; in easy_perform()
757 /* run the transfer */ in easy_perform()
773 * transfer as previously setup.
783 * transfer using the event-based API internally.
810 * information from a performed transfer and similar.
834 /* Copy src->set into dst->set first, then deal with the strings in dupset()
836 dst->set = src->set; in dupset()
837 Curl_mime_initpart(&dst->set.mimepost); in dupset()
840 memset(dst->set.str, 0, STRING_LAST * sizeof(char *)); in dupset()
844 result = Curl_setstropt(&dst->set.str[i], src->set.str[i]); in dupset()
850 memset(dst->set.blobs, 0, BLOB_LAST * sizeof(struct curl_blob *)); in dupset()
853 result = Curl_setblobopt(&dst->set.blobs[j], src->set.blobs[j]); in dupset()
860 if(src->set.postfieldsize && src->set.str[i]) { in dupset()
862 dst->set.str[i] = Curl_memdup(src->set.str[i], in dupset()
863 curlx_sotouz(src->set.postfieldsize)); in dupset()
864 if(!dst->set.str[i]) in dupset()
867 dst->set.postfields = dst->set.str[i]; in dupset()
871 result = Curl_mime_duppart(dst, &dst->set.mimepost, &src->set.mimepost); in dupset()
873 if(src->set.resolve) in dupset()
874 dst->state.resolve = dst->set.resolve; in dupset()
892 * get setup on-demand in the code, as that would probably decrease in curl_easy_duphandle()
895 outcurl->set.buffer_size = data->set.buffer_size; in curl_easy_duphandle()
901 Curl_dyn_init(&outcurl->state.headerb, CURL_MAX_HTTP_HEADER); in curl_easy_duphandle()
904 outcurl->state.conn_cache = NULL; in curl_easy_duphandle()
905 outcurl->state.lastconnect_id = -1; in curl_easy_duphandle()
907 outcurl->progress.flags = data->progress.flags; in curl_easy_duphandle()
908 outcurl->progress.callback = data->progress.callback; in curl_easy_duphandle()
911 if(data->cookies) { in curl_easy_duphandle()
914 outcurl->cookies = Curl_cookie_init(data, in curl_easy_duphandle()
915 data->cookies->filename, in curl_easy_duphandle()
916 outcurl->cookies, in curl_easy_duphandle()
917 data->set.cookiesession); in curl_easy_duphandle()
918 if(!outcurl->cookies) in curl_easy_duphandle()
922 if(data->set.cookielist) { in curl_easy_duphandle()
923 outcurl->set.cookielist = Curl_slist_duplicate(data->set.cookielist); in curl_easy_duphandle()
924 if(!outcurl->set.cookielist) in curl_easy_duphandle()
929 if(data->state.url) { in curl_easy_duphandle()
930 outcurl->state.url = strdup(data->state.url); in curl_easy_duphandle()
931 if(!outcurl->state.url) in curl_easy_duphandle()
933 outcurl->state.url_alloc = TRUE; in curl_easy_duphandle()
936 if(data->state.referer) { in curl_easy_duphandle()
937 outcurl->state.referer = strdup(data->state.referer); in curl_easy_duphandle()
938 if(!outcurl->state.referer) in curl_easy_duphandle()
940 outcurl->state.referer_alloc = TRUE; in curl_easy_duphandle()
945 if(outcurl->set.str[STRING_SSL_ENGINE]) { in curl_easy_duphandle()
946 if(Curl_ssl_set_engine(outcurl, outcurl->set.str[STRING_SSL_ENGINE])) in curl_easy_duphandle()
951 if(data->asi) { in curl_easy_duphandle()
952 outcurl->asi = Curl_altsvc_init(); in curl_easy_duphandle()
953 if(!outcurl->asi) in curl_easy_duphandle()
955 if(outcurl->set.str[STRING_ALTSVC]) in curl_easy_duphandle()
956 (void)Curl_altsvc_load(outcurl->asi, outcurl->set.str[STRING_ALTSVC]); in curl_easy_duphandle()
960 if(data->hsts) { in curl_easy_duphandle()
961 outcurl->hsts = Curl_hsts_init(); in curl_easy_duphandle()
962 if(!outcurl->hsts) in curl_easy_duphandle()
964 if(outcurl->set.str[STRING_HSTS]) in curl_easy_duphandle()
966 outcurl->hsts, outcurl->set.str[STRING_HSTS]); in curl_easy_duphandle()
967 (void)Curl_hsts_loadcb(outcurl, outcurl->hsts); in curl_easy_duphandle()
972 &outcurl->state.async.resolver, in curl_easy_duphandle()
973 data->state.async.resolver)) in curl_easy_duphandle()
980 rc = Curl_set_dns_servers(outcurl, data->set.str[STRING_DNS_SERVERS]); in curl_easy_duphandle()
984 rc = Curl_set_dns_interface(outcurl, data->set.str[STRING_DNS_INTERFACE]); in curl_easy_duphandle()
988 rc = Curl_set_dns_local_ip4(outcurl, data->set.str[STRING_DNS_LOCAL_IP4]); in curl_easy_duphandle()
992 rc = Curl_set_dns_local_ip6(outcurl, data->set.str[STRING_DNS_LOCAL_IP6]); in curl_easy_duphandle()
1000 outcurl->magic = CURLEASY_MAGIC_NUMBER; in curl_easy_duphandle()
1010 curl_slist_free_all(outcurl->set.cookielist); in curl_easy_duphandle()
1011 outcurl->set.cookielist = NULL; in curl_easy_duphandle()
1013 Curl_safefree(outcurl->state.buffer); in curl_easy_duphandle()
1014 Curl_dyn_free(&outcurl->state.headerb); in curl_easy_duphandle()
1015 Curl_safefree(outcurl->state.url); in curl_easy_duphandle()
1016 Curl_safefree(outcurl->state.referer); in curl_easy_duphandle()
1017 Curl_altsvc_cleanup(&outcurl->asi); in curl_easy_duphandle()
1018 Curl_hsts_cleanup(&outcurl->hsts); in curl_easy_duphandle()
1027 * curl_easy_reset() is an external interface that allows an app to re-
1036 memset(&data->set, 0, sizeof(struct UserDefined)); in curl_easy_reset()
1039 /* zero out Progress data: */ in curl_easy_reset()
1040 memset(&data->progress, 0, sizeof(struct Progress)); in curl_easy_reset()
1045 data->progress.flags |= PGRS_HIDE; in curl_easy_reset()
1046 data->state.current_speed = -1; /* init to negative == impossible */ in curl_easy_reset()
1047 data->state.retrycount = 0; /* reset the retry counter */ in curl_easy_reset()
1050 memset(&data->state.authhost, 0, sizeof(struct auth)); in curl_easy_reset()
1051 memset(&data->state.authproxy, 0, sizeof(struct auth)); in curl_easy_reset()
1060 * transfer and direction. This function sets the full new state for the
1078 if(!GOOD_EASY_HANDLE(data) || !data->conn) in curl_easy_pause()
1082 k = &data->req; in curl_easy_pause()
1083 oldstate = k->keepon & (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE); in curl_easy_pause()
1086 newstate = (k->keepon &~ (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE)) | in curl_easy_pause()
1092 DEBUGF(infof(data, "pause: no change, early return")); in curl_easy_pause()
1097 if((k->keepon & ~newstate & KEEP_SEND_PAUSE) && in curl_easy_pause()
1098 (data->mstate == MSTATE_PERFORMING || in curl_easy_pause()
1099 data->mstate == MSTATE_RATELIMITING) && in curl_easy_pause()
1100 data->state.fread_func == (curl_read_callback) Curl_mime_read) { in curl_easy_pause()
1101 Curl_mime_unpause(data->state.in); in curl_easy_pause()
1105 k->keepon = newstate; in curl_easy_pause()
1110 if(data->state.tempcount) { in curl_easy_pause()
1114 unsigned int count = data->state.tempcount; in curl_easy_pause()
1117 /* copy the structs to allow for immediate re-pausing */ in curl_easy_pause()
1118 for(i = 0; i < data->state.tempcount; i++) { in curl_easy_pause()
1119 writebuf[i] = data->state.tempwrite[i]; in curl_easy_pause()
1120 Curl_dyn_init(&data->state.tempwrite[i].b, DYN_PAUSE_BUFFER); in curl_easy_pause()
1122 data->state.tempcount = 0; in curl_easy_pause()
1142 if(data->hyp.send_body_waker) { in curl_easy_pause()
1143 hyper_waker_wake(data->hyp.send_body_waker); in curl_easy_pause()
1144 data->hyp.send_body_waker = NULL; in curl_easy_pause()
1149 /* if there's no error and we're not pausing both directions, we want in curl_easy_pause()
1155 /* reset the too-slow time keeper */ in curl_easy_pause()
1156 data->state.keeps_speed.tv_sec = 0; in curl_easy_pause()
1158 if(!data->state.tempcount) in curl_easy_pause()
1161 data->conn->cselect_bits = CURL_CSELECT_IN | CURL_CSELECT_OUT; in curl_easy_pause()
1162 if(data->multi) { in curl_easy_pause()
1163 if(Curl_update_timer(data->multi)) in curl_easy_pause()
1168 if(!data->state.done) in curl_easy_pause()
1169 /* This transfer may have been moved in or out of the bundle, update the in curl_easy_pause()
1184 if(!data->set.connect_only) { in easy_connection()
1219 if(!data->conn) in curl_easy_recv()
1220 /* on first invoke, the transfer has been detached from the connection and in curl_easy_recv()
1252 if(!data->conn) in Curl_senddata()
1253 /* on first invoke, the transfer has been detached from the connection and in Curl_senddata()
1262 if(n1 == -1) in Curl_senddata()
1302 if(Curl_timediff(*now, conn->keepalive) <= data->set.upkeep_interval_ms) in conn_upkeep()
1307 if(conn->handler->connection_check) { in conn_upkeep()
1308 /* Do a protocol-specific keepalive check on the connection. */ in conn_upkeep()
1309 conn->handler->connection_check(data, conn, CONNCHECK_KEEPALIVE); in conn_upkeep()
1317 conn->keepalive = *now; in conn_upkeep()
1341 if(data->multi_easy) { in curl_easy_upkeep()
1343 return upkeep(&data->multi_easy->conn_cache, data); in curl_easy_upkeep()
1346 /* No connections, so just return success */ in curl_easy_upkeep()