#
15b13135 |
| 27-Jun-2023 |
Stefan Eissing |
http3/ngtcp2: upload EAGAIN handling - refs #11389 where IDLE timeouts on upload are reported - reword ngtcp2 expiry handling to apply to both send+recv calls into the filter -
http3/ngtcp2: upload EAGAIN handling - refs #11389 where IDLE timeouts on upload are reported - reword ngtcp2 expiry handling to apply to both send+recv calls into the filter - EAGAIN uploads similar to the recent changes in HTTP/2, e.g. report success only when send data was ACKed. - HOLD sending of EAGAINed uploads to avoid cpu busy loops - rename internal function for consistency with HTTP/2 implementation Fixes #11389 Closes #11390
show more ...
|
#
873b958d |
| 22-Jun-2023 |
Stefan Eissing |
http2: h2 and h2-PROXY connection alive check fixes - fix HTTP/2 check to not declare a connection dead when the read attempt results in EAGAIN - add H2-PROXY alive check as for HT
http2: h2 and h2-PROXY connection alive check fixes - fix HTTP/2 check to not declare a connection dead when the read attempt results in EAGAIN - add H2-PROXY alive check as for HTTP/2 that was missing and is needed - add attach/detach around Curl_conn_is_alive() and remove these in filter methods - add checks for number of connections used in some test_10 proxy tunneling tests Closes #11368
show more ...
|
#
fd306e55 |
| 16-Jun-2023 |
Jay Satiro |
lib: fix some format specifiers - Use CURL_FORMAT_CURL_OFF_T where %zd was erroneously used for some curl_off_t variables. - Use %zu where %zd was erroneously used for some si
lib: fix some format specifiers - Use CURL_FORMAT_CURL_OFF_T where %zd was erroneously used for some curl_off_t variables. - Use %zu where %zd was erroneously used for some size_t variables. Prior to this change some of the Windows CI tests were failing because in Windows 32-bit targets have a 32-bit size_t and a 64-bit curl_off_t. When %zd was used for some curl_off_t variables then only the lower 32-bits was read and the upper 32-bits would be read for part or all of the next specifier. Fixes https://github.com/curl/curl/issues/11327 Closes https://github.com/curl/curl/pull/11321
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 ...
|
#
3f784980 |
| 09-Jun-2023 |
Stefan Eissing |
ngtcp2: use ever increasing timestamp in io - ngtcp2 v0.16.0 asserts that timestamps passed to its function will only ever increase. - Use a context shared between ingress/egress o
ngtcp2: use ever increasing timestamp in io - ngtcp2 v0.16.0 asserts that timestamps passed to its function will only ever increase. - Use a context shared between ingress/egress operations that uses a shared timestamp, regularly updated during calls. Closes #11288
show more ...
|
#
cae9d10b |
| 04-Jun-2023 |
Daniel Stenberg |
ngtcp2: build with 0.16.0 and nghttp3 0.12.0 - moved to qlog_write - crypto => encryption - CRYPTO => ENCRYPTION - removed "_is_" - ngtcp2_conn_shutdown_stream_read and
ngtcp2: build with 0.16.0 and nghttp3 0.12.0 - moved to qlog_write - crypto => encryption - CRYPTO => ENCRYPTION - removed "_is_" - ngtcp2_conn_shutdown_stream_read and ngtcp2_conn_shutdown_stream_write got flag arguments - the nghttp3_callbacks struct got a recv_settings callback Closes #11184
show more ...
|
#
3f8fc257 |
| 09-May-2023 |
Viktor Szakats |
cmake: add support for "unity" builds Aka "jumbo" or "amalgamation" builds. It means to compile all sources per target as a single C source. This is experimental. You can enable
cmake: add support for "unity" builds Aka "jumbo" or "amalgamation" builds. It means to compile all sources per target as a single C source. This is experimental. You can enable it by passing `-DCMAKE_UNITY_BUILD=ON` to cmake. It requires CMake 3.16 or newer. It makes builds (much) faster, allows for better optimizations and tends to promote less ambiguous code. Also add a new AppVeyor CI job and convert an existing one to use "unity" mode (one MSVC, one MinGW), and enable it for one macOS CI job. Fix related issues: - add missing include guard to `easy_lock.h`. - rename static variables and functions (and a macro) with names reused across sources, or shadowed by local variables. - add an `#undef` after use. - add a missing `#undef` before use. - move internal definitions from `ftp.h` to `ftp.c`. - `curl_memory.h` fixes to make it work when included repeatedly. - stop building/linking curlx bits twice for a static-mode curl tool. These caused doubly defined symbols in unity builds. - silence missing extern declarations compiler warning for ` _CRT_glob`. - fix extern declarations for `tool_freq` and `tool_isVistaOrGreater`. - fix colliding static symbols in debug mode: `debugtime()` and `statename`. - rename `ssl_backend_data` structure to unique names for each TLS-backend, along with the `ssl_connect_data` struct member referencing them. This required adding casts for each access. - add workaround for missing `[P]UNICODE_STRING` types in certain Windows builds when compiling `lib/ldap.c`. To support "unity" builds, we had to enable `SCHANNEL_USE_BLACKLISTS` for Schannel (a Windows `schannel.h` option) _globally_. This caused an indirect inclusion of Windows `schannel.h` from `ldap.c` via `winldap.h` to have it enabled as well. This requires `[P]UNICODE_STRING` types, which is apperantly not defined automatically (as seen with both MSVS and mingw-w64). This patch includes `<subauth.h>` to fix it. Ref: https://github.com/curl/curl/runs/13987772013 Ref: https://dev.azure.com/daniel0244/curl/_build/results?buildId=15827&view=logs&jobId=2c9f582d-e278-56b6-4354-f38a4d851906&j=2c9f582d-e278-56b6-4354-f38a4d851906&t=90509b00-34fa-5a81-35d7-5ed9569d331c - tweak unity builds to compile `lib/memdebug.c` separately in memory trace builds to avoid PP confusion. - force-disable unity for test programs. - do not compile and link libcurl sources to libtests _twice_ when libcurl is built in static mode. KNOWN ISSUES: - running tests with unity builds may fail in cases. - some build configurations/env may not compile in unity mode. E.g.: https://ci.appveyor.com/project/curlorg/curl/builds/47230972/job/51wfesgnfuauwl8q#L250 Ref: https://github.com/libssh2/libssh2/issues/1034 Ref: https://cmake.org/cmake/help/latest/prop_tgt/UNITY_BUILD.html Ref: https://en.wikipedia.org/wiki/Unity_build Closes #11095
show more ...
|
#
c4bd61dd |
| 25-May-2023 |
Stefan Eissing |
http3: send EOF indicator early as possible - ngtcp2 and quiche implementations relied on the DONE_SEND event to forward the EOF for uploads to the libraries. This often result i
http3: send EOF indicator early as possible - ngtcp2 and quiche implementations relied on the DONE_SEND event to forward the EOF for uploads to the libraries. This often result in a last 0 length EOF data. Tracking the amount of data left to upload allows EOF indication earlier. - refs #11205 where CloudFlare DoH servers did not like to receive the initial upload DATA without EOF and returned a 400 Bad Request Reported-by: Sergey Fionov Fixes #11205 Closes #11207
show more ...
|
#
127eb0d8 |
| 21-May-2023 |
Daniel Stenberg |
misc: fix spelling mistakes Reported-by: musvaage on github Fixes #11171 Closes #11172
|
#
7ab94d7d |
| 19-May-2023 |
Stefan Eissing |
ngtcp2: proper handling of uint64_t when adjusting send buffer Fixes #11149 Closes #11153
|
#
e0ddfc8e |
| 19-May-2023 |
Stefan Eissing |
ngtcp2: fix compiler warning about possible null-deref - compiler analyzer did not include the call context for this static function where the condition had already been checked. -
ngtcp2: fix compiler warning about possible null-deref - compiler analyzer did not include the call context for this static function where the condition had already been checked. - eleminating the problem by making stream a call parameter Fixes #11147 Closes #11151
show more ...
|
#
77c9a984 |
| 18-May-2023 |
Emilio Cobos Álvarez |
http2: double http request parser max line length This works around #11138, by doubling the limit, and should be a relatively safe fix. Ideally the buffer would grow as needed a
http2: double http request parser max line length This works around #11138, by doubling the limit, and should be a relatively safe fix. Ideally the buffer would grow as needed and there would be no need for a limit? But that might be follow-up material. Fixes #11138 Closes #11139
show more ...
|
#
f198d33e |
| 18-May-2023 |
Emanuele Torre |
checksrc: disallow spaces before labels Out of 415 labels throughout the code base, 86 of those labels were not at the start of the line. Which means labels always at the start of th
checksrc: disallow spaces before labels Out of 415 labels throughout the code base, 86 of those labels were not at the start of the line. Which means labels always at the start of the line is the favoured style overall with 329 instances. Out of the 86 labels not at the start of the line: * 75 were indented with the same indentation level of the following line * 8 were indented with exactly one space * 2 were indented with one fewer indentation level then the following line * 1 was indented with the indentation level of the following line minus three space (probably unintentional) Co-Authored-By: Viktor Szakats Closes #11134
show more ...
|
#
10998e3b |
| 12-May-2023 |
Daniel Stenberg |
ngtcp2: use 0.15.0 - nghttp3 0.11.0 - nghttp2 1.53.0 Adapt to new API calls Closes #11031
|
#
9ce7eee0 |
| 28-Apr-2023 |
Daniel Stenberg |
checksrc: find bad indentation in conditions without open brace If the previous line starts with if/while/for AND ends with a closed parenthesis and there's an equal number of open and c
checksrc: find bad indentation in conditions without open brace If the previous line starts with if/while/for AND ends with a closed parenthesis and there's an equal number of open and closed parentheses on that line, verify that this line is indented $indent more steps, if not a cpp line. Also adjust the fall-out from this fix. Closes #11054
show more ...
|
#
65f03e50 |
| 25-Apr-2023 |
Daniel Stenberg |
urldata: shrink *select_bits int => unsigned char - dselect_bits - cselect_bits ... are using less than 8 bits. Changed types and moved them towards the end of the structs t
urldata: shrink *select_bits int => unsigned char - dselect_bits - cselect_bits ... are using less than 8 bits. Changed types and moved them towards the end of the structs to fit better. Closes #11025
show more ...
|
#
3b7a8a25 |
| 24-Apr-2023 |
Stefan Eissing |
http3: expire unpaused transfers in all HTTP/3 backends Closes #11005
|
#
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 ...
|
#
fc2f1e54 |
| 14-Apr-2023 |
Stefan Eissing |
http2: support HTTP/2 to forward proxies, non-tunneling - with `--proxy-http2` allow h2 ALPN negotiation to forward proxies - applies to http: requests against a https: proxy only,
http2: support HTTP/2 to forward proxies, non-tunneling - with `--proxy-http2` allow h2 ALPN negotiation to forward proxies - applies to http: requests against a https: proxy only, as https: requests will auto-tunnel - adding a HTTP/1 request parser in http1.c - removed h2h3.c - using new request parser in nghttp2 and all h3 backends - adding test 2603 for request parser - adding h2 proxy test cases to test_10_* scorecard.py: request scoring accidentally always run curl with '-v'. Removed that, expect double numbers. labeller: added http1.* and h2-proxy sources to detection Closes #10967
show more ...
|
#
be800a6c |
| 13-Apr-2023 |
Stefan Eissing |
http3: check stream_ctx more thoroughly in all backends - callbacks and filter methods might be invoked at unexpected times, e.g. when the transfer's stream_ctx has not been initialize
http3: check stream_ctx more thoroughly in all backends - callbacks and filter methods might be invoked at unexpected times, e.g. when the transfer's stream_ctx has not been initialized yet or, more likely, has already been taken down. - check for existance of stream_ctx in such places and return an error or silently succeed the call. Closes #10951
show more ...
|
#
632e0fbe |
| 06-Apr-2023 |
Stefan Eissing |
http2: move HTTP/2 stream vars into local context - remove NGHTTP2 members of `struct HTTP` - add `void *h2_ctx` to `struct HTTP` - add `void *h3_ctx` to `struct HTTP` - separate
http2: move HTTP/2 stream vars into local context - remove NGHTTP2 members of `struct HTTP` - add `void *h2_ctx` to `struct HTTP` - add `void *h3_ctx` to `struct HTTP` - separate h2/h3 pointers are needed for eyeballing - manage local stream_ctx in http implementations Closes #10877
show more ...
|
#
4ae2d9f2 |
| 06-Apr-2023 |
Stefan Eissing |
proxy: http2 proxy tunnel implementation - currently only on debug build and when env variable CURL_PROXY_TUNNEL_H2 is present. - will ALPN negotiate with the proxy server and swit
proxy: http2 proxy tunnel implementation - currently only on debug build and when env variable CURL_PROXY_TUNNEL_H2 is present. - will ALPN negotiate with the proxy server and switch tunnel filter based on the protocol negotiated. - http/1.1 tunnel code moved into cf-h1-proxy.[ch] - http/2 tunnel code implemented in cf-h2-proxy.[ch] - tunnel start and ALPN set remains in http_proxy.c - moving all haproxy related code into cf-haproxy.[ch] VTLS changes - SSL filters rely solely on the "alpn" specification they are created with and no longer check conn->bits.tls_enable_alpn. - checks on which ALPN specification to use (or none at all) are done in vtls.c when creating the filter. Testing - added a nghttpx forward proxy to the pytest setup that speaks HTTP/2 and forwards all requests to the Apache httpd forward proxy server. - extending test coverage in test_10 cases - adding proxy tests for direct/tunnel h1/h2 use of basic auth. - adding test for http/1.1 and h2 proxy tunneling to pytest Closes #10780
show more ...
|
#
544abeea |
| 30-Mar-2023 |
Stefan Eissing |
http3: improvements across backends - ngtcp2: using bufq for recv stream data - internal stream_ctx instead of `struct HTTP` members for quiche, ngtcp2 and msh3 - no more QUIC
http3: improvements across backends - ngtcp2: using bufq for recv stream data - internal stream_ctx instead of `struct HTTP` members for quiche, ngtcp2 and msh3 - no more QUIC related members in `struct HTTP` - experimental use of recvmmsg(), disabled by default - testing on my old debian box shows no throughput improvements. - leaving it in, but disabled, for future revisit - vquic: common UDP receive code for ngtcp2 and quiche - vquic: common UDP send code for ngtcp2 and quiche - added pytest skips for known msh3 failures - fix unit2601 to survive torture testing - quiche: using latest `master` from quiche and enabling large download tests, now that key change is supported - fixing test_07_21 where retry handling of starting a stream was faulty - msh3: use bufq for recv buffering headers and data - msh3: replace fprintf debug logging with LOG_CF where possible - msh3: force QUIC expire timers on recv/send to have more than 1 request per second served Closes #10772
show more ...
|
#
78f73f79 |
| 23-Mar-2023 |
Stefan Eissing |
ngtcp2: adjust config and code checks for ngtcp2 without nghttp3 - make configure show on HTTP3 feature that both ngtcp2 and nghttp3 are in play - define ENABLE_QUIC only when USE_
ngtcp2: adjust config and code checks for ngtcp2 without nghttp3 - make configure show on HTTP3 feature that both ngtcp2 and nghttp3 are in play - define ENABLE_QUIC only when USE_NGTCP2 and USE_NGHTTP3 are defined - add USE_NGHTTP3 in the ngtcp2 implementation Fixes #10793 Closes #10821
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 ...
|