'use strict'
|
|
var zlibpool = exports
|
var zlib = require('zlib')
|
|
var transport = require('../../../spdy-transport')
|
|
// TODO(indutny): think about it, why has it always been Z_SYNC_FLUSH here.
|
// It should be possible to manually flush stuff after the write instead
|
function createDeflate (version, compression) {
|
var deflate = zlib.createDeflate({
|
dictionary: transport.protocol.spdy.dictionary[version],
|
flush: zlib.Z_SYNC_FLUSH,
|
windowBits: 11,
|
level: compression ? zlib.Z_DEFAULT_COMPRESSION : zlib.Z_NO_COMPRESSION
|
})
|
|
// For node.js v0.8
|
deflate._flush = zlib.Z_SYNC_FLUSH
|
|
return deflate
|
}
|
|
function createInflate (version) {
|
var inflate = zlib.createInflate({
|
dictionary: transport.protocol.spdy.dictionary[version],
|
flush: zlib.Z_SYNC_FLUSH
|
})
|
|
// For node.js v0.8
|
inflate._flush = zlib.Z_SYNC_FLUSH
|
|
return inflate
|
}
|
|
function Pool (compression) {
|
this.compression = compression
|
this.pool = {
|
2: [],
|
3: [],
|
3.1: []
|
}
|
}
|
|
zlibpool.create = function create (compression) {
|
return new Pool(compression)
|
}
|
|
Pool.prototype.get = function get (version) {
|
if (this.pool[version].length > 0) {
|
return this.pool[version].pop()
|
} else {
|
var id = version
|
|
return {
|
version: version,
|
compress: createDeflate(id, this.compression),
|
decompress: createInflate(id)
|
}
|
}
|
}
|
|
Pool.prototype.put = function put (pair) {
|
this.pool[pair.version].push(pair)
|
}
|