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

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     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 };

mercurial