Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Utilities/cmnghttp2/lib/nghttp2_hd_huffman.h
3153 views
1
/*
2
* nghttp2 - HTTP/2 C Library
3
*
4
* Copyright (c) 2013 Tatsuhiro Tsujikawa
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining
7
* a copy of this software and associated documentation files (the
8
* "Software"), to deal in the Software without restriction, including
9
* without limitation the rights to use, copy, modify, merge, publish,
10
* distribute, sublicense, and/or sell copies of the Software, and to
11
* permit persons to whom the Software is furnished to do so, subject to
12
* the following conditions:
13
*
14
* The above copyright notice and this permission notice shall be
15
* included in all copies or substantial portions of the Software.
16
*
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
*/
25
#ifndef NGHTTP2_HD_HUFFMAN_H
26
#define NGHTTP2_HD_HUFFMAN_H
27
28
#ifdef HAVE_CONFIG_H
29
# include <config.h>
30
#endif /* HAVE_CONFIG_H */
31
32
#include <nghttp2/nghttp2.h>
33
34
typedef enum {
35
/* FSA accepts this state as the end of huffman encoding
36
sequence. */
37
NGHTTP2_HUFF_ACCEPTED = 1 << 14,
38
/* This state emits symbol */
39
NGHTTP2_HUFF_SYM = 1 << 15,
40
} nghttp2_huff_decode_flag;
41
42
typedef struct {
43
/* fstate is the current huffman decoding state, which is actually
44
the node ID of internal huffman tree with
45
nghttp2_huff_decode_flag OR-ed. We have 257 leaf nodes, but they
46
are identical to root node other than emitting a symbol, so we
47
have 256 internal nodes [1..255], inclusive. The node ID 256 is
48
a special node and it is a terminal state that means decoding
49
failed. */
50
uint16_t fstate;
51
/* symbol if NGHTTP2_HUFF_SYM flag set */
52
uint8_t sym;
53
} nghttp2_huff_decode;
54
55
typedef nghttp2_huff_decode huff_decode_table_type[16];
56
57
typedef struct {
58
/* fstate is the current huffman decoding state. */
59
uint16_t fstate;
60
} nghttp2_hd_huff_decode_context;
61
62
typedef struct {
63
/* The number of bits in this code */
64
uint32_t nbits;
65
/* Huffman code aligned to LSB */
66
uint32_t code;
67
} nghttp2_huff_sym;
68
69
extern const nghttp2_huff_sym huff_sym_table[];
70
extern const nghttp2_huff_decode huff_decode_table[][16];
71
72
#endif /* NGHTTP2_HD_HUFFMAN_H */
73
74