Skip to content

Commit cbe9dbd

Browse files
Merge branch 'master' into stream_0_flow_control_nit
2 parents 4d99794 + 552b6bc commit cbe9dbd

File tree

8 files changed

+452
-392
lines changed

8 files changed

+452
-392
lines changed

.circleci/config.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
version: 2
2+
jobs:
3+
build:
4+
docker:
5+
- image: martinthomson/i-d-template:latest
6+
working_directory: ~/draft
7+
steps:
8+
- checkout
9+
10+
# Prime caches for faster checkout
11+
- restore_cache:
12+
keys:
13+
- template
14+
- run:
15+
name: "Update Template"
16+
command: "git -C ~/i-d-template remote update --prune"
17+
- save_cache:
18+
key: template
19+
paths:
20+
- ~/i-d-template
21+
22+
# Build txt and html versions of drafts
23+
- restore_cache:
24+
keys:
25+
- refcache
26+
- run:
27+
name: "Build Drafts"
28+
command: "make 'CLONE_ARGS=--reference ~/i-d-template'"
29+
- save_cache:
30+
key: refcache
31+
paths:
32+
- ~/.cache/xml2rfc
33+
34+
# Create and store artifacts
35+
- run:
36+
name: "Create Artifacts"
37+
command: "make artifacts CI_ARTIFACTS=/tmp/artifacts"
38+
39+
- store_artifacts:
40+
path: /tmp/artifacts
41+
42+
# Update gh-pages and gh-issues branches
43+
- run:
44+
name: "Update GitHub Pages"
45+
command: "make gh-pages"
46+
47+
48+
- run:
49+
name: "Save Issues"
50+
command: "make gh-issues || true"
51+
52+
# For tagged builds, upload to the datatracker.
53+
- run:
54+
name: "Upload to Datatracker"
55+
command: |
56+
if [ "${CIRCLE_TAG#draft-}" != "${CIRCLE_TAG}" ]; then
57+
make upload
58+
fi

CONTRIBUTING.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Contributing to QUIC
22

