nghq - A HTTP/QUIC Implementation

Samuel Hurst <samuelh@rd.bbc.co.uk> Mon, 14 May 2018 17:15 UTC

Return-Path: <samuelh@rd.bbc.co.uk>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3F9351242EA for <quic@ietfa.amsl.com>; Mon, 14 May 2018 10:15:55 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.201
X-Spam-Level:
X-Spam-Status: No, score=-4.201 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XxlAgpxJAztm for <quic@ietfa.amsl.com>; Mon, 14 May 2018 10:15:53 -0700 (PDT)
Received: from gateh.kw.bbc.co.uk (gateh.kw.bbc.co.uk [132.185.132.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 356A4124217 for <quic@ietf.org>; Mon, 14 May 2018 10:15:53 -0700 (PDT)
Received: from mailhub0.rd.bbc.co.uk ([172.29.120.128]) by gateh.kw.bbc.co.uk (8.14.5+Sun/8.13.6) with ESMTP id w4EHFpgY026277 for <quic@ietf.org>; Mon, 14 May 2018 18:15:51 +0100 (BST)
Received: from rd015072.rd.bbc.co.uk ([172.29.91.136]:46218) by mailhub0.rd.bbc.co.uk with esmtp (Exim 4.84_2) (envelope-from <samuelh@rd.bbc.co.uk>) id 1fIH4g-0007fi-Ti for quic@ietf.org; Mon, 14 May 2018 18:15:50 +0100
From: Samuel Hurst <samuelh@rd.bbc.co.uk>
Subject: nghq - A HTTP/QUIC Implementation
To: IETF QUIC WG <quic@ietf.org>
Message-ID: <8c3712fd-cc1f-ccc7-05c2-b29ccd85f308@rd.bbc.co.uk>
Date: Mon, 14 May 2018 18:15:50 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/Zh_pVDyaTJ7C4YE8YHU07AZDi6k>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 14 May 2018 17:15:55 -0000

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