[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnurl] 128/222: CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt
From: |
gnunet |
Subject: |
[gnurl] 128/222: CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt |
Date: |
Thu, 07 Nov 2019 00:10:24 +0100 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository gnurl.
commit c124e6b3c04bfd254e24312bc66c2bc9db919442
Author: Kunal Ekawde <address@hidden>
AuthorDate: Tue Sep 24 08:56:11 2019 -0400
CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt
Closes #4410
---
docs/libcurl/curl_multi_setopt.3 | 4 +-
.../libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3 | 56 ++++++++++++++++++++++
docs/libcurl/opts/Makefile.inc | 9 ++--
docs/libcurl/symbols-in-versions | 1 +
include/curl/multi.h | 6 +++
lib/http2.c | 2 +-
lib/multi.c | 16 +++++++
lib/multihandle.h | 1 +
lib/multiif.h | 6 +++
packages/OS400/curl.inc.in | 2 +
10 files changed, 97 insertions(+), 6 deletions(-)
diff --git a/docs/libcurl/curl_multi_setopt.3 b/docs/libcurl/curl_multi_setopt.3
index d27c52441..88809d62b 100644
--- a/docs/libcurl/curl_multi_setopt.3
+++ b/docs/libcurl/curl_multi_setopt.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
+.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -67,6 +67,8 @@ See \fICURLMOPT_SOCKETDATA(3)\fP
See \fICURLMOPT_TIMERFUNCTION(3)\fP
.IP CURLMOPT_TIMERDATA
See \fICURLMOPT_TIMERDATA(3)\fP
+.IP CURLMOPT_MAX_CONCURRENT_STREAMS
+See \fICURLMOPT_MAX_CONCURRENT_STREAMS(3)\fP
.SH RETURNS
The standard CURLMcode for multi interface error codes. Note that it returns a
CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
b/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
new file mode 100644
index 000000000..ab044f754
--- /dev/null
+++ b/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
@@ -0,0 +1,56 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
+.\" *
+.\" * This software is licensed as described in the file COPYING, which
+.\" * you should have received as part of this distribution. The terms
+.\" * are also available at https://curl.haxx.se/docs/copyright.html.
+.\" *
+.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+.\" * copies of the Software, and permit persons to whom the Software is
+.\" * furnished to do so, under the terms of the COPYING file.
+.\" *
+.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+.\" * KIND, either express or implied.
+.\" *
+.\" **************************************************************************
+.\"
+.TH CURLMOPT_MAX_CONCURRENT_STREAMS 3 "06 Nov 2019" "libcurl 7.67.0"
"curl_multi_setopt options"
+.SH NAME
+CURLMOPT_MAX_CONCURRENT_STREAMS \- set max concurrent streams for http2
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_CONCURRENT_STREAMS,
+ long max);
+.fi
+.SH DESCRIPTION
+Pass a long indicating the \fBmax\fP. The set number will be used as the
+maximum number of concurrent streams for a connections that libcurl should
+support on connections done using HTTP/2.
+
+Valid values range from 1 to 2147483647 (2^31 - 1) and defaults to 100. The
+value passed here would be honoured based on other system resources
+properties.
+.SH DEFAULT
+100
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+ CURLM *m = curl_multi_init();
+ /* max concurrent streams 200 */
+ curl_multi_setopt(m, CURLMOPT_MAX_CONCURRENT_STREAMS, 200L);
+.fi
+.SH AVAILABILITY
+Added in 7.67.0
+.SH RETURN VALUE
+Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_MAXCONNECTS "(3), " CURLMOPT_MAXCONNECTS.3 "(3), "
diff --git a/docs/libcurl/opts/Makefile.inc b/docs/libcurl/opts/Makefile.inc
index b5f62a159..93c4357d2 100644
--- a/docs/libcurl/opts/Makefile.inc
+++ b/docs/libcurl/opts/Makefile.inc
@@ -68,6 +68,7 @@ man_MANS = \
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 \
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 \
CURLMOPT_MAXCONNECTS.3 \
+ CURLMOPT_MAX_CONCURRENT_STREAMS.3 \
CURLMOPT_MAX_HOST_CONNECTIONS.3 \
CURLMOPT_MAX_PIPELINE_LENGTH.3 \
CURLMOPT_MAX_TOTAL_CONNECTIONS.3 \
@@ -97,7 +98,6 @@ man_MANS = \
CURLOPT_CHUNK_END_FUNCTION.3 \
CURLOPT_CLOSESOCKETDATA.3 \
CURLOPT_CLOSESOCKETFUNCTION.3 \
- CURLOPT_UPKEEP_INTERVAL_MS.3 \
CURLOPT_CONNECTTIMEOUT.3 \
CURLOPT_CONNECTTIMEOUT_MS.3 \
CURLOPT_CONNECT_ONLY.3 \
@@ -113,8 +113,8 @@ man_MANS = \
CURLOPT_COPYPOSTFIELDS.3 \
CURLOPT_CRLF.3 \
CURLOPT_CRLFILE.3 \
- CURLOPT_CUSTOMREQUEST.3 \
CURLOPT_CURLU.3 \
+ CURLOPT_CUSTOMREQUEST.3 \
CURLOPT_DEBUGDATA.3 \
CURLOPT_DEBUGFUNCTION.3 \
CURLOPT_DEFAULT_PROTOCOL.3 \
@@ -168,8 +168,6 @@ man_MANS = \
CURLOPT_HTTP_TRANSFER_DECODING.3 \
CURLOPT_HTTP_VERSION.3 \
CURLOPT_IGNORE_CONTENT_LENGTH.3 \
- CURLOPT_TRAILERDATA.3 \
- CURLOPT_TRAILERFUNCTION.3 \
CURLOPT_INFILESIZE.3 \
CURLOPT_INFILESIZE_LARGE.3 \
CURLOPT_INTERFACE.3 \
@@ -332,10 +330,13 @@ man_MANS = \
CURLOPT_TLSAUTH_PASSWORD.3 \
CURLOPT_TLSAUTH_TYPE.3 \
CURLOPT_TLSAUTH_USERNAME.3 \
+ CURLOPT_TRAILERDATA.3 \
+ CURLOPT_TRAILERFUNCTION.3 \
CURLOPT_TRANSFERTEXT.3 \
CURLOPT_TRANSFER_ENCODING.3 \
CURLOPT_UNIX_SOCKET_PATH.3 \
CURLOPT_UNRESTRICTED_AUTH.3 \
+ CURLOPT_UPKEEP_INTERVAL_MS.3 \
CURLOPT_UPLOAD.3 \
CURLOPT_UPLOAD_BUFFERSIZE.3 \
CURLOPT_URL.3 \
diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions
index ff0dfb238..3e144a719 100644
--- a/docs/libcurl/symbols-in-versions
+++ b/docs/libcurl/symbols-in-versions
@@ -319,6 +319,7 @@ CURLMOPT_MAXCONNECTS 7.16.3
CURLMOPT_MAX_HOST_CONNECTIONS 7.30.0
CURLMOPT_MAX_PIPELINE_LENGTH 7.30.0
CURLMOPT_MAX_TOTAL_CONNECTIONS 7.30.0
+CURLMOPT_MAX_CONCURRENT_STREAMS 7.67.0
CURLMOPT_PIPELINING 7.16.0
CURLMOPT_PIPELINING_SERVER_BL 7.30.0
CURLMOPT_PIPELINING_SITE_BL 7.30.0
diff --git a/include/curl/multi.h b/include/curl/multi.h
index 02df0f389..b39218395 100644
--- a/include/curl/multi.h
+++ b/include/curl/multi.h
@@ -396,6 +396,9 @@ typedef enum {
/* This is the argument passed to the server push callback */
CINIT(PUSHDATA, OBJECTPOINT, 15),
+ /* maximum number of concurrent streams to support on a connection */
+ CINIT(MAX_CONCURRENT_STREAMS, LONG, 16),
+
CURLMOPT_LASTENTRY /* the last unused */
} CURLMoption;
@@ -448,6 +451,9 @@ typedef int (*curl_push_callback)(CURL *parent,
struct curl_pushheaders *headers,
void *userp);
+/* value for MAXIMUM CONCURRENT STREAMS upper limit */
+#define INITIAL_MAX_CONCURRENT_STREAMS ((1U << 31) - 1)
+
#ifdef __cplusplus
} /* end of extern "C" */
#endif
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 */
diff --git a/packages/OS400/curl.inc.in b/packages/OS400/curl.inc.in
index 5a53b1b21..8be6c8986 100644
--- a/packages/OS400/curl.inc.in
+++ b/packages/OS400/curl.inc.in
@@ -1841,6 +1841,8 @@
d c 20014
d CURLMOPT_PUSHDATA...
d c 10015
+ d CURLMOPT_MAX_CONCURRENT_STREAMS...
+ d c 10016
*
* Bitmask bits for CURLMOPT_PIPELING.
*
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [gnurl] 125/222: urlapi: fix unused variable warning, (continued)
- [gnurl] 125/222: urlapi: fix unused variable warning, gnunet, 2019/11/06
- [gnurl] 123/222: AppVeyor: add 32-bit MinGW-w64 build, gnunet, 2019/11/06
- [gnurl] 130/222: tool_operate: rename functions to make more sense, gnunet, 2019/11/06
- [gnurl] 129/222: curl: create easy handles on-demand and not ahead of time, gnunet, 2019/11/06
- [gnurl] 131/222: urlapi: fix URL encoding when setting a full URL, gnunet, 2019/11/06
- [gnurl] 114/222: docs: disambiguate CURLUPART_HOST is for host name (ie no port), gnunet, 2019/11/06
- [gnurl] 132/222: redirect: when following redirects to an absolute URL, URL encode it, gnunet, 2019/11/06
- [gnurl] 99/222: HTTP3: show an --alt-svc using example too, gnunet, 2019/11/06
- [gnurl] 98/222: FTP: url-decode path before evaluation, gnunet, 2019/11/06
- [gnurl] 150/222: curl: --no-progress-meter, gnunet, 2019/11/06
- [gnurl] 128/222: CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt,
gnunet <=
- [gnurl] 137/222: cookie: avoid harmless use after free, gnunet, 2019/11/06
- [gnurl] 105/222: README: minor grammar fix, gnunet, 2019/11/06
- [gnurl] 103/222: quiche: don't close connection at end of stream!, gnunet, 2019/11/06
- [gnurl] 110/222: INSTALL: add vcpkg installation instructions, gnunet, 2019/11/06
- [gnurl] 101/222: Revert "FTP: url-decode path before evaluation", gnunet, 2019/11/06
- [gnurl] 104/222: HTTP3: fix prefix parameter for ngtcp2 build, gnunet, 2019/11/06
- [gnurl] 96/222: HTTP3: update quic.aiortc.org + add link to server list, gnunet, 2019/11/06
- [gnurl] 107/222: tests: fix narrowing conversion warnings, gnunet, 2019/11/06
- [gnurl] 116/222: BINDINGS: Kapito is an Erlang library, basically a binding, gnunet, 2019/11/06
- [gnurl] 111/222: RELEASE-NOTES: synced, gnunet, 2019/11/06