4 v1.4-chrome43-firefox36
5 =======================
10 There's a new member in the info struct used to control context creation,
11 ssl_private_key_password, which allows passing into lws the passphrase on
14 There's a new member in struct protocols, id, which is ignored by lws but can
15 be used by the user code to mark the selected protocol by user-defined version
16 or capabliity flag information, for the case multiple versions of a protocol are
19 int lws_is_ssl(wsi) added to allow user code to know if the connection was made
20 over ssl or not. If LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT is used, both
21 ssl and non-ssl connections are possible and may need to be treated differently
24 int lws_partial_buffered(wsi) added... should be checked after any
25 libwebsocket_write that will be followed by another libwebsocket_write inside
26 the same writeable callback. If set, you can't do any more writes until the
27 writeable callback is called again. If you only do one write per writeable callback,
30 HTTP2-related: HTTP2 changes how headers are handled, lws now has new version-
31 agnositic header creation APIs. These do the right thing depending on each
32 connection's HTTP version without the user code having to know or care, except
33 to make sure to use the new APIs for headers (test-server is updated to use
34 them already, so look there for examples)
36 The APIs "render" the headers into a user-provided buffer and bump *p as it
37 is used. If *p reaches end, then the APIs return nonzero for error.
39 LWS_VISIBLE LWS_EXTERN int
40 lws_add_http_header_status(struct libwebsocket_context *context,
41 struct libwebsocket *wsi,
46 Start a response header reporting status like 200, 500, etc
48 LWS_VISIBLE LWS_EXTERN int
49 lws_add_http_header_by_name(struct libwebsocket_context *context,
50 struct libwebsocket *wsi,
51 const unsigned char *name,
52 const unsigned char *value,
57 Add a header like name: value in HTTP1.x
59 LWS_VISIBLE LWS_EXTERN int
60 lws_finalize_http_header(struct libwebsocket_context *context,
61 struct libwebsocket *wsi,
65 Finish off the headers, like add the extra \r\n in HTTP1.x
67 LWS_VISIBLE LWS_EXTERN int
68 lws_add_http_header_by_token(struct libwebsocket_context *context,
69 struct libwebsocket *wsi,
70 enum lws_token_indexes token,
71 const unsigned char *value,
76 Add a header by using a lws token as the name part. In HTTP2, this can be
77 compressed to one or two bytes.
83 protocols struct member no_buffer_all_partial_tx is removed. Under some
84 conditions like rewriting extention such as compression in use, the built-in
85 partial send buffering is the only way to deal with the problem, so turning
92 HTTP2-related: API libwebsockets_serve_http_file() takes an extra parameter at
95 int other_headers_len)
97 If you are providing other headers, they must be generated using the new
98 HTTP-version-agnostic APIs, and you must provide the length of them using this
101 struct lws_context_creation_info now has an additional member
102 SSL_CTX *provided_client_ssl_ctx you may set to an externally-initialized
103 SSL_CTX managed outside lws. Defaulting to zero keeps the existing behaviour of
104 lws managing the context, if you memset the struct to 0 or have as a filescope
105 initialized struct in bss, no need to change anything.
108 v1.3-chrome37-firefox30
109 =======================
112 CMakeLists.txt | 447 +++--
116 cmake/LibwebsocketsConfig.cmake.in | 17 +
117 cmake/LibwebsocketsConfigVersion.cmake.in | 11 +
118 config.h.cmake | 18 +
119 cross-ming.cmake | 31 +
120 cross-openwrt-makefile | 91 +
121 lib/client-handshake.c | 205 ++-
122 lib/client-parser.c | 58 +-
123 lib/client.c | 158 +-
124 lib/context.c | 341 ++++
125 lib/extension-deflate-frame.c | 2 +-
126 lib/extension.c | 178 ++
127 lib/handshake.c | 287 +---
128 lib/lextable.h | 338 ++++
130 lib/libwebsockets.c | 2089 +++--------------------
131 lib/libwebsockets.h | 253 ++-
132 lib/lws-plat-unix.c | 404 +++++
133 lib/lws-plat-win.c | 358 ++++
134 lib/minilex.c | 530 +++---
135 lib/output.c | 445 ++---
136 lib/parsers.c | 682 ++++----
137 lib/pollfd.c | 239 +++
138 lib/private-libwebsockets.h | 501 +++++-
139 lib/server-handshake.c | 274 +--
140 lib/server.c | 858 ++++++++--
141 lib/service.c | 517 ++++++
143 lib/ssl-http2.c | 78 +
144 lib/ssl.c | 571 +++++++
145 test-server/attack.sh | 101 +-
146 test-server/test-client.c | 9 +-
147 test-server/test-echo.c | 17 +-
148 test-server/test-fraggle.c | 7 -
149 test-server/test-ping.c | 12 +-
150 test-server/test-server.c | 330 ++--
151 test-server/test.html | 4 +-
152 win32port/client/client.vcxproj | 259 ---
153 win32port/client/client.vcxproj.filters | 39 -
154 .../libwebsocketswin32.vcxproj.filters | 93 -
155 win32port/server/server.vcxproj | 276 ---
156 win32port/server/server.vcxproj.filters | 51 -
157 win32port/win32helpers/gettimeofday.h | 59 +-
158 win32port/win32helpers/netdb.h | 1 -
159 win32port/win32helpers/strings.h | 0
160 win32port/win32helpers/sys/time.h | 1 -
161 win32port/win32helpers/unistd.h | 0
162 win32port/win32helpers/websock-w32.c | 104 --
163 win32port/win32helpers/websock-w32.h | 62 -
164 win32port/win32port.sln | 100 --
165 win32port/zlib/gzio.c | 3 +-
166 55 files changed, 6779 insertions(+), 5059 deletions(-)
172 POST method is supported
174 The protocol 0 / HTTP callback can now get two new kinds of callback,
175 LWS_CALLBACK_HTTP_BODY (in and len are a chunk of the body of the HTTP request)
176 and LWS_CALLBACK_HTTP_BODY_COMPLETION (the expected amount of body has arrived
177 and been passed to the user code already). These callbacks are used with the
178 post method (see the test server for details).
180 The period between the HTTP header completion and the completion of the body
181 processing is protected by a 5s timeout.
183 The chunks are stored in a malloc'd buffer of size protocols[0].rx_buffer_size.
186 New server option you can enable from user code
187 LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT allows non-SSL connections to
188 also be accepted on an SSL listening port. It's disabled unless you enable
192 Two new callbacks are added in protocols[0] that are optional for allowing
193 limited thread access to libwebsockets, LWS_CALLBACK_LOCK_POLL and
194 LWS_CALLBACK_UNLOCK_POLL.
196 If you use them, they protect internal and external poll list changes, but if
197 you want to use external thread access to libwebsocket_callback_on_writable()
198 you have to implement your locking here even if you don't use external
201 If you will use another thread for this, take a lot of care about managing
202 your list of live wsi by doing it from ESTABLISHED and CLOSED callbacks
203 (with your own locking).
205 If you configure cmake with -DLWS_WITH_LIBEV=1 then the code allowing the libev
206 eventloop instead of the default poll() one will also be compiled in. But to
207 use it, you must also set the LWS_SERVER_OPTION_LIBEV flag on the context
208 creation info struct options member.
210 IPV6 is supported and enabled by default except for Windows, you can disable
211 the support at build-time by giving -DLWS_IPV6=, and disable use of it even if
212 compiled in by making sure the flag LWS_SERVER_OPTION_DISABLE_IPV6 is set on
213 the context creation info struct options member.
215 You can give LWS_SERVER_OPTION_DISABLE_OS_CA_CERTS option flag to
216 guarantee the OS CAs will not be used, even if that support was selected at
219 Optional "token limits" may be enforced by setting the member "token_limits"
220 in struct lws_context_creation_info to point to a struct lws_token_limits.
221 NULL means no token limits used for compatibility.
227 Extra optional argument to libwebsockets_serve_http_file() allows injecion
228 of HTTP headers into the canned response. Eg, cookies may be added like
229 that without getting involved in having to send the header by hand.
231 A new info member http_proxy_address may be used at context creation time to
232 set the http proxy. If non-NULL, it overrides http_proxy environment var.
234 Cmake supports LWS_SSL_CLIENT_USE_OS_CA_CERTS defaulting to on, which gets
235 the client to use the OS CA Roots. If you're worried somebody with the
236 ability to forge for force creation of a client cert from the root CA in
237 your OS, you should disable this since your selfsigned $0 cert is a lot safer
241 v1.23-chrome32-firefox24
242 ========================
245 CMakeLists.txt | 573 ++++++++----
246 COPYING | 503 -----------
247 INSTALL | 365 --------
249 README.build | 371 ++------
250 README.coding | 63 ++
251 autogen.sh | 1578 ---------------------------------
253 cmake/FindGit.cmake | 163 ++++
254 cmake/FindOpenSSLbins.cmake | 15 +-
255 cmake/UseRPMTools.cmake | 176 ++++
256 config.h.cmake | 25 +-
257 configure.ac | 226 -----
258 cross-arm-linux-gnueabihf.cmake | 28 +
259 lib/Makefile.am | 89 --
260 lib/base64-decode.c | 98 +-
261 lib/client-handshake.c | 123 ++-
262 lib/client-parser.c | 19 +-
263 lib/client.c | 145 ++-
264 lib/daemonize.c | 4 +-
265 lib/extension.c | 2 +-
266 lib/getifaddrs.h | 4 +-
267 lib/handshake.c | 76 +-
268 lib/libwebsockets.c | 491 ++++++----
269 lib/libwebsockets.h | 164 ++--
270 lib/output.c | 214 ++++-
271 lib/parsers.c | 102 +--
272 lib/private-libwebsockets.h | 66 +-
273 lib/server-handshake.c | 5 +-
276 libwebsockets-api-doc.html | 249 +++---
277 libwebsockets.pc.in | 11 -
278 libwebsockets.spec | 14 +-
280 scripts/FindLibWebSockets.cmake | 33 +
281 scripts/kernel-doc | 1 +
282 test-server/Makefile.am | 131 ---
283 test-server/leaf.jpg | Bin 0 -> 2477518 bytes
284 test-server/test-client.c | 78 +-
285 test-server/test-echo.c | 33 +-
286 test-server/test-fraggle.c | 26 +-
287 test-server/test-ping.c | 15 +-
288 test-server/test-server.c | 197 +++-
289 test-server/test.html | 5 +-
290 win32port/win32helpers/gettimeofday.c | 74 +-
291 win32port/win32helpers/websock-w32.h | 6 +-
292 48 files changed, 2493 insertions(+), 4212 deletions(-)
298 - You can now call libwebsocket_callback_on_writable() on http connectons,
299 and get a LWS_CALLBACK_HTTP_WRITEABLE callback, the same way you can
300 regulate writes with a websocket protocol connection.
302 - A new member in the context creation parameter struct "ssl_cipher_list" is
303 added, replacing CIPHERS_LIST_STRING. NULL means use the ssl library
304 default list of ciphers.
306 - Not really an api addition, but libwebsocket_service_fd() will now zero
307 the revents field of the pollfd it was called with if it handled the
308 descriptor. So you can tell if it is a non-lws fd by checking revents
309 after the service call... if it's still nonzero, the descriptor
310 belongs to you and you need to take care of it.
312 - libwebsocket_rx_flow_allow_all_protocol(protocol) will unthrottle all
313 connections with the established protocol. It's designed to be
314 called from user server code when it sees it can accept more input
315 and may have throttled connections using the server rx flow apis
316 while it was unable to accept any other input The user server code
317 then does not have to try to track while connections it choked, this
318 will free up all of them in one call.
320 - there's a new, optional callback LWS_CALLBACK_CLOSED_HTTP which gets
321 called when an HTTP protocol socket closes
323 - for LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION callback, the user_space alloc
324 has already been done before the callback happens. That means we can
325 use the user parameter to the callback to contain the user pointer, and
326 move the protocol name to the "in" parameter. The docs for this
327 callback are also updated to reflect how to check headers in there.
329 - libwebsocket_client_connect() is now properly nonblocking and async. See
330 README.coding and test-client.c for information on the callbacks you
331 can rely on controlling the async connection period with.
333 - if your OS does not support the http_proxy environment variable convention
334 (eg, reportedly OSX), you can use a new api libwebsocket_set_proxy()
335 to set the proxy details inbetween context creation and the connection
336 action. For OSes that support http_proxy, that's used automatically.
341 - the external poll callbacks now get the socket descriptor coming from the
342 "in" parameter. The user parameter provides the user_space for the
343 wsi as it normally does on the other callbacks.
344 LWS_CALLBACK_FILTER_NETWORK_CONNECTION also has the socket descriptor
345 delivered by @in now instead of @user.
347 - libwebsocket_write() now returns -1 for error, or the amount of data
348 actually accepted for send. Under load, the OS may signal it is
349 ready to send new data on the socket, but have only a restricted
350 amount of memory to buffer the packet compared to usual.
356 - libwebsocket_ensure_user_space() is removed from the public api, if you
357 were using it to get user_space, you need to adapt your code to only
358 use user_space inside the user callback.
360 - CIPHERS_LIST_STRING is removed
362 - autotools build has been removed. See README.build for info on how to
363 use CMake for your platform
366 v1.21-chrome26-firefox18
367 ========================
369 - Fixes buffer overflow bug in max frame size handling if you used the
370 default protocol buffer size. If you declared rx_buffer_size in your
371 protocol, which is recommended anyway, your code was unaffected.
373 v1.2-chrome26-firefox18
374 =======================
380 CMakeLists.txt | 544 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
381 LICENSE | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
384 README.build | 258 ++++++++++++++++++++++++++++++++-----
385 README.coding | 52 ++++++++
386 changelog | 136 ++++++++++++++++++++
387 cmake/FindOpenSSLbins.cmake | 33 +++++
388 config.h.cmake | 173 +++++++++++++++++++++++++
389 configure.ac | 22 +++-
390 lib/Makefile.am | 20 ++-
391 lib/base64-decode.c | 2 +-
392 lib/client-handshake.c | 190 +++++++++++-----------------
393 lib/client-parser.c | 88 +++++++------
394 lib/client.c | 384 ++++++++++++++++++++++++++++++-------------------------
395 lib/daemonize.c | 32 +++--
396 lib/extension-deflate-frame.c | 58 +++++----
397 lib/extension-deflate-stream.c | 19 ++-
398 lib/extension-deflate-stream.h | 4 +-
399 lib/extension.c | 11 +-
400 lib/getifaddrs.c | 315 +++++++++++++++++++++++-----------------------
401 lib/getifaddrs.h | 30 ++---
402 lib/handshake.c | 124 +++++++++++-------
403 lib/libwebsockets.c | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------
404 lib/libwebsockets.h | 237 ++++++++++++++++++++++------------
405 lib/output.c | 192 +++++++++++-----------------
406 lib/parsers.c | 966 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------
407 lib/private-libwebsockets.h | 225 +++++++++++++++++++++------------
408 lib/server-handshake.c | 82 ++++++------
409 lib/server.c | 96 +++++++-------
410 libwebsockets-api-doc.html | 189 ++++++++++++++++++----------
411 libwebsockets.spec | 17 +--
412 test-server/attack.sh | 148 ++++++++++++++++++++++
413 test-server/test-client.c | 125 +++++++++---------
414 test-server/test-echo.c | 31 +++--
415 test-server/test-fraggle.c | 32 ++---
416 test-server/test-ping.c | 52 ++++----
417 test-server/test-server.c | 129 ++++++++++++-------
418 win32port/libwebsocketswin32/libwebsocketswin32.vcxproj | 279 ----------------------------------------
419 win32port/libwebsocketswin32/libwebsocketswin32.vcxproj.filters | 23 +++-
420 41 files changed, 4398 insertions(+), 2219 deletions(-)
426 - lws_get_library_version() returns a const char * with a string like
427 "1.1 9e7f737", representing the library version from configure.ac
428 and the git HEAD hash the library was built from
430 - TCP Keepalive can now optionally be applied to all lws sockets, on Linux
431 also with controllable timeout, number of probes and probe interval.
432 (On BSD type OS, you can only use system default settings for the
433 timing and retries, although enabling it is supported by setting
434 ka_time to nonzero, the exact value has no meaning.)
435 This enables detection of idle connections which are logically okay,
436 but are in fact dead, due to network connectivity issues at the server,
437 client, or any intermediary. By default it's not enabled, but you
438 can enable it by setting a non-zero timeout (in seconds) at the new
439 ka_time member at context creation time.
441 - Two new optional user callbacks added, LWS_CALLBACK_PROTOCOL_DESTROY which
442 is called one-time per protocol as the context is being destroyed, and
443 LWS_CALLBACK_PROTOCOL_INIT which is called when the context is created
444 and the protocols are added, again it's a one-time affair.
445 This lets you manage per-protocol allocations properly including
446 cleaning up after yourself when the server goes down.
451 - libwebsocket_create_context() has changed from taking a ton of parameters
452 to just taking a pointer to a struct containing the parameters. The
453 struct lws_context_creation_info is in libwebsockets.h, the members
454 are in the same order as when they were parameters to the call
455 previously. The test apps are all updated accordingly so you can
456 see example code there.
458 - Header tokens are now deleted after the websocket connection is
459 established. Not just the header data is saved, but the pointer and
460 length array is also removed from (union) scope saving several hundred
461 bytes per connection once it is established
463 - struct libwebsocket_protocols has a new member rx_buffer_size, this
464 controls rx buffer size per connection of that protocol now. Sources
465 for apps built against older versions of the library won't declare
466 this in their protocols, defaulting it to 0. Zero buffer is legal,
467 it causes a default buffer to be allocated (currently 4096)
469 If you want to receive only atomic frames in your user callback, you
470 should set this to greater than your largest frame size. If a frame
471 comes that exceeds that, no error occurs but the callback happens as
472 soon as the buffer limit is reached, and again if it is reached again
473 or the frame completes. You can detect that has happened by seeing
474 there is still frame content pending using
475 libwebsockets_remaining_packet_payload()
477 By correctly setting this, you can save a lot of memory when your
478 protocol has small frames (see the test server and client sources).
480 - LWS_MAX_HEADER_LEN now defaults to 1024 and is the total amount of known
481 header payload lws can cope with, that includes the GET URL, origin
482 etc. Headers not understood by lws are ignored and their payload
483 not included in this.
489 - The configuration-time option MAX_USER_RX_BUFFER has been replaced by a
490 buffer size chosen per-protocol. For compatibility, there's a default
491 of 4096 rx buffer, but user code should set the appropriate size for
494 - LWS_INITIAL_HDR_ALLOC and LWS_ADDITIONAL_HDR_ALLOC are no longer needed
495 and have been removed. There's a new header management scheme that
496 handles them in a much more compact way.
498 - libwebsockets_hangup_on_client() is removed. If you want to close the
499 connection you must do so from the user callback and by returning
502 - libwebsocket_close_and_free_session() is now private to the library code
503 only and not exposed for user code. If you want to close the
504 connection, you must do so from the user callback by returning -1
511 - Cmake project file added, aimed initially at Windows support: this replaces
512 the visual studio project files that were in the tree until now.
514 - CyaSSL now supported in place of OpenSSL (--use-cyassl on configure)
516 - PATH_MAX or MAX_PATH no longer needed
518 - cutomizable frame rx buffer size by protocol
520 - optional TCP keepalive so dead peers can be detected, can be enabled at
521 context-creation time
523 - valgrind-clean: no SSL or CyaSSL: completely clean. With OpenSSL, 88 bytes
524 lost at OpenSSL library init and symptomless reports of uninitialized
525 memory usage... seems to be a known and ignored problem at OpenSSL
527 - By default debug is enabled and the library is built for -O0 -g to faclitate
528 that. Use --disable-debug configure option to build instead with -O4
529 and no -g (debug info), obviously providing best performance and
532 - 1.0 introduced some code to try to not deflate small frames, however this
533 seems to break when confronted with a mixture of frames above and
534 below the threshold, so it's removed. Veto the compression extension
535 in your user callback if you will typically have very small frames.
537 - There are many memory usage improvements, both a reduction in malloc/
538 realloc and architectural changes. A websocket connection now
539 consumes only 296 bytes with SSL or 272 bytes without on x86_64,
540 during header processing an additional 1262 bytes is allocated in a
541 single malloc, but is freed when the websocket connection starts.
542 The RX frame buffer defined by the protocol in user
543 code is also allocated per connection, this represents the largest
544 frame you can receive atomically in that protocol.
546 - On ARM9 build, just http+ws server no extensions or ssl, <12Kbytes .text
547 and 112 bytes per connection (+1328 only during header processing)
550 v1.1-chrome26-firefox18
551 =======================
557 README-test-server | 291 ---
558 README.build | 239 ++
559 README.coding | 138 ++
561 README.test-apps | 272 +++
562 configure.ac | 116 +-
563 lib/Makefile.am | 55 +-
564 lib/base64-decode.c | 5 +-
565 lib/client-handshake.c | 121 +-
566 lib/client-parser.c | 394 ++++
567 lib/client.c | 807 +++++++
568 lib/daemonize.c | 212 ++
569 lib/extension-deflate-frame.c | 132 +-
570 lib/extension-deflate-stream.c | 12 +-
571 lib/extension-x-google-mux.c | 1223 ----------
572 lib/extension-x-google-mux.h | 96 -
573 lib/extension.c | 8 -
574 lib/getifaddrs.c | 271 +++
575 lib/getifaddrs.h | 76 +
576 lib/handshake.c | 582 +----
577 lib/libwebsockets.c | 2493 ++++++---------------
578 lib/libwebsockets.h | 115 +-
580 lib/minilex.c | 440 ++++
581 lib/output.c | 628 ++++++
582 lib/parsers.c | 2016 +++++------------
583 lib/private-libwebsockets.h | 284 +--
584 lib/server-handshake.c | 275 +++
585 lib/server.c | 377 ++++
586 libwebsockets-api-doc.html | 300 +--
588 test-server/Makefile.am | 111 +-
589 test-server/libwebsockets.org-logo.png | Bin 0 -> 7029 bytes
590 test-server/test-client.c | 45 +-
591 test-server/test-echo.c | 330 +++
592 test-server/test-fraggle.c | 20 +-
593 test-server/test-ping.c | 22 +-
594 test-server/test-server-extpoll.c | 554 -----
595 test-server/test-server.c | 349 ++-
596 test-server/test.html | 3 +-
597 win32port/zlib/ZLib.vcxproj | 749 ++++---
598 win32port/zlib/ZLib.vcxproj.filters | 188 +-
599 win32port/zlib/adler32.c | 348 ++-
600 win32port/zlib/compress.c | 160 +-
601 win32port/zlib/crc32.c | 867 ++++----
602 win32port/zlib/crc32.h | 882 ++++----
603 win32port/zlib/deflate.c | 3799 +++++++++++++++-----------------
604 win32port/zlib/deflate.h | 688 +++---
605 win32port/zlib/gzclose.c | 50 +-
606 win32port/zlib/gzguts.h | 325 ++-
607 win32port/zlib/gzlib.c | 1157 +++++-----
608 win32port/zlib/gzread.c | 1242 ++++++-----
609 win32port/zlib/gzwrite.c | 1096 +++++----
610 win32port/zlib/infback.c | 1272 ++++++-----
611 win32port/zlib/inffast.c | 680 +++---
612 win32port/zlib/inffast.h | 22 +-
613 win32port/zlib/inffixed.h | 188 +-
614 win32port/zlib/inflate.c | 2976 +++++++++++++------------
615 win32port/zlib/inflate.h | 244 +-
616 win32port/zlib/inftrees.c | 636 +++---
617 win32port/zlib/inftrees.h | 124 +-
618 win32port/zlib/trees.c | 2468 +++++++++++----------
619 win32port/zlib/trees.h | 256 +--
620 win32port/zlib/uncompr.c | 118 +-
621 win32port/zlib/zconf.h | 934 ++++----
622 win32port/zlib/zlib.h | 3357 ++++++++++++++--------------
623 win32port/zlib/zutil.c | 642 +++---
624 win32port/zlib/zutil.h | 526 ++---
625 69 files changed, 19556 insertions(+), 20145 deletions(-)
630 - libwebsockets_serve_http_file() now takes a context as first argument
632 - libwebsockets_get_peer_addresses() now takes a context and wsi as first
639 - lwsl_...() logging apis, default to stderr but retargetable by user code;
640 may be used also by user code
642 - lws_set_log_level() set which logging apis are able to emit (defaults to
643 notice, warn, err severities), optionally set the emit callback
645 - lwsl_emit_syslog() helper callback emits to syslog
647 - lws_daemonize() helper code that forks the app into a headless daemon
648 properly, maintains a lock file with pid in suitable for sysvinit etc to
651 - LWS_CALLBACK_HTTP_FILE_COMPLETION callback added since http file
652 transfer is now asynchronous (see test server code)
654 - lws_frame_is_binary() from a wsi pointer, let you know if the received
655 data was sent in BINARY mode
661 - libwebsockets_fork_service_loop() - no longer supported (had intractable problems)
662 arrange your code to act from the user callback instead from same
663 process context as the service loop
665 - libwebsockets_broadcast() - use libwebsocket_callback_on_writable[_all_protocol]()
666 instead from same process context as the service loop. See the test apps
669 - x-google-mux() removed until someone wants it
671 - pre -v13 (ancient) protocol support removed
677 - echo test server and client compatible with echo.websocket.org added
679 - many new configure options (see README.build) to reduce footprint of the
680 library to what you actually need, eg, --without-client and
683 - http + websocket server can build to as little as 12K .text for ARM
685 - no more MAX_CLIENTS limitation; adapts to support the max number of fds
686 allowed to the process by ulimit, defaults to 1024 on Fedora and
687 Ubuntu. Use ulimit to control this without needing to configure
688 the library. Code here is smaller and faster.
690 - adaptive ratio of listen socket to connection socket service allows
691 good behaviour under Apache ab test load. Tested with thousands
692 of simultaneous connections
694 - reduction in per-connection memory footprint by moving to a union to hold
695 mutually-exclusive state for the connection
697 - robustness: Out of Memory taken care of for all allocation code now
699 - internal getifaddrs option if your toolchain lacks it (some uclibc)
701 - configurable memory limit for deflate operations
703 - improvements in SSL code nonblocking operation, possible hang solved,
704 some SSL operations broken down into pollable states so there is
705 no library blocking, timeout coverage for SSL_connect
707 - extpoll test server merged into single test server source
709 - robustness: library should deal with all recoverable socket conditions
711 - rx flowcontrol for backpressure notification fixed and implmeneted
712 correctly in the test server
714 - optimal lexical parser added for header processing; all headers in a
715 single 276-byte state table
717 - latency tracking api added (configure --with-latency)
719 - Improved in-tree documentation, REAME.build, README.coding,
720 README.test-apps, changelog
725 v1.0-chrome25-firefox17 (6cd1ea9b005933f)