Giter Club home page Giter Club logo

libwebsockets's Introduction

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

New features on master

  • JWE - JWE (RFC7516) Work in progress: Decryption only atm
Key Encryption Payload authentication + crypt
RSAES-PKCS1-v1.5 AES_128_CBC_HMAC_SHA_256
AES128KW AES_192_CBC_HMAC_SHA_384
AES_256_CBC_HMAC_SHA_512

jwe api, jwe unit tests

  • lws-genec ECDSA - JWS-compatible ECDSA is supported on both OpenSSL and mbedtls... Work in progress: ECDH-ES

  • JWS - JWS (RFC7515) is now supported for none, HS256/384/512, RS256/384/512, and ES256/384/512, on both OpenSSL and mbedtls jws api, jws unit tests

  • JWK - JWK (RFC7517) now supports oct, RSA and EC keys including JSON key arrays on both OpenSSL and mbedtls

  • lws-genrsa OAEP + PSS support - in addition to PKCS#1 1.5 padding, OAEP and PSS are now supported on both mbedtls and openssl backends.

  • lws-genaes Generic AES crypto - thin api layer works identically with both mbedtls and openssl backends. Supports CBC, CFB128, CFB8, CTR, ECB, OFB, XTS and GCM variants. Unit tests in CI. genaes api, api test, CMake config: -DLWS_WITH_GENAES=1

  • http fallback support - you can specify a role and protocol to apply if non-http or non-tls packets arrive at an http(s) listen port. For example, you can specify that the new raw proxy role + protocol should be used, to proxy your sshd port over :443 or :80. Without affecting normal http(s) serving on those ports but allowing, eg, ssh -p 443 [email protected]. http fallback docs

  • raw tcp proxy role and protocol - adding raw tcp proxying is now trivial using the built-in lws implementation. You can control the onward connection using a pvo in the format "ipv4:server.com:port" raw proxy minimal example, raw proxy docs, Cmake config: -DLWS_ROLE_RAW_PROXY=1 -DLWS_WITH_PLUGINS=1

  • deaddrop HTML file upload protocol - protocol and minimal example for file upload and sharing using drag and drop and a file picker. Integrated with basic auth, uploaded files marked with upload user, and files owned by the authenticated user may be deleted via the UI. Supports multiple simultaneous uploads both by drag-and-drop and from the file picker. deaddrop minimal example

  • basic auth for ws(s) - You can apply basic auth credential requirement to ws connections same as on mounts now. Just add a pvo "basic-auth" with the value being the credentials file path when enabling the ws protocol for the vhost.

v3.1 released: new features in v3.1

  • lws threadpool - lightweight pool of pthreads integrated to lws wsi, with all synchronization to event loop handled internally, queue for excess tasks threadpool docs, threadpool minimal example, Cmake config: -DLWS_WITH_THREADPOOL=1

  • libdbus support integrated on lws event loop lws dbus docs, lws dbus client minimal examples, lws dbus server minimal examples, Cmake config: -DLWS_ROLE_DBUS=1

  • lws allocated chunks (lwsac) - helpers for optimized mass allocation of small objects inside a few larger malloc chunks... if you need to allocate a lot of inter-related structs for a limited time, this removes per-struct allocation library overhead completely and removes the need for any destruction handling lwsac docs, lwsac minimal example, Cmake Config: -DLWS_WITH_LWSAC=1

  • lws tokenizer - helper api for robustly tokenizing your own strings without allocating or adding complexity. Configurable by flags for common delimiter sets and comma-separated-lists in the tokenizer. Detects and reports syntax errors. lws_tokenize docs, lws_tokenize minimal example / api test

  • lws full-text search - optimized trie generation, serialization, autocomplete suggestion generation and instant global search support extensible to huge corpuses of UTF-8 text while remaining super lightweight on resources. full-text search docs, full-text search minimal example / api test, demo, demo sources, Cmake config: -DLWS_WITH_FTS=1 -DLWS_WITH_LWSAC=1

  • gzip + brotli http server-side compression - h1 and h2 detection of client support for server compression, and auto-application to files with mimetypes "text/*", "application/javascript" and "image/svg.xml". Cmake config: -DLWS_WITH_HTTP_STREAM_COMPRESSION=1 for gzip, optionally also give -DLWS_WITH_HTTP_BROTLI=1 for preferred br brotli compression

  • managed disk cache - API for managing a directory containing cached files with hashed names, and automatic deletion of LRU files once the cache is above a given limit. lws diskcache docs, Cmake config: -DLWS_WITH_DISKCACHE=1

  • http reverse proxy - lws mounts support proxying h1 or h2 requests to a local or remote IP, or unix domain socket over h1. This allows microservice type architectures where parts of the common URL space are actually handled by external processes which may be remote or on the same machine. lws gitohashi serving is handled this way. unix domain sockets reverse proxy docs, CMake config: -DLWS_WITH_HTTP_PROXY=1 and -DLWS_UNIX_SOCK=1 for Unix Domain Sockets

  • update minimal examples for strict Content Security Policy the minimal examples now show the best practices around Content Security Policy and disabling inline Javascript. Updated examples that are served with the recommended security restrictions show a new "Strict Content Security Policy" graphic. Read how to upgrade your applications to use a strict CSP.

  • release policy docs - unsure what branch, version or tag to use, or how to follow master cleanly? Read the release policy docs which explain how and why lws is developed, released and maintained.

