Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 var protocol = exports;
3 //
4 // ### function parseSynHead (type, flags, data)
5 // #### @type {Number} Frame type
6 // #### @flags {Number} Frame flags
7 // #### @data {Buffer} input data
8 // Returns parsed syn_* frame's head
9 //
10 protocol.parseSynHead = function parseSynHead(type, flags, data) {
11 var stream = type === 0x01;
13 return {
14 type: stream ? 'SYN_STREAM' : 'SYN_REPLY',
15 id: data.readUInt32BE(0, true) & 0x7fffffff,
16 version: 2,
17 associated: stream ? data.readUInt32BE(4, true) & 0x7fffffff : 0,
18 priority: stream ? data[8] >> 6 : 0,
19 fin: (flags & 0x01) === 0x01,
20 unidir: (flags & 0x02) === 0x02,
21 _offset: stream ? 10 : 6
22 };
23 };
25 //
26 // ### function parseHeaders (pairs)
27 // #### @pairs {Buffer} header pairs
28 // Returns hashmap of parsed headers
29 //
30 protocol.parseHeaders = function parseHeaders(pairs) {
31 var count = pairs.readUInt16BE(0, true),
32 headers = {};
34 pairs = pairs.slice(2);
36 function readString() {
37 var len = pairs.readUInt16BE(0, true),
38 value = pairs.slice(2, 2 + len);
40 pairs = pairs.slice(2 + len);
42 return value.toString();
43 }
45 while(count > 0) {
46 headers[readString()] = readString();
47 count--;
48 }
50 return headers;
51 };
53 //
54 // ### function parsesRst frame
55 protocol.parseRst = function parseRst(data) {
56 return {
57 type: 'RST_STREAM',
58 id: data.readUInt32BE(0, true) & 0x7fffffff,
59 status: data.readUInt32BE(4, true)
60 };
61 };
63 protocol.parseGoaway = function parseGoaway(data) {
64 return {
65 type: 'GOAWAY',
66 lastId: data.readUInt32BE(0, true) & 0x7fffffff
67 };
68 };