fix-rx-action-76.patch

Signed-off-by: Andy Green <andy@warmcat.com>
This commit is contained in:
Andy Green 2010-11-11 09:22:22 +00:00
parent 9a2cf33ab6
commit 6452f1eff6
5 changed files with 35 additions and 10 deletions

View file

@ -1,2 +1,3 @@
SUBDIRS=lib test-server
SUBDIRS=lib test-server
#communal-server

View file

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

View file

@ -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;
}

View file

@ -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;

View file

@ -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);