Don't emit multiple parallel requests

This commit is contained in:
Alex Hultman
2019-01-22 09:28:03 +01:00
parent db98f81986
commit 87aea5a28c
+10 -6
View File
@@ -76,8 +76,6 @@ private:
f((HttpResponse<SSL> *) s, 1); f((HttpResponse<SSL> *) s, 1);
} }
// todo: handle filter closing the socket?
return s; return s;
}); });
@@ -135,6 +133,14 @@ private:
HttpResponseData<SSL> *httpResponseData = (HttpResponseData<SSL> *) static_dispatch(us_ssl_socket_ext, us_socket_ext)((SOCKET_TYPE *) s); HttpResponseData<SSL> *httpResponseData = (HttpResponseData<SSL> *) static_dispatch(us_ssl_socket_ext, us_socket_ext)((SOCKET_TYPE *) s);
httpResponseData->offset = 0; httpResponseData->offset = 0;
httpResponseData->state = 0; httpResponseData->state = 0;
/* Are we not ready for another request yet? Terminate the connection. */
if (httpResponseData->state & HttpResponseData<SSL>::HTTP_RESPONSE_PENDING) {
static_dispatch(us_ssl_socket_close, us_socket_close)((SOCKET_TYPE *) s);
return nullptr;
}
/* Mark pending request and emit it */
httpResponseData->state |= HttpResponseData<SSL>::HTTP_RESPONSE_PENDING; httpResponseData->state |= HttpResponseData<SSL>::HTTP_RESPONSE_PENDING;
/* Route the method and URL (unhandled should close or end it by default) */ /* Route the method and URL (unhandled should close or end it by default) */
@@ -163,7 +169,7 @@ private:
/* Returning from a request handler without responding or attaching an onAborted handler is ill-use */ /* Returning from a request handler without responding or attaching an onAborted handler is ill-use */
if (!((HttpResponse<SSL> *) s)->hasResponded() && !httpResponseData->onAborted) { if (!((HttpResponse<SSL> *) s)->hasResponded() && !httpResponseData->onAborted) {
/* Throw exception here? */ /* Throw exception here? */
std::cerr << "µWebSockets ill-use: Returning from a request handler without responding or attaching an abort handler is forbidden." << std::endl; std::cerr << "Error: Returning from a request handler without responding or attaching an abort handler is forbidden!" << std::endl;
std::terminate(); std::terminate();
} }
@@ -203,15 +209,13 @@ private:
return (SOCKET_TYPE *) returnedSocket; return (SOCKET_TYPE *) returnedSocket;
} }
// we cannot return nullptr to the underlying stack in any case /* We cannot return nullptr to the underlying stack in any case */
return s; return s;
}); });
/* Handle HTTP write out (note: SSL_read may trigger this spuriously, the app need to handle spurious calls) */ /* Handle HTTP write out (note: SSL_read may trigger this spuriously, the app need to handle spurious calls) */
static_dispatch(us_ssl_socket_context_on_writable, us_socket_context_on_writable)(getSocketContext(), [](auto *s) { static_dispatch(us_ssl_socket_context_on_writable, us_socket_context_on_writable)(getSocketContext(), [](auto *s) {
//std::cout << "HttpContext::onWritable event fired!" << std::endl;
/* We are now writable, so hang timeout again */ /* We are now writable, so hang timeout again */
static_dispatch(us_ssl_socket_timeout, us_socket_timeout)(s, 0); static_dispatch(us_ssl_socket_timeout, us_socket_timeout)(s, 0);