aboutsummaryrefslogtreecommitdiff
path: root/cmake
AgeCommit message (Collapse)Author
2020-03-19mbedtls: support older versions without net_sockets.hAndy Green
2020-03-04client: secure streamsAndy Green
Secure Streams is an optional layer on top of lws that separates policy like endpoint selection and tls cert validation into a device JSON policy document. Code that wants to open a client connection just specifies a streamtype name, and no longer deals with details like the endpoint, the protocol (!) or anything else other than payloads and optionally generic metadata; the JSON policy contains all the details for each streamtype. h1, h2, ws and mqtt client connections are supported. Logical secure streams outlive any particular connection and supports "nailed-up" connectivity regardless of underlying connection stability.
2020-03-04client: MQTTSakthi Kannan
Adds client support for MQTT QoS0 and QoS1, compatible with AWS IoT Supports stream binding where independent client connections to the same endpoint can mux on a single tcp + tls connection with topic routing managed internally.
2020-03-04rtos diet: http: remove headers at buildtime according to configAndy Green
Headers related to ws or h2 are now elided if the ws or h2 role is not enabled for build. In addition, a new build-time option LWS_WITH_HTTP_UNCOMMON_HEADERS on by default allows removal of less-common http headers to shrink the parser footprint. Minilex is adapted to produce 8 different versions of the lex table, chosen at build-time according to which headers are included in the build. If you don't need the unusual headers, or aren't using h2 or ws, this chops down the size of the ah and the rodata needed to hold the parsing table from 87 strings / pointers to 49, and the parsing table from 1177 to 696 bytes.
2020-03-04rtos diet: make basic auth support a config option on by defaultAndy Green
Remove wrapper content for < tls v1.2
2020-03-04rtos diet: make raw_file role optionalAndy Green
2020-03-01ev: check for IOURINGOlivier Langlois
2020-02-21lws_fsmount: overlayfs apisAndy Green
2020-02-21lws_spawn_piped: break out from cgiAndy Green
The vfork optimized spawn, stdxxx and terminal handling in the cgi implementation is quite mature and sophisticated, and useful for other things unrelated to cgi. Break it out into its own public api under LWS_WITH_SPAWN, off by default. Expand it so the parent wsi is optional, and the role and protocol bindings for stdxxx pipes can be set. Allow optional sul timeout and external lws_dll2 owner for extant children. Remove inline style from minimal http-server-cgi
2020-02-21unix plat: use eventfd in place of pipe where possibleOliver Langlois
From eventfd man page: Applications can use an eventfd file descriptor instead of a pipe (see pipe(2)) in all cases where a pipe is used simply to signal events. The kernel overhead of an eventfd file descriptor is much lower than that of a pipe, and only one file descriptor is required (versus the two required for a pipe).
2020-02-21ev: log aio backendOliver Langlois
2020-02-21event-lib-glibAndy Green
Adds support for glib event library.
2020-01-05cleaningAndy Green
2019-12-06fail paths: deregister notifier and be sure adopt returns NULLAndy Green
Notifiers may also have scoped lifecycles, support deregister
2019-10-12lws_system: dhcpclientAndy Green
Generic lws_system IPv4 DHCP client - netif and route control via lib/plat apis - linux plat pieces implemented - Uses raw ip socket for UDP broadcast and rx - security-aware - usual stuff plus up to 4 x dns server If it's enabled for build, it holds the system state at DHCP until at least one registered interface has acquired a set of IP / mask / router / DNS server It uses PF_PACKET which is Linux-only atm. But those areas are isolated into plat code. TODOs - lease timing and reacquire - plat pieces for other than Linux
2019-10-12LWS_WITH_UDPAndy Green
2019-10-10lws_system: ntpclientAndy Green
2019-09-22detailed latency statsAndy Green
Remove LWS_LATENCY. Add the option LWS_WITH_DETAILED_LATENCY, allowing lws to collect very detailed information on every read and write, and allow the user code to provide a callback to process events.
2019-09-19asynchronous dns for ipv4 and ipv6Andy Green
This adds the option to have lws do its own dns resolution on the event loop, without blocking. Existing implementations get the name resolution done by the libc, which is blocking. In the case you are opening client connections but need to carefully manage latency, another connection opening and doing the name resolution becomes a big problem. Currently it supports - ipv4 / A records - ipv6 / AAAA records - ipv4-over-ipv6 ::ffff:1.2.3.4 A record promotion for ipv6 - only one server supported over UDP :53 - nameserver discovery on linux, windows, freertos It also has some nice advantages - lws-style paranoid response parsing - random unique tid generation to increase difficulty of poisoning - it's really integrated with the lws event loop, it does not spawn threads or use the libc resolver, and of course no blocking at all - platform-specific server address capturing (from /etc/resolv.conf on linux, windows apis on windows) - it has LRU caching - piggybacking (multiple requests before the first completes go on a list on the first request, not spawn multiple requests) - observes TTL in cache - TTL and timeout use lws_sul timers on the event loop - ipv6 pieces only built if cmake LWS_IPV6 enabled
2019-08-26freertos: rename esp32 plat to freertosAndy Green
2019-08-26debloat: remove things from being built by default that should be conditionalAndy Green
2019-08-26clean: internally use LWS_WITH_CLIENT and _SERVERAndy Green
Remove some more things in LWS_WITH_SERVER=0 case
2019-08-26client: make external http proxying optionalAndy Green
Add LWS_CLIENT_HTTP_PROXYING on by default. Removing it saves a few hundred bytes of code and 128 bytes per vhost in heap.
2019-08-19client: do client stash in a single allocAndy Green
Improve the code around stash, getting rid of the strdups for a net code reduction. Remove the special destroy helper for stash since it becomes a one-liner. Trade several stack allocs in the client reset function for a single sized brief heap alloc to reduce peak stack alloc by around 700 bytes.
2019-08-12external poll: add default-off cmake optionAndy Green
External poll support generates a lot of messages on a busy system for no value unless you're one of the few people using it. It's not recommended for new users and is there for backwards compatibility. Make it not built by default and selectable by cmake option.
2019-08-09sul: all timed objects use a single pt sul listAndy Green
wsi timeout, wsi hrtimer, sequencer timeout and vh-protocol timer all now participate on a single sorted us list. The whole idea of polling wakes is thrown out, poll waits ignore the timeout field and always use infinite timeouts. Introduce a public api that can schedule its own callback from the event loop with us resolution (usually ms is all the platform can do). Upgrade timeouts and sequencer timeouts to also be able to use us resolution. Introduce a prepared fakewsi in the pt, so we don't have to allocate one on the heap when we need it. Directly handle vh-protocol timer if LWS_MAX_SMP == 1
2019-08-09seq: LWS_WITH_SEQUENCER default-onAndy Green
force off if NO_NETWORK (which is tested in travis)
2019-08-08unify us sorted waitsAndy Green
There are quite a few linked-lists of things that want events after some period. This introduces a type binding an lws_dll2 for the list and a lws_usec_t for the duration. The wsi timeouts, the hrtimer and the sequencer timeouts are converted to use these, also in the common event wait calculation.
2019-08-08lws_dll: upgrade all instances to lws_dll2Andy Green
lws_dll2 removes the downsides of lws_dll and adds new features like a running member count and explicit owner type... it's cleaner and more robust (eg, nodes know their owner, so they can casually switch between list owners and remove themselves without the code knowing the owner). This deprecates lws_dll, but since it's public it allows it to continue to be built for 4.0 release if you give cmake LWS_WITH_DEPRECATED_LWS_DLL. All remaining internal users of lws_dll are migrated to lws_dll2.
2019-08-01solve complilation errors on vs2008hjfbswb
replace snprintf with lws_snprintf
2019-08-01solve compilation problems on vs2012hjfbswb
2019-07-09boringssl: deal with loss of EVP_PKEY_new_mac_keyAndy Green
Rewrite HMAC stuff to use HMAC_ apis instead of EVP Bit trickly since modern OpenSSL has opaque HMAC_CTX and older OpenSSL does not have any apis to allocate and free it. Add another cmake check for the allocation api to decide what to do.
2019-07-09boringssl: adapt to missing AES modesAndy Green
2019-07-03cmake: miniz: add as optionAndy Green
2019-06-26abstract: allow completely generic instantiation and destructionAndy Green
2019-05-30Purge LWS_HAVE_BZEROOrgad Shaneh
All the bzero calls were removed in 09fe212432bb3d878cc73ca4355e69a74ea2274b.
2019-05-06generic-sessions updateAndy Green
Generic sessions has been overdue some love to align it with the progress in the rest of lws. 1) Strict Content Security Policy 2) http2 compatibility 3) fixes and additions for use in a separate process via unix domain socket 4) work on ws and http proxying in lws 5) add minimal example
2019-04-06lws_structAndy Green
lws_struct JSON + sqlite3 serializer and deserializer See READMEs/README.lws_struct.md
2019-03-20openssl3: handle EC_POINT_get_affine_coordinates api changeAndy Green
2019-03-16glibc: if malloc_trim() exists, call it periodicallyAndy Green
2019-03-14lws_dir: wrap dir scanning backend and convert lejp-confAndy Green
We use POSIX dir scanning apis normally, but for windows, we require libuv to do it for us. Formalize that into a wrapper lws_dir() that hides the backend code. Make it configurable, ON by default and forced on with lejp-conf that depends on it.
2019-03-10ah: custom headers for h1Andy Green
Until now lws only parses headers it knows at build-time from its prebuilt lexical analyzer. This adds an on-by-default cmake option and a couple of apis to also store and query "custom", ie, unknown-to-lws headers. A minimal example is also provided. At the moment it only works on h1, h2 support needs improvements to the hpack implementation. Since it bloats ah memory usage compared to without it if custom headers are present, the related code and ah footprint can be disabled with the cmake option LWS_WITH_CUSTOM_HEADERS, but it's on by default normally. ESP32 platform disables it. https://github.com/warmcat/libwebsockets/pull/1499
2019-01-13LWS_WITH_NETWORK: cmake option for no network codeAndy Green
2019-01-11x509-warning-fixesAndy Green
2019-01-11qnx: qnx6.5 compatibilitypblemel
2019-01-11mbedtls: finer-grained enable checks and OP-TEEAndy Green
2018-12-27jweAndy Green
2018-12-27genec: generic ECDH crypto layerAndy Green
!!! WIP This implements the "genec" layer wrapping mbedtls + openssl ECDH support. API tests are added for the parts that are implemented so far. Stuff related to ec at all, like keys, are prefixed lws_genec_. Stuff specific to ECDH are prefixed lws_genecdh_.
2018-12-27genaes: generic AES layer independent of tls libraryAndy Green
Although RSA can be used directly for signing / JWS on large chunks of data since it's only operating on the hash, when JWE support arrives, which allows bulk encryption, it's going to be mandatory to support secondary AES ciphers to use on the bulk data. This adds generic support for all AES modes that OpenSSL and mbedTLS have in common, works on both mbedTLS and OpenSSL the same, and adds unit tests for each mode in api-test-gencrypto, to run in CI.
2018-12-27JOSE: refactor and prepare for JWEAndy Green
Until now the JOSE pieces only had enough support for ACME. This patch improves the JWK parsing to prepare for more complete support and for adding JWE, genaes and genec in later patches.