UNPKG

h2cli

Version:

A command line interface for HTTP/2

92 lines (86 loc) 2.82 kB
var util = require('util'); var h2frame = require('../frame'); var Http2Frame = h2frame.Http2Frame; /****************** * SETTINGS FRAME ******************/ var Http2SettingsFrame = module.exports = function (buf) { if (!(this instanceof Http2SettingsFrame)) { return new Http2SettingsFrame(buf); } if (buf) { this.buf = buf; } else { this.buf = new Buffer([0x00, 0x00, 0x00, Http2SettingsFrame.TYPE_CODE, 0x00, 0x00, 0x00, 0x00, 0x00]); } }; util.inherits(Http2SettingsFrame, Http2Frame); Http2Frame.defineType(Http2SettingsFrame, { NAME: 'SETTINGS', CODE: 0x04, }); Http2Frame.defineFlags(Http2SettingsFrame, { ACK: { value: 0x01 }, }); Object.defineProperty(Http2SettingsFrame, 'PARAM_SETTINGS_HEADER_TABLE_SIZE', { get: function () { return 1; }, }); Object.defineProperty(Http2SettingsFrame, 'PARAM_SETTINGS_ENABLE_PUSH', { get: function () { return 2; }, }); Object.defineProperty(Http2SettingsFrame, 'PARAM_SETTINGS_MAX_CONCURRENT_STREAMS', { get: function () { return 3; }, }); Object.defineProperty(Http2SettingsFrame, 'PARAM_SETTINGS_INITIAL_WINDOW_SIZE', { get: function () { return 4; }, }); Object.defineProperty(Http2SettingsFrame, 'PARAM_SETTINGS_MAX_FRAME_SIZE', { get: function () { return 5; }, }); Object.defineProperty(Http2SettingsFrame, 'PARAM_SETTINGS_MAX_HEADER_LIST_SIZE', { get: function () { return 6; }, }); Http2SettingsFrame.prototype.getParamCount = function () { return this.length / 6; }; Http2SettingsFrame.prototype.getParamByIndex = function (index) { if (index >= this.getParamCount()) { return void(0); } return { id: this.buf.readUInt16BE(Http2Frame.HEADER_SIZE + 6 * index), value: this.buf.readUInt32BE(Http2Frame.HEADER_SIZE + 6 * index + 2) }; }; Http2SettingsFrame.prototype.getParamById = function (id) { var param, i, n = this.getParamCount(); for (i = 0; i < n; i++) { param = this.getParamByIndex(i); if (param.id === id) { return param; } } return void(0); }; Http2SettingsFrame.prototype.getParamIndexOf = function (id) { var param, i, n = this.getParamCount(); for (i = 0; i < n; i++) { param = this.getParamByIndex(i); if (param.id === id) { return i; } } return void(0); }; Http2SettingsFrame.prototype.setParam = function (id, value) { var index; if (typeof (index = this.getParamIndexOf(id)) !== 'undefined') { this.buf.writeUInt32BE(value, Http2Frame.HEADER_SIZE + 6 * index + 2); } else { var newBuf = new Buffer(6); newBuf.writeUInt16BE(id, 0); newBuf.writeUInt32BE(value, 2); this.buf = Buffer.concat([this.buf, newBuf], this.buf.length + 6); this.length += 6; } };