all files / lib/spdy-transport/protocol/spdy/ zlib-pool.js

91.3% Statements 21/23
50% Branches 2/4
83.33% Functions 5/6
91.3% Lines 21/23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67            443×               443×   443×     443×             443×   443×     443× 443×             443×     443×     443×   443×                    
'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,
    windowBits: 0
  })
 
  // 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) {
  Iif (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)
}