All Projects → bbc → Nghq

bbc / Nghq

Licence: mit
An implementation of Multicast QUIC https://tools.ietf.org/html/draft-pardue-quic-http-mcast-07

Programming Languages

c
50402 projects - #5 most used programming language

Labels

Projects that are alternatives of or similar to Nghq

Yomo
🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.
Stars: ✭ 279 (+372.88%)
Mutual labels:  quic
Gsnova
Private proxy solution & network troubleshooting tool.
Stars: ✭ 509 (+762.71%)
Mutual labels:  quic
Python Proxy
HTTP/HTTP2/HTTP3/Socks4/Socks5/Shadowsocks/ShadowsocksR/SSH/Redirect/Pf TCP/UDP asynchronous tunnel proxy implemented in Python 3 asyncio.
Stars: ✭ 692 (+1072.88%)
Mutual labels:  quic
Nghttp2
nghttp2 - HTTP/2 C Library and tools
Stars: ✭ 3,868 (+6455.93%)
Mutual labels:  quic
Quiche
🥧 Savoury implementation of the QUIC transport protocol and HTTP/3
Stars: ✭ 5,481 (+9189.83%)
Mutual labels:  quic
Pyexfil
A Python Package for Data Exfiltration
Stars: ✭ 554 (+838.98%)
Mutual labels:  quic
Reading And Annotate Quic
quic、prot_quic、goquic、libquic源码中文注释分析,增加C++ quic-client和quic-server example 程序,便于快速掌握学习谷歌quic库源码和学习quic协议,作为新的网络加速协议,可以根据实际需要应用于自己的工程项目中。把google quic源码和goquic合并到一个工程编译安装
Stars: ✭ 272 (+361.02%)
Mutual labels:  quic
Drainqueuecongestion
Congestion control algorithms evaluation on ns3
Stars: ✭ 23 (-61.02%)
Mutual labels:  quic
Fatt
FATT /fingerprintAllTheThings - a pyshark based script for extracting network metadata and fingerprints from pcap files and live network traffic
Stars: ✭ 490 (+730.51%)
Mutual labels:  quic
Aioquic
QUIC and HTTP/3 implementation in Python
Stars: ✭ 600 (+916.95%)
Mutual labels:  quic
Stellite
Stellite project is a client library and server application that offers an easy way to develop, build, and implement client/server running primarily over the QUIC protocol developed by Google as part of the Chromium project.
Stars: ✭ 422 (+615.25%)
Mutual labels:  quic
Node Libcurl
libcurl bindings for Node.js
Stars: ✭ 447 (+657.63%)
Mutual labels:  quic
Quic Go
A QUIC implementation in pure go
Stars: ✭ 6,085 (+10213.56%)
Mutual labels:  quic
Nghttp3
HTTP/3 library written in C
Stars: ✭ 324 (+449.15%)
Mutual labels:  quic
Lsquic
LiteSpeed QUIC and HTTP/3 Library
Stars: ✭ 727 (+1132.2%)
Mutual labels:  quic
Awesome Live Stream
Webrtc && Nginx && DASH && Quic 学习资料收集,持续更新中
Stars: ✭ 290 (+391.53%)
Mutual labels:  quic
Openlitespeed
Our high-performance, lightweight, open source HTTP server
Stars: ✭ 540 (+815.25%)
Mutual labels:  quic
T2q2t
TCP/QUIC port forward tool
Stars: ✭ 26 (-55.93%)
Mutual labels:  quic
Docker Nginx Http3
Alpine Linux image with Nginx 1.19.4 (mainline) with HTTP/3 (QUIC), TLSv1.3, 0-RTT, brotli, NJS support, and 10 MB size. All built on the bleeding edge for max performance. Built on the edge, for the edge.
Stars: ✭ 820 (+1289.83%)
Mutual labels:  quic
Ngtcp2
ngtcp2 project is an effort to implement IETF QUIC protocol
Stars: ✭ 589 (+898.31%)
Mutual labels:  quic

nghq

nghq is a HTTP framing layer that aims to provide support for the HTTP/QUIC mapping for running HTTP over IETF QUIC.

The nghq API is modelled after that of nghttp2. The application owns the communicating socket and feeds data into the library via a series of calls. The application is expected to act on callbacks from the library. There are a couple of important points to note:

  • nghq does not own the socket. The application is expected to read data from the socket and provide it to the library. When the library has some data to send, it will call back into the application with the data to be sent on the application's socket.
  • nghq does not do any encryption or decryption of the packets received. It is up to the application to manage the TLS context. The encrypt and decrypt callbacks will be fired when the library needs encryption or decryption to be done.

nghq diagram

The public API is documented here. In addition, the library's public header file nghq.h has comment blocks for every function and callback listed above it which also serve as documentation.

Some helpful sequence diagrams, showing the expected interaction between a client/server application and nghq can be found here.

Caveats

NOTE: In its current form, nghq implements only the parts of the QUIC and HTTP3 specifications required by draft-pardue-quic-http-mcast-07.

In particular, it only supports a profile of the draft-ietf-quic-transport-29, and draft-ietf-quic-http-29.

Getting Started

If you wish to build and run the examples, you will also need libev version 4.0 or above.

nghq uses the ls-qpack library to perform QPACK header compression and decompression routines. The ls-qpack library is included as a linked git submodule, which should be initialised and updated as part of the bootstrap script.

The build system itself uses Automake. To build the software, do the following:

$ ./bootstrap
$ ./configure
$ make

Options

To enable some fairly verbose debugging output from the library, you can supply the --enable-debug option to the configure script. This will write output from nghq to the command line when the library is run. Debugging output is disabled by default.

To install the software, use make install. To change where nghq will be installed, use the prefix configuration parameter as below:

$ ./configure --prefix=/home/roadrunner/nghq-target
$ make install

Running the examples

If you had libev installed when building, then the examples in the examples/ directory will be built. Currently, there is a simple multicast sender and a multicast receiver application. Run them with --help to see the available runtime options.

Credits

License

This software is licensed under an MIT License. See the COPYING file for more.

Contributing

If you have a feature request or want to report a bug, we'd be happy to hear from you. Please either raise an issue, or fork the project and send us a pull request.

Authors

This software was written by Sam Hurst with additional contributions by David Waring.

Copyright

Copyright (c) 2020 British Broadcasting Corporation

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].