testing/xpcshell/node-spdy/lib/spdy/protocol/v2/protocol.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:739dcc348802
1 var protocol = exports;
2
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;
12
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 };
24
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 = {};
33
34 pairs = pairs.slice(2);
35
36 function readString() {
37 var len = pairs.readUInt16BE(0, true),
38 value = pairs.slice(2, 2 + len);
39
40 pairs = pairs.slice(2 + len);
41
42 return value.toString();
43 }
44
45 while(count > 0) {
46 headers[readString()] = readString();
47 count--;
48 }
49
50 return headers;
51 };
52
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 };
62
63 protocol.parseGoaway = function parseGoaway(data) {
64 return {
65 type: 'GOAWAY',
66 lastId: data.readUInt32BE(0, true) & 0x7fffffff
67 };
68 };

mercurial