summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKunal Ekawde <kunal_ekawde@affirmednetworks.com>2019-09-24 08:56:11 -0400
committerDaniel Stenberg <daniel@haxx.se>2019-10-02 07:47:48 +0200
commitc124e6b3c04bfd254e24312bc66c2bc9db919442 (patch)
tree861a66bb058eb9f51fd7c2d93cf133dd505e577f /lib
parentf0f053fed034bacf956a9f32ea65529b0b123247 (diff)
downloadcurl-c124e6b3c04bfd254e24312bc66c2bc9db919442.tar.gz
CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt
Closes #4410
Diffstat (limited to 'lib')
-rw-r--r--lib/http2.c2
-rwxr-xr-xlib/multi.c16
-rw-r--r--lib/multihandle.h1
-rw-r--r--lib/multiif.h6
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 */