blob: f424759e518aee695e0fba7b7d7864d75a6302d7 [file] [log] [blame]
Andy Greena35c86f2013-01-31 10:16:44 +08001Changelog
2---------
3
Andy Greene936c5e2020-07-13 13:21:22 +01004v4.1.0
5======
6
7 - NEW: travis / appveyor / bintray are replaced by Sai
Andy Green63e96992020-09-04 13:42:57 +01008 https://libwebsockets.org/sai/ which for lws currently does 193 builds per
Andy Greene936c5e2020-07-13 13:21:22 +01009 git push on 16 platforms, all self-hosted. The homebrew bash scripts used
10 to select Minimal examples are replaced by CTest. Platforms currently
11 include Fedora/AMD/GCC, Windows/AMD/mingw32, Windows/AMD/mingw64, Android/
12 aarch64/LLVM, esp-idf (on WROVER-KIT and HELTEC physical boards), Fedora/
13 RISCV (on QEMU)/GCC, CentOS8/AMD/GCC, Gentoo/AMD/GCC, Bionic/AMD/GCC,
14 Linkit 7697, Focal/AMD/GCC, Windows (on QEMU)/AMD/MSVC,
15 Focal/aarch64-RPI4/GCC, iOS/aarch64/LLVM and OSX/AMD/LLVM.
16
17 - NEW: The single CMakeLists.txt has been refactored and modernized into smaller
18 CMakeLists.txt in the subdirectory along with the code that is being managed
19 for build by it. Build options are still listed in the top level as before
20 but the new way is much more maintainable.
21
Andy Green63e96992020-09-04 13:42:57 +010022 - NEW: event lib support on Unix is now built into dynamically loaded plugins
23 and brought in at runtime, allowing all of the support to be built in
24 isolation without conflicts, and separately packaged with individual
25 dependencies. See ./READMEs/event-libs.md for details and how to force
26 the old static build into lws method.
27
Andy Greene936c5e2020-07-13 13:21:22 +010028 - NEW: Captive Portal Detection. Lws can determine if the active default
29 route is able to connect to the internet, or is in a captive portal type
30 situation, by trying to connect to a remote server that will respond in an
31 unusual way, like provide a 204.
32
33 - NEW: Secure streams: Support system trust store if it exists
34 Build on Windows
35 Support lws raw socket protocol in SS
36 Support Unix Domain Socket transport
37
38 - NEW: Windows: Support Unix Domain Sockets same as other platforms
39
40 - NEW: Windows: Build using native pthreads, async dns, ipv6 on MSVC
41
42 - NEW: lws_struct: BLOB support
43
44 - NEW: lws_sul: Now provides two sorted timer domains, a default one as
45 before, and another whose scheduled events are capable to wake the system from suspend
46
47 - NEW: System Message Distribution: lws_smd provides a very lightweight way
48 to pass short messages between subsystems both in RTOS type case where the
49 subsystems are all on the lws event loop, and in the case participants are in
50 different processes, using Secure Streams proxying. Participants register a bitmap
51 of message classes they care about; if no particpant cares about a particular message,
52 it is rejected at allocation time for the sender, making it cheap to provide messages
53 speculatively. See lib/system/smd/README.md for full details.
54
55 - NEW: lws_drivers: wrappers for SDK driver abstractions (or actual drivers)
56 See lib/drivers/README.md, example implementations
57 minimal-examples/embedded/esp32/esp-wrover-kit
58 - generic gpio
59 - generic LED (by name) lib/drivers/led/README.md
60 - generic PWM, sophisticated interpolated table
61 sequencers with crossfade
62 - generic button (by name), with debounce and press classification
63 emitting rich SMD click, long-click, double-click,
64 down, repeat, up JSON messages
65 lib/drivers/button/README.md
66 - bitbang i2c on generic gpio (hw support can use same
67 abstract API)
68 - bitbang spi on generic gpio (hw support can use same
69 abstract API)
70 - generic display object, can be wired up to controller
71 drivers that hook up by generic i2c or spi,
72 generic backlight PWM sequencing and
73 blanking timer support
74 - generic settings storage: get and set blobs by name
75 - generic network device: netdev abstract class with
76 WIFI / Ethernet implementations
77 using underlying SDK APIs;
78 generic 80211 Scan managements
79 and credentials handling via
80 lws_settings
81 This is the new way to provide embedded platform
82 functionality that was in the past done like
83 esp32-factory. Unlike the old way, the new way has no
84 native apis in it and can be built on other SDK / SoCs
85 the same.
86
87 - NEW: Security-aware JWS JWT (JSON Web Tokens) apis are provided on top of the existing
88 JOSE / JWS apis. All the common algorithms are available along with some
89 high level apis like lws http cookie -> JWT struct -> lws http cookie.
90
91 - REMOVED: esp32-helper and friends used by esp32-factory now lws_drivers
92 exists
93
94 - REMOVED: generic sessions and friends now JWT is provided
95
Andy Green1289b0a2020-03-04 10:01:28 +000096v4.0.0
97======
98
99 - NEW: Lws is now under the MIT license, see ./LICENSE for details
100
101 - NEW: GLIB native event loop support, lws + gtk example
102
103 - NEW: native lws MQTT client... supports client stream binding like h2 when
104 multiple logical connections are going to the same endpoint over MQTT, they
105 transparently and independently share the one connection + tls tunnel
106
107 - NEW: "Secure Streams"... if you are making a device with client connections
108 to the internet or cloud, this allows separation of the communications
109 policy (endpoints, tls cert validation, protocols, etc) from the code, with
110 the goal you can combine streams, change protocols and cloud provision, and
111 reflect that in the device's JSON policy document without having to change
112 any code.
113
114 - NEW: lws_system: New lightweight and efficient Asynchronous DNS resolver
115 implementation for both A and AAAA records, supports recursive (without
116 recursion in code) lookups, caching, and getaddrinfo() compatible results
117 scheme (from cache directly without per-consumer allocation). Able to
118 perform DNS lookups without introducing latency in the event loop.
119
120 - NEW: lws_system: ntpclient implementation with interface for setting system
121 time via lws_system ops
122
123 - NEW: lws_system: dhcpclient implementation
124
125 - NEW: Connection validity tracking, autoproduce PING/PONG for protocols that
126 support it if not informed that the connection has passed data in both
127 directions recently enough
128
129 - NEW: lws_retry: standardized exponential backoff and retry timing based
130 around backoff table and lws_sul
131
132 - NEW: there are official public helpers for unaligned de/serialization of all
133 common types, see eh, lws_ser_wu16be() in include/libwebsockets/lws-misc.h
134
135 - NEW: lws_tls_client_vhost_extra_cert_mem() api allows attaching extra certs
136 to a client vhost from DER in memory
137
138 - NEW: lws_system: generic blobs support passing auth tokens, per-connection
139 client certs etc from platform into lws
140
141 - NEW: public helpers to consume and produce ipv4/6 addresses in a clean way,
142 along with lws_sockaddr46 type now public. See eg, lws_sockaddr46-based
143 lws_sa46_parse_numeric_address(), lws_write_numeric_address()
144 in include/libwebsockets/lws-network-helper.h
145
146 - Improved client redirect handling, h2 compatibility
147
148 - NEW: lwsac: additional features for constant folding support (strings that
149 already are in the lwsac can be pointed to without copying again), backfill
150 (look for gaps in previous chunks that could take a new use size), and
151 lwsac_extend() so last use() can attempt to use more unallocated chunk space
152
153 - NEW: lws_humanize: apis for reporting scalar quanties like 1234 as "1.234KB"
154 with the scaled symbol strings passed in by caller
155
156 - NEW: freertos: support lws_cancel_service() by using UDP pair bound to lo,
157 since it doesn't have logical pipes
158
159 - NEW: "esp32" plat, which implemented freertos plat compatibility on esp32, is
160 renamed to "freertos" plat, targeting esp32 and other freertos platforms
161
162 - NEW: base64 has an additional api supporting stateful decode, where the input
163 is not all in the same place at the same time and can be processed
164 incrementally
165
166 - NEW: lws ws proxy: support RFC8441
167
168 - NEW: lws_spawn_piped apis: generic support for vforking a process with child
169 wsis attached to its stdin, stdout and stderr via pipes. When processes are
170 reaped, a specified callback is triggered. Currently Linux + OSX.
171
172 - NEW: lws_fsmount apis: Linux-only overlayfs mount and unmount management for
173 aggregating read-only layers with disposable, changeable upper layer fs
174
175 - Improvements for RTOS / small build case bring the footprint of lws v4 below
176 that of v3.1 on ARM
177
178 - lws_tokenize: flag specifying # should mark rest of line as comment
179
180 - NEW: minimal example for integrating libasound / alsa via raw file
181
182 - lws_struct: sqlite and json / lejp translation now usable
183
Andy Green26319662019-08-14 10:44:14 +0100184
Andy Green51cd9252019-08-14 09:22:50 +0100185v3.2.0
186======
187
188 - This is the last planned release under LGPLv2+SLE. It's not planned to be
189 maintained like previous releases, please switch to master for the latest
190 stuff or continue to use v3.1-stable until the next release under the
191 new MIT license.
192
193 - NEW: completely refactored scheduler with a unified, sorted us-resolution
194 linked-list implementation. All polled checks like timeout are migrated
195 to use the new timers, which also work on the event lib implementations.
196 Faster operation, us-resolution timeouts and generic scheduled callbacks
197 from the event loop.
198
199 - NEW: lws_dsh specialized buffer memory allocator that can borrow space
200 from other cooperating buffers on the same list.
201
202 - NEW: lws_sequencer allows managing multi-connection processes and
203 retries
204
205 - NEW: memory buffer cert support
206
207 - NEW: LWS_WITH_NETWORK in CMake... can be configured without any network-
208 related code at all
209
210 - NEW: builds on QNX 6.5 and SmartOS
211
212 - NEW: JOSE / JWK / JWS / JWE support, for all common ciphers and algs,
213 works on OpenSSL and mbedtls backends
214
215 - NEW: gencrypto now has genaes and genec in addition to genrsa, works
216 on OpenSSL and mbedtls backends
217
218 - NEW: raw_proxy role
219
220 - NEW: Basic Auth works on ws connections
221
Andy Greeneda102e2018-12-13 20:05:12 +0800222 - CHANGE: REMOVED: LWS_WITH_GENRSA, LWS_WITH_GENHASH, LWS_WITH_GENEC,
223 LWS_WITH_GENAES have all been removed and combined into LWS_WITH_GENCRYPTO
224
225 - CHANGE: REMOVED: LWS_WITH_JWS, LWS_WITH_JWE have been removed and combined
226 into LWS_WITH_JOSE
227
Andy Greenac032542018-11-16 09:10:41 +0800228v3.1.0
229======
230
Andy Green502130d2018-05-10 16:13:26 +0800231 - CHANGE: REMOVED: lws_client_connect() and lws_client_connect_extended()
232 compatibility apis for lws_client_connect_via_info() have been marked as
233 deprecated for several versions and are now removed. Use
Andy Greenac032542018-11-16 09:10:41 +0800234 lws_client_connect_via_info() directly instead.
Andy Green502130d2018-05-10 16:13:26 +0800235
Andy Greenac032542018-11-16 09:10:41 +0800236 - CHANGE: CMAKE:
237 - LWS_WITH_HTTP2: now defaults ON
238
Andy Greend9f982a2018-11-19 07:40:47 +0800239 - CHANGE: Minimal examples updated to use Content Security Policy best
240 practices, using
241 `LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE` vhost
Andy Green9bed6d62018-11-23 08:47:56 +0800242 option flag and disabling of inline style and scripts. A side-effect of
243 this is that buffers used to marshal headers have to be prepared to take
244 more content than previously... LWS_RECOMMENDED_MIN_HEADER_SPACE (2048
245 currently) is available for user (and internal) use to logically tie the
246 buffer size to this usecase (and follow future increases).
Andy Greend9f982a2018-11-19 07:40:47 +0800247
Andy Greenac032542018-11-16 09:10:41 +0800248 - NEW: CMAKE
249 - LWS_FOR_GITOHASHI: sets various cmake options suitable for gitohashi
250 - LWS_WITH_ASAN: for Linux, enable build with ASAN
251
252 Don't forget LWS_WITH_DISTRO_RECOMMENDED, which enables a wide range of lws
253 options suitable for a distro build of the library.
254
255 - NEW: lws threadpool - lightweight pool of pthreads integrated to lws wsi, with
256 all synchronization to event loop handled internally, queue for excess tasks
257 [threadpool docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/threadpool)
258 [threadpool minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/ws-server/minimal-ws-server-threadpool)
259 Cmake config: `-DLWS_WITH_THREADPOOL=1`
260
261 - NEW: libdbus support integrated on lws event loop
262 [lws dbus docs](https://libwebsockets.org/git/libwebsockets/tree/lib/roles/dbus)
263 [lws dbus client minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-client)
264 [lws dbus server minimal examples](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/dbus-server)
265 Cmake config: `-DLWS_ROLE_DBUS=1`
266
267 - NEW: lws allocated chunks (lwsac) - helpers for optimized mass allocation of small
268 objects inside a few larger malloc chunks... if you need to allocate a lot of
269 inter-related structs for a limited time, this removes per-struct allocation
270 library overhead completely and removes the need for any destruction handling
271 [lwsac docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/lwsac)
272 [lwsac minimal example](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lwsac)
273 Cmake Config: `-DLWS_WITH_LWSAC=1`
274
275 - NEW: lws tokenizer - helper api for robustly tokenizing your own strings without
276 allocating or adding complexity. Configurable by flags for common delimiter
277 sets and comma-separated-lists in the tokenizer. Detects and reports syntax
278 errors.
279 [lws_tokenize docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-tokenize.h)
280 [lws_tokenize minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-lws_tokenize)
281
282 - NEW: lws full-text search - optimized trie generation, serialization,
283 autocomplete suggestion generation and instant global search support extensible
284 to huge corpuses of UTF-8 text while remaining super lightweight on resources.
285 [full-text search docs](https://libwebsockets.org/git/libwebsockets/tree/lib/misc/fts)
286 [full-text search minimal example / api test](https://libwebsockets.org/git/libwebsockets/tree/minimal-examples/api-tests/api-test-fts)
287 [demo](https://libwebsockets.org/ftsdemo/)
288 [demo sources](https://libwebsockets.org/git/libwebsockets/tree/plugins/protocol_fulltext_demo.c)
289 Cmake config: `-DLWS_WITH_FTS=1 -DLWS_WITH_LWSAC=1`
290
291 - NEW: gzip + brotli http server-side compression - h1 and h2 automatic advertising
292 of server compression and application to files with mimetypes "text/*",
293 "application/javascript" and "image/svg.xml".
294 Cmake config: `-DLWS_WITH_HTTP_STREAM_COMPRESSION=1`, `-DLWS_WITH_HTTP_BROTLI=1`
295
296 - NEW: managed disk cache - API for managing a directory containing cached files
297 with hashed names, and automatic deletion of LRU files once the cache is
298 above a given limit.
299 [lws diskcache docs](https://libwebsockets.org/git/libwebsockets/tree/include/libwebsockets/lws-diskcache.h)
300 Cmake config: `-DLWS_WITH_DISKCACHE=1`
301
302 - NEW: http reverse proxy - lws mounts support proxying h1 or h2 requests to
303 a local or remote IP, or unix domain socket over h1. This allows microservice
304 type architectures where parts of the common URL space are actually handled
305 by external processes which may be remote or on the same machine.
306 [lws gitohashi serving](https://libwebsockets.org/git/) is handled this way.
307 CMake config: `-DLWS_WITH_HTTP_PROXY=1`
308
309 - NEW: lws_buflist - internally several types of ad-hoc malloc'd buffer have
310 been replaced by a new, exported api `struct lws_buflist`. This allows
311 multiple buffers to be chained and drawn down in strict FIFO order.
312
313 - NEW: In the case of h1 upgrade, the connection header is checked to contain
314 "upgrade". The vhost flag LWS_SERVER_OPTION_VHOST_UPG_STRICT_HOST_CHECK
315 also causes the Host: header to be confirmed to match the vhost name and
316 listen port.
Andy Greenc027c3d2018-11-21 06:46:23 +0800317
318 - NEW: If no 404 redirect for `lws_return_http_status()` is specified for the vhost,
319 the status page produced will try to bring in a stylesheet `/error.css`. This allows
320 you to produce styled 404 or other error pages with logos, graphics etc. See
321 https://libwebsockets.org/git/badrepo for an example of what you can do with it.
Andy Green502130d2018-05-10 16:13:26 +0800322
Andy Green1c08a962018-05-04 13:27:12 +0800323v3.0.0
324======
325
326 - CHANGE: Clients used to call LWS_CALLBACK_CLOSED same as servers...
327 LWS_CALLBACK_CLIENT_CLOSED has been introduced and is called for clients
328 now.
329
330 - CHANGE: LWS_CALLBACK_CLIENT_CONNECTION_ERROR used to only be directed at
331 protocols[0]. However in many cases, the protocol to bind to was provided
332 at client connection info time and the wsi bound accordingly. In those
333 cases, CONNECTION_ERROR is directed at the bound protocol, not protcols[0]
334 any more.
335
336 - CHANGE: CMAKE: the following cmake defaults have changed with this version:
337
338 - LWS_WITH_ZIP_FOPS: now defaults OFF
339 - LWS_WITH_RANGES: now defaults OFF
340 - LWS_WITH_ZLIB: now defaults OFF
341 - LWS_WITHOUT_EXTENSIONS: now defaults ON
342
343 - CHANGE: REMOVED: lws_alloc_vfs_file() (read a file to malloc buffer)
344
345 - CHANGE: REMOVED: lws_read() (no longer useful outside of lws internals)
346
347 - CHANGE: REMOVED: ESP8266... ESP32 is now within the same price range and much
348 more performant
349
350 - CHANGE: soname bump... don't forget to `ldconfig`
351
352 - NEW: all event libraries support "foreign" loop integration where lws itself
353 if just a temporary user of the loop unrelated to the actual loop lifecycle.
354
355 See `minimal-http-server-eventlib-foreign` for example code demonstrating
356 this for all the event libraries.
357
358 Internal loop in lws is also supported and demonstrated by
359 `minimal-http-server-eventlib`.
360
361 - NEW: ws-over-h2 support. This is a new RFC-on-the-way supported by Chrome
362 and shortly firefox that allows ws connections to be multiplexed back to the
363 server on the same tcp + tls wrapper h2 connection that the html and scripts
364 came in on. This is hugely faster that discrete connections.
365
366 - NEW: UDP socket adoption and related event callbacks
367
368 - NEW: Multi-client connection binding, queuing and pipelining support.
369
370 Lws detects multiple client connections to the same server and port, and
371 optimizes how it handles them according to the server type and provided
372 flags. For http/1.0, all occur with individual parallel connections. For
373 http/1.1, you can enable keepalive pipelining, so the connections occur
374 sequentially on a single network connection. For http/2, they all occur
375 as parallel streams within a single h2 network connection.
376
377 See minimal-http-client-multi for example code.
378
379 - NEW: High resolution timer API for wsi, get a callback on your wsi with
380 LWS_CALLBACK_TIMER, set and reset the timer with lws_set_timer_usecs(wsi, us)
381 Actual resolution depends on event backend. Works with all backends, poll,
382 libuv, libevent, and libev.
383
384 - NEW: Protocols can arrange vhost-protocol instance specific callbacks with
385 second resolution using `lws_timed_callback_vh_protocol()`
386
387 - NEW: ACME client plugin for self-service TLS certificates
388
389 - NEW: RFC7517 JSON Web Keys RFC7638 JWK thumbprint, and RFC7515 JSON Web
390 signatures support
391
392 - NEW: lws_cancel_service() now provides a generic way to synchronize events
393 from other threads, which appear as a LWS_CALLBACK_EVENT_WAIT_CANCELLED
394 callback on all protocols. This is compatible with all the event libraries.
395
396 - NEW: support BSD poll() where changes to the poll wait while waiting are
397 undone.
398
399 - NEW: Introduce generic hash, hmac and RSA apis that operate the same
400 regardless of OpenSSL or mbedTLS tls backend
401
402 - NEW: Introduce X509 element query api that works the same regardless of
403 OpenSSL or mbedTLS tls backend
404
405 - NEW: Introduce over 30 "minimal examples" in ./minimal-examples... these
406 replace most of the old test servers
407
408 - test-echo -> minimal-ws-server-echo and minimal-ws-client-echo
409
410 - test-server-libuv / -libevent / -libev ->
411 minimal-https-server-eventlib / -eventlib-foreign / -eventlib-demos
412
413 - test-server-v2.0 -> folded into all the minimal servers
414
415 - test-server direct http serving -> minimal-http-server-dynamic
416
417 The minimal examples allow individual standalone build using their own
418 small CMakeLists.txt.
419
420 - NEW: lws now detects any back-to-back writes that did not go through the
421 event loop inbetween and reports them. This will flag any possibility of
422 failure rather than wait until the problem happens.
423
424 - NEW: CMake has LWS_WITH_DISTRO_RECOMMENDED to select features that are
425 appropriate for distros
426
427 - NEW: Optional vhost URL `error_document_404` if given causes a redirect there
428 instead of serve the default 404 page.
429
430 - NEW: lws_strncpy() wrapper guarantees NUL in copied string even if it was
431 truncated to fit.
432
433 - NEW: for client connections, local protocol binding name can be separated
434 from the ws subprotocol name if needed, using .local_protocol_name
435
436 - NEW: Automatic detection of time discontiguities
437
438 - NEW: Applies TCP_USER_TIMEOUT for Linux tcp keepalive where available
439
440 - QA: 1600 tests run on each commit in Travis CI, including almost all
441 Autobahn in client and server mode, various h2load tests, h2spec, attack.sh
442 the minimal example selftests and others.
443
444 - QA: fix small warnings introduced on gcc8.x (eg, Fedora 28)
445
446 - QA: Add most of -Wextra on gcc (-Wsign-compare, -Wignored-qualifiers,
447 -Wtype-limits, -Wuninitialized)
448
449 - QA: clean out warnings on windows
450
451 - QA: pass all 146 h2spec tests now on strict
452
453 - QA: introduce 35 selftests that operate different minimal examples against
454 each other and confirm the results.
455
456 - QA: LWS_WITH_MINIMAL_EXAMPLES allows mass build of all relevant minimal-
457 examples with the LWS build, for CI and to make all the example binaries
458 available from the lws build dir ./bin
459
460 - REFACTOR: the lws source directory layout in ./lib has been radically
461 improved, and there are now README.md files in selected subdirs with extra
462 documentation of interest to people working on lws itself.
463
464 - REFACTOR: pipelined transactions return to the event loop before starting the
465 next part.
466
467 - REFACTOR: TLS: replace all TLS library constants with generic LWS ones and
468 adapt all the TLS library code to translate to these common ones.
469
470 Isolated all the tls-related private stuff in `./lib/tls/private.h`, and all
471 the mbedTLS stuff in `./lib/tls/mbedtls` + openSSL stuff in
472 `./lib/tls/openssl`
473
474 - REFACTOR: the various kinds of wsi possible with lws have been extracted
475 from the main code and isolated into "roles" in `./lib/roles` which
476 communicate with the core code via an ops struct. Everything related to
477 ah is migrated to the http role.
478
479 wsi modes are eliminated and replaced by the ops pointer for the role the
480 wsi is performing. Generic states for wsi are available to control the
481 lifecycle using core code.
482
483 Adding new "roles" is now much easier with the changes and ops struct to
484 plug into.
485
486 - REFACTOR: reduce four different kinds of buffer management in lws into a
487 generic scatter-gather struct lws_buflist.
488
489 - REFACTOR: close notifications go through event loop
490
491
Andy Greenfcf5b2c2017-10-16 20:09:58 +0800492v2.4.0
493======
494
495 - HTTP/2 server support is now mature and usable! LWS_WITH_HTTP2=1 enables it.
496 Uses ALPN to serve HTTP/2, HTTP/1 and ws[s] connections all from the same
497 listen port seamlessly. (Requires ALPN-capable OpenSSL 1.1 or mbedTLS).
498
499 - LWS_WITH_MBEDTLS=1 at CMake now builds and works against mbedTLS instead of
500 OpenSSL. Most things work identically, although on common targets where
501 OpenSSL has acceleration, mbedTLS is many times slower in operation. However
502 it is a lot smaller codewise.
503
504 - Generic hash apis introduced that work the same on mbedTLS or OpenSSL backend
505
506 - LWS_WITH_PEER_LIMITS tracks IPs across all vhosts and allows restrictions on
507 both the number of simultaneous connections and wsi in use for any single IP
508
509 - lws_ring apis provide a generic single- or multi-tail ringbuffer... mirror
510 protocol now uses this. Features include ring elements may be sized to fit
511 structs in the ringbuffer, callback when no tail any longer needs an element
512 and it can be deleted, and zerocopy options to write new members directly
513 into the ringbuffer, and use the ringbuffer element by address too.
514
515 - abstract ssh 2 server plugin included, with both plugin and standalone
516 demos provided. You can bind the plugin to a vhost and also serve full-
517 strength ssh from the vhost. IO from the ssh server is controlled by an
518 "ops" struct of callbacks for tx, rx, auth etc.
519
520 - Many fixes, cleanups, source refactors and other improvements.
521
522
Andy Greene6bd6292017-07-28 14:13:42 +0800523v2.3.0
524======
525
526 - ESP32 OpenSSL support for client and server
527
528 - ESP32 4 x WLAN credential slots may be configured
529
530 - Libevent event loop support
531
532 - SOCKS5 proxy support
533
534 - lws_meta protocol for websocket connection multiplexing
535
536 - lws_vhost_destroy() added... allows dynamic removal of listening
537 vhosts. Vhosts with shared listen sockets adopt the listen socket
538 automatically if the owner is destroyed.
539
540 - IPv6 on Windows
541
542 - Improved CGI handling suitable for general CGI scripting, eg, PHP
543
544 - Convert even the "old style" test servers to use statically included
545 plugin sources
546
547 - LWS_WITH_STATS cmake option dumps resource usage and timing information
548 every few seconds to debug log, including latency information about
549 delay from asking for writeable callback to getting it
550
551 - Large (> 2GB) files may be served
552
553 - LWS_WITH_HTTP_PROXY Cmake option adds proxying mounts
554
555 - Workaround for libev build by disabling -Werror on the test app
556
557 - HTTP2 support disabled since no way to serve websockets on it
558
559
Andy Green6be573f2017-03-06 15:35:45 +0800560v2.2.0
561======
562
563Major new features
564
565 - A mount can be protected by Basic Auth... in lwsws it looks like this
566
567 ```
568{
569 "mountpoint": "/basic-auth",
570 "origin": "file://_lws_ddir_/libwebsockets-test-server/private",
571 "basic-auth": "/var/www/balogins-private"
572}
573```
574
575The text file named in `basic-auth` contains user:password information
576one per line.
577
578See README.lwsws.md for more information.
579
580 - RFC7233 RANGES support in lws server... both single and multipart.
581 This allows seeking for multimedia file serving and download resume.
582 It's enabled by default but can be disabled by CMake option.
583
584 - On Linux, lwsws can reload configuration without dropping ongoing
585 connections, when sent a SIGHUP. The old configuration drops its
586 listen sockets so the new configuration can listen on them.
587 New connections connect to the server instance with the new
588 configuration. When all old connections eventually close, the old
589 instance automatically exits. This is equivalent to
590 `systemctl reload apache`
591
592 - New `adopt` api allow adoption including SSL negotiation and
593 for raw sockets and file descriptors.
594
595 - Chunked transfer encoding supported for client and server
596
597 - Adaptations to allow operations inside OPTEE Secure World
598
599 - ESP32 initial port - able to do all test server functions. See
600 README.build.md
601
602 - Serving gzipped files from inside a ZIP file is supported... this
603 includes directly serving the gzipped content if the client
604 indicated it could accept it (ie, almost all browsers) saving
605 bandwidth and time. For clients that can't accept it, lws
606 automatically decompresses and serves the content in memory-
607 efficient chunks. Only a few hundred bytes of heap are needed
608 to serve any size file from inside the zip. See README.coding.md
609
610 - RAW file descriptors may now be adopted into the lws event loop,
611 independent of event backend (including poll service).
612 See README.coding.md
613
614 - RAW server socket descriptors may now be enabled on the vhost if
615 the first thing sent on the connection is not a valid http method.
616 The user code can associate these with a specific protocol per
617 vhost, and RAW-specific callbacks appear there for creation, rx,
618 writable and close. See libwebsockets-test-server-v2.0 for an example.
619 See README.coding.md
620
621 - RAW client connections are now possible using the method "RAW".
622 After connection, the socket is associated to the protocol
623 named in the client connection info and RAW-specific callbacks
624 appear there for creation, rx, writable and close.
625 See libwebsockets-test-client (with raw://) for an example.
626 See README.coding.md
627
628
Andy Greenaef3dc42016-05-06 07:45:19 +0800629(for earlier changelogs, see the tagged releases)