mirror of
https://github.com/curl/curl.git
synced 2026-08-25 17:53:43 +03:00
ratelimit: redesign
Description of how this works in `docs/internal/RATELIMITS.ms`. Notable implementation changes: - KEEP_SEND_PAUSE/KEEP_SEND_HOLD and KEEP_RECV_PAUSE/KEEP_RECV_HOLD no longer exist. Pausing is down via blocked the new rlimits. - KEEP_SEND_TIMED no longer exists. Pausing "100-continue" transfers is done in the new `Curl_http_perform_pollset()` method. - HTTP/2 rate limiting implemented via window updates. When transfer initiaiting connection has a ratelimit, adjust the initial window size - HTTP/3 ngtcp2 rate limitin implemnented via ack updates - HTTP/3 quiche does not seem to support this via its API - the default progress-meter has been improved for accuracy in "current speed" results. pytest speed tests have been improved. Closes #19384
This commit is contained in:
parent
bfde781121
commit
24b36fdd15
48 changed files with 1146 additions and 675 deletions
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "curlx/timeval.h"
|
||||
|
||||
struct Curl_easy;
|
||||
|
||||
typedef enum {
|
||||
TIMER_NONE,
|
||||
|
|
@ -50,15 +51,23 @@ void Curl_pgrsSetUploadSize(struct Curl_easy *data, curl_off_t size);
|
|||
|
||||
void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size);
|
||||
void Curl_pgrsSetUploadCounter(struct Curl_easy *data, curl_off_t size);
|
||||
void Curl_ratelimit(struct Curl_easy *data, struct curltime now);
|
||||
int Curl_pgrsUpdate(struct Curl_easy *data);
|
||||
void Curl_pgrsUpdate_nometer(struct Curl_easy *data);
|
||||
|
||||
/* perform progress update, invoking callbacks at intervals */
|
||||
CURLcode Curl_pgrsUpdate(struct Curl_easy *data);
|
||||
/* perform progress update, no callbacks invoked */
|
||||
void Curl_pgrsUpdate_nometer(struct Curl_easy *data);
|
||||
/* perform progress update with callbacks and speed checks */
|
||||
CURLcode Curl_pgrsCheck(struct Curl_easy *data);
|
||||
|
||||
/* Inform progress/speedcheck about receive pausing */
|
||||
void Curl_pgrsRecvPause(struct Curl_easy *data, bool enable);
|
||||
|
||||
/* Reset sizes and couners for up- and download. */
|
||||
void Curl_pgrsReset(struct Curl_easy *data);
|
||||
/* Reset sizes for up- and download. */
|
||||
void Curl_pgrsResetTransferSizes(struct Curl_easy *data);
|
||||
|
||||
struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer);
|
||||
timediff_t Curl_pgrsLimitWaitTime(struct pgrs_dir *d,
|
||||
curl_off_t speed_limit,
|
||||
struct curltime now);
|
||||
/**
|
||||
* Update progress timer with the elapsed time from its start to `timestamp`.
|
||||
* This allows updating timers later and is used by happy eyeballing, where
|
||||
|
|
@ -69,4 +78,9 @@ void Curl_pgrsTimeWas(struct Curl_easy *data, timerid timer,
|
|||
|
||||
void Curl_pgrsEarlyData(struct Curl_easy *data, curl_off_t sent);
|
||||
|
||||
#ifdef UNITTESTS
|
||||
UNITTEST CURLcode pgrs_speedcheck(struct Curl_easy *data,
|
||||
struct curltime *pnow);
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_PROGRESS_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue