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: