diff --git a/docs/README.md b/docs/README.md
index 616189e0..a39f8ee4 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1404,18 +1404,50 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
```
-## Websocket
+## WebSocket
### struct mg\_ws\_message
```c
struct mg_ws_message {
- struct mg_str data; // Websocket message data
- uint8_t flags; // Websocket message flags
+ struct mg_str data; // WebSocket message data
+ uint8_t flags; // WebSocket message flags
};
```
-Structure represents the WebSocket message.
+This structure represents the WebSocket message, the `flags` element corresponds to the first byte as described in [RFC 6455 section 5.2](https://www.rfc-editor.org/rfc/rfc6455#section-5.2).
+
+#### WebSocket message type:
+
+To extract the message type from an incoming message, check the four LSBs in the `flags` element of the `struct mg_ws_message`.
+
+Possible WebSocket message types:
+
+```c
+#define WEBSOCKET_OP_CONTINUE 0
+#define WEBSOCKET_OP_TEXT 1
+#define WEBSOCKET_OP_BINARY 2
+#define WEBSOCKET_OP_CLOSE 8
+#define WEBSOCKET_OP_PING 9
+#define WEBSOCKET_OP_PONG 10
+```
+
+```c
+// Mongoose events handler
+void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
+ if (ev == MG_EV_WS_MSG) {
+ struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;
+ msgtype = wm->flags & 0x0F;
+ if (msgtype == WEBSOCKET_OP_BINARY) {
+ // This is a binary data message
+ } else if (msgtype == WEBSOCKET_OP_TEXT) {
+ // This is a text data message
+ }
+ }
+}
+```
+
+To send a message, use the proper message type as described in [RFC 6455 section 5.6](https://www.rfc-editor.org/rfc/rfc6455#section-5.6) for data frames. when calling [mg_ws_send()](#mg_ws_send) or [mg_ws_printf()](#mg_ws_printf-mg_ws_vprintf) below
### mg\_ws\_connect()
@@ -1425,7 +1457,7 @@ struct mg_connection *mg_ws_connect(struct mg_mgr *mgr, const char *url,
const char *fmt, ...);
```
-Create client Websocket connection.
+Create client WebSocket connection.
Note: this function does not connect to peer, it allocates required resources and
starts the connect process. Once peer is really connected, the `MG_EV_CONNECT` event is
@@ -1434,7 +1466,6 @@ Note: this function does not connect to peer, it allocates required resources an
Parameters:
- `mgr` - Event manager to use
- `url` - Specifies remote URL, e.g. `http://google.com`
-- `opts` - MQTT options, with client ID, QoS, etc
- `fn` - An event handler function
- `fn_data` - An arbitrary pointer, which will be passed as `fn_data` when an
event handler is called. This pointer is also stored in a connection
@@ -1458,9 +1489,9 @@ void mg_ws_upgrade(struct mg_connection *c, struct mg_http_message *,
const char *fmt, ...);
```
-Upgrade given HTTP connection to Websocket. The `fmt` is a printf-like
+Upgrade given HTTP connection to WebSocket. The `fmt` is a printf-like
format string for the extra HTTP headers returned to the client in a
-Websocket handshake. Set `fmt` to `NULL` if no extra headers need to be passed.
+WebSocket handshake. Set `fmt` to `NULL` if no extra headers need to be passed.
Parameters:
- `c` - Connection to use
@@ -1487,27 +1518,16 @@ void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
size_t mg_ws_send(struct mg_connection *c, const void *buf, size_t len, int op);
```
-Send data to websocket peer
+Send data to WebSocket peer
Parameters:
- `c` - Connection to use
- `buf` - Data to send
- `len` - Data size
-- `op` - Websocket message type
+- `op` - WebSocket message type, see [WebSocket message type](#websocket-message-type) above
Return value: sent bytes count
-Possible Websocket message type:
-
-```c
-#define WEBSOCKET_OP_CONTINUE 0
-#define WEBSOCKET_OP_TEXT 1
-#define WEBSOCKET_OP_BINARY 2
-#define WEBSOCKET_OP_CLOSE 8
-#define WEBSOCKET_OP_PING 9
-#define WEBSOCKET_OP_PONG 10
-```
-
Usage example:
```c
@@ -1529,16 +1549,11 @@ size_t mg_ws_vprintf(struct mg_connection *, int op, const char *fmt, va_list *)
Same as `mg_ws_send()`, but formats data using `printf()` semantics.
-NOTE: See [mg\_ws\_send](#mg_ws_send)
-for the list of possible Websocket message types
-
-NOTE: See [mg\_snprintf](#mg_snprintf-mg_vsnprintf)
-for the list of supported format specifiers
-
Parameters:
- `c` - Connection to use
-- `op` - Websocket message type
-- `fmt` - format string in `printf` semantics
+- `op` - WebSocket message type, see [WebSocket message type](#websocket-message-type) above
+- `fmt` - format string in `printf` semantics. see [mg\_snprintf](#mg_snprintf-mg_vsnprintf)
+for the list of supported format specifiers
Return value: sent bytes count