#
acca40c9 |
| 17-Aug-2023 |
Daniel Stenberg |
lib: build fixups when built with most things disabled Closes #11687
|
#
ab3b2c47 |
| 14-Aug-2023 |
Daniel Stenberg |
transfer: don't set TIMER_STARTTRANSFER on first send The time stamp is for measuring the first *received* byte Fixes #11669 Reported-by: JazJas on github Closes #11670
|
#
90bdd253 |
| 20-Jul-2023 |
Daniel Stenberg |
transfer: do not clear the credentials on redirect to absolute URL Makes test 979 work. Regression shipped in 8.2.0 from commit dd4d1a26959f63a2c Fixes #11486 Reported-by: C
transfer: do not clear the credentials on redirect to absolute URL Makes test 979 work. Regression shipped in 8.2.0 from commit dd4d1a26959f63a2c Fixes #11486 Reported-by: Cloudogu Siebels Closes #11492
show more ...
|
#
dd4d1a26 |
| 08-Jul-2023 |
Daniel Stenberg |
transfer: clear credentials when redirecting to absolute URL Make sure the user and password for the second request is taken from the redirected-to URL. Add test case 899 to ver
transfer: clear credentials when redirecting to absolute URL Make sure the user and password for the second request is taken from the redirected-to URL. Add test case 899 to verify. Reported-by: James Lucas Fixes #11410 Closes #11412
show more ...
|
#
e024d566 |
| 23-May-2023 |
Stefan Eissing |
lib: add CURLINFO_CONN_ID and CURLINFO_XFER_ID - add an `id` long to Curl_easy, -1 on init - once added to a multi (or its own multi), it gets a non-negative number assigned by the
lib: add CURLINFO_CONN_ID and CURLINFO_XFER_ID - add an `id` long to Curl_easy, -1 on init - once added to a multi (or its own multi), it gets a non-negative number assigned by the connection cache - `id` is unique among all transfers using the same cache until reaching LONG_MAX where it will wrap around. So, not unique eternally. - CURLINFO_CONN_ID returns the connection id attached to data or, if none present, data->state.lastconnect_id - variables and type declared in tool for write out Closes #11185
show more ...
|
#
f4b5c88a |
| 15-May-2023 |
Stefan Eissing |
http2: better support for --limit-rate - leave transfer loop when --limit-rate is in effect and has been received - adjust stream window size to --limit-rate plus some slack
http2: better support for --limit-rate - leave transfer loop when --limit-rate is in effect and has been received - adjust stream window size to --limit-rate plus some slack to make the server observe the pacing we want - add test case to confirm behaviour Closes #11115
show more ...
|
#
fb7886b9 |
| 07-May-2023 |
Daniel Stenberg |
transfer: refuse POSTFIELDS + RESUME_FROM combo The code assumes that such a resume is wanting to continue an upload using the read callback, and since POSTFIELDS is done without callbac
transfer: refuse POSTFIELDS + RESUME_FROM combo The code assumes that such a resume is wanting to continue an upload using the read callback, and since POSTFIELDS is done without callback libcurl will just misbehave. This combo will make the transfer fail with CURLE_BAD_FUNCTION_ARGUMENT with an explanation in the error message. Reported-by: Smackd0wn on github Fixes #11081 Closes #11083
show more ...
|
#
cab2d56e |
| 21-Apr-2023 |
Stefan Eissing |
h2/h3: replace `state.drain` counter with `state.dselect_bits` - `drain` was used by http/2 and http/3 implementations to indicate that the transfer requires send/recv independant from
h2/h3: replace `state.drain` counter with `state.dselect_bits` - `drain` was used by http/2 and http/3 implementations to indicate that the transfer requires send/recv independant from its socket poll state. Intended as a counter, it was used as bool flag only. - a similar mechanism exists on `connectdata->cselect_bits` where specific protocols can indicate something similar, only for the whole connection. - `cselect_bits` are cleard in transfer.c on use and, importantly, also set when the transfer loop expended its `maxloops` tries. `drain` was not cleared by transfer and the http2/3 implementations had to take care of that. - `dselect_bits` is cleared *and* set by the transfer loop. http2/3 does no longer clear it, only set when new events happen. This change unifies the handling of socket poll overrides, extending `cselect_bits` by a easy handle specific value and a common treatment in transfers. Closes #11005
show more ...
|
#
7815647d |
| 25-Apr-2023 |
Daniel Stenberg |
lib: unify the upload/method handling By making sure we set state.upload based on the set.method value and not independently as set.upload, we reduce confusion and mixup risks, both
lib: unify the upload/method handling By making sure we set state.upload based on the set.method value and not independently as set.upload, we reduce confusion and mixup risks, both internally and externally. Closes #11017
show more ...
|
#
19c36f5c |
| 13-Apr-2023 |
Daniel Stenberg |
transfer: skip extra assign The 'result' variable already contains CURLE_OK at this point, no use in setting it again. Pointed out by PVS. Ref: #10929 Closes #10944
|
#
843b3baa |
| 26-Mar-2023 |
Daniel Stenberg |
multi: remove PENDING + MSGSENT handles from the main linked list As they are not driving transfers or any socket activity, the main loop does not need to iterate over these handles. A p
multi: remove PENDING + MSGSENT handles from the main linked list As they are not driving transfers or any socket activity, the main loop does not need to iterate over these handles. A performance improvement. They are instead only held in their own separate lists. 'data->multi' is kept a pointer to the multi handle as long as the easy handle is actually part of it even when the handle is moved to the pending/msgsent lists. It needs to know which multi handle it belongs to, if for example curl_easy_cleanup() is called before the handle is removed from the multi handle. Alll 'data->multi' pointers of handles still part of the multi handle gets cleared by curl_multi_cleanup() which "orphans" all previously attached easy handles. This is take 2. The first version was reverted for the 8.0.1 release. Assisted-by: Stefan Eissing Closes #10801
show more ...
|
#
06f65f77 |
| 13-Mar-2023 |
Stefan Eissing |
http2: Use KEEP_SEND_HOLD for flow control in HTTP/2 - use the defined, but so far not used, KEEP_SEND_HOLD bit for flow control based suspend of sending in transfers. Prior t
http2: Use KEEP_SEND_HOLD for flow control in HTTP/2 - use the defined, but so far not used, KEEP_SEND_HOLD bit for flow control based suspend of sending in transfers. Prior to this change KEEP_SEND_PAUSE bit was used instead, but that can interfere with pausing streams from the user side via curl_easy_pause. Fixes https://github.com/curl/curl/issues/10751 Closes https://github.com/curl/curl/pull/10753
show more ...
|
#
9c188e77 |
| 27-Feb-2023 |
Daniel Stenberg |
ftp: allocate the wildcard struct on demand The feature is rarely used so this frees up data for the vast majority of easy handles that don't use it. Rename "protdata" to "ftpwc
ftp: allocate the wildcard struct on demand The feature is rarely used so this frees up data for the vast majority of easy handles that don't use it. Rename "protdata" to "ftpwc" since it is always an FTP wildcard struct pointer. Made the state struct field an unsigned char to save space. Closes #10639
show more ...
|
#
0b84d0cf |
| 26-Feb-2023 |
Jay Satiro |
transfer: limit Windows SO_SNDBUF updates to once a second - Change readwrite_upload() to call win_update_buffer_size() no more than once a second to update SO_SNDBUF (send buffer limi
transfer: limit Windows SO_SNDBUF updates to once a second - Change readwrite_upload() to call win_update_buffer_size() no more than once a second to update SO_SNDBUF (send buffer limit). Prior to this change during an upload readwrite_upload() could call win_update_buffer_size() anywhere from hundreds of times per second to an extreme test case of 100k per second (which is likely due to a bug, see #10618). In the latter case WPA profiler showed win_update_buffer_size was the highest capture count in readwrite_upload. In any case the calls were excessive and unnecessary. Ref: https://github.com/curl/curl/pull/2762 Closes https://github.com/curl/curl/pull/10611
show more ...
|
#
e187d69e |
| 17-Feb-2023 |
Stefan Eissing |
urldata: remove `now` from struct SingleRequest - not needed Closes #10549
|
#
3de3ea6a |
| 08-Feb-2023 |
Stefan Eissing |
HTTP/[23]: continue upload when state.drain is set - as reported in #10433, HTTP/2 uploads may stall when a response is received before the upload is done. This happens when the
HTTP/[23]: continue upload when state.drain is set - as reported in #10433, HTTP/2 uploads may stall when a response is received before the upload is done. This happens when the data->state.drain is set for such a transfer, as the special handling in transfer.c from then on only cared about downloads. - add continuation of uploads, if applicable, in this case. - add pytest case test_07_12_upload_seq_large to reproduce this scenario (although, current nghttp2 implementation is using drain less often) Reported-by: Lucas Pardue Fixes #10433 Closes #10443
show more ...
|
#
2bc1d775 |
| 02-Jan-2023 |
Daniel Stenberg |
copyright: update all copyright lines and remove year ranges - they are mostly pointless in all major jurisdictions - many big corporations and projects already don't use them - save
copyright: update all copyright lines and remove year ranges - they are mostly pointless in all major jurisdictions - many big corporations and projects already don't use them - saves us from pointless churn - git keeps history for us - the year range is kept in COPYING checksrc is updated to allow non-year using copyright statements Closes #10205
show more ...
|
#
71b7e016 |
| 30-Dec-2022 |
Stefan Eissing |
lib: connect/h2/h3 refactor Refactoring of connection setup and happy eyeballing. Move nghttp2. ngtcp2, quiche and msh3 into connection filters. - eyeballing cfilter that uses
lib: connect/h2/h3 refactor Refactoring of connection setup and happy eyeballing. Move nghttp2. ngtcp2, quiche and msh3 into connection filters. - eyeballing cfilter that uses sub-filters for performing parallel connects - socket cfilter for all transport types, including QUIC - QUIC implementations in cfilter, can now participate in eyeballing - connection setup is more dynamic in order to adapt to what filter did really connect. Relevant to see if a SSL filter needs to be added or if SSL has already been provided - HTTP/3 test cases similar to HTTP/2 - multiuse of parallel transfers for HTTP/3, tested for ngtcp2 and quiche - Fix for data attach/detach in VTLS filters that could lead to crashes during parallel transfers. - Eliminating setup() methods in cfilters, no longer needed. - Improving Curl_conn_is_alive() to replace Curl_connalive() and integrated ssl alive checks into cfilter. - Adding CF_CNTRL_CONN_INFO_UPDATE to tell filters to update connection into and persist it at the easy handle. - Several more cfilter related cleanups and moves: - stream_weigth and dependency info is now wrapped in struct Curl_data_priority - Curl_data_priority members depend is available in HTTP2|HTTP3 - Curl_data_priority members depend on NGHTTP2 support - handling init/reset/cleanup of priority part of url.c - data->state.priority same struct, but shallow copy for compares only - PROTOPT_STREAM has been removed - Curl_conn_is_mulitplex() now available to check on capability - Adding query method to connection filters. - ngtcp2+quiche: implementing query for max concurrent transfers. - Adding is_alive and keep_alive cfilter methods. Adding DATA_SETUP event. - setting keepalive timestamp on connect - DATA_SETUP is called after the connection has been completely setup (but may not connected yet) to allow filters to initialize data members they use. - there is no socket to be had with msh3, it is unclear how select shall work - manual test via "curl --http3 https://curl.se" fail with "empty reply from server". - Various socket/conn related cleanups: - Curl_socket is now Curl_socket_open and in cf-socket.c - Curl_closesocket is now Curl_socket_close and in cf-socket.c - Curl_ssl_use has been replaced with Cur_conn_is_ssl - Curl_conn_tcp_accepted_set has been split into Curl_conn_tcp_listen_set and Curl_conn_tcp_accepted_set with a clearer purpose Closes #10141
show more ...
|
#
54120efd |
| 28-Dec-2022 |
Daniel Stenberg |
transfer: break the read loop when RECV is cleared When the RECV bit is cleared because the response reading for this transfer is complete, the read loop should be stopped. data_pending(
transfer: break the read loop when RECV is cleared When the RECV bit is cleared because the response reading for this transfer is complete, the read loop should be stopped. data_pending() can otherwise still return TRUE and another read would be attempted. Reported-by: Hide Ishikawa Fixes #10172 Closes #10174
show more ...
|
#
076a2f62 |
| 27-Dec-2022 |
Daniel Stenberg |
share: add sharing of HSTS cache among handles Closes #10138
|
#
af5999a6 |
| 22-Dec-2022 |
Daniel Stenberg |
urldata: move the cookefilelist to the 'set' struct The cookiefile entries are set into the handle and should remain set for the lifetime of the handle so that duplicating it also duplic
urldata: move the cookefilelist to the 'set' struct The cookiefile entries are set into the handle and should remain set for the lifetime of the handle so that duplicating it also duplicates the list. Therefore, the struct field is moved from 'state' to 'set'. Fixes #10133 Closes #10134
show more ...
|
#
1b397318 |
| 22-Nov-2022 |
Daniel Stenberg |
lib: rewind BEFORE request instead of AFTER previous This makes a big difference for cases when the rewind is not actually necessary to perofm (for example HTTP response code 301 convert
lib: rewind BEFORE request instead of AFTER previous This makes a big difference for cases when the rewind is not actually necessary to perofm (for example HTTP response code 301 converts to GET) and therefore the rewind can be avoided. In particular for situations when that rewind fails, for example when reading from a pipe or similar. Reported-by: Ali Utku Selen Fixes #9735 Closes #9958
show more ...
|
#
af22c2a5 |
| 22-Nov-2022 |
Stefan Eissing |
vtls: localization of state data in filters - almost all backend calls pass the Curl_cfilter intance instead of connectdata+sockindex - ssl_connect_data is remove from struct co
vtls: localization of state data in filters - almost all backend calls pass the Curl_cfilter intance instead of connectdata+sockindex - ssl_connect_data is remove from struct connectdata and made internal to vtls - ssl_connect_data is allocated in the added filter, kept at cf->ctx - added function to let a ssl filter access its ssl_primary_config and ssl_config_data this selects the propert subfields in conn and data, for filters added as plain or proxy - adjusted all backends to use the changed api - adjusted all backends to access config data via the exposed functions, no longer using conn or data directly cfilter renames for clear purpose: - methods `Curl_conn_*(data, conn, sockindex)` work on the complete filter chain at `sockindex` and connection `conn`. - methods `Curl_cf_*(cf, ...)` work on a specific Curl_cfilter instance. - methods `Curl_conn_cf()` work on/with filter instances at a connection. - rebased and resolved some naming conflicts - hostname validation (und session lookup) on SECONDARY use the same name as on FIRST (again). new debug macros and removing connectdata from function signatures where not needed. adapting schannel for new Curl_read_plain paramter. Closes #9919
show more ...
|
#
fa0b9227 |
| 11-Nov-2022 |
Daniel Stenberg |
http: mark it 'this_is_a_follow' in the Location: logic To make regular auth "reloads" to not count as redirects. Verified by test 3101 Fixes #9885 Closes #9887
|
#
bf12c2be |
| 11-Nov-2022 |
Daniel Stenberg |
lib: remove bad set.opt_no_body assignments This struct field MUST remain what the application set it to, so that handle reuse and handle duplication work. Instead, the request
lib: remove bad set.opt_no_body assignments This struct field MUST remain what the application set it to, so that handle reuse and handle duplication work. Instead, the request state bit 'no_body' is introduced for code flows that need to change this in run-time. Closes #9888
show more ...
|