From c1a9376690556328f8c3c336620c46ad2673a7c8 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 18 Jan 2013 09:49:20 +0800 Subject: [PATCH] introdice tracking if frame is binary Signed-off-by: Andy Green --- lib/libwebsockets.h | 3 +++ lib/parsers.c | 17 ++++++++++++++++- lib/private-libwebsockets.h | 1 + libwebsockets-api-doc.html | 16 ++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) 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_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 5563df7..a1e4a48 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 8374bb6..8c52c81 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 bd734dc..73aefe8 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.
+

lws_frame_is_binary -

+int +lws_frame_is_binary +(struct libwebsocket * wsi) +

Arguments

+
+
wsi +
the connection we are inquiring about +
+

Description

+
+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. +
+

libwebsockets_remaining_packet_payload - Bytes to come before "overall" rx packet is complete

size_t libwebsockets_remaining_packet_payload -- 2.7.4