changelog 27 KB

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