1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-16 00:00:07 +01:00
Commit graph

11 commits

Author SHA1 Message Date
Andy Green
706961dbb5 solve flowcontrol problems
Problems with rx flow control implementation were the underlying cause
of the connection stalling issue that was covered up with the udelay()
patch that was removed recently.

This get rx flow control working properly and corrects problems with
fifo management in the test server mirror protocol code too.

The rxfow control api has been changed to just set a flag, so it's very cheap
to call from user code.  After the callbacks that might use the rxflow control
api the flag is checked and any pending actions done.

rx flow control now stops any rx packet coming immediately, with compessed
connections "just what was left in the pipe" might be hundreds of KBytes.  To
implement that the current packet being decoded is copied into a malloc'd buffer
by the rx processing code now.

When rxflow is allows to come again, the buffer is drained and freed before any
new packet content is accepted.

Signed-off-by: Andy Green <andy.green@linaro.org>
2013-01-17 17:18:55 +08:00
Andy Green
f7609e9ada logging ensure everyone has a newline
Signed-off-by: Andy Green <andy.green@linaro.org>
2013-01-15 15:41:15 +08:00
Andy Green
c0d6b63c83 expose compiletime constants to setting from configure
This patch allows control of the main compiletime constants in libwebsockets
from the configure commandline.

README is updated with documentation on what's available, how to set them
and the defaults.

The constants are logged with "info" severity (not visible by default) at
context create time.

The zlib constant previously exposed like this is moved to private-libwebsockets.h
so it can be printed along with the rest.

Signed-off-by: Andy Green <andy.green@linaro.org>
2013-01-12 23:42:17 +08:00
Andy Green
d678ea3cd2 renable deflate frame buffer expansion fixing DoS
This reverts the removal of the deflate_frame code that was crashing after porting
David Galeano's code: he pointed out there's a typo in the merged version causing
the crash which is fixed here.

However the fixed code has a problem, there's no limit (other than int size) to the
amount of memory it will try to malloc, which can allow a DoS of the server by the
client sending malicious compression states that inflate to a large amount.  I have
added checking for OOM already that will avert the segfault that would otherwise follow
but the server will be unusuable if malicious connections were made repeatedly each
forcing it to allocate large buffers and cause small allocations on other connections
to fail.

The patch changes the code to use realloc(), and introduces a configurable limit
on the amount of memory one connection may need for zlib before the server hangs
up the connection.  It defaults to 64KBytes but can be set from ./configure as
described now in the README.

Signed-off-by: Andy Green <andy.green@linaro.org>
2013-01-12 23:36:27 +08:00
Andy Green
43db045ff8 introduce logging api and convert all library output to use it
- multiple debug context calls lwsl_ err, warn, debug, parser, ext, client

 - api added to set which contexts output to stderr using a bitfield log_level

 - --disable-debug on configure removes all code that is not err or warn severity

 - err and warn contexts always output to stderr unless disabled by log_level

 - err and warn enabled by default in log_level

Signed-off-by: Andy Green <andy@warmcat.com>
2013-01-10 22:16:37 +08:00
Andy Green
988bd987af zlib code add OOM checks remove buffer expansion on rx path
Here testing with the test serer and chrome 25, the buffer expansion
code on Rx was triggered by a valid no data output condition and looped
until it exhausted all memory.

This patch adds OOM check to all malloc()s and removes the buffer expansion
code on the rx path... leaving the code on tx path for now.

Signed-off-by: Andy Green <andy.green@linaro.org>
2013-01-10 12:45:54 +08:00
David Galeano
ed3bc90174 Separate compression levels for server and client,
increased the later one to zlib default (6).
2013-01-10 12:45:54 +08:00
David Galeano
1ed189e421 More correct handling of inflate result. 2013-01-10 12:45:54 +08:00
David Galeano
01d0256b42 Avoid deflate of small packets. 2013-01-10 09:51:15 +08:00
David Galeano
2605ffe277 Support compressed packets bigger than MAX_USER_RX_BUFFER.
(AG adapted style and removed logging stuff)
2013-01-10 09:41:06 +08:00
David Galeano
85a092135e Added extension "deflate-frame".
Using by default instead of "deflate-stream".
2013-01-09 18:21:33 +08:00