- May 18, 2015
-
-
Tatsuhiro Tsujikawa authored
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.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
... to "compartmentalize" a bit and make it easier to change behavior when multiplexing is used instead of good old pipelining.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
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.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
... and suddenly things work much better!
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
... so that they'll get handled next in the multi loop.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
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.
-
Daniel Stenberg authored
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!
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Tatsuhiro Tsujikawa authored
-
Tatsuhiro Tsujikawa authored
-
Tatsuhiro Tsujikawa authored
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.
-
Tatsuhiro Tsujikawa authored
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.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
... as it was only used from there.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
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.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
... as it does for pipelining when we're multiplexing, as we need the different buffers to store incoming data correctly for all streams.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
No need to wait for our "spot" like for pipelining
-
Daniel Stenberg authored
... which is necessary since the socket won't be readable but there is data waiting in the buffer.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
... 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.
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-
Daniel Stenberg authored
-