Daniel Stenberg
155b1f5df9
http2: fix build when NOT h2-enabled
2015-05-18 14:09:32 +02:00
Daniel Stenberg
979670988a
http2: switch to use Curl_hash_destroy()
...
as after 4883f7019d
, the *_clean() function only flushes the hash.
2015-05-18 11:41:16 +02:00
Daniel Stenberg
0b26b94bdc
curlver: restore LIBCURL_VERSION_NUM defined as a full number
...
As it breaks configure, curl-config and test 1023 if not.
2015-05-18 11:29:06 +02:00
Anthony Avina
4883f7019d
hostip: fix unintended destruction of hash table
...
.. and added unit1602 for hash.c
2015-05-18 11:15:43 +02:00
Daniel Stenberg
39b9bf60d1
curlver: introducing new version number (checking) macros
2015-05-18 11:09:13 +02:00
Daniel Stenberg
d69eee0964
runtests.pl: use 'h2c' now, no -14 anymore
2015-05-18 10:10:55 +02:00
Tatsuhiro Tsujikawa
7ff7e45405
http2: Ignore if we have stream ID not in hash in on_stream_close
...
We could get stream ID not in the hash in on_stream_close. For
example, if we decided to reject stream (e.g., PUSH_PROMISE), then we
don't create stream and store it in hash with its stream ID.
2015-05-18 09:33:48 +02:00
Tatsuhiro Tsujikawa
4ac6cc3ebd
Require nghttp2 v1.0.0
...
This commit requires nghttp2 v1.0.0 to compile, and migrate to v1.0.0,
and utilize recent version of nghttp2 to simplify the code,
First we use nghttp2_option_set_no_recv_client_magic function to
detect nghttp2 v1.0.0. That function only exists since v1.0.0.
Since nghttp2 v0.7.5, nghttp2 ensures header field ordering, and
validates received header field. If it found error, RST_STREAM with
PROTOCOL_ERROR is issued. Since we require v1.0.0, we can utilize
this feature to simplify libcurl code. This commit does this.
Migration from 0.7 series are done based on nghttp2 migration
document. For libcurl, we removed the code sending first 24 bytes
client magic. It is now done by nghttp2 library.
on_invalid_frame_recv callback signature changed, and is updated
accordingly.
2015-05-18 09:33:48 +02:00
Daniel Stenberg
077f12b0ae
http2: infof length in on_frame_send()
2015-05-18 09:33:48 +02:00
Daniel Stenberg
d6f1c74330
pipeline: switch some code over to functions
...
... to "compartmentalize" a bit and make it easier to change behavior
when multiplexing is used instead of good old pipelining.
2015-05-18 09:33:47 +02:00
Daniel Stenberg
7d0df07e48
symbols-in-versions: add CURLOPT_PIPEWAIT
2015-05-18 09:33:47 +02:00
Daniel Stenberg
811443754a
CURLOPT_PIPEWAIT: added
...
By setting this option to 1 libcurl will wait for a connection to reveal
if it is possible to pipeline/multiplex on before it continues.
2015-05-18 09:33:47 +02:00
Daniel Stenberg
df3a970cb4
Curl_http_readwrite_headers: minor code simplification
2015-05-18 09:33:47 +02:00
Daniel Stenberg
193251794a
IsPipeliningPossible: fixed for http2
2015-05-18 09:33:47 +02:00
Daniel Stenberg
8b38fcf2f6
http2: bump the h2 buffer size to 32K for speed
2015-05-18 09:33:47 +02:00
Daniel Stenberg
5871affc7a
http2: remove the stream from the hash in stream_close callback
...
... and suddenly things work much better!
2015-05-18 09:33:47 +02:00
Daniel Stenberg
3e8a5d88a5
http2: if there is paused data, do not clear the drain field
2015-05-18 09:33:47 +02:00
Daniel Stenberg
522ca8c035
http2: rename s/data/pausedata
2015-05-18 09:33:47 +02:00
Daniel Stenberg
a66ed407d2
http2: "stream %x" in all outputs to make it easier to search for
2015-05-18 09:33:47 +02:00
Daniel Stenberg
61a94d6f77
http2: Curl_expire() all handles with incoming traffic
...
... so that they'll get handled next in the multi loop.
2015-05-18 09:33:47 +02:00
Daniel Stenberg
56c362b1a7
http2: don't signal settings change for same values
2015-05-18 09:33:47 +02:00
Daniel Stenberg
72105ebf05
http2: set default concurrency, fix ConnectionExists for multiplex
2015-05-18 09:33:47 +02:00
Daniel Stenberg
38bd6bf0bb
bundles: store no/default/pipeline/multiplex
...
to allow code to act differently on the situation.
Also added some more info message for the connection re-use function to
make it clearer when connections are not re-used.
2015-05-18 09:33:36 +02:00
Daniel Stenberg
be4c8fd1ef
http2: lazy init header_recvbuf
...
It makes us use less memory when not doing HTTP/2 and subsequently also
makes us not have to cleanup HTTP/2 related data when not using HTTP/2!
2015-05-18 08:57:18 +02:00
Daniel Stenberg
783b3c7b42
http2: separate multiplex/pipelining + cleanup memory leaks
2015-05-18 08:57:18 +02:00
Daniel Stenberg
02ec1ced9b
CURLMOPT_PIPELINE: bit 1 is for multiplexing
2015-05-18 08:57:18 +02:00
Tatsuhiro Tsujikawa
2ce2f03007
http2: Fix bug that data to be drained are overwritten by pending "paused" data
2015-05-18 08:57:18 +02:00
Tatsuhiro Tsujikawa
d722138f29
http2: Don't call nghttp2_session_mem_recv while it is paused by a stream
2015-05-18 08:57:18 +02:00
Tatsuhiro Tsujikawa
0dc0de0351
http2: Read data left in connection buffer after pause
...
Previously when we do pause because of out of buffer, we just throw
away unread data in connection buffer. This just broke protocol
framing, and I saw occasional FRAME_SIZE_ERROR. This commit fix this
issue by remembering how much data read, and in the next iteration, we
process remaining data.
2015-05-18 08:57:18 +02:00
Tatsuhiro Tsujikawa
d261652d42
http2: Fix streams get stuck
...
This commit fixes the bug that streams get stuck if stream gets some
DATA, and stream->closed becomes true at the same time. Previously,
in this condition, after we processed DATA, we are going to try to
read data from underlying transport, but there is no data, and gets
EAGAIN. There was no code path to evaludate stream->closed.
2015-05-18 08:57:18 +02:00
Daniel Stenberg
74a4bd5ecd
http2: store incoming h2 SETTINGS
2015-05-18 08:57:18 +02:00
Daniel Stenberg
591a6933da
pipeline: move function to pipeline.c and make static
...
... as it was only used from there.
2015-05-18 08:57:18 +02:00
Daniel Stenberg
e91aedd840
IsPipeliningPossible: http2 can always "pipeline" (multiplex)
2015-05-18 08:57:18 +02:00
Daniel Stenberg
ee3ad233a2
http2: remove debug logging from on_frame_recv
2015-05-18 08:57:18 +02:00
Daniel Stenberg
70b5b698b0
http2: remove the closed check in http2_recv
...
With the "drained" functionality we can get here slightly asynchronously
so the stream have have been closed but there is pending data left to
read.
2015-05-18 08:57:18 +02:00
Daniel Stenberg
a28734be09
http2: bump the h2 buffer to 8K
2015-05-18 08:57:18 +02:00
Daniel Stenberg
5252f13dfa
http2: Curl_read should not use the single buffer
...
... as it does for pipelining when we're multiplexing, as we need the
different buffers to store incoming data correctly for all streams.
2015-05-18 08:57:18 +02:00
Daniel Stenberg
153f940198
http2: more debug outputs
2015-05-18 08:57:18 +02:00
Daniel Stenberg
f4b8b39881
http2: leave WAITPERFORM when conn is multiplexed
...
No need to wait for our "spot" like for pipelining
2015-05-18 08:57:18 +02:00
Daniel Stenberg
01e1bdb10c
http2: force "drainage" of streams
...
... which is necessary since the socket won't be readable but there is
data waiting in the buffer.
2015-05-18 08:57:17 +02:00
Daniel Stenberg
7bbac214f5
http2: move the mem+len pair to the stream struct
2015-05-18 08:57:17 +02:00
Daniel Stenberg
84c6b6561f
http2: more stream-oriented data, stream ID 0 is for connections
2015-05-18 08:57:17 +02:00
Daniel Stenberg
2c238ea1fc
http2: move lots of state data to the 'stream' struct
...
... from the connection struct. The stream one being the 'struct HTTP'
which is kept in the SessionHandle struct (easy handle).
lookup streams for incoming frames in the stream hash, hashing is based
on the stream id and we get the SessionHandle for the incoming stream
that way.
2015-05-18 08:57:17 +02:00
Daniel Stenberg
5fe71975e4
HTTP: partial start at fixing up hash-lookups on http2 frame receival
2015-05-18 08:57:17 +02:00
Daniel Stenberg
77f1029ecd
http: a stream hash for h2 multiplexing
2015-05-18 08:57:17 +02:00
Daniel Stenberg
7957d2eb92
http: a stream hash for h2 multiplexing
2015-05-18 08:57:17 +02:00
Daniel Stenberg
47caff7bdf
http2: debug log when receiving unexpected stream_id
2015-05-18 08:54:54 +02:00
Daniel Stenberg
d6440d7366
http2: move stream_id to the HTTP struct (per-stream)
2015-05-18 08:54:54 +02:00
Daniel Stenberg
f858624052
Curl_http2_setup: only do it once and enable multiplex on the server
...
Once we know we are HTTP/2 enabled we know the server can multiplex.
2015-05-18 08:54:54 +02:00
Daniel Stenberg
6e6b02f398
http: switch on "pipelining" (multiplexing) for HTTP/2 servers
...
... and do not blacklist any.
2015-05-18 08:54:54 +02:00