diff --git a/lib/handshake.c b/lib/handshake.c index 35c6e4d67..5cdf7cad5 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -256,10 +256,20 @@ http_postbody: LWS_CALLBACK_FILTER_HTTP_CONNECTION, wsi->user_space, uri_ptr, uri_len); - if (!n && wsi->protocol->callback) - n = wsi->protocol->callback(context, wsi, - LWS_CALLBACK_HTTP, - wsi->user_space, uri_ptr, uri_len); + if (!n) { + /* + * if there is content supposed to be coming, + * put a timeout on it having arrived + */ + libwebsocket_set_timeout(wsi, + PENDING_TIMEOUT_HTTP_CONTENT, + AWAITING_TIMEOUT); + + if (wsi->protocol->callback) + n = wsi->protocol->callback(context, wsi, + LWS_CALLBACK_HTTP, + wsi->user_space, uri_ptr, uri_len); + } leave: /* now drop the header info we kept a pointer to */ @@ -269,18 +279,11 @@ leave: wsi->u.http.ah = NULL; if (n) { + libwebsocket_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); lwsl_info("LWS_CALLBACK_HTTP closing\n"); goto bail; /* struct ah ptr already nuked */ } - /* - * if there is content supposed to be coming, - * put a timeout on it having arrived - */ - libwebsocket_set_timeout(wsi, - PENDING_TIMEOUT_HTTP_CONTENT, - AWAITING_TIMEOUT); - /* * (if callback didn't start sending a file) * deal with anything else as body, whether