Subject: nghq - A HTTP/QUIC Implementation

From: Samuel Hurst <[email-masked]>
Date: Mon, 14 May 2018 18:15:50 +0100

BBC R&D is pleased to announce the immediate availability of "nghq", an 
open source HTTP/QUIC library hosted on GitHub under an MIT licence. We 
welcome contributions to the code via pull requests on GitHub at 
https://github.com/bbc/nghq.

nghq implements the HTTP/QUIC mapping on top of ngtcp2. Its API is 
modelled on nghttp2, meaning that the library does not own the socket 
and does no encryption or decryption. Instead, it relies on the 
application to feed in data, and act on callbacks from the library. For 
more information, please read the README on the project.

nghq currently has partial support for HTTP/QUIC draft-09. This version 
was chosen because it uses HPACK. nghq's header compression 
implementation is provided by nghttp2. We are not aware of any publicly 
available QPACK implementation, but have designed things so that one can 
easily be swapped in at a later date.

The library currently integrates against a version of ngtcp2 supporting 
draft-09 of the QUIC transport. We intend to keep tracking ongoing 
ngtcp2 development and integrate them in due course.

ngtcp2 can already create and parse the following HTTP/QUIC frame types: 
DATA, HEADERS, PUSH_PROMISE, CANCEL_PUSH, MAX_PUSH_ID and GOAWAY. In 
addition, there are untested parsers for SETTINGS and PRIORITY frames, 
but the library cannot create or do anything with them yet.

Since we have been primarily targeting our multicast use-case 
(draft-pardue-quic-http-mcast-02), there has not been any work done on 
the unicast handshake. However, all of the heavy lifting is done by 
ngtcp2, so it shouldn't be too difficult to add.

Our multicast sender example does not presently perform AEAD on the QUIC 
packet payload.

We invite contributions in the above areas. We're also happy to receive 
feedback and can answer questions on the mailing list or QUIC developer 
slack.

Best Regards,
Sam