Bug 1026609 - HTTP/2 draft 13 part 1 - client implementation. r=mcmanus

This commit is contained in:
Nicholas Hurley 2014-06-25 17:33:15 -07:00
parent 2b38a95152
commit 77d6c29a3a
7 changed files with 3607 additions and 19517 deletions

View File

@ -66,7 +66,7 @@ InitializeStaticHeaders()
AddStaticElement(NS_LITERAL_CSTRING(":status"), NS_LITERAL_CSTRING("404"));
AddStaticElement(NS_LITERAL_CSTRING(":status"), NS_LITERAL_CSTRING("500"));
AddStaticElement(NS_LITERAL_CSTRING("accept-charset"));
AddStaticElement(NS_LITERAL_CSTRING("accept-encoding"));
AddStaticElement(NS_LITERAL_CSTRING("accept-encoding"), NS_LITERAL_CSTRING("gzip, deflate"));
AddStaticElement(NS_LITERAL_CSTRING("accept-language"));
AddStaticElement(NS_LITERAL_CSTRING("accept-ranges"));
AddStaticElement(NS_LITERAL_CSTRING("accept"));

File diff suppressed because it is too large Load Diff

View File

@ -13,263 +13,263 @@ struct HuffmanOutgoingEntry {
};
static HuffmanOutgoingEntry HuffmanOutgoing[] = {
{ 0x03ffffba, 26 },
{ 0x03ffffbb, 26 },
{ 0x03ffffbc, 26 },
{ 0x03ffffbd, 26 },
{ 0x03ffffbe, 26 },
{ 0x03ffffbf, 26 },
{ 0x03ffffc0, 26 },
{ 0x03ffffc1, 26 },
{ 0x03ffffc2, 26 },
{ 0x03ffffc3, 26 },
{ 0x03ffffc4, 26 },
{ 0x03ffffc5, 26 },
{ 0x03ffffc6, 26 },
{ 0x03ffffc7, 26 },
{ 0x03ffffc8, 26 },
{ 0x03ffffc9, 26 },
{ 0x03ffffca, 26 },
{ 0x03ffffcb, 26 },
{ 0x03ffffcc, 26 },
{ 0x03ffffcd, 26 },
{ 0x03ffffce, 26 },
{ 0x03ffffcf, 26 },
{ 0x03ffffd0, 26 },
{ 0x03ffffd1, 26 },
{ 0x03ffffd2, 26 },
{ 0x03ffffd3, 26 },
{ 0x03ffffd4, 26 },
{ 0x03ffffd5, 26 },
{ 0x03ffffd6, 26 },
{ 0x03ffffd7, 26 },
{ 0x03ffffd8, 26 },
{ 0x03ffffd9, 26 },
{ 0x00000006, 5 },
{ 0x00001ffc, 13 },
{ 0x000001f0, 9 },
{ 0x00003ffc, 14 },
{ 0x00007ffc, 15 },
{ 0x0000001e, 6 },
{ 0x00000064, 7 },
{ 0x00001ffd, 13 },
{ 0x00001ff8, 13 },
{ 0x007fffd8, 23 },
{ 0x0fffffe2, 28 },
{ 0x0fffffe3, 28 },
{ 0x0fffffe4, 28 },
{ 0x0fffffe5, 28 },
{ 0x0fffffe6, 28 },
{ 0x0fffffe7, 28 },
{ 0x0fffffe8, 28 },
{ 0x00ffffea, 24 },
{ 0x3ffffffc, 30 },
{ 0x0fffffe9, 28 },
{ 0x0fffffea, 28 },
{ 0x3ffffffd, 30 },
{ 0x0fffffeb, 28 },
{ 0x0fffffec, 28 },
{ 0x0fffffed, 28 },
{ 0x0fffffee, 28 },
{ 0x0fffffef, 28 },
{ 0x0ffffff0, 28 },
{ 0x0ffffff1, 28 },
{ 0x0ffffff2, 28 },
{ 0x3ffffffe, 30 },
{ 0x0ffffff3, 28 },
{ 0x0ffffff4, 28 },
{ 0x0ffffff5, 28 },
{ 0x0ffffff6, 28 },
{ 0x0ffffff7, 28 },
{ 0x0ffffff8, 28 },
{ 0x0ffffff9, 28 },
{ 0x0ffffffa, 28 },
{ 0x0ffffffb, 28 },
{ 0x00000014, 6 },
{ 0x000003f8, 10 },
{ 0x000003f9, 10 },
{ 0x00000ffa, 12 },
{ 0x00001ff9, 13 },
{ 0x00000015, 6 },
{ 0x000000f8, 8 },
{ 0x000007fa, 11 },
{ 0x000003fa, 10 },
{ 0x000001f1, 9 },
{ 0x000003fb, 10 },
{ 0x000000f9, 8 },
{ 0x000007fb, 11 },
{ 0x000000fa, 8 },
{ 0x00000016, 6 },
{ 0x00000017, 6 },
{ 0x00000018, 6 },
{ 0x00000000, 5 },
{ 0x00000001, 5 },
{ 0x00000002, 5 },
{ 0x00000019, 6 },
{ 0x0000001a, 6 },
{ 0x0000001b, 6 },
{ 0x0000001c, 6 },
{ 0x0000001d, 6 },
{ 0x0000001e, 6 },
{ 0x0000001f, 6 },
{ 0x0000005c, 7 },
{ 0x000000fb, 8 },
{ 0x00007ffc, 15 },
{ 0x00000020, 6 },
{ 0x00000ffb, 12 },
{ 0x000003fc, 10 },
{ 0x00001ffa, 13 },
{ 0x00000021, 6 },
{ 0x0000005d, 7 },
{ 0x0000005e, 7 },
{ 0x0000005f, 7 },
{ 0x00000060, 7 },
{ 0x00000061, 7 },
{ 0x00000062, 7 },
{ 0x00000063, 7 },
{ 0x00000064, 7 },
{ 0x00000065, 7 },
{ 0x00000066, 7 },
{ 0x0000001f, 6 },
{ 0x00000007, 5 },
{ 0x00000000, 4 },
{ 0x00000001, 4 },
{ 0x00000002, 4 },
{ 0x00000008, 5 },
{ 0x00000020, 6 },
{ 0x00000021, 6 },
{ 0x00000022, 6 },
{ 0x00000023, 6 },
{ 0x00000024, 6 },
{ 0x00000025, 6 },
{ 0x00000026, 6 },
{ 0x000000ec, 8 },
{ 0x0001fffc, 17 },
{ 0x00000027, 6 },
{ 0x00007ffd, 15 },
{ 0x000003fd, 10 },
{ 0x00007ffe, 15 },
{ 0x00000067, 7 },
{ 0x000000ed, 8 },
{ 0x000000ee, 8 },
{ 0x00000068, 7 },
{ 0x000000ef, 8 },
{ 0x00000069, 7 },
{ 0x0000006a, 7 },
{ 0x000001f2, 9 },
{ 0x000000f0, 8 },
{ 0x000001f3, 9 },
{ 0x000001f4, 9 },
{ 0x000001f5, 9 },
{ 0x0000006b, 7 },
{ 0x0000006c, 7 },
{ 0x000000f1, 8 },
{ 0x000000f2, 8 },
{ 0x000001f6, 9 },
{ 0x000001f7, 9 },
{ 0x0000006d, 7 },
{ 0x00000028, 6 },
{ 0x000000f3, 8 },
{ 0x000001f8, 9 },
{ 0x000001f9, 9 },
{ 0x000000f4, 8 },
{ 0x000001fa, 9 },
{ 0x000001fb, 9 },
{ 0x000007fc, 11 },
{ 0x03ffffda, 26 },
{ 0x000007fd, 11 },
{ 0x00003ffd, 14 },
{ 0x0000006e, 7 },
{ 0x0003fffe, 18 },
{ 0x00000009, 5 },
{ 0x0000006f, 7 },
{ 0x0000000a, 5 },
{ 0x00000029, 6 },
{ 0x0000000b, 5 },
{ 0x00000070, 7 },
{ 0x0000002a, 6 },
{ 0x0000002b, 6 },
{ 0x0000000c, 5 },
{ 0x000000f5, 8 },
{ 0x000000f6, 8 },
{ 0x0000002c, 6 },
{ 0x0000002d, 6 },
{ 0x0000002e, 6 },
{ 0x0000000d, 5 },
{ 0x0000002f, 6 },
{ 0x000001fc, 9 },
{ 0x00000030, 6 },
{ 0x00000031, 6 },
{ 0x0000000e, 5 },
{ 0x00000071, 7 },
{ 0x00000072, 7 },
{ 0x000000fc, 8 },
{ 0x00000073, 7 },
{ 0x000000fd, 8 },
{ 0x00001ffb, 13 },
{ 0x0007fff0, 19 },
{ 0x00001ffc, 13 },
{ 0x00003ffc, 14 },
{ 0x00000022, 6 },
{ 0x00007ffd, 15 },
{ 0x00000003, 5 },
{ 0x00000023, 6 },
{ 0x00000004, 5 },
{ 0x00000024, 6 },
{ 0x00000005, 5 },
{ 0x00000025, 6 },
{ 0x00000026, 6 },
{ 0x00000027, 6 },
{ 0x00000006, 5 },
{ 0x00000074, 7 },
{ 0x00000075, 7 },
{ 0x000000f7, 8 },
{ 0x0001fffd, 17 },
{ 0x00000ffc, 12 },
{ 0x0001fffe, 17 },
{ 0x00000ffd, 12 },
{ 0x03ffffdb, 26 },
{ 0x03ffffdc, 26 },
{ 0x03ffffdd, 26 },
{ 0x03ffffde, 26 },
{ 0x03ffffdf, 26 },
{ 0x00000028, 6 },
{ 0x00000029, 6 },
{ 0x0000002a, 6 },
{ 0x00000007, 5 },
{ 0x0000002b, 6 },
{ 0x00000076, 7 },
{ 0x0000002c, 6 },
{ 0x00000008, 5 },
{ 0x00000009, 5 },
{ 0x0000002d, 6 },
{ 0x00000077, 7 },
{ 0x00000078, 7 },
{ 0x00000079, 7 },
{ 0x0000007a, 7 },
{ 0x0000007b, 7 },
{ 0x00007ffe, 15 },
{ 0x000007fc, 11 },
{ 0x00003ffd, 14 },
{ 0x00001ffd, 13 },
{ 0x0ffffffc, 28 },
{ 0x000fffe6, 20 },
{ 0x003fffd2, 22 },
{ 0x000fffe7, 20 },
{ 0x000fffe8, 20 },
{ 0x003fffd3, 22 },
{ 0x003fffd4, 22 },
{ 0x003fffd5, 22 },
{ 0x007fffd9, 23 },
{ 0x003fffd6, 22 },
{ 0x007fffda, 23 },
{ 0x007fffdb, 23 },
{ 0x007fffdc, 23 },
{ 0x007fffdd, 23 },
{ 0x007fffde, 23 },
{ 0x00ffffeb, 24 },
{ 0x007fffdf, 23 },
{ 0x00ffffec, 24 },
{ 0x00ffffed, 24 },
{ 0x003fffd7, 22 },
{ 0x007fffe0, 23 },
{ 0x00ffffee, 24 },
{ 0x007fffe1, 23 },
{ 0x007fffe2, 23 },
{ 0x007fffe3, 23 },
{ 0x007fffe4, 23 },
{ 0x001fffdc, 21 },
{ 0x003fffd8, 22 },
{ 0x007fffe5, 23 },
{ 0x003fffd9, 22 },
{ 0x007fffe6, 23 },
{ 0x007fffe7, 23 },
{ 0x00ffffef, 24 },
{ 0x003fffda, 22 },
{ 0x001fffdd, 21 },
{ 0x000fffe9, 20 },
{ 0x003fffdb, 22 },
{ 0x003fffdc, 22 },
{ 0x007fffe8, 23 },
{ 0x007fffe9, 23 },
{ 0x001fffde, 21 },
{ 0x007fffea, 23 },
{ 0x003fffdd, 22 },
{ 0x003fffde, 22 },
{ 0x00fffff0, 24 },
{ 0x001fffdf, 21 },
{ 0x003fffdf, 22 },
{ 0x007fffeb, 23 },
{ 0x007fffec, 23 },
{ 0x001fffe0, 21 },
{ 0x001fffe1, 21 },
{ 0x003fffe0, 22 },
{ 0x001fffe2, 21 },
{ 0x007fffed, 23 },
{ 0x003fffe1, 22 },
{ 0x007fffee, 23 },
{ 0x007fffef, 23 },
{ 0x000fffea, 20 },
{ 0x003fffe2, 22 },
{ 0x003fffe3, 22 },
{ 0x003fffe4, 22 },
{ 0x007ffff0, 23 },
{ 0x003fffe5, 22 },
{ 0x003fffe6, 22 },
{ 0x007ffff1, 23 },
{ 0x03ffffe0, 26 },
{ 0x03ffffe1, 26 },
{ 0x000fffeb, 20 },
{ 0x0007fff1, 19 },
{ 0x003fffe7, 22 },
{ 0x007ffff2, 23 },
{ 0x003fffe8, 22 },
{ 0x01ffffec, 25 },
{ 0x03ffffe2, 26 },
{ 0x03ffffe3, 26 },
{ 0x03ffffe4, 26 },
{ 0x07ffffde, 27 },
{ 0x07ffffdf, 27 },
{ 0x03ffffe5, 26 },
{ 0x00fffff1, 24 },
{ 0x01ffffed, 25 },
{ 0x0007fff2, 19 },
{ 0x001fffe3, 21 },
{ 0x03ffffe6, 26 },
{ 0x07ffffe0, 27 },
{ 0x07ffffe1, 27 },
{ 0x03ffffe7, 26 },
{ 0x07ffffe2, 27 },
{ 0x00fffff2, 24 },
{ 0x001fffe4, 21 },
{ 0x001fffe5, 21 },
{ 0x03ffffe8, 26 },
{ 0x03ffffe9, 26 },
{ 0x0ffffffd, 28 },
{ 0x07ffffe3, 27 },
{ 0x07ffffe4, 27 },
{ 0x07ffffe5, 27 },
{ 0x000fffec, 20 },
{ 0x00fffff3, 24 },
{ 0x000fffed, 20 },
{ 0x001fffe6, 21 },
{ 0x003fffe9, 22 },
{ 0x001fffe7, 21 },
{ 0x001fffe8, 21 },
{ 0x007ffff3, 23 },
{ 0x003fffea, 22 },
{ 0x003fffeb, 22 },
{ 0x01ffffee, 25 },
{ 0x01ffffef, 25 },
{ 0x00fffff4, 24 },
{ 0x00fffff5, 24 },
{ 0x03ffffea, 26 },
{ 0x007ffff4, 23 },
{ 0x03ffffeb, 26 },
{ 0x07ffffe6, 27 },
{ 0x03ffffec, 26 },
{ 0x03ffffed, 26 },
{ 0x07ffffe7, 27 },
{ 0x07ffffe8, 27 },
{ 0x07ffffe9, 27 },
{ 0x07ffffea, 27 },
{ 0x07ffffeb, 27 },
{ 0x0ffffffe, 28 },
{ 0x07ffffec, 27 },
{ 0x07ffffed, 27 },
{ 0x07ffffee, 27 },
{ 0x07ffffef, 27 },
{ 0x07fffff0, 27 },
{ 0x03ffffee, 26 },
{ 0x03ffffef, 26 },
{ 0x03fffff0, 26 },
{ 0x03fffff1, 26 },
{ 0x03fffff2, 26 },
{ 0x03fffff3, 26 },
{ 0x03fffff4, 26 },
{ 0x03fffff5, 26 },
{ 0x03fffff6, 26 },
{ 0x03fffff7, 26 },
{ 0x03fffff8, 26 },
{ 0x03fffff9, 26 },
{ 0x03fffffa, 26 },
{ 0x03fffffb, 26 },
{ 0x03fffffc, 26 },
{ 0x03fffffd, 26 },
{ 0x03fffffe, 26 },
{ 0x03ffffff, 26 },
{ 0x01ffff80, 25 },
{ 0x01ffff81, 25 },
{ 0x01ffff82, 25 },
{ 0x01ffff83, 25 },
{ 0x01ffff84, 25 },
{ 0x01ffff85, 25 },
{ 0x01ffff86, 25 },
{ 0x01ffff87, 25 },
{ 0x01ffff88, 25 },
{ 0x01ffff89, 25 },
{ 0x01ffff8a, 25 },
{ 0x01ffff8b, 25 },
{ 0x01ffff8c, 25 },
{ 0x01ffff8d, 25 },
{ 0x01ffff8e, 25 },
{ 0x01ffff8f, 25 },
{ 0x01ffff90, 25 },
{ 0x01ffff91, 25 },
{ 0x01ffff92, 25 },
{ 0x01ffff93, 25 },
{ 0x01ffff94, 25 },
{ 0x01ffff95, 25 },
{ 0x01ffff96, 25 },
{ 0x01ffff97, 25 },
{ 0x01ffff98, 25 },
{ 0x01ffff99, 25 },
{ 0x01ffff9a, 25 },
{ 0x01ffff9b, 25 },
{ 0x01ffff9c, 25 },
{ 0x01ffff9d, 25 },
{ 0x01ffff9e, 25 },
{ 0x01ffff9f, 25 },
{ 0x01ffffa0, 25 },
{ 0x01ffffa1, 25 },
{ 0x01ffffa2, 25 },
{ 0x01ffffa3, 25 },
{ 0x01ffffa4, 25 },
{ 0x01ffffa5, 25 },
{ 0x01ffffa6, 25 },
{ 0x01ffffa7, 25 },
{ 0x01ffffa8, 25 },
{ 0x01ffffa9, 25 },
{ 0x01ffffaa, 25 },
{ 0x01ffffab, 25 },
{ 0x01ffffac, 25 },
{ 0x01ffffad, 25 },
{ 0x01ffffae, 25 },
{ 0x01ffffaf, 25 },
{ 0x01ffffb0, 25 },
{ 0x01ffffb1, 25 },
{ 0x01ffffb2, 25 },
{ 0x01ffffb3, 25 },
{ 0x01ffffb4, 25 },
{ 0x01ffffb5, 25 },
{ 0x01ffffb6, 25 },
{ 0x01ffffb7, 25 },
{ 0x01ffffb8, 25 },
{ 0x01ffffb9, 25 },
{ 0x01ffffba, 25 },
{ 0x01ffffbb, 25 },
{ 0x01ffffbc, 25 },
{ 0x01ffffbd, 25 },
{ 0x01ffffbe, 25 },
{ 0x01ffffbf, 25 },
{ 0x01ffffc0, 25 },
{ 0x01ffffc1, 25 },
{ 0x01ffffc2, 25 },
{ 0x01ffffc3, 25 },
{ 0x01ffffc4, 25 },
{ 0x01ffffc5, 25 },
{ 0x01ffffc6, 25 },
{ 0x01ffffc7, 25 },
{ 0x01ffffc8, 25 },
{ 0x01ffffc9, 25 },
{ 0x01ffffca, 25 },
{ 0x01ffffcb, 25 },
{ 0x01ffffcc, 25 },
{ 0x01ffffcd, 25 },
{ 0x01ffffce, 25 },
{ 0x01ffffcf, 25 },
{ 0x01ffffd0, 25 },
{ 0x01ffffd1, 25 },
{ 0x01ffffd2, 25 },
{ 0x01ffffd3, 25 },
{ 0x01ffffd4, 25 },
{ 0x01ffffd5, 25 },
{ 0x01ffffd6, 25 },
{ 0x01ffffd7, 25 },
{ 0x01ffffd8, 25 },
{ 0x01ffffd9, 25 },
{ 0x01ffffda, 25 },
{ 0x01ffffdb, 25 },
{ 0x01ffffdc, 25 }
{ 0x3fffffff, 30 }
};
} // namespace net

