first commit
This commit is contained in:
127
app_vue/node_modules/hpack.js/lib/hpack/compressor.js
generated
vendored
Normal file
127
app_vue/node_modules/hpack.js/lib/hpack/compressor.js
generated
vendored
Normal file
@ -0,0 +1,127 @@
|
||||
var hpack = require('../hpack');
|
||||
var utils = hpack.utils;
|
||||
var encoder = hpack.encoder;
|
||||
var table = hpack.table;
|
||||
var assert = utils.assert;
|
||||
|
||||
var inherits = require('inherits');
|
||||
var Duplex = require('readable-stream').Duplex;
|
||||
|
||||
function Compressor(options) {
|
||||
Duplex.call(this, {
|
||||
writableObjectMode: true
|
||||
});
|
||||
|
||||
this._encoder = null;
|
||||
this._table = table.create(options.table);
|
||||
}
|
||||
inherits(Compressor, Duplex);
|
||||
module.exports = Compressor;
|
||||
|
||||
Compressor.create = function create(options) {
|
||||
return new Compressor(options);
|
||||
};
|
||||
|
||||
Compressor.prototype._read = function _read() {
|
||||
// We only push!
|
||||
};
|
||||
|
||||
Compressor.prototype._write = function _write(data, enc, cb) {
|
||||
assert(Array.isArray(data), 'Compressor.write() expects list of headers');
|
||||
|
||||
this._encoder = encoder.create();
|
||||
for (var i = 0; i < data.length; i++)
|
||||
this._encodeHeader(data[i]);
|
||||
|
||||
var data = this._encoder.render();
|
||||
this._encoder = null;
|
||||
|
||||
cb(null);
|
||||
for (var i = 0; i < data.length; i++)
|
||||
this.push(data[i]);
|
||||
};
|
||||
|
||||
Compressor.prototype.updateTableSize = function updateTableSize(size) {
|
||||
if (size >= this._table.protocolMaxSize) {
|
||||
size = this._table.protocolMaxSize;
|
||||
|
||||
var enc = encoder.create();
|
||||
|
||||
// indexed = 0
|
||||
// incremental = 0
|
||||
// update = 1
|
||||
enc.encodeBits(1, 3);
|
||||
enc.encodeInt(size);
|
||||
|
||||
var data = enc.render();
|
||||
for (var i = 0; i < data.length; i++)
|
||||
this.push(data[i]);
|
||||
}
|
||||
|
||||
this._table.updateSize(size);
|
||||
};
|
||||
|
||||
Compressor.prototype.reset = function reset() {
|
||||
var enc = encoder.create();
|
||||
var size = this._table.maxSize;
|
||||
|
||||
// indexed = 0
|
||||
// incremental = 0
|
||||
// update = 1
|
||||
enc.encodeBits(1, 3);
|
||||
enc.encodeInt(0);
|
||||
|
||||
// Evict everything
|
||||
this._table.updateSize(0);
|
||||
|
||||
// indexed = 0
|
||||
// incremental = 0
|
||||
// update = 1
|
||||
enc.encodeBits(1, 3);
|
||||
enc.encodeInt(size);
|
||||
|
||||
// Revert size
|
||||
this._table.updateSize(size);
|
||||
|
||||
var data = enc.render();
|
||||
for (var i = 0; i < data.length; i++)
|
||||
this.push(data[i]);
|
||||
};
|
||||
|
||||
Compressor.prototype._encodeHeader = function _encodeHeader(header) {
|
||||
if (header.neverIndex) {
|
||||
var index = 0;
|
||||
var neverIndex = 1;
|
||||
var isIndexed = 0;
|
||||
var isIncremental = 0;
|
||||
} else {
|
||||
var index = this._table.reverseLookup(header.name, header.value);
|
||||
var isIndexed = index > 0;
|
||||
var isIncremental = header.incremental !== false;
|
||||
var neverIndex = 0;
|
||||
}
|
||||
|
||||
this._encoder.encodeBit(isIndexed);
|
||||
if (isIndexed) {
|
||||
this._encoder.encodeInt(index);
|
||||
return;
|
||||
}
|
||||
|
||||
var name = utils.toArray(header.name);
|
||||
var value = utils.toArray(header.value);
|
||||
|
||||
this._encoder.encodeBit(isIncremental);
|
||||
if (isIncremental) {
|
||||
this._table.add(header.name, header.value, name.length, value.length);
|
||||
} else {
|
||||
// Update = false
|
||||
this._encoder.encodeBit(0);
|
||||
this._encoder.encodeBit(neverIndex);
|
||||
}
|
||||
|
||||
// index is negative for `name`-only headers
|
||||
this._encoder.encodeInt(-index);
|
||||
if (index === 0)
|
||||
this._encoder.encodeStr(name, header.huffman !== false);
|
||||
this._encoder.encodeStr(value, header.huffman !== false);
|
||||
};
|
Reference in New Issue
Block a user