From 12c32d09fbdaf7e3ebd8f2c75fe3a8679c30b390 Mon Sep 17 00:00:00 2001 From: cpq Date: Sun, 17 Jan 2021 11:16:19 +0000 Subject: [PATCH] Pass mg_http_message to MG_EV_WS_OPEN --- docs/README.md | 26 ++++++++++++++------------ mongoose.c | 4 +++- mongoose.h | 6 +++--- src/event.h | 6 +++--- src/ws.c | 4 +++- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/docs/README.md b/docs/README.md index c5644bc0..aa7bd8d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -133,18 +133,20 @@ to an event handler: ```c enum { - MG_EV_ERROR, // Error char *error_message - MG_EV_POLL, // mg_mgr_poll iteration unsigned long *millis - MG_EV_RESOLVE, // Host name is resolved NULL - MG_EV_CONNECT, // Connection established NULL - MG_EV_ACCEPT, // Connection accepted NULL - MG_EV_READ, // Data received from socket struct mg_str * - MG_EV_WRITE, // Data written to socket int *num_bytes_written - MG_EV_CLOSE, // Connection closed NULL - MG_EV_HTTP_MSG, // HTTP request/response struct mg_http_message * - MG_EV_WS_OPEN, // Websocket handshake done NULL - MG_EV_WS_MSG, // Websocket message received struct mg_ws_message * - MG_EV_MQTT_MSG, // MQTT message struct mg_mqtt_message * + MG_EV_ERROR, // Error char *error_message + MG_EV_POLL, // mg_mgr_poll iteration unsigned long *millis + MG_EV_RESOLVE, // Host name is resolved NULL + MG_EV_CONNECT, // Connection established NULL + MG_EV_ACCEPT, // Connection accepted NULL + MG_EV_READ, // Data received from socket struct mg_str * + MG_EV_WRITE, // Data written to socket int *num_bytes_written + MG_EV_CLOSE, // Connection closed NULL + MG_EV_HTTP_MSG, // HTTP request/response struct mg_http_message * + MG_EV_WS_OPEN, // Websocket handshake done struct mg_http_message * + MG_EV_WS_MSG, // Websocket msg, text or bin struct mg_ws_message * + MG_EV_WS_CTL, // Websocket control msg struct mg_ws_message * + MG_EV_MQTT_CMD, // MQTT low-level command struct mg_mqtt_message * + MG_EV_MQTT_MSG, // MQTT PUBLISH received struct mg_mqtt_message * MG_EV_MQTT_OPEN, // MQTT CONNACK received int *connack_status_code MG_EV_SNTP_TIME, // SNTP time received struct timeval * MG_EV_USER, // Starting ID for user events diff --git a/mongoose.c b/mongoose.c index ec4cdf48..87bd29b0 100644 --- a/mongoose.c +++ b/mongoose.c @@ -4071,8 +4071,10 @@ static void mg_ws_cb(struct mg_connection *c, int ev, void *ev_data, ("%lu WS handshake error: %.*s", c->id, 15, c->recv.buf)); c->is_closing = 1; } else { + struct mg_http_message hm; + mg_http_parse((char *) c->recv.buf, c->recv.len, &hm); c->is_websocket = 1; - mg_call(c, MG_EV_WS_OPEN, NULL); + mg_call(c, MG_EV_WS_OPEN, &hm); } mg_iobuf_delete(&c->recv, n); } else { diff --git a/mongoose.h b/mongoose.h index 7fa8f33a..78744d12 100644 --- a/mongoose.h +++ b/mongoose.h @@ -564,9 +564,9 @@ enum { MG_EV_WRITE, // Data written to socket int *num_bytes_written MG_EV_CLOSE, // Connection closed NULL MG_EV_HTTP_MSG, // HTTP request/response struct mg_http_message * - MG_EV_WS_OPEN, // Websocket handshake done NULL - MG_EV_WS_MSG, // Websocket message received struct mg_ws_message * - MG_EV_WS_CTL, // Websocket control message struct mg_ws_message * + MG_EV_WS_OPEN, // Websocket handshake done struct mg_http_message * + MG_EV_WS_MSG, // Websocket msg, text or bin struct mg_ws_message * + MG_EV_WS_CTL, // Websocket control msg struct mg_ws_message * MG_EV_MQTT_CMD, // MQTT low-level command struct mg_mqtt_message * MG_EV_MQTT_MSG, // MQTT PUBLISH received struct mg_mqtt_message * MG_EV_MQTT_OPEN, // MQTT CONNACK received int *connack_status_code diff --git a/src/event.h b/src/event.h index df8caa7a..3879224c 100644 --- a/src/event.h +++ b/src/event.h @@ -27,9 +27,9 @@ enum { MG_EV_WRITE, // Data written to socket int *num_bytes_written MG_EV_CLOSE, // Connection closed NULL MG_EV_HTTP_MSG, // HTTP request/response struct mg_http_message * - MG_EV_WS_OPEN, // Websocket handshake done NULL - MG_EV_WS_MSG, // Websocket message received struct mg_ws_message * - MG_EV_WS_CTL, // Websocket control message struct mg_ws_message * + MG_EV_WS_OPEN, // Websocket handshake done struct mg_http_message * + MG_EV_WS_MSG, // Websocket msg, text or bin struct mg_ws_message * + MG_EV_WS_CTL, // Websocket control msg struct mg_ws_message * MG_EV_MQTT_CMD, // MQTT low-level command struct mg_mqtt_message * MG_EV_MQTT_MSG, // MQTT PUBLISH received struct mg_mqtt_message * MG_EV_MQTT_OPEN, // MQTT CONNACK received int *connack_status_code diff --git a/src/ws.c b/src/ws.c index 4cb883ac..dfac0d00 100644 --- a/src/ws.c +++ b/src/ws.c @@ -119,8 +119,10 @@ static void mg_ws_cb(struct mg_connection *c, int ev, void *ev_data, ("%lu WS handshake error: %.*s", c->id, 15, c->recv.buf)); c->is_closing = 1; } else { + struct mg_http_message hm; + mg_http_parse((char *) c->recv.buf, c->recv.len, &hm); c->is_websocket = 1; - mg_call(c, MG_EV_WS_OPEN, NULL); + mg_call(c, MG_EV_WS_OPEN, &hm); } mg_iobuf_delete(&c->recv, n); } else {