introdice tracking if frame is binary
Signed-off-by: Andy Green <andy.green@linaro.org>
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index 9055f9b..404d525 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -828,6 +828,9 @@
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 5563df7..a1e4a48 100644
--- a/lib/parsers.c
+++ b/lib/parsers.c
@@ -611,6 +611,20 @@
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 @@
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 8374bb6..8c52c81 100644
--- a/lib/private-libwebsockets.h
+++ b/lib/private-libwebsockets.h
@@ -367,6 +367,7 @@
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);