all files / lib/protocol/ index.js

100% Statements 8/8
100% Branches 0/0
100% Functions 1/1
100% Lines 8/8
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98                                                                                                                                                                                   
// This is an implementation of the [HTTP/2][http2]
// framing layer for [node.js][node].
//
// The main building blocks are [node.js streams][node-stream] that are connected through pipes.
//
// The main components are:
//
// * [Endpoint](endpoint.html): represents an HTTP/2 endpoint (client or server). It's
//   responsible for the the first part of the handshake process (sending/receiving the
//   [connection header][http2-connheader]) and manages other components (framer, compressor,
//   connection, streams) that make up a client or server.
//
// * [Connection](connection.html): multiplexes the active HTTP/2 streams, manages connection
//   lifecycle and settings, and responsible for enforcing the connection level limits (flow
//   control, initiated stream limit)
//
// * [Stream](stream.html): implementation of the [HTTP/2 stream concept][http2-stream].
//   Implements the [stream state machine][http2-streamstate] defined by the standard, provides
//   management methods and events for using the stream (sending/receiving headers, data, etc.),
//   and enforces stream level constraints (flow control, sending only legal frames).
//
// * [Flow](flow.html): implements flow control for Connection and Stream as parent class.
//
// * [Compressor and Decompressor](compressor.html): compression and decompression of HEADER and
//   PUSH_PROMISE frames
//
// * [Serializer and Deserializer](framer.html): the lowest layer in the stack that transforms
//   between the binary and the JavaScript object representation of HTTP/2 frames
//
// [http2]:               https://tools.ietf.org/html/rfc7540
// [http2-connheader]:    https://tools.ietf.org/html/rfc7540#section-3.5
// [http2-stream]:        https://tools.ietf.org/html/rfc7540#section-5
// [http2-streamstate]:   https://tools.ietf.org/html/rfc7540#section-5.1
// [node]:                https://nodejs.org/
// [node-stream]:         https://nodejs.org/api/stream.html
// [node-https]:          https://nodejs.org/api/https.html
// [node-http]:           https://nodejs.org/api/http.html
 
exports.VERSION = 'h2';
 
exports.Endpoint = require('./endpoint').Endpoint;
 
/* Bunyan serializers exported by submodules that are worth adding when creating a logger. */
 
exports.serializers = {};
var modules = ['./framer', './compressor', './flow', './connection', './stream', './endpoint'];
try {
    modules.map(require).forEach(function (module) {
        for (var name in module.serializers) {
            exports.serializers[name] = module.serializers[name];
        }
    });
} catch (e) {
    // NOOP, probably in browser
}
 
 
/*
              Stream API            Endpoint API
              Stream data
 
             |            ^        |            ^
             |            |        |            |
             |            |        |            |
 +-----------|------------|---------------------------------------+
 |           |            |   Endpoint                            |
 |           |            |                                       |
 |   +-------|------------|-----------------------------------+   |
 |   |       |            |  Connection                       |   |
 |   |       v            |                                   |   |
 |   |  +-----------------------+  +--------------------      |   |
 |   |  |        Stream         |  |         Stream      ...  |   |
 |   |  +-----------------------+  +--------------------      |   |
 |   |       |            ^              |            ^       |   |
 |   |       v            |              v            |       |   |
 |   |       +------------+--+--------+--+------------+- ...  |   |
 |   |                       |        ^                       |   |
 |   |                       |        |                       |   |
 |   +-----------------------|--------|-----------------------+   |
 |                           |        |                           |
 |                           v        |                           |
 |   +--------------------------+  +--------------------------+   |
 |   |        Compressor        |  |       Decompressor       |   |
 |   +--------------------------+  +--------------------------+   |
 |                           |        ^                           |
 |                           v        |                           |
 |   +--------------------------+  +--------------------------+   |
 |   |        Serializer        |  |       Deserializer       |   |
 |   +--------------------------+  +--------------------------+   |
 |                           |        ^                           |
 +---------------------------|--------|---------------------------+
                             |        |
                             v        |
 
                              Raw data
 
*/