1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-16 00:00:07 +01:00
No description
Find a file
Jakob Szumacher 503bb8f8c9 client: LCCSCF_ALLOW_INSECURE
AG add options the minimal http client related to this
2019-09-22 09:35:07 -07:00
cmake detailed latency stats 2019-09-22 03:06:59 -07:00
contrib cmake cross: non-bash doesn't deal with quoted options correctly 2019-03-10 08:02:02 +08:00
doc-assets detailed latency stats 2019-09-22 03:06:59 -07:00
include client: LCCSCF_ALLOW_INSECURE 2019-09-22 09:35:07 -07:00
lib client: LCCSCF_ALLOW_INSECURE 2019-09-22 09:35:07 -07:00
lwsws cc0: align dedication to CC0 FAQ recommended format 2019-05-02 09:29:01 +01:00
minimal-examples client: LCCSCF_ALLOW_INSECURE 2019-09-22 09:35:07 -07:00
plugin-standalone cc0: align dedication to CC0 FAQ recommended format 2019-05-02 09:29:01 +01:00
plugins server-status: still produce valid json if files cant be opened 2019-09-22 03:08:36 -07:00
READMEs h2: unify immortal stream tracking across SSE and ws substreams 2019-09-22 03:08:36 -07:00
scripts client: improve redirect 2019-09-22 03:07:57 -07:00
test-apps clean: internally use LWS_WITH_CLIENT and _SERVER 2019-08-26 09:58:57 +01:00
win32port pmd: split ebufs to track in and out 2019-05-06 07:31:32 +01:00
.gitignore rtos: clean warnings where uint32_t is an unsigned long 2019-06-07 11:11:46 +01:00
.mailmap mailmap 2018-08-14 08:00:30 +08:00
.travis.yml asynchronous dns for ipv4 and ipv6 2019-09-19 06:54:53 +01:00
appveyor.yml appveyor: add JOSE target 2019-03-15 15:28:30 +08:00
changelog license: switch LGPLv2.1+SLE parts to MIT 2019-08-14 10:44:38 +01:00
CMakeLists.txt detailed latency stats 2019-09-22 03:06:59 -07:00
component.mk Fixes to track updates in esp-idf 2018-06-20 16:41:28 +08:00
Kconfig esp32: enforce ssl nonblocking 2017-04-03 14:09:37 +08:00
libwebsockets.dox doxygen: cleanup and add recent includes 2019-09-22 09:35:07 -07:00
LICENSE asynchronous dns for ipv4 and ipv6 2019-09-19 06:54:53 +01:00
Makefile.projbuild esp32-selfsigned 2017-12-01 11:37:35 +08:00
README.md README news update 2019-09-22 03:08:36 -07:00

Travis Build Status Appveyor Build status Coverity Scan Build Status CII Best Practices Codacy Badge

Libwebsockets

Libwebsockets is a simple-to-use, pure C library providing client and server for http/1, http/2, websockets and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving.

50 minimal examples for various scenarios, CC0-licensed (public domain) for cut-and-paste, allow you to get started quickly.

overview

News

Async DNS support

Master now provides optional Asynchronous (ie, nonblocking) DNS resolving. Enable with -DLWS_WITH_ASYNC_DNS=1 at cmake. This provides a quite sophisticated ipv4 + ipv6 capable resolver that autodetects the dns server on several platforms and operates a UDP socket to its port 53 to produce and parse DNS packets from the event loop. And of course, it's extremely compact.

It broadly follows the getaddrinfo style api, but instead of creating the results on the heap for each caller, it caches a single result according to the TTL and then provides refcounted const pointers to the cached result to callers. While there are references on the cached result it can't be reaped.

See READMEs/README.async-dns.md for detailed information on how it works, along with api-tests/api-test-async-dns minimal example.

Detailed Latency

You can now opt to measure and store us-resolution statistics on effective latencies for client operations, and easily spool them to a file in a format suitable for gnuplot, or handle in your own callback. Enable -DLWS_WITH_DETAILED_LATENCY=1 in cmake to build it into lws.

If you are concerned about operation latency or potential blocking from user code, or behaviour under load, or latency variability on specific platforms, you can get real numbers on your platform using this.

Timings for all aspects of events on connections are recorded, including the time needed for name resolution, setting up the connection, tls negotiation on both client and server sides, and each read and write.

See READMEs/README.detailed-latency.md for how to use it.

Client connection logic rewrite

Lws master now makes much better use of the DNS results for ipv4 and ipv6... it will iterate through them automatically making the best use it can of what's provided and attempting new connections for each potentially usable one in turn before giving up on the whole client connection attempt.

If ipv6 is disabled at cmake it can only use A / ipv4 records, but if ipv6 is enabled, it tries both; if only ipv6 is enabled it promotes ipv4 to ::ffff:1.2.3.4 IPv4-in-IPv6 addresses.

New network helpers for ipv4 and ipv6

An internal union lws_sockaddr46 that combines struct sockaddr_in and struct sockaddr_in6 is now public, and there are helpers that can parse (using lws_tokenize) any valid numeric representation for ipv4 and ipv6 either into byte arrays and lengths, or directly to and from lws_sockaddr46.

h2 long poll support

Lws now supports the convention that half-closing an h2 http stream may make the stream 'immortal', in terms of not being bound by normal timeouts. For the client side, there's an api that can be applied to the client stream to make it transition to this "read-only" long poll mode.

See READMEs/README.h2-long-poll.md for full details, including how to test it with the minimal examples.

h1 client parser improvements

H1 is not so simple to parse because the header length is not known until it has been fully parsed. The next header, or http body may be directly coalesced with the header as well. Lws has supported bulk h1 parsing from a buffer for a long time, but on clientside due to interactions with http proxying it had been stuck parsing the header bytewise out of the tls buffer. In master, everything now bulk parses from a buffer and uses a buflist to pass leftovers through the event loop cleanly.

lws_sul time refactor

Just before v3.2 there was a big refactor about how lws handles time. It now explicitly schedules anything that may happen in the future on a single, sorted linked-list, at us resolution. When entering a poll wait (or returning to an event lib loop) it checks the interval between now and the earliest event on the list to figure out how long to wait if there are no network events. For the event loop case, it sets a native event lib timer to enforce it.

See READMEs/README.lws_sul.md for more details and a handy api where you can schedule your own arbitrary callbacks using this system.

Master is now MIT-licensed

Libwebsockets master is now under the MIT license. See ./LICENSE.

Support

This is the libwebsockets C library for lightweight websocket clients and servers. For support, visit

https://libwebsockets.org

and consider joining the project mailing list at

https://libwebsockets.org/mailman/listinfo/libwebsockets

You can get the latest version of the library from git:

Doxygen API docs for master: https://libwebsockets.org/lws-api-doc-master/html/index.html