v3.0.1 released

See the git log for the list of fixes.

v3.0.0 released

See the changelog for info https://libwebsockets.org/git/libwebsockets/tree/changelog?h=v3.0-stable

Major CI improvements for QA

The Travis build of lws done on every commit now runs:

Tests Count Explanation
Build / Linux / gcc 16 -Wall -Werror cmake config variants
Build / Mac / Clang 16 -Wall -Werror cmake config variants
Build / Windows / MSVC 7 default
Selftests openssl:43, mbedtls:43 minimal examples built and run against each other and remote server
attack.sh 225 Correctness, robustness and security tests for http parser
Autobahn Server 480 Testing lws ws client, including permessage-deflate
Autobahn Client 480 Testing lws ws server, including permaessage-deflate
h2spec openssl:146, mbedtls:146 Http/2 server compliance suite (in strict mode)
h2load openssl:6, mbedtls:6 Http/2 server load tool (checks 10K / 100K in h1 and h2, at 1, 10, 100 concurrency)
h2load SMP 6 Http/2 and http/1.1 server load checks on SMP server build

The over 1,500 tests run on every commit take 1hr 15 of compute time to complete. If any problems are found, it breaks the travis build, generating an email.

Codacy also checks every patch and the information used to keep lws at zero issues.

Current master is checked by Coverity at least daily and kept at zero issues.

Current master passes all the tests and these new CI arrangements will help keep it that way.

Lws has the first official ws-over-h2 server support

wss-over-h2

There's a new RFC that enables multiplexing ws connections over an http/2 link. Compared to making individual tcp and tls connections for each ws link back to the same server, this makes your site start up radically faster, and since all the connections are in one tls tunnel, with considerable memory reduction serverside.

To enable it on master you just need -DLWS_WITH_HTTP2=1 at cmake. No changes to existing code are necessary for either http/2 (if you use the official header creation apis if you return your own headers, as shown in the test apps for several versions) or to take advantage of ws-over-h2. When built with http/2 support, it automatically falls back to http/1 and traditional ws upgrade if that's all the client can handle.

Currently only Chrome Canary v67 supports this ws-over-h2 encapsulation (chrome must be started with --enable-websocket-over-http2 switch to enable it currently), and patches exist for Firefox. Authors of both browser implementations tested against the lws server implementation.

New "minimal examples"

https://libwebsockets.org/git/libwebsockets/tree/minimal-examples

These are like the test apps, but focus on doing one thing, the best way, with the minimum amount of code. For example the minimal-http-server serves the cwd on http/1 or http/2 in 50 LOC. Same thing with tls is just three more lines.

They build standalone, so it's easier to copy them directly to start your own project; they are CC0 licensed (public domain) to facilitate that.

Windows binary builds

32- and 64-bit Windows binary builds are available via Appveyor. Visit lws on Appveyor, click on a build, the ARTIFACTS, and unzip the zip file at C:\Program Files (x86)/libwebsockets.

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

libwebsockets's People

Contributors

lws-team avatar joakimsoderberg avatar paroga avatar davidgaleano avatar dosvald avatar ppentchev avatar edwin-oetelaar avatar ralight avatar abruines avatar stv0g avatar amery avatar mmilata avatar wonder-mice avatar dbrnz avatar stephaneberle9 avatar vpeter4 avatar shyswork avatar ondraco avatar jwinarske avatar hashok avatar fancycode avatar arokux avatar jmillan avatar skyhisi avatar nickdowell avatar leonardorufino avatar jvijtiuk avatar inindev avatar kommendorkapten avatar f69m avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.