Author: rhuijben
Date: Sun Nov 29 01:09:26 2015
New Revision: 1717019
URL: http://svn.apache.org/viewvc?rev=1717019&view=rev
Log:
* protocols/http2_protocol.c
(http2_write_data): Add prototype.
(http2_handle_connection_window_update): Start writing when window size was
0.
(http2_handle_settings): Recalculate connection window size on initial
window size change.
Modified:
serf/trunk/protocols/http2_protocol.c
Modified: serf/trunk/protocols/http2_protocol.c
URL:
http://svn.apache.org/viewvc/serf/trunk/protocols/http2_protocol.c?rev=1717019&r1=1717018&r2=1717019&view=diff
==============================================================================
--- serf/trunk/protocols/http2_protocol.c (original)
+++ serf/trunk/protocols/http2_protocol.c Sun Nov 29 01:09:26 2015
@@ -70,6 +70,8 @@ http2_cancel_request(serf_request_t *rq,
static void
http2_prioritize_request(serf_request_t *rq, bool exclusive);
+static apr_status_t http2_write_data(serf_http2_protocol_t *h2);
+
static serf_bucket_t *
serf_bucket_create_numberv(serf_bucket_alloc_t *allocator, const char *format,
...)
@@ -661,6 +663,7 @@ http2_handle_connection_window_update(vo
{
serf_http2_protocol_t *h2 = baton;
apr_uint32_t value;
+ bool was0;
const struct window_update_t
{
unsigned char v3, v2, v1, v0;
@@ -687,6 +690,7 @@ http2_handle_connection_window_update(vo
return SERF_ERROR_HTTP2_PROTOCOL_ERROR;
}
+ was0 = (h2->lr_window == 0);
h2->lr_window += value;
if (h2->lr_window > HTTP2_WINDOW_MAX_ALLOWED)
@@ -705,7 +709,10 @@ http2_handle_connection_window_update(vo
"Increasing window on connection with 0x%x to 0x%x\n",
value, h2->lr_window);
- return APR_SUCCESS;
+ if (was0)
+ return http2_write_data(h2);
+ else
+ return APR_SUCCESS;
}
/* Implements serf_bucket_prefix_handler_t.
@@ -817,6 +824,7 @@ http2_handle_settings(void *baton,
/* Sanitize? */
serf__log(LOGLVL_INFO, SERF_LOGHTTP2, h2->config,
"Setting Initial Window Size %u\n", value);
+ h2->lr_window += (value - h2->lr_default_window);
h2->lr_default_window = value;
break;
case HTTP2_SETTING_MAX_FRAME_SIZE: