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