Subject: [quicwg/base-drafts] HTTP nitpick: checkng for maximum Push ID (#4052)

From: Dmitri Tikhonov <[email-masked]>
Date: Tue, 25 Aug 2020 08:18:22 -0700

[Section 4.4 of the HTTP-29 I-D](https://tools.ietf.org/html/draft-ietf-quic-http-29#section-4.4) states:

```
   Server push is only enabled on a connection when a client sends a
   MAX_PUSH_ID frame; see Section 7.2.7.  A server cannot use server
   push until it receives a MAX_PUSH_ID frame.  A client sends
   additional MAX_PUSH_ID frames to control the number of pushes that a
   server can promise.  A server SHOULD use Push IDs sequentially,
   starting at 0.  A client MUST treat receipt of a push stream with a
   Push ID that is greater than the maximum Push ID as a connection
   error of type H3_ID_ERROR.
```

The case when the client has not sent a _MAX_PUSH_ID_ frame is not covered.  (In this case, the client should treat the receipt of any frame with a Push ID as an error.)

-- 
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/4052

---

From: Lucas Pardue <[email-masked]>
Date: Tue, 25 Aug 2020 08:47:12 -0700

There is some other text that kinda marks the error case:

```
  The maximum Push ID is unset when a connection is created, meaning
  that a server cannot push until it receives a MAX_PUSH_ID frame.
```

One interpretation is that since any value of ID is greater than `unset`, then the error condition holds. But I agree with Dmitri that we could probably make this clearer with some editorializing.

-- 
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/4052#issuecomment-680107843

---

From: Dmitri Tikhonov <[email-masked]>
Date: Tue, 25 Aug 2020 08:50:36 -0700

> since any value of ID is greater than `unset`

That's a big stretch.  Does it hold in languages that have a `NaN`, such as JavaScript?  E.g., can one write `assert(0 > NaN);`?

-- 
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/4052#issuecomment-680109926

---

From: Lucas Pardue <[email-masked]>
Date: Tue, 25 Aug 2020 08:53:38 -0700

Since it starts as unset, and MAX_PUSH_ID can only increase the value then in this world, 0 must be greater than unset 

-- 
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/4052#issuecomment-680111769

---

From: Dmitri Tikhonov <[email-masked]>
Date: Tue, 25 Aug 2020 09:05:27 -0700

What is "unset?"  &lt;DmitriMode>If 0 is a valid value, then "unset" means `UINT64_MAX`, which is *not* smaller than 0.  That is, it is not true that `UINT64_MAX < 0`, which is what the text says.&lt;/DmitriMode>

-- 
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/4052#issuecomment-680118827

---

From: Lucas Pardue <[email-masked]>
Date: Tue, 25 Aug 2020 09:12:21 -0700

Sure, but then it makes it very hard to send a MAX_PUSH_ID that doesn't decrease the value. 

I think we agree that it would help the doc to fix your original nitpick.

-- 
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/4052#issuecomment-680122975

---

From: Mike Bishop <[email-masked]>
Date: Tue, 25 Aug 2020 13:32:45 -0700

Unset is negative one?  The frame sets a `push_allowed` boolean?

I see a couple possible doc fixes.  The most minimal change is to simply state that it is also an error to receive anything that uses a Push ID if no MAX_PUSH_ID frame has been sent.  That's compatible and consistent with the intent of the current design.

Alternatively, we could define MAX_PUSH_ID to tell the recipient *how many* Push IDs they can use; 0 is the initial value, and sending 0 leaves push disabled.  That's consistent with QUIC's MAX_STREAMS et al. but would be a breaking change.

-- 
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/4052#issuecomment-680254905

---

From: Dmitri Tikhonov <[email-masked]>
Date: Tue, 25 Aug 2020 13:37:32 -0700

I vote for the simplest approach:
> [...] state that it is also an error to receive anything that uses a Push ID if no MAX_PUSH_ID frame has been sent.

-- 
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/4052#issuecomment-680257063

---

From: Lucas Pardue <[email-masked]>
Date: Tue, 25 Aug 2020 13:45:02 -0700

+1 let's keep it simple 

-- 
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/4052#issuecomment-680260326

---

From: Martin Thomson <[email-masked]>
Date: Thu, 27 Aug 2020 03:40:53 -0700

Editorial?

-- 
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/4052#issuecomment-681869849

---

From: Dmitri Tikhonov <[email-masked]>
Date: Thu, 27 Aug 2020 04:36:47 -0700

Yes, this is an editorial issue.

-- 
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/4052#issuecomment-681893499

---

From: Mike Bishop <[email-masked]>
Date: Thu, 27 Aug 2020 07:37:41 -0700

Closed #4052 via #4054.

-- 
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/4052#event-3699964930