fix-rx-action-76.patch
Signed-off-by: Andy Green <andy@warmcat.com>
This commit is contained in:
parent
9a2cf33ab6
commit
6452f1eff6
5 changed files with 35 additions and 10 deletions
|
@ -1,2 +1,3 @@
|
|||
SUBDIRS=lib test-server
|
||||
SUBDIRS=lib test-server
|
||||
#communal-server
|
||||
|
||||
|
|
|
@ -211,7 +211,7 @@ target_alias = @target_alias@
|
|||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
SUBDIRS = lib test-server
|
||||
SUBDIRS = lib test-server
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
|
@ -706,6 +706,7 @@ uninstall-am:
|
|||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am tags tags-recursive uninstall uninstall-am
|
||||
|
||||
#communal-server
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
|
|
@ -210,6 +210,29 @@ static int libwebsocket_rx_sm(struct libwebsocket *wsi, unsigned char c)
|
|||
case 0:
|
||||
break;
|
||||
}
|
||||
|
||||
if (c == 0) {
|
||||
wsi->lws_rx_parse_state = LWS_RXPS_EAT_UNTIL_76_FF;
|
||||
wsi->rx_user_buffer_head = 0;
|
||||
}
|
||||
break;
|
||||
case LWS_RXPS_EAT_UNTIL_76_FF:
|
||||
if (c == 0xff) {
|
||||
wsi->lws_rx_parse_state = LWS_RXPS_NEW;
|
||||
goto issue;
|
||||
}
|
||||
wsi->rx_user_buffer[LWS_SEND_BUFFER_PRE_PADDING +
|
||||
(wsi->rx_user_buffer_head++)] = c;
|
||||
|
||||
if (wsi->rx_user_buffer_head != MAX_USER_RX_BUFFER)
|
||||
break;
|
||||
issue:
|
||||
if (wsi->callback)
|
||||
wsi->callback(wsi, LWS_CALLBACK_RECEIVE,
|
||||
&wsi->user_space[0],
|
||||
&wsi->rx_user_buffer[LWS_SEND_BUFFER_PRE_PADDING],
|
||||
wsi->rx_user_buffer_head);
|
||||
wsi->rx_user_buffer_head = 0;
|
||||
break;
|
||||
case LWS_RXPS_SEEN_76_FF:
|
||||
if (c)
|
||||
|
@ -254,10 +277,6 @@ int libwebsocket_interpret_incoming_packet(struct libwebsocket *wsi,
|
|||
LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED && n < len)
|
||||
if (libwebsocket_rx_sm(wsi, buf[n++]) < 0)
|
||||
return -1;
|
||||
|
||||
if (n != len && wsi->callback)
|
||||
wsi->callback(wsi, LWS_CALLBACK_RECEIVE, &wsi->user_space[0],
|
||||
&buf[n], len - n);
|
||||
|
||||
return -0;
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ extern int use_ssl;
|
|||
#define LWS_MAX_HEADER_LEN 4096
|
||||
#define LWS_INITIAL_HDR_ALLOC 256
|
||||
#define LWS_ADDITIONAL_HDR_ALLOC 64
|
||||
|
||||
#define MAX_USER_RX_BUFFER 512
|
||||
|
||||
|
||||
enum lws_connection_states {
|
||||
|
@ -101,6 +101,7 @@ enum lws_rx_parse_state {
|
|||
|
||||
LWS_RXPS_SEEN_76_FF,
|
||||
LWS_RXPS_PULLING_76_LENGTH,
|
||||
LWS_RXPS_EAT_UNTIL_76_FF,
|
||||
|
||||
LWS_RXPS_PAYLOAD_UNTIL_LENGTH_EXHAUSTED
|
||||
};
|
||||
|
@ -130,7 +131,10 @@ struct libwebsocket {
|
|||
enum lws_token_indexes parser_state;
|
||||
struct lws_tokens utf8_token[WSI_TOKEN_COUNT];
|
||||
int ietf_spec_revision;
|
||||
|
||||
char rx_user_buffer[LWS_SEND_BUFFER_PRE_PADDING + MAX_USER_RX_BUFFER +
|
||||
LWS_SEND_BUFFER_POST_PADDING];
|
||||
int rx_user_buffer_head;
|
||||
|
||||
int sock;
|
||||
|
||||
enum lws_rx_parse_state lws_rx_parse_state;
|
||||
|
|
|
@ -170,8 +170,8 @@ int main(int argc, char **argv)
|
|||
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
|
||||
|
||||
fprintf(stderr, "libwebsockets test server\n"
|
||||
"Copyright 2010 Andy Green <andy@warmcat.com> "
|
||||
"licensed under GPL2\n");
|
||||
"(C) Copyright 2010 Andy Green <andy@warmcat.com> "
|
||||
"licensed under LGPL2.1\n");
|
||||
|
||||
while (n >= 0) {
|
||||
n = getopt_long(argc, argv, "hp:r:", options, NULL);
|
||||
|
|
Loading…
Add table
Reference in a new issue