diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 9055f9b4..404d5254 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -828,6 +828,9 @@ lws_daemonize(const char *_lock_path); LWS_EXTERN int lws_send_pipe_choked(struct libwebsocket *wsi); +LWS_EXTERN int +lws_frame_is_binary(struct libwebsocket *wsi); + LWS_EXTERN unsigned char * libwebsockets_SHA1(const unsigned char *d, size_t n, unsigned char *md); diff --git a/lib/parsers.c b/lib/parsers.c index 5563df71..a1e4a486 100644 --- a/lib/parsers.c +++ b/lib/parsers.c @@ -611,6 +611,20 @@ xor_mask_05(struct libwebsocket *wsi, unsigned char c) return c ^ wsi->frame_masking_nonce_04[(wsi->frame_mask_index++) & 3]; } +/** + * lws_frame_is_binary: true if the current frame was sent in binary mode + * + * @wsi: the connection we are inquiring about + * + * This is intended to be called from the LWS_CALLBACK_RECEIVE callback if + * it's interested to see if the frame it's dealing with was sent in binary + * mode. + */ + +int lws_frame_is_binary(struct libwebsocket *wsi) +{ + return wsi->frame_is_binary; +} int @@ -1083,9 +1097,10 @@ spill: wsi->rx_user_buffer_head = 0; return 0; - case LWS_WS_OPCODE_07__CONTINUATION: case LWS_WS_OPCODE_07__TEXT_FRAME: case LWS_WS_OPCODE_07__BINARY_FRAME: + wsi->frame_is_binary = wsi->opcode == LWS_WS_OPCODE_07__BINARY_FRAME; + case LWS_WS_OPCODE_07__CONTINUATION: break; default: diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h index 8374bb6d..8c52c816 100644 --- a/lib/private-libwebsockets.h +++ b/lib/private-libwebsockets.h @@ -367,6 +367,7 @@ struct libwebsocket { unsigned char opcode; unsigned char final; unsigned char rsv; + int frame_is_binary:1; int pings_vs_pongs; unsigned char (*xor_mask)(struct libwebsocket *, unsigned char); diff --git a/libwebsockets-api-doc.html b/libwebsockets-api-doc.html index bd734dc1..73aefe8f 100644 --- a/libwebsockets-api-doc.html +++ b/libwebsockets-api-doc.html @@ -370,6 +370,22 @@ log level defaults to "err" and "warn" contexts enabled only and emission on stderr.
+This is intended to be called from the LWS_CALLBACK_RECEIVE callback if +it's interested to see if the frame it's dealing with was sent in binary +mode. ++