diff options
author | Kunal Ekawde <kunal_ekawde@affirmednetworks.com> | 2019-09-24 08:56:11 -0400 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-10-02 07:47:48 +0200 |
commit | c124e6b3c04bfd254e24312bc66c2bc9db919442 (patch) | |
tree | 861a66bb058eb9f51fd7c2d93cf133dd505e577f /lib | |
parent | f0f053fed034bacf956a9f32ea65529b0b123247 (diff) |
CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt
Closes #4410
Diffstat (limited to 'lib')
-rw-r--r-- | lib/http2.c | 2 | ||||
-rwxr-xr-x | lib/multi.c | 16 | ||||
-rw-r--r-- | lib/multihandle.h | 1 | ||||
-rw-r--r-- | lib/multiif.h | 6 |
4 files changed, 24 insertions, 1 deletions
diff --git a/lib/http2.c b/lib/http2.c index 98ea90358..d2f5da17a 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -1159,7 +1159,7 @@ static void populate_settings(struct connectdata *conn, nghttp2_settings_entry *iv = httpc->local_settings; iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS; - iv[0].value = 100; + iv[0].value = (uint32_t)Curl_multi_max_concurrent_streams(conn->data->multi); iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE; iv[1].value = HTTP2_HUGE_WINDOW_SIZE; diff --git a/lib/multi.c b/lib/multi.c index 22e0dcfd1..6dfe8842e 100755 --- a/lib/multi.c +++ b/lib/multi.c @@ -2772,6 +2772,16 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi, break; case CURLMOPT_PIPELINING_SERVER_BL: break; + case CURLMOPT_MAX_CONCURRENT_STREAMS: + { + long streams = va_arg(param, long); + if(streams < 1) + streams = 100; + multi->max_concurrent_streams = + (streams > (long)INITIAL_MAX_CONCURRENT_STREAMS)? + (long)INITIAL_MAX_CONCURRENT_STREAMS : streams; + } + break; default: res = CURLM_UNKNOWN_OPTION; break; @@ -3210,3 +3220,9 @@ void Curl_multi_dump(struct Curl_multi *multi) } } #endif + +size_t Curl_multi_max_concurrent_streams(struct Curl_multi *multi) +{ + return multi ? ((size_t)multi->max_concurrent_streams ? + (size_t)multi->max_concurrent_streams : 100) : 0; +} diff --git a/lib/multihandle.h b/lib/multihandle.h index 279379ae0..b65bd9638 100644 --- a/lib/multihandle.h +++ b/lib/multihandle.h @@ -133,6 +133,7 @@ struct Curl_multi { struct curltime timer_lastcall; /* the fixed time for the timeout for the previous callback */ bool in_callback; /* true while executing a callback */ + long max_concurrent_streams; /* max concurrent streams client to support */ }; #endif /* HEADER_CURL_MULTIHANDLE_H */ diff --git a/lib/multiif.h b/lib/multiif.h index 0755a7cd2..75025232c 100644 --- a/lib/multiif.h +++ b/lib/multiif.h @@ -89,4 +89,10 @@ CURLMcode Curl_multi_add_perform(struct Curl_multi *multi, struct Curl_easy *data, struct connectdata *conn); + +/* Return the value of the CURLMOPT_MAX_CONCURRENT_STREAMS option + * If not specified or 0, default would be 100 + */ +size_t Curl_multi_max_concurrent_streams(struct Curl_multi *multi); + #endif /* HEADER_CURL_MULTIIF_H */ |