From 8907b0073dcf8a3b8f76341a5a8f10c9cfe2783a Mon Sep 17 00:00:00 2001 From: MGadkari Date: Fri, 21 Aug 2015 16:15:36 +0530 Subject: [PATCH] Pass HTTP reject error code returned by server to client Signed-off-by: Gadkari Mugdha Reviewed-by: Roger Meier HTTP reject error code returned by server during HTTP handshake is extracted and sent to the client application. With this fix, the Connection error callback will include the HTTP reject status code and response frame received from server. This string passed in Connection error callback can be read or ignored by client application based on client application requirement --- lib/client.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/client.c b/lib/client.c index fd65ae8e8..ebf640392 100644 --- a/lib/client.c +++ b/lib/client.c @@ -481,6 +481,7 @@ lws_client_interpret_server_handshake(struct libwebsocket_context *context, int okay = 0; char *p; int len; + int isErrorCodeReceived = 0; #ifndef LWS_NO_EXTENSIONS char ext_name[128]; struct libwebsocket_extension *ext; @@ -498,6 +499,8 @@ lws_client_interpret_server_handshake(struct libwebsocket_context *context, if (lws_hdr_total_length(wsi, WSI_TOKEN_ACCEPT) == 0) { lwsl_info("no ACCEPT\n"); + p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP); + isErrorCodeReceived = 1; goto bail3; } @@ -786,10 +789,17 @@ bail3: close_reason = LWS_CLOSE_STATUS_NOSTATUS; bail2: - if (wsi->protocol) - wsi->protocol->callback(context, wsi, - LWS_CALLBACK_CLIENT_CONNECTION_ERROR, - wsi->user_space, NULL, 0); + if (wsi->protocol) { + if (isErrorCodeReceived && p) { + wsi->protocol->callback(context, wsi, + LWS_CALLBACK_CLIENT_CONNECTION_ERROR, + wsi->user_space, p, (unsigned int)strlen(p)); + } else { + wsi->protocol->callback(context, wsi, + LWS_CALLBACK_CLIENT_CONNECTION_ERROR, + wsi->user_space, NULL, 0); + } + } lwsl_info("closing connection due to bail2 connection error\n");