aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2016-05-12 11:24:43 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2016-05-12 11:24:43 +0200
commit95b6dc2f61f447783c65f98e2e1e2dda16249073 (patch)
tree4670b28f71791e4be56c5b19fc91bb6f8ee1704f
parent3303d82a7e637f7c15b55ee21d555df7b672ae81 (diff)
fix https case
The HTTPS case is still to be encoded for the websockets. This new test manages the possible case of HTTPS to emit an error message instead of a SEGV. Change-Id: I1fae5d6ad50dfd7eaefdd0f44734cee1a488ccfe Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--src/afb-websock.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/afb-websock.c b/src/afb-websock.c
index 0247aae6..45c65ba7 100644
--- a/src/afb-websock.c
+++ b/src/afb-websock.c
@@ -118,6 +118,7 @@ static const struct protodef *search_proto(const struct protodef *protodefs, con
static int check_websocket_upgrade(struct MHD_Connection *con, const struct protodef *protodefs, void *context, void **websock)
{
+ const union MHD_ConnectionInfo *info;
struct MHD_Response *response;
const char *connection, *upgrade, *key, *version, *protocols;
char acceptval[29];
@@ -163,10 +164,14 @@ static int check_websocket_upgrade(struct MHD_Connection *con, const struct prot
}
/* create the web socket */
- ws = proto->create(MHD_get_connection_info(con, MHD_CONNECTION_INFO_CONNECTION_FD)->connect_fd,
- context,
- (void*)MHD_resume_connection,
- con);
+ info = MHD_get_connection_info(con, MHD_CONNECTION_INFO_CONNECTION_FD);
+ if (info == NULL) {
+ response = MHD_create_response_from_buffer(0, NULL, MHD_RESPMEM_PERSISTENT);
+ MHD_queue_response(con, MHD_HTTP_INTERNAL_SERVER_ERROR, response);
+ MHD_destroy_response(response);
+ return 1;
+ }
+ ws = proto->create(info->connect_fd, context, (void*)MHD_resume_connection, con);
if (ws == NULL) {
response = MHD_create_response_from_buffer(0, NULL, MHD_RESPMEM_PERSISTENT);
MHD_queue_response(con, MHD_HTTP_INTERNAL_SERVER_ERROR, response);