Re: [quicwg/base-drafts] http3: Are reserved frames allowed before SETTINGS? (#2693)

Luca Niccolini <notifications@github.com> Sun, 12 May 2019 19:00 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 43CB2120020 for <quic-issues@ietfa.amsl.com>; Sun, 12 May 2019 12:00:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.392
X-Spam-Level:
X-Spam-Status: No, score=-6.392 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_IMAGE_ONLY_24=1.618, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
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 OxdKZWQVxp7E for <quic-issues@ietfa.amsl.com>; Sun, 12 May 2019 12:00:49 -0700 (PDT)
Received: from out-1.smtp.github.com (out-1.smtp.github.com [192.30.252.192]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 53EA51201F8 for <quic-issues@ietf.org>; Sun, 12 May 2019 12:00:47 -0700 (PDT)
Date: Sun, 12 May 2019 12:00:45 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1557687645; bh=62V8XE1Xr44HdTjTCsFApogNXmgB6OeV4wvMPnQsbo0=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=LRT7/6GfiZGkRI0V5pncME7tMJFgNxD6xDfevws3A+wve6bqEW8tyAbrzXL6ioHpW 7sFB6HzN8vQF2B6ivWHV+plXeJQjux1/DV6wfJSX3NbfX0JP24tcIrsnhPPXeuuN/t a6GnE8XGp5IcB9YtL8HUcq99mD2cIET6dpuz3M34=
From: Luca Niccolini <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJK4OXV3NQQPGKBOQLMF24WP53EVBNHHBU2NSLQ@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/2693/491620307@github.com>
In-Reply-To: <quicwg/base-drafts/issues/2693@github.com>
References: <quicwg/base-drafts/issues/2693@github.com>
Subject: Re: [quicwg/base-drafts] http3: Are reserved frames allowed before SETTINGS? (#2693)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5cd86d5de3d2a_1b3a3fa1d38cd96c4234c"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: lnicco
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/MCAu9Q2M_DELdMH_PTes1mFnbAA>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 12 May 2019 19:00:50 -0000

In our implementation we are interpreting this in the same way: any frame on the control stream received before SETTINGS is a connection error. Even reserved frame types.

In general the way we handle this is by discarding frame types that are forbidden rather than checking frame types that are allowed on each stream. 

Here is a snippet from our code.
```
ParseResult HQControlCodec::checkFrameAllowed(FrameType type) {
  switch (type) {
    case hq::FrameType::DATA:
    case hq::FrameType::HEADERS:
    case hq::FrameType::PUSH_PROMISE:
      return HTTP3::ErrorCode::HTTP_WRONG_STREAM;
    default:
      break;
  }

  // SETTINGS MUST be the first frame on an HQ Control Stream
  if (!receivedSettings_ && type != hq::FrameType::SETTINGS) {
    return HTTP3::ErrorCode::HTTP_MISSING_SETTINGS;
  }
  // .. and a bunch of other checks here ..
```

In this way we avoid the extra effort needed to handle reserved frame types that you mentioned, if I am reading your statement correctly. 
Basically, some frame types are explicitly disallowed. All other frame types are equal, reserved or non-reserved. Do you foresee an extension possibly benefiting from sending a frame before settings ? 


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2693#issuecomment-491620307