3-
Before submitting feedback, please familiarize yourself with our current [issues list](https://github.com/quicwg/base-drafts/issues) and [charter](https://datatracker.ietf.org/wg/quic/about/). If you're
3+
Anyone can contribute to QUIC; you don't have to join the Working Group, because there is no "membership" -- anyone who participates in the work, as outlined below, is part of the QUIC Working Group.
4+
5+
Before doing so, it's a good idea to familiarize yourself with our current [issues list](https://github.com/quicwg/base-drafts/issues) and [charter](https://datatracker.ietf.org/wg/quic/about/). If you're
46
new to this, you may also want to read the [Tao of the IETF](https://www.ietf.org/tao.html).
57

68
**Be aware that all contributions fall under the "NOTE WELL" terms outlined below.**
@@ -24,7 +26,7 @@ new to this, you may also want to read the [Tao of the IETF](https://www.ietf.or
2426

2527
The Working Group has a few venues for discussion:
2628

27-
* We plan to meet at all [IETF meetings](https://www.ietf.org/meeting/) for the foreseeable future, and hold interim meetings between them, at least through 2017. See our [meeting materials repository](https://github.com/quicwg/wg-materials) and the [official proceedings](https://datatracker.ietf.org/wg/quic/meetings/).
29+
* We plan to meet at all [IETF meetings](https://www.ietf.org/meeting/) for the foreseeable future, and hold interim meetings between them. See our [meeting materials repository](https://github.com/quicwg/wg-materials) and the [official proceedings](https://datatracker.ietf.org/wg/quic/meetings/).
2830

2931
* Our [mailing list](https://www.ietf.org/mailman/listinfo/quic) is used for most communication, including notifications of meetings, new drafts, consensus calls and other business, as well as issue discussion.
3032

@@ -41,7 +43,7 @@ their resolution.
4143

4244
Before filing a new issue, please consider a few things:
4345

44-
* Issues should be just that; issues with our deliverables, **not questions or support requests**.
46+
* Issues should be just that; issues with our deliverables, **not proposals, questions or support requests**.
4547
* Please review the issues list to make sure that you aren't filing a duplicate.
4648
* If you're not sure how to phrase your issue, please ask on the [mailing list](https://www.ietf.org/mailman/listinfo/quic).
4749

Makefile

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
MD_PREPROCESSOR := sed -e 's/{DATE}/$(shell date '+%Y-%m')/g'
22

3-
include lib/main.mk
3+
LIBDIR := lib
4+
include $(LIBDIR)/main.mk
45

5-
lib/main.mk:
6-
ifneq (,$(shell git submodule status lib 2>/dev/null))
6+
$(LIBDIR)/main.mk:
7+
ifneq (,$(shell git submodule status $(LIBDIR) 2>/dev/null))
78
git submodule sync
8-
git submodule update --init
9+
git submodule update $(CLONE_ARGS) --init
910
else
10-
git clone -q --depth 10 -b master https://github.com/martinthomson/i-d-template.git lib
11+
git clone -q --depth 10 $(CLONE_ARGS) \
12+
-b master https://github.com/martinthomson/i-d-template $(LIBDIR)
1113
endif
1214

1315
latest:: lint

circle.yml

Lines changed: 0 additions & 32 deletions
This file was deleted.

draft-ietf-quic-http.md

Lines changed: 55 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -872,74 +872,81 @@ establishment to servers.
872872
QUIC allows the application to abruptly terminate (reset) individual streams or
873873
the entire connection when an error is encountered. These are referred to as
874874
"stream errors" or "connection errors" and are described in more detail in
875-
[QUIC-TRANSPORT].
875+
{{QUIC-TRANSPORT}}.
876876

877877
This section describes HTTP-specific error codes which can be used to express
878878
the cause of a connection or stream error.
879879

880-
## HTTP-Defined QUIC Error Codes {#http-error-codes}
880+
## HTTP/QUIC Error Codes {#http-error-codes}
881881

882-
QUIC allocates error codes 0x0000-0x3FFF to application protocol definition. The
883-
following error codes are defined by HTTP for use in QUIC RST_STREAM and
884-
CONNECTION_CLOSE frames.
882+
The following error codes are defined for use in QUIC RST_STREAM, STOP_SENDING,
883+
and CONNECTION_CLOSE frames when using HTTP/QUIC.
885884

886-
HTTP_PUSH_REFUSED (0x01):
885+
STOPPING (0x00):
886+
: This value is reserved by the transport to be used in response to QUIC
887+
STOP_SENDING frames.
888+
889+
HTTP_NO_ERROR (0x01):
890+
: No error. This is used when the connection or stream needs to be closed, but
891+
there is no error to signal.
892+
893+
HTTP_PUSH_REFUSED (0x02):
887894
: The server has attempted to push content which the client will not accept
888895
on this connection.
889896

890-
HTTP_INTERNAL_ERROR (0x02):
897+
HTTP_INTERNAL_ERROR (0x03):
891898
: An internal error has occurred in the HTTP stack.
892899

893-
HTTP_PUSH_ALREADY_IN_CACHE (0x03):
900+
HTTP_PUSH_ALREADY_IN_CACHE (0x04):
894901
: The server has attempted to push content which the client has cached.
895902

896-
HTTP_REQUEST_CANCELLED (0x04):
903+
HTTP_REQUEST_CANCELLED (0x05):
897904
: The client no longer needs the requested data.
898905

899-
HTTP_HPACK_DECOMPRESSION_FAILED (0x05):
906+
HTTP_HPACK_DECOMPRESSION_FAILED (0x06):
900907
: HPACK failed to decompress a frame and cannot continue.
901908

902-
HTTP_CONNECT_ERROR (0x06):
909+
HTTP_CONNECT_ERROR (0x07):
903910
: The connection established in response to a CONNECT request was reset or
904911
abnormally closed.
905912

906-
HTTP_EXCESSIVE_LOAD (0x07):
913+
HTTP_EXCESSIVE_LOAD (0x08):
907914
: The endpoint detected that its peer is exhibiting a behavior that might be
908915
generating excessive load.
909916

910-
HTTP_VERSION_FALLBACK (0x08):
917+
HTTP_VERSION_FALLBACK (0x09):
911918
: The requested operation cannot be served over HTTP/QUIC. The peer should
912919
retry over HTTP/2.
913920

914-
HTTP_MALFORMED_HEADERS (0x09):
921+
HTTP_MALFORMED_HEADERS (0x0A):
915922
: A HEADERS frame has been received with an invalid format.
916923

917-
HTTP_MALFORMED_PRIORITY (0x0A):
924+
HTTP_MALFORMED_PRIORITY (0x0B):
918925
: A PRIORITY frame has been received with an invalid format.
919926

920-
HTTP_MALFORMED_SETTINGS (0x0B):
927+
HTTP_MALFORMED_SETTINGS (0x0C):
921928
: A SETTINGS frame has been received with an invalid format.
922929

923-
HTTP_MALFORMED_PUSH_PROMISE (0x0C):
930+
HTTP_MALFORMED_PUSH_PROMISE (0x0D):
924931
: A PUSH_PROMISE frame has been received with an invalid format.
925932

926-
HTTP_MALFORMED_DATA (0x0D):
933+
HTTP_MALFORMED_DATA (0x0E):
927934
: A DATA frame has been received with an invalid format.
928935

929-
HTTP_INTERRUPTED_HEADERS (0x0E):
936+
HTTP_INTERRUPTED_HEADERS (0x0F):
930937
: A HEADERS frame without the End Header Block flag was followed by a frame
931938
other than HEADERS.
932939

933-
HTTP_WRONG_STREAM (0x0F):
940+
HTTP_WRONG_STREAM (0x10):
934941
: A frame was received on stream where it is not permitted.
935942

936-
HTTP_MULTIPLE_SETTINGS (0x10):
943+
HTTP_MULTIPLE_SETTINGS (0x11):
937944
: More than one SETTINGS frame was received.
938945

939-
HTTP_MALFORMED_PUSH (0x11):
946+
HTTP_MALFORMED_PUSH (0x12):
940947
: A push stream header was malformed or included an invalid Push ID.
941948

942-
HTTP_MALFORMED_MAX_PUSH_ID (0x12):
949+
HTTP_MALFORMED_MAX_PUSH_ID (0x13):
943950
: A MAX_PUSH_ID frame has been received with an invalid format.
944951

945952

@@ -1089,11 +1096,11 @@ QUIC has the same concepts of "stream" and "connection" errors that HTTP/2
10891096
provides. However, because the error code space is shared between multiple
10901097
components, there is no direct portability of HTTP/2 error codes.
10911098

1092-
The HTTP/2 error codes defined in Section 7 of {{!RFC7540}} map to QUIC error
1093-
codes as follows:
1099+
The HTTP/2 error codes defined in Section 7 of {{!RFC7540}} map to the HTTP over
1100+
QUIC error codes as follows:
10941101

10951102
NO_ERROR (0x0):
1096-
: QUIC_NO_ERROR
1103+
: HTTP_NO_ERROR in {{http-error-codes}}.
10971104

10981105
PROTOCOL_ERROR (0x1):
10991106
: No single mapping. See new HTTP_MALFORMED_* error codes defined in
@@ -1270,7 +1277,7 @@ The entries in the following table are registered by this document.
12701277
## Error Codes {#iana-error-codes}
12711278

12721279
This document establishes a registry for HTTP/QUIC error codes. The
1273-
"HTTP/QUIC Error Code" registry manages a 30-bit space. The "HTTP/QUIC
1280+
"HTTP/QUIC Error Code" registry manages a 32-bit space. The "HTTP/QUIC
12741281
Error Code" registry operates under the "Expert Review" policy
12751282
{{?RFC5226}}.
12761283

@@ -1285,7 +1292,7 @@ Name:
12851292
: A name for the error code. Specifying an error code name is optional.
12861293

12871294
Code:
1288-
: The 30-bit error code value.
1295+
: The 32-bit error code value.
12891296

12901297
Description:
12911298
: A brief description of the error code semantics, longer if no detailed
@@ -1299,24 +1306,26 @@ The entries in the following table are registered by this document.
12991306
|-----------------------------------|--------|----------------------------------------|----------------------|
13001307
| Name | Code | Description | Specification |
13011308
|-----------------------------------|--------|----------------------------------------|----------------------|
1302-
| HTTP_PUSH_REFUSED | 0x01 | Client refused pushed content | {{http-error-codes}} |
1303-
| HTTP_INTERNAL_ERROR | 0x02 | Internal error | {{http-error-codes}} |
1304-
| HTTP_PUSH_ALREADY_IN_CACHE | 0x03 | Pushed content already cached | {{http-error-codes}} |
1305-
| HTTP_REQUEST_CANCELLED | 0x04 | Data no longer needed | {{http-error-codes}} |
1306-
| HTTP_HPACK_DECOMPRESSION_FAILED | 0x05 | HPACK cannot continue | {{http-error-codes}} |
1307-
| HTTP_CONNECT_ERROR | 0x06 | TCP reset or error on CONNECT request | {{http-error-codes}} |
1308-
| HTTP_EXCESSIVE_LOAD | 0x07 | Peer generating excessive load | {{http-error-codes}} |
1309-
| HTTP_VERSION_FALLBACK | 0x08 | Retry over HTTP/2 | {{http-error-codes}} |
1310-
| HTTP_MALFORMED_HEADERS | 0x09 | Invalid HEADERS frame | {{http-error-codes}} |
1311-
| HTTP_MALFORMED_PRIORITY | 0x0A | Invalid PRIORITY frame | {{http-error-codes}} |
1312-
| HTTP_MALFORMED_SETTINGS | 0x0B | Invalid SETTINGS frame | {{http-error-codes}} |
1313-
| HTTP_MALFORMED_PUSH_PROMISE | 0x0C | Invalid PUSH_PROMISE frame | {{http-error-codes}} |
1314-
| HTTP_MALFORMED_DATA | 0x0D | Invalid DATA frame | {{http-error-codes}} |
1315-
| HTTP_INTERRUPTED_HEADERS | 0x0E | Incomplete HEADERS block | {{http-error-codes}} |
1316-
| HTTP_WRONG_STREAM | 0x0F | A frame was sent on the wrong stream | {{http-error-codes}} |
1317-
| HTTP_MULTIPLE_SETTINGS | 0x10 | Multiple SETTINGS frames | {{http-error-codes}} |
1318-
| HTTP_MALFORMED_PUSH | 0x11 | Invalid push stream header | {{http-error-codes}} |
1319-
| HTTP_MALFORMED_MAX_PUSH_ID | 0x12 | Invalid MAX_PUSH_ID frame | {{http-error-codes}} |
1309+
| STOPPING | 0x00 | Reserved by QUIC | {{QUIC-TRANSPORT}} |
1310+
| HTTP_NO_ERROR | 0x01 | No error | {{http-error-codes}} |
1311+
| HTTP_PUSH_REFUSED | 0x02 | Client refused pushed content | {{http-error-codes}} |
1312+
| HTTP_INTERNAL_ERROR | 0x03 | Internal error | {{http-error-codes}} |
1313+
| HTTP_PUSH_ALREADY_IN_CACHE | 0x04 | Pushed content already cached | {{http-error-codes}} |
1314+
| HTTP_REQUEST_CANCELLED | 0x05 | Data no longer needed | {{http-error-codes}} |
1315+
| HTTP_HPACK_DECOMPRESSION_FAILED | 0x06 | HPACK cannot continue | {{http-error-codes}} |
1316+
| HTTP_CONNECT_ERROR | 0x07 | TCP reset or error on CONNECT request | {{http-error-codes}} |
1317+
| HTTP_EXCESSIVE_LOAD | 0x08 | Peer generating excessive load | {{http-error-codes}} |
1318+
| HTTP_VERSION_FALLBACK | 0x09 | Retry over HTTP/2 | {{http-error-codes}} |
1319+
| HTTP_MALFORMED_HEADERS | 0x0A | Invalid HEADERS frame | {{http-error-codes}} |
1320+
| HTTP_MALFORMED_PRIORITY | 0x0B | Invalid PRIORITY frame | {{http-error-codes}} |
1321+
| HTTP_MALFORMED_SETTINGS | 0x0C | Invalid SETTINGS frame | {{http-error-codes}} |
1322+
| HTTP_MALFORMED_PUSH_PROMISE | 0x0D | Invalid PUSH_PROMISE frame | {{http-error-codes}} |
1323+
| HTTP_MALFORMED_DATA | 0x0E | Invalid DATA frame | {{http-error-codes}} |
1324+
| HTTP_INTERRUPTED_HEADERS | 0x0F | Incomplete HEADERS block | {{http-error-codes}} |
1325+
| HTTP_WRONG_STREAM | 0x10 | A frame was sent on the wrong stream | {{http-error-codes}} |
1326+
| HTTP_MULTIPLE_SETTINGS | 0x11 | Multiple SETTINGS frames | {{http-error-codes}} |
1327+
| HTTP_MALFORMED_PUSH | 0x12 | Invalid push stream header | {{http-error-codes}} |
1328+
| HTTP_MALFORMED_MAX_PUSH_ID | 0x13 | Invalid MAX_PUSH_ID frame | {{http-error-codes}} |
13201329
|-----------------------------------|--------|----------------------------------------|----------------------|
13211330

13221331

draft-ietf-quic-recovery.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,7 @@ important to the loss detection and congestion control machinery below.
102102
machinery of QUIC underneath.
103103

104104
* ACK frames contain acknowledgment information. QUIC uses a SACK-based
105-
scheme, where acks express up to 256 ranges. The ACK frame also includes a
106-
receive timestamp for each packet newly acked.
105+
scheme, where acks express up to 256 ranges.
107106

108107
## Relevant Differences Between QUIC and TCP
109108

@@ -529,7 +528,8 @@ largest acked packet is supplied.
529528

530529
#### Handshake Packets
531530

532-
The receiver MUST ignore unprotected packets that ack protected packets.
531+
The receiver MUST close the connection with an error of type OPTIMISTIC_ACK
532+
when receiving an unprotected packet that acks protected packets.
533533
The receiver MUST trust protected acks for unprotected packets, however. Aside
534534
from this, loss detection for handshake packets when an ack is processed is
535535
identical to other packets.
@@ -607,10 +607,12 @@ window and sets the slow start threshold to the new congestion window.
607607
## Recovery Period
608608

609609
Recovery is a period of time beginning with detection of a lost packet.
610-
Because QUIC retransmits frames, not packets, it defines the end of
611-
recovery as all packets outstanding at the start of recovery being
612-
acknowledged or lost. This is slightly different from TCP's definition of
613-
recovery ending when the lost packet that started recovery is acknowledged.
610+
Because QUIC retransmits stream data and control frames, not packets,
611+
it defines the end of recovery as a packet sent after the start of
612+
recovery being acknowledged. This is slightly different from TCP's
613+
definition of recovery ending when the lost packet that started
614+
recovery is acknowledged.
615+
614616
During recovery, the congestion window is not increased or decreased.
615617
As such, multiple lost packets only decrease the congestion window once as
616618
long as they're lost before exiting recovery. This causes QUIC to decrease

0 commit comments

Comments
 (0)