# 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

    1×
    1×

    1×

    1×
    443×

    443×

    443×

    1×
    443×

    443×

    443×

    1×
    443×
    443×

    1×
    443×

    1×
    443×

    443×

    443×

    1×

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