1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- '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)
- }
|