View File

@ -134,6 +134,17 @@ CopyAsNetwork32(charType dest, // where to store it
template void CopyAsNetwork32(char *dest, uint32_t number);
template void CopyAsNetwork32(uint8_t *dest, uint32_t number);
template<typename charType> static void
CopyAsNetwork16(charType dest, // where to store it
uint16_t number) // the 16 bit number in native format
{
number = PR_htons(number);
memcpy(dest, &number, sizeof(number));
}
template void CopyAsNetwork16(char *dest, uint16_t number);
template void CopyAsNetwork16(uint8_t *dest, uint16_t number);
PLDHashOperator
Http2Session::ShutdownEnumerator(nsAHttpTransaction *key,
nsAutoPtr<Http2Stream> &stream,
@ -242,9 +253,7 @@ static Http2ControlFx sControlFunctions[] = {
Http2Session::RecvPing,
Http2Session::RecvGoAway,
Http2Session::RecvWindowUpdate,
Http2Session::RecvContinuation,
Http2Session::RecvAltSvc,
Http2Session::RecvBlocked
Http2Session::RecvContinuation
};
bool
@ -599,9 +608,7 @@ Http2Session::CreateFrameHeader(charType dest, uint16_t frameLength,
MOZ_ASSERT(frameLength <= kMaxFrameData, "framelength too large");
MOZ_ASSERT(!(streamID & 0x80000000));
frameLength = PR_htons(frameLength);
memcpy(dest, &frameLength, 2);
CopyAsNetwork16(dest, frameLength);
dest[2] = frameType;
dest[3] = frameFlags;
CopyAsNetwork32(dest + 4, streamID);
@ -771,10 +778,10 @@ Http2Session::SendHello()
MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread);
LOG3(("Http2Session::SendHello %p\n", this));
// sized for magic + 2 settings and a session window update to follow
// 24 magic, 23 for settings (8 header + 3 settings @5), 12 for window update
static const uint32_t maxSettings = 4;
static const uint32_t maxDataLen = 24 + 8 + maxSettings * 5 + 12;
// sized for magic + 3 settings and a session window update to follow
// 24 magic, 26 for settings (8 header + 3 settings @6), 12 for window update
static const uint32_t maxSettings = 3;
static const uint32_t maxDataLen = 24 + 8 + maxSettings * 6 + 12;
char *packet = EnsureOutputBuffer(maxDataLen);
memcpy(packet, kMagicHello, 24);
mOutputQueueUsed += 24;
@ -787,37 +794,30 @@ Http2Session::SendHello()
uint8_t numberOfEntries = 0;
// entries need to be listed in order by ID
// 1st entry is bytes 8 to 12
// 2nd entry is bytes 13 to 17
// 3rd entry is bytes 18 to 22
// 4th entry is bytes 23 to 17
// 1st entry is bytes 8 to 13
// 2nd entry is bytes 14 to 19
// 3rd entry is bytes 20 to 25
if (!gHttpHandler->AllowPush()) {
// If we don't support push then set MAX_CONCURRENT to 0 and also
// set ENABLE_PUSH to 0
packet[8 + 5 * numberOfEntries] = SETTINGS_TYPE_ENABLE_PUSH;
CopyAsNetwork16(packet + 8 + (6 * numberOfEntries), SETTINGS_TYPE_ENABLE_PUSH);
// The value portion of the setting pair is already initialized to 0
numberOfEntries++;
packet[8 + 5 * numberOfEntries] = SETTINGS_TYPE_MAX_CONCURRENT;
CopyAsNetwork16(packet + 8 + (6 * numberOfEntries), SETTINGS_TYPE_MAX_CONCURRENT);
// The value portion of the setting pair is already initialized to 0
numberOfEntries++;
}
// Advertise the Push RWIN for the session, and on each new pull stream
// send a window update with END_FLOW_CONTROL
packet[8 + 5 * numberOfEntries] = SETTINGS_TYPE_INITIAL_WINDOW;
CopyAsNetwork32(packet + 9 + 5 * numberOfEntries, mPushAllowance);
numberOfEntries++;
// Explicitly signal that we do NOT support compressed data frames, even
// though the default is to not support anyway.
packet[8 + 5 * numberOfEntries] = SETTINGS_TYPE_COMPRESS_DATA;
// The value portion of the setting pair is already initialized to 0
CopyAsNetwork16(packet + 8 + (6 * numberOfEntries), SETTINGS_TYPE_INITIAL_WINDOW);
CopyAsNetwork32(packet + 8 + (6 * numberOfEntries) + 2, mPushAllowance);
numberOfEntries++;
MOZ_ASSERT(numberOfEntries <= maxSettings);
uint32_t dataLen = 5 * numberOfEntries;
uint32_t dataLen = 6 * numberOfEntries;
CreateFrameHeader(packet, dataLen, FRAME_TYPE_SETTINGS, 0, 0);
mOutputQueueUsed += 8 + dataLen;
@ -1035,16 +1035,9 @@ Http2Session::SetInputFrameDataStream(uint32_t streamID)
nsresult
Http2Session::ParsePadding(uint8_t &paddingControlBytes, uint16_t &paddingLength)
{
if (mInputFrameFlags & kFlag_PAD_HIGH) {
uint8_t paddingHighValue = *reinterpret_cast<uint8_t *>(mInputFrameBuffer + 8);
paddingLength = static_cast<uint16_t>(paddingHighValue) * 256;
++paddingControlBytes;
}
if (mInputFrameFlags & kFlag_PAD_LOW) {
uint8_t paddingLowValue = *reinterpret_cast<uint8_t *>(mInputFrameBuffer + 8 + paddingControlBytes);
paddingLength += paddingLowValue;
++paddingControlBytes;
if (mInputFrameFlags & kFlag_PADDED) {
paddingLength = *reinterpret_cast<uint8_t *>(mInputFrameBuffer + 8);
paddingControlBytes = 1;
}
if (paddingLength > mInputFrameDataSize) {
@ -1063,6 +1056,8 @@ Http2Session::RecvHeaders(Http2Session *self)
{
MOZ_ASSERT(self->mInputFrameType == FRAME_TYPE_HEADERS);
bool isContinuation = self->mExpectedHeaderID != 0;
// If this doesn't have END_HEADERS set on it then require the next
// frame to be HEADERS of the same ID
bool endHeadersFlag = self->mInputFrameFlags & kFlag_END_HEADERS;
@ -1082,22 +1077,24 @@ Http2Session::RecvHeaders(Http2Session *self)
// header data from the frame.
uint16_t paddingLength = 0;
uint8_t paddingControlBytes = 0;
nsresult rv;
nsresult rv = self->ParsePadding(paddingControlBytes, paddingLength);
if (NS_FAILED(rv)) {
return rv;
if (!isContinuation) {
rv = self->ParsePadding(paddingControlBytes, paddingLength);
if (NS_FAILED(rv)) {
return rv;
}
}
LOG3(("Http2Session::RecvHeaders %p stream 0x%X priorityLen=%d stream=%p "
"end_stream=%d end_headers=%d priority_group=%d "
"paddingLength=%d pad_high_flag=%d pad_low_flag=%d\n",
"paddingLength=%d padded=%d\n",
self, self->mInputFrameID, priorityLen, self->mInputFrameDataStream,
self->mInputFrameFlags & kFlag_END_STREAM,
self->mInputFrameFlags & kFlag_END_HEADERS,
self->mInputFrameFlags & kFlag_PRIORITY,
paddingLength,
self->mInputFrameFlags & kFlag_PAD_HIGH,
self->mInputFrameFlags & kFlag_PAD_LOW));
self->mInputFrameFlags & kFlag_PADDED));
if (!self->mInputFrameDataStream) {
// Cannot find stream. We can continue the session, but we need to
@ -1299,15 +1296,15 @@ Http2Session::RecvSettings(Http2Session *self)
RETURN_SESSION_ERROR(self, PROTOCOL_ERROR);
}
if (self->mInputFrameDataSize % 5) {
// Number of Settings is determined by dividing by each 5 byte setting
// entry. So the payload must be a multiple of 5.
if (self->mInputFrameDataSize % 6) {
// Number of Settings is determined by dividing by each 6 byte setting
// entry. So the payload must be a multiple of 6.
LOG3(("Http2Session::RecvSettings %p SETTINGS wrong length data=%d",
self, self->mInputFrameDataSize));
RETURN_SESSION_ERROR(self, PROTOCOL_ERROR);
}
uint32_t numEntries = self->mInputFrameDataSize / 5;
uint32_t numEntries = self->mInputFrameDataSize / 6;
LOG3(("Http2Session::RecvSettings %p SETTINGS Control Frame "
"with %d entries ack=%X", self, numEntries,
self->mInputFrameFlags & kFlag_ACK));
@ -1319,11 +1316,11 @@ Http2Session::RecvSettings(Http2Session *self)
for (uint32_t index = 0; index < numEntries; ++index) {
uint8_t *setting = reinterpret_cast<uint8_t *>
(self->mInputFrameBuffer.get()) + 8 + index * 5;
(self->mInputFrameBuffer.get()) + 8 + index * 6;
uint8_t id = setting[0];
uint32_t value = PR_ntohl(*reinterpret_cast<uint32_t *>(setting + 1));
LOG3(("Settings ID %d, Value %d", id, value));
uint16_t id = PR_ntohs(*reinterpret_cast<uint16_t *>(setting));
uint32_t value = PR_ntohl(*reinterpret_cast<uint32_t *>(setting + 2));
LOG3(("Settings ID %u, Value %u", id, value));
switch (id)
{
@ -1355,11 +1352,6 @@ Http2Session::RecvSettings(Http2Session *self)
}
break;
case SETTINGS_TYPE_COMPRESS_DATA:
LOG3(("Received DATA compression setting: %d\n", value));
// nop
break;
default:
break;
}
@ -1382,10 +1374,6 @@ Http2Session::RecvPushPromise(Http2Session *self)
// header data from the frame.
uint16_t paddingLength = 0;
uint8_t paddingControlBytes = 0;
nsresult rv = self->ParsePadding(paddingControlBytes, paddingLength);
if (NS_FAILED(rv)) {
return rv;
}
// If this doesn't have END_PUSH_PROMISE set on it then require the next
// frame to be PUSH_PROMISE of the same ID
@ -1396,6 +1384,10 @@ Http2Session::RecvPushPromise(Http2Session *self)
promiseLen = 0; // really a continuation frame
promisedID = self->mContinuedPromiseStream;
} else {
nsresult rv = self->ParsePadding(paddingControlBytes, paddingLength);
if (NS_FAILED(rv)) {
return rv;
}
promiseLen = 4;
promisedID =
PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + 8 + paddingControlBytes));
@ -1422,10 +1414,9 @@ Http2Session::RecvPushPromise(Http2Session *self)
}
LOG3(("Http2Session::RecvPushPromise %p ID 0x%X assoc ID 0x%X "
"paddingLength %d pad_high_flag %d pad_low_flag %d.\n",
"paddingLength %d padded %d\n",
self, promisedID, associatedID, paddingLength,
self->mInputFrameFlags & kFlag_PAD_HIGH,
self->mInputFrameFlags & kFlag_PAD_LOW));
self->mInputFrameFlags & kFlag_PADDED));
if (!associatedID || !promisedID || (promisedID & 1)) {
LOG3(("Http2Session::RecvPushPromise %p ID invalid.\n", self));
@ -1433,7 +1424,7 @@ Http2Session::RecvPushPromise(Http2Session *self)
}
// confirm associated-to
rv = self->SetInputFrameDataStream(associatedID);
nsresult rv = self->SetInputFrameDataStream(associatedID);
if (NS_FAILED(rv))
return rv;
@ -1799,33 +1790,6 @@ Http2Session::RecvContinuation(Http2Session *self)
return RecvPushPromise(self);
}
nsresult
Http2Session::RecvAltSvc(Http2Session *self)
{
MOZ_ASSERT(self->mInputFrameType == FRAME_TYPE_ALTSVC);
LOG3(("Http2Session::RecvAltSvc %p Flags 0x%X id 0x%X\n", self,
self->mInputFrameFlags, self->mInputFrameID));
// For now, we don't do anything with ALTSVC frames
self->ResetDownstreamState();
return NS_OK;
}
nsresult
Http2Session::RecvBlocked(Http2Session *self)
{
MOZ_ASSERT(self->mInputFrameType == FRAME_TYPE_BLOCKED);
LOG3(("Http2Session::RecvBlocked %p id 0x%X\n", self, self->mInputFrameID));
if (self->mInputFrameDataSize) {
RETURN_SESSION_ERROR(self, FRAME_SIZE_ERROR);
}
// Logging is all we do with BLOCKED for now
self->ResetDownstreamState();
return NS_OK;
}
//-----------------------------------------------------------------------------
// nsAHttpTransaction. It is expected that nsHttpConnection is the caller
// of these methods
@ -1999,12 +1963,6 @@ Http2Session::ReadyToProcessDataFrame(enum internalStateType newState)
RETURN_SESSION_ERROR(this, PROTOCOL_ERROR);
}
if (mInputFrameFlags & kFlag_COMPRESSED) {
LOG3(("Http2Session::ReadyToProcessDataFrame %p streamID 0x%X compressed\n",
this, mInputFrameID));
RETURN_SESSION_ERROR(this, PROTOCOL_ERROR);
}
nsresult rv = SetInputFrameDataStream(mInputFrameID);
if (NS_FAILED(rv)) {
LOG3(("Http2Session::ReadyToProcessDataFrame %p lookup streamID 0x%X "
@ -2168,17 +2126,6 @@ Http2Session::WriteSegments(nsAHttpSegmentWriter *writer,
}
mPaddingLength = 0;
if (mInputFrameType == FRAME_TYPE_DATA ||
mInputFrameType == FRAME_TYPE_HEADERS ||
mInputFrameType == FRAME_TYPE_PUSH_PROMISE ||
mInputFrameType == FRAME_TYPE_CONTINUATION) {
if ((mInputFrameFlags & kFlag_PAD_HIGH) &&
!(mInputFrameFlags & kFlag_PAD_LOW)) {
LOG3(("Http2Session::WriteSegments %p PROTOCOL_ERROR pad_high present "
"without pad_low\n", this));
RETURN_SESSION_ERROR(this, PROTOCOL_ERROR);
}
}
if (mInputFrameDataSize >= 0x4000) {
// Section 9.1 HTTP frames cannot exceed 2^14 - 1 but receviers must ignore
@ -2222,7 +2169,7 @@ Http2Session::WriteSegments(nsAHttpSegmentWriter *writer,
EnsureBuffer(mInputFrameBuffer, mInputFrameDataSize + 8, 8,
mInputFrameBufferSize);
ChangeDownstreamState(BUFFERING_CONTROL_FRAME);
} else if (mInputFrameFlags & (kFlag_PAD_LOW | kFlag_PAD_HIGH)) {
} else if (mInputFrameFlags & kFlag_PADDED) {
ChangeDownstreamState(PROCESSING_DATA_FRAME_PADDING_CONTROL);
} else {
rv = ReadyToProcessDataFrame(PROCESSING_DATA_FRAME);
@ -2233,21 +2180,14 @@ Http2Session::WriteSegments(nsAHttpSegmentWriter *writer,
}
if (mDownstreamState == PROCESSING_DATA_FRAME_PADDING_CONTROL) {
uint32_t numControlBytes = 0;
if (mInputFrameFlags & kFlag_PAD_LOW) {
++numControlBytes;
}
if (mInputFrameFlags & kFlag_PAD_HIGH) {
++numControlBytes;
}
MOZ_ASSERT(mInputFrameFlags & kFlag_PADDED,
"Processing padding control on unpadded frame");
MOZ_ASSERT(numControlBytes,
"Processing padding control with no control bytes!");
MOZ_ASSERT(mInputFrameBufferUsed < (8 + numControlBytes),
MOZ_ASSERT(mInputFrameBufferUsed < (8 + 1),
"Frame buffer used too large for state");
rv = NetworkRead(writer, mInputFrameBuffer + mInputFrameBufferUsed,
(8 + numControlBytes) - mInputFrameBufferUsed,
(8 + 1) - mInputFrameBufferUsed,
countWritten);
if (NS_FAILED(rv)) {
@ -2264,26 +2204,22 @@ Http2Session::WriteSegments(nsAHttpSegmentWriter *writer,
mInputFrameBufferUsed += *countWritten;
if (mInputFrameBufferUsed - 8 < numControlBytes) {
if (mInputFrameBufferUsed - 8 < 1) {
LOG3(("Http2Session::WriteSegments %p "
"BUFFERING DATA FRAME CONTROL PADDING incomplete size=%d",
this, mInputFrameBufferUsed - 8));
return rv;
}
mInputFrameDataRead += numControlBytes;
++mInputFrameDataRead;
char *control = mInputFrameBuffer + 8;
if (mInputFrameFlags & kFlag_PAD_HIGH) {
mPaddingLength = static_cast<uint16_t>(*control) * 256;
++control;
}
mPaddingLength += static_cast<uint8_t>(*control);
mPaddingLength = static_cast<uint8_t>(*control);
LOG3(("Http2Session::WriteSegments %p stream 0x%X mPaddingLength=%d", this,
mInputFrameID, mPaddingLength));
if (numControlBytes + mPaddingLength == mInputFrameDataSize) {
if (1U + mPaddingLength == mInputFrameDataSize) {
// This frame consists entirely of padding, we can just discard it
LOG3(("Http2Session::WriteSegments %p stream 0x%X frame with only padding",
this, mInputFrameID));
@ -2460,7 +2396,7 @@ Http2Session::WriteSegments(nsAHttpSegmentWriter *writer,
} else {
// Section 4.1 requires this to be ignored; though protocol_error would
// be better
LOG3(("Http2Session %p unknow frame type %x ignored\n",
LOG3(("Http2Session %p unknown frame type %x ignored\n",
this, mInputFrameType));
ResetDownstreamState();
rv = NS_OK;

View File

@ -85,9 +85,7 @@ public:
FRAME_TYPE_GOAWAY = 7,
FRAME_TYPE_WINDOW_UPDATE = 8,
FRAME_TYPE_CONTINUATION = 9,
FRAME_TYPE_ALTSVC = 10,
FRAME_TYPE_BLOCKED = 11,
FRAME_TYPE_LAST = 12
FRAME_TYPE_LAST = 10
};
// NO_ERROR is a macro defined on windows, so we'll name the HTTP2 goaway
@ -115,17 +113,14 @@ public:
const static uint8_t kFlag_END_PUSH_PROMISE = 0x04; // push promise
const static uint8_t kFlag_ACK = 0x01; // ping and settings
const static uint8_t kFlag_END_SEGMENT = 0x02; // data
const static uint8_t kFlag_PAD_LOW = 0x08; // data, headers, push promise, continuation
const static uint8_t kFlag_PAD_HIGH = 0x10; // data, headers, push promise, continuation
const static uint8_t kFlag_COMPRESSED = 0x20; // data
const static uint8_t kFlag_PADDED = 0x08; // data, headers, push promise, continuation
const static uint8_t kFlag_PRIORITY = 0x20; // headers
enum {
SETTINGS_TYPE_HEADER_TABLE_SIZE = 1, // compression table size
SETTINGS_TYPE_ENABLE_PUSH = 2, // can be used to disable push
SETTINGS_TYPE_MAX_CONCURRENT = 3, // streams recvr allowed to initiate
SETTINGS_TYPE_INITIAL_WINDOW = 4, // bytes for flow control default
SETTINGS_TYPE_COMPRESS_DATA = 5 // whether other side allowes compressed DATA
SETTINGS_TYPE_INITIAL_WINDOW = 4 // bytes for flow control default
};
// This should be big enough to hold all of your control packets,
@ -166,8 +161,6 @@ public:
static nsresult RecvGoAway(Http2Session *);
static nsresult RecvWindowUpdate(Http2Session *);
static nsresult RecvContinuation(Http2Session *);
static nsresult RecvAltSvc(Http2Session *);
static nsresult RecvBlocked(Http2Session *);
char *EnsureOutputBuffer(uint32_t needed);

View File

@ -1,257 +1,257 @@
( 0) |11111111|11111111|11101110|10 3ffffba [26]
( 1) |11111111|11111111|11101110|11 3ffffbb [26]
( 2) |11111111|11111111|11101111|00 3ffffbc [26]
( 3) |11111111|11111111|11101111|01 3ffffbd [26]
( 4) |11111111|11111111|11101111|10 3ffffbe [26]
( 5) |11111111|11111111|11101111|11 3ffffbf [26]
( 6) |11111111|11111111|11110000|00 3ffffc0 [26]
( 7) |11111111|11111111|11110000|01 3ffffc1 [26]
( 8) |11111111|11111111|11110000|10 3ffffc2 [26]
( 9) |11111111|11111111|11110000|11 3ffffc3 [26]
( 10) |11111111|11111111|11110001|00 3ffffc4 [26]
( 11) |11111111|11111111|11110001|01 3ffffc5 [26]
( 12) |11111111|11111111|11110001|10 3ffffc6 [26]
( 13) |11111111|11111111|11110001|11 3ffffc7 [26]
( 14) |11111111|11111111|11110010|00 3ffffc8 [26]
( 15) |11111111|11111111|11110010|01 3ffffc9 [26]
( 16) |11111111|11111111|11110010|10 3ffffca [26]
( 17) |11111111|11111111|11110010|11 3ffffcb [26]
( 18) |11111111|11111111|11110011|00 3ffffcc [26]
( 19) |11111111|11111111|11110011|01 3ffffcd [26]
( 20) |11111111|11111111|11110011|10 3ffffce [26]
( 21) |11111111|11111111|11110011|11 3ffffcf [26]
( 22) |11111111|11111111|11110100|00 3ffffd0 [26]
( 23) |11111111|11111111|11110100|01 3ffffd1 [26]
( 24) |11111111|11111111|11110100|10 3ffffd2 [26]
( 25) |11111111|11111111|11110100|11 3ffffd3 [26]
( 26) |11111111|11111111|11110101|00 3ffffd4 [26]
( 27) |11111111|11111111|11110101|01 3ffffd5 [26]
( 28) |11111111|11111111|11110101|10 3ffffd6 [26]
( 29) |11111111|11111111|11110101|11 3ffffd7 [26]
( 30) |11111111|11111111|11110110|00 3ffffd8 [26]
( 31) |11111111|11111111|11110110|01 3ffffd9 [26]
' ' ( 32) |00110 6 [ 5]
'!' ( 33) |11111111|11100 1ffc [13]
'"' ( 34) |11111000|0 1f0 [ 9]
'#' ( 35) |11111111|111100 3ffc [14]
'$' ( 36) |11111111|1111100 7ffc [15]
'%' ( 37) |011110 1e [ 6]
'&' ( 38) |1100100 64 [ 7]
''' ( 39) |11111111|11101 1ffd [13]
'(' ( 40) |11111110|10 3fa [10]
')' ( 41) |11111000|1 1f1 [ 9]
'*' ( 42) |11111110|11 3fb [10]
'+' ( 43) |11111111|00 3fc [10]
',' ( 44) |1100101 65 [ 7]
'-' ( 45) |1100110 66 [ 7]
'.' ( 46) |011111 1f [ 6]
'/' ( 47) |00111 7 [ 5]
'0' ( 48) |0000 0 [ 4]
'1' ( 49) |0001 1 [ 4]
'2' ( 50) |0010 2 [ 4]
'3' ( 51) |01000 8 [ 5]
'4' ( 52) |100000 20 [ 6]
'5' ( 53) |100001 21 [ 6]
'6' ( 54) |100010 22 [ 6]
'7' ( 55) |100011 23 [ 6]
'8' ( 56) |100100 24 [ 6]
'9' ( 57) |100101 25 [ 6]
':' ( 58) |100110 26 [ 6]
';' ( 59) |11101100| ec [ 8]
'<' ( 60) |11111111|11111110|0 1fffc [17]
'=' ( 61) |100111 27 [ 6]
'>' ( 62) |11111111|1111101 7ffd [15]
'?' ( 63) |11111111|01 3fd [10]
'@' ( 64) |11111111|1111110 7ffe [15]
'A' ( 65) |1100111 67 [ 7]
'B' ( 66) |11101101| ed [ 8]
'C' ( 67) |11101110| ee [ 8]
'D' ( 68) |1101000 68 [ 7]
'E' ( 69) |11101111| ef [ 8]
'F' ( 70) |1101001 69 [ 7]
'G' ( 71) |1101010 6a [ 7]
'H' ( 72) |11111001|0 1f2 [ 9]
'I' ( 73) |11110000| f0 [ 8]
'J' ( 74) |11111001|1 1f3 [ 9]
'K' ( 75) |11111010|0 1f4 [ 9]
'L' ( 76) |11111010|1 1f5 [ 9]
'M' ( 77) |1101011 6b [ 7]
'N' ( 78) |1101100 6c [ 7]
'O' ( 79) |11110001| f1 [ 8]
'P' ( 80) |11110010| f2 [ 8]
'Q' ( 81) |11111011|0 1f6 [ 9]
'R' ( 82) |11111011|1 1f7 [ 9]
'S' ( 83) |1101101 6d [ 7]
'T' ( 84) |101000 28 [ 6]
'U' ( 85) |11110011| f3 [ 8]
'V' ( 86) |11111100|0 1f8 [ 9]
'W' ( 87) |11111100|1 1f9 [ 9]
'X' ( 88) |11110100| f4 [ 8]
'Y' ( 89) |11111101|0 1fa [ 9]
'Z' ( 90) |11111101|1 1fb [ 9]
'[' ( 91) |11111111|100 7fc [11]
'\' ( 92) |11111111|11111111|11110110|10 3ffffda [26]
']' ( 93) |11111111|101 7fd [11]
'^' ( 94) |11111111|111101 3ffd [14]
'_' ( 95) |1101110 6e [ 7]
'`' ( 96) |11111111|11111111|10 3fffe [18]
'a' ( 97) |01001 9 [ 5]
'b' ( 98) |1101111 6f [ 7]
'c' ( 99) |01010 a [ 5]
'd' (100) |101001 29 [ 6]
'e' (101) |01011 b [ 5]
'f' (102) |1110000 70 [ 7]
'g' (103) |101010 2a [ 6]
'h' (104) |101011 2b [ 6]
'i' (105) |01100 c [ 5]
'j' (106) |11110101| f5 [ 8]
'k' (107) |11110110| f6 [ 8]
'l' (108) |101100 2c [ 6]
'm' (109) |101101 2d [ 6]
'n' (110) |101110 2e [ 6]
'o' (111) |01101 d [ 5]
'p' (112) |101111 2f [ 6]
'q' (113) |11111110|0 1fc [ 9]
'r' (114) |110000 30 [ 6]
's' (115) |110001 31 [ 6]
't' (116) |01110 e [ 5]
'u' (117) |1110001 71 [ 7]
'v' (118) |1110010 72 [ 7]
'w' (119) |1110011 73 [ 7]
'x' (120) |1110100 74 [ 7]
'y' (121) |1110101 75 [ 7]
'z' (122) |11110111| f7 [ 8]
'{' (123) |11111111|11111110|1 1fffd [17]
'|' (124) |11111111|1100 ffc [12]
'}' (125) |11111111|11111111|0 1fffe [17]
'~' (126) |11111111|1101 ffd [12]
(127) |11111111|11111111|11110110|11 3ffffdb [26]
(128) |11111111|11111111|11110111|00 3ffffdc [26]
(129) |11111111|11111111|11110111|01 3ffffdd [26]
(130) |11111111|11111111|11110111|10 3ffffde [26]
(131) |11111111|11111111|11110111|11 3ffffdf [26]
(132) |11111111|11111111|11111000|00 3ffffe0 [26]
(133) |11111111|11111111|11111000|01 3ffffe1 [26]
(134) |11111111|11111111|11111000|10 3ffffe2 [26]
(135) |11111111|11111111|11111000|11 3ffffe3 [26]
(136) |11111111|11111111|11111001|00 3ffffe4 [26]
(137) |11111111|11111111|11111001|01 3ffffe5 [26]
(138) |11111111|11111111|11111001|10 3ffffe6 [26]
(139) |11111111|11111111|11111001|11 3ffffe7 [26]
(140) |11111111|11111111|11111010|00 3ffffe8 [26]
(141) |11111111|11111111|11111010|01 3ffffe9 [26]
(142) |11111111|11111111|11111010|10 3ffffea [26]
(143) |11111111|11111111|11111010|11 3ffffeb [26]
(144) |11111111|11111111|11111011|00 3ffffec [26]
(145) |11111111|11111111|11111011|01 3ffffed [26]
(146) |11111111|11111111|11111011|10 3ffffee [26]
(147) |11111111|11111111|11111011|11 3ffffef [26]
(148) |11111111|11111111|11111100|00 3fffff0 [26]
(149) |11111111|11111111|11111100|01 3fffff1 [26]
(150) |11111111|11111111|11111100|10 3fffff2 [26]
(151) |11111111|11111111|11111100|11 3fffff3 [26]
(152) |11111111|11111111|11111101|00 3fffff4 [26]
(153) |11111111|11111111|11111101|01 3fffff5 [26]
(154) |11111111|11111111|11111101|10 3fffff6 [26]
(155) |11111111|11111111|11111101|11 3fffff7 [26]
(156) |11111111|11111111|11111110|00 3fffff8 [26]
(157) |11111111|11111111|11111110|01 3fffff9 [26]
(158) |11111111|11111111|11111110|10 3fffffa [26]
(159) |11111111|11111111|11111110|11 3fffffb [26]
(160) |11111111|11111111|11111111|00 3fffffc [26]
(161) |11111111|11111111|11111111|01 3fffffd [26]
(162) |11111111|11111111|11111111|10 3fffffe [26]
(163) |11111111|11111111|11111111|11 3ffffff [26]
(164) |11111111|11111111|11000000|0 1ffff80 [25]
(165) |11111111|11111111|11000000|1 1ffff81 [25]
(166) |11111111|11111111|11000001|0 1ffff82 [25]
(167) |11111111|11111111|11000001|1 1ffff83 [25]
(168) |11111111|11111111|11000010|0 1ffff84 [25]
(169) |11111111|11111111|11000010|1 1ffff85 [25]
(170) |11111111|11111111|11000011|0 1ffff86 [25]
(171) |11111111|11111111|11000011|1 1ffff87 [25]
(172) |11111111|11111111|11000100|0 1ffff88 [25]
(173) |11111111|11111111|11000100|1 1ffff89 [25]
(174) |11111111|11111111|11000101|0 1ffff8a [25]
(175) |11111111|11111111|11000101|1 1ffff8b [25]
(176) |11111111|11111111|11000110|0 1ffff8c [25]
(177) |11111111|11111111|11000110|1 1ffff8d [25]
(178) |11111111|11111111|11000111|0 1ffff8e [25]
(179) |11111111|11111111|11000111|1 1ffff8f [25]
(180) |11111111|11111111|11001000|0 1ffff90 [25]
(181) |11111111|11111111|11001000|1 1ffff91 [25]
(182) |11111111|11111111|11001001|0 1ffff92 [25]
(183) |11111111|11111111|11001001|1 1ffff93 [25]
(184) |11111111|11111111|11001010|0 1ffff94 [25]
(185) |11111111|11111111|11001010|1 1ffff95 [25]
(186) |11111111|11111111|11001011|0 1ffff96 [25]
(187) |11111111|11111111|11001011|1 1ffff97 [25]
(188) |11111111|11111111|11001100|0 1ffff98 [25]
(189) |11111111|11111111|11001100|1 1ffff99 [25]
(190) |11111111|11111111|11001101|0 1ffff9a [25]
(191) |11111111|11111111|11001101|1 1ffff9b [25]
(192) |11111111|11111111|11001110|0 1ffff9c [25]
(193) |11111111|11111111|11001110|1 1ffff9d [25]
(194) |11111111|11111111|11001111|0 1ffff9e [25]
(195) |11111111|11111111|11001111|1 1ffff9f [25]
(196) |11111111|11111111|11010000|0 1ffffa0 [25]
(197) |11111111|11111111|11010000|1 1ffffa1 [25]
(198) |11111111|11111111|11010001|0 1ffffa2 [25]
(199) |11111111|11111111|11010001|1 1ffffa3 [25]
(200) |11111111|11111111|11010010|0 1ffffa4 [25]
(201) |11111111|11111111|11010010|1 1ffffa5 [25]
(202) |11111111|11111111|11010011|0 1ffffa6 [25]
(203) |11111111|11111111|11010011|1 1ffffa7 [25]
(204) |11111111|11111111|11010100|0 1ffffa8 [25]
(205) |11111111|11111111|11010100|1 1ffffa9 [25]
(206) |11111111|11111111|11010101|0 1ffffaa [25]
(207) |11111111|11111111|11010101|1 1ffffab [25]
(208) |11111111|11111111|11010110|0 1ffffac [25]
(209) |11111111|11111111|11010110|1 1ffffad [25]
(210) |11111111|11111111|11010111|0 1ffffae [25]
(211) |11111111|11111111|11010111|1 1ffffaf [25]
(212) |11111111|11111111|11011000|0 1ffffb0 [25]
(213) |11111111|11111111|11011000|1 1ffffb1 [25]
(214) |11111111|11111111|11011001|0 1ffffb2 [25]
(215) |11111111|11111111|11011001|1 1ffffb3 [25]
(216) |11111111|11111111|11011010|0 1ffffb4 [25]
(217) |11111111|11111111|11011010|1 1ffffb5 [25]
(218) |11111111|11111111|11011011|0 1ffffb6 [25]
(219) |11111111|11111111|11011011|1 1ffffb7 [25]
(220) |11111111|11111111|11011100|0 1ffffb8 [25]
(221) |11111111|11111111|11011100|1 1ffffb9 [25]
(222) |11111111|11111111|11011101|0 1ffffba [25]
(223) |11111111|11111111|11011101|1 1ffffbb [25]
(224) |11111111|11111111|11011110|0 1ffffbc [25]
(225) |11111111|11111111|11011110|1 1ffffbd [25]
(226) |11111111|11111111|11011111|0 1ffffbe [25]
(227) |11111111|11111111|11011111|1 1ffffbf [25]
(228) |11111111|11111111|11100000|0 1ffffc0 [25]
(229) |11111111|11111111|11100000|1 1ffffc1 [25]
(230) |11111111|11111111|11100001|0 1ffffc2 [25]
(231) |11111111|11111111|11100001|1 1ffffc3 [25]
(232) |11111111|11111111|11100010|0 1ffffc4 [25]
(233) |11111111|11111111|11100010|1 1ffffc5 [25]
(234) |11111111|11111111|11100011|0 1ffffc6 [25]
(235) |11111111|11111111|11100011|1 1ffffc7 [25]
(236) |11111111|11111111|11100100|0 1ffffc8 [25]
(237) |11111111|11111111|11100100|1 1ffffc9 [25]
(238) |11111111|11111111|11100101|0 1ffffca [25]
(239) |11111111|11111111|11100101|1 1ffffcb [25]
(240) |11111111|11111111|11100110|0 1ffffcc [25]
(241) |11111111|11111111|11100110|1 1ffffcd [25]
(242) |11111111|11111111|11100111|0 1ffffce [25]
(243) |11111111|11111111|11100111|1 1ffffcf [25]
(244) |11111111|11111111|11101000|0 1ffffd0 [25]
(245) |11111111|11111111|11101000|1 1ffffd1 [25]
(246) |11111111|11111111|11101001|0 1ffffd2 [25]
(247) |11111111|11111111|11101001|1 1ffffd3 [25]
(248) |11111111|11111111|11101010|0 1ffffd4 [25]
(249) |11111111|11111111|11101010|1 1ffffd5 [25]
(250) |11111111|11111111|11101011|0 1ffffd6 [25]
(251) |11111111|11111111|11101011|1 1ffffd7 [25]
(252) |11111111|11111111|11101100|0 1ffffd8 [25]
(253) |11111111|11111111|11101100|1 1ffffd9 [25]
(254) |11111111|11111111|11101101|0 1ffffda [25]
(255) |11111111|11111111|11101101|1 1ffffdb [25]
EOS (256) |11111111|11111111|11101110|0 1ffffdc [25]
( 0) |11111111|11000 1ff8 [13]
( 1) |11111111|11111111|1011000 7fffd8 [23]
( 2) |11111111|11111111|11111110|0010 fffffe2 [28]
( 3) |11111111|11111111|11111110|0011 fffffe3 [28]
( 4) |11111111|11111111|11111110|0100 fffffe4 [28]
( 5) |11111111|11111111|11111110|0101 fffffe5 [28]
( 6) |11111111|11111111|11111110|0110 fffffe6 [28]
( 7) |11111111|11111111|11111110|0111 fffffe7 [28]
( 8) |11111111|11111111|11111110|1000 fffffe8 [28]
( 9) |11111111|11111111|11101010 ffffea [24]
( 10) |11111111|11111111|11111111|111100 3ffffffc [30]
( 11) |11111111|11111111|11111110|1001 fffffe9 [28]
( 12) |11111111|11111111|11111110|1010 fffffea [28]
( 13) |11111111|11111111|11111111|111101 3ffffffd [30]
( 14) |11111111|11111111|11111110|1011 fffffeb [28]
( 15) |11111111|11111111|11111110|1100 fffffec [28]
( 16) |11111111|11111111|11111110|1101 fffffed [28]
( 17) |11111111|11111111|11111110|1110 fffffee [28]
( 18) |11111111|11111111|11111110|1111 fffffef [28]
( 19) |11111111|11111111|11111111|0000 ffffff0 [28]
( 20) |11111111|11111111|11111111|0001 ffffff1 [28]
( 21) |11111111|11111111|11111111|0010 ffffff2 [28]
( 22) |11111111|11111111|11111111|111110 3ffffffe [30]
( 23) |11111111|11111111|11111111|0011 ffffff3 [28]
( 24) |11111111|11111111|11111111|0100 ffffff4 [28]
( 25) |11111111|11111111|11111111|0101 ffffff5 [28]
( 26) |11111111|11111111|11111111|0110 ffffff6 [28]
( 27) |11111111|11111111|11111111|0111 ffffff7 [28]
( 28) |11111111|11111111|11111111|1000 ffffff8 [28]
( 29) |11111111|11111111|11111111|1001 ffffff9 [28]
( 30) |11111111|11111111|11111111|1010 ffffffa [28]
( 31) |11111111|11111111|11111111|1011 ffffffb [28]
' ' ( 32) |010100 14 [ 6]
'!' ( 33) |11111110|00 3f8 [10]
'"' ( 34) |11111110|01 3f9 [10]
'#' ( 35) |11111111|1010 ffa [12]
'$' ( 36) |11111111|11001 1ff9 [13]
'%' ( 37) |010101 15 [ 6]
'&' ( 38) |11111000 f8 [ 8]
''' ( 39) |11111111|010 7fa [11]
'(' ( 40) |11111110|10 3fa [10]
')' ( 41) |11111110|11 3fb [10]
'*' ( 42) |11111001 f9 [ 8]
'+' ( 43) |11111111|011 7fb [11]
',' ( 44) |11111010 fa [ 8]
'-' ( 45) |010110 16 [ 6]
'.' ( 46) |010111 17 [ 6]
'/' ( 47) |011000 18 [ 6]
'0' ( 48) |00000 0 [ 5]
'1' ( 49) |00001 1 [ 5]
'2' ( 50) |00010 2 [ 5]
'3' ( 51) |011001 19 [ 6]
'4' ( 52) |011010 1a [ 6]
'5' ( 53) |011011 1b [ 6]
'6' ( 54) |011100 1c [ 6]
'7' ( 55) |011101 1d [ 6]
'8' ( 56) |011110 1e [ 6]
'9' ( 57) |011111 1f [ 6]
':' ( 58) |1011100 5c [ 7]
';' ( 59) |11111011 fb [ 8]
'<' ( 60) |11111111|1111100 7ffc [15]
'=' ( 61) |100000 20 [ 6]
'>' ( 62) |11111111|1011 ffb [12]
'?' ( 63) |11111111|00 3fc [10]
'@' ( 64) |11111111|11010 1ffa [13]
'A' ( 65) |100001 21 [ 6]
'B' ( 66) |1011101 5d [ 7]
'C' ( 67) |1011110 5e [ 7]
'D' ( 68) |1011111 5f [ 7]
'E' ( 69) |1100000 60 [ 7]
'F' ( 70) |1100001 61 [ 7]
'G' ( 71) |1100010 62 [ 7]
'H' ( 72) |1100011 63 [ 7]
'I' ( 73) |1100100 64 [ 7]
'J' ( 74) |1100101 65 [ 7]
'K' ( 75) |1100110 66 [ 7]
'L' ( 76) |1100111 67 [ 7]
'M' ( 77) |1101000 68 [ 7]
'N' ( 78) |1101001 69 [ 7]
'O' ( 79) |1101010 6a [ 7]
'P' ( 80) |1101011 6b [ 7]
'Q' ( 81) |1101100 6c [ 7]
'R' ( 82) |1101101 6d [ 7]
'S' ( 83) |1101110 6e [ 7]
'T' ( 84) |1101111 6f [ 7]
'U' ( 85) |1110000 70 [ 7]
'V' ( 86) |1110001 71 [ 7]
'W' ( 87) |1110010 72 [ 7]
'X' ( 88) |11111100 fc [ 8]
'Y' ( 89) |1110011 73 [ 7]
'Z' ( 90) |11111101 fd [ 8]
'[' ( 91) |11111111|11011 1ffb [13]
'\' ( 92) |11111111|11111110|000 7fff0 [19]
']' ( 93) |11111111|11100 1ffc [13]
'^' ( 94) |11111111|111100 3ffc [14]
'_' ( 95) |100010 22 [ 6]
'`' ( 96) |11111111|1111101 7ffd [15]
'a' ( 97) |00011 3 [ 5]
'b' ( 98) |100011 23 [ 6]
'c' ( 99) |00100 4 [ 5]
'd' (100) |100100 24 [ 6]
'e' (101) |00101 5 [ 5]
'f' (102) |100101 25 [ 6]
'g' (103) |100110 26 [ 6]
'h' (104) |100111 27 [ 6]
'i' (105) |00110 6 [ 5]
'j' (106) |1110100 74 [ 7]
'k' (107) |1110101 75 [ 7]
'l' (108) |101000 28 [ 6]
'm' (109) |101001 29 [ 6]
'n' (110) |101010 2a [ 6]
'o' (111) |00111 7 [ 5]
'p' (112) |101011 2b [ 6]
'q' (113) |1110110 76 [ 7]
'r' (114) |101100 2c [ 6]
's' (115) |01000 8 [ 5]
't' (116) |01001 9 [ 5]
'u' (117) |101101 2d [ 6]
'v' (118) |1110111 77 [ 7]
'w' (119) |1111000 78 [ 7]
'x' (120) |1111001 79 [ 7]
'y' (121) |1111010 7a [ 7]
'z' (122) |1111011 7b [ 7]
'{' (123) |11111111|1111110 7ffe [15]
'|' (124) |11111111|100 7fc [11]
'}' (125) |11111111|111101 3ffd [14]
'~' (126) |11111111|11101 1ffd [13]
(127) |11111111|11111111|11111111|1100 ffffffc [28]
(128) |11111111|11111110|0110 fffe6 [20]
(129) |11111111|11111111|010010 3fffd2 [22]
(130) |11111111|11111110|0111 fffe7 [20]
(131) |11111111|11111110|1000 fffe8 [20]
(132) |11111111|11111111|010011 3fffd3 [22]
(133) |11111111|11111111|010100 3fffd4 [22]
(134) |11111111|11111111|010101 3fffd5 [22]
(135) |11111111|11111111|1011001 7fffd9 [23]
(136) |11111111|11111111|010110 3fffd6 [22]
(137) |11111111|11111111|1011010 7fffda [23]
(138) |11111111|11111111|1011011 7fffdb [23]
(139) |11111111|11111111|1011100 7fffdc [23]
(140) |11111111|11111111|1011101 7fffdd [23]
(141) |11111111|11111111|1011110 7fffde [23]
(142) |11111111|11111111|11101011 ffffeb [24]
(143) |11111111|11111111|1011111 7fffdf [23]
(144) |11111111|11111111|11101100 ffffec [24]
(145) |11111111|11111111|11101101 ffffed [24]
(146) |11111111|11111111|010111 3fffd7 [22]
(147) |11111111|11111111|1100000 7fffe0 [23]
(148) |11111111|11111111|11101110 ffffee [24]
(149) |11111111|11111111|1100001 7fffe1 [23]
(150) |11111111|11111111|1100010 7fffe2 [23]
(151) |11111111|11111111|1100011 7fffe3 [23]
(152) |11111111|11111111|1100100 7fffe4 [23]
(153) |11111111|11111110|11100 1fffdc [21]
(154) |11111111|11111111|011000 3fffd8 [22]
(155) |11111111|11111111|1100101 7fffe5 [23]
(156) |11111111|11111111|011001 3fffd9 [22]
(157) |11111111|11111111|1100110 7fffe6 [23]
(158) |11111111|11111111|1100111 7fffe7 [23]
(159) |11111111|11111111|11101111 ffffef [24]
(160) |11111111|11111111|011010 3fffda [22]
(161) |11111111|11111110|11101 1fffdd [21]
(162) |11111111|11111110|1001 fffe9 [20]
(163) |11111111|11111111|011011 3fffdb [22]
(164) |11111111|11111111|011100 3fffdc [22]
(165) |11111111|11111111|1101000 7fffe8 [23]
(166) |11111111|11111111|1101001 7fffe9 [23]
(167) |11111111|11111110|11110 1fffde [21]
(168) |11111111|11111111|1101010 7fffea [23]
(169) |11111111|11111111|011101 3fffdd [22]
(170) |11111111|11111111|011110 3fffde [22]
(171) |11111111|11111111|11110000 fffff0 [24]
(172) |11111111|11111110|11111 1fffdf [21]
(173) |11111111|11111111|011111 3fffdf [22]
(174) |11111111|11111111|1101011 7fffeb [23]
(175) |11111111|11111111|1101100 7fffec [23]
(176) |11111111|11111111|00000 1fffe0 [21]
(177) |11111111|11111111|00001 1fffe1 [21]
(178) |11111111|11111111|100000 3fffe0 [22]
(179) |11111111|11111111|00010 1fffe2 [21]
(180) |11111111|11111111|1101101 7fffed [23]
(181) |11111111|11111111|100001 3fffe1 [22]
(182) |11111111|11111111|1101110 7fffee [23]
(183) |11111111|11111111|1101111 7fffef [23]
(184) |11111111|11111110|1010 fffea [20]
(185) |11111111|11111111|100010 3fffe2 [22]
(186) |11111111|11111111|100011 3fffe3 [22]
(187) |11111111|11111111|100100 3fffe4 [22]
(188) |11111111|11111111|1110000 7ffff0 [23]
(189) |11111111|11111111|100101 3fffe5 [22]
(190) |11111111|11111111|100110 3fffe6 [22]
(191) |11111111|11111111|1110001 7ffff1 [23]
(192) |11111111|11111111|11111000|00 3ffffe0 [26]
(193) |11111111|11111111|11111000|01 3ffffe1 [26]
(194) |11111111|11111110|1011 fffeb [20]
(195) |11111111|11111110|001 7fff1 [19]
(196) |11111111|11111111|100111 3fffe7 [22]
(197) |11111111|11111111|1110010 7ffff2 [23]
(198) |11111111|11111111|101000 3fffe8 [22]
(199) |11111111|11111111|11110110|0 1ffffec [25]
(200) |11111111|11111111|11111000|10 3ffffe2 [26]
(201) |11111111|11111111|11111000|11 3ffffe3 [26]
(202) |11111111|11111111|11111001|00 3ffffe4 [26]
(203) |11111111|11111111|11111011|110 7ffffde [27]
(204) |11111111|11111111|11111011|111 7ffffdf [27]
(205) |11111111|11111111|11111001|01 3ffffe5 [26]
(206) |11111111|11111111|11110001 fffff1 [24]
(207) |11111111|11111111|11110110|1 1ffffed [25]
(208) |11111111|11111110|010 7fff2 [19]
(209) |11111111|11111111|00011 1fffe3 [21]
(210) |11111111|11111111|11111001|10 3ffffe6 [26]
(211) |11111111|11111111|11111100|000 7ffffe0 [27]
(212) |11111111|11111111|11111100|001 7ffffe1 [27]
(213) |11111111|11111111|11111001|11 3ffffe7 [26]
(214) |11111111|11111111|11111100|010 7ffffe2 [27]
(215) |11111111|11111111|11110010 fffff2 [24]
(216) |11111111|11111111|00100 1fffe4 [21]
(217) |11111111|11111111|00101 1fffe5 [21]
(218) |11111111|11111111|11111010|00 3ffffe8 [26]
(219) |11111111|11111111|11111010|01 3ffffe9 [26]
(220) |11111111|11111111|11111111|1101 ffffffd [28]
(221) |11111111|11111111|11111100|011 7ffffe3 [27]
(222) |11111111|11111111|11111100|100 7ffffe4 [27]
(223) |11111111|11111111|11111100|101 7ffffe5 [27]
(224) |11111111|11111110|1100 fffec [20]
(225) |11111111|11111111|11110011 fffff3 [24]
(226) |11111111|11111110|1101 fffed [20]
(227) |11111111|11111111|00110 1fffe6 [21]
(228) |11111111|11111111|101001 3fffe9 [22]
(229) |11111111|11111111|00111 1fffe7 [21]
(230) |11111111|11111111|01000 1fffe8 [21]
(231) |11111111|11111111|1110011 7ffff3 [23]
(232) |11111111|11111111|101010 3fffea [22]
(233) |11111111|11111111|101011 3fffeb [22]
(234) |11111111|11111111|11110111|0 1ffffee [25]
(235) |11111111|11111111|11110111|1 1ffffef [25]
(236) |11111111|11111111|11110100 fffff4 [24]
(237) |11111111|11111111|11110101 fffff5 [24]
(238) |11111111|11111111|11111010|10 3ffffea [26]
(239) |11111111|11111111|1110100 7ffff4 [23]
(240) |11111111|11111111|11111010|11 3ffffeb [26]
(241) |11111111|11111111|11111100|110 7ffffe6 [27]
(242) |11111111|11111111|11111011|00 3ffffec [26]
(243) |11111111|11111111|11111011|01 3ffffed [26]
(244) |11111111|11111111|11111100|111 7ffffe7 [27]
(245) |11111111|11111111|11111101|000 7ffffe8 [27]
(246) |11111111|11111111|11111101|001 7ffffe9 [27]
(247) |11111111|11111111|11111101|010 7ffffea [27]
(248) |11111111|11111111|11111101|011 7ffffeb [27]
(249) |11111111|11111111|11111111|1110 ffffffe [28]
(250) |11111111|11111111|11111101|100 7ffffec [27]
(251) |11111111|11111111|11111101|101 7ffffed [27]
(252) |11111111|11111111|11111101|110 7ffffee [27]
(253) |11111111|11111111|11111101|111 7ffffef [27]
(254) |11111111|11111111|11111110|000 7fffff0 [27]
(255) |11111111|11111111|11111011|10 3ffffee [26]
EOS (256) |11111111|11111111|11111111|111111 3fffffff [30]

View File

@ -35,13 +35,14 @@ namespace net {
// 25 was spdy/4a2
// 26 was http/2-draft08 and http/2-draft07 (they were the same)
// 27 was http/2-draft09, h2-10, and h2-11
HTTP2_VERSION_DRAFT12 = 28
// 28 was http/2-draft12
HTTP2_VERSION_DRAFT13 = 29
};
typedef uint8_t nsHttpVersion;
#define NS_HTTP2_DRAFT_VERSION HTTP2_VERSION_DRAFT12
#define NS_HTTP2_DRAFT_TOKEN "h2-12"
#define NS_HTTP2_DRAFT_VERSION HTTP2_VERSION_DRAFT13
#define NS_HTTP2_DRAFT_TOKEN "h2-13"
//-----------------------------------------------------------------------------
// http connection capabilities