diff options
Diffstat (limited to 'src/microspdy/compression.c')
-rw-r--r-- | src/microspdy/compression.c | 441 |
1 files changed, 0 insertions, 441 deletions
diff --git a/src/microspdy/compression.c b/src/microspdy/compression.c deleted file mode 100644 index 532ab64a..00000000 --- a/src/microspdy/compression.c +++ /dev/null | |||
@@ -1,441 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of libmicrospdy | ||
3 | Copyright Copyright (C) 2012 Andrey Uzunov | ||
4 | |||
5 | This program is free software: you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation, either version 3 of the License, or | ||
8 | (at your option) any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | */ | ||
18 | |||
19 | /** | ||
20 | * @file compression.c | ||
21 | * @brief zlib handling functions | ||
22 | * @author Andrey Uzunov | ||
23 | */ | ||
24 | |||
25 | #include "platform.h" | ||
26 | #include "structures.h" | ||
27 | #include "internal.h" | ||
28 | #include "compression.h" | ||
29 | |||
30 | /* spdy ver 3 specific dictionary used by zlib */ | ||
31 | static const unsigned char | ||
32 | spdyf_zlib_dictionary[] = { | ||
33 | 0x00, 0x00, 0x00, 0x07, 0x6f, 0x70, 0x74, 0x69, // - - - - o p t i | ||
34 | 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x04, 0x68, // o n s - - - - h | ||
35 | 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x70, // e a d - - - - p | ||
36 | 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x70, // o s t - - - - p | ||
37 | 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65, // u t - - - - d e | ||
38 | 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, // l e t e - - - - | ||
39 | 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, // t r a c e - - - | ||
40 | 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, // - a c c e p t - | ||
41 | 0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, // - - - a c c e p | ||
42 | 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, // t - c h a r s e | ||
43 | 0x74, 0x00, 0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, // t - - - - a c c | ||
44 | 0x65, 0x70, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, // e p t - e n c o | ||
45 | 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x0f, // d i n g - - - - | ||
46 | 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x6c, // a c c e p t - l | ||
47 | 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, // a n g u a g e - | ||
48 | 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70, // - - - a c c e p | ||
49 | 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, // t - r a n g e s | ||
50 | 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, // - - - - a g e - | ||
51 | 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, // - - - a l l o w | ||
52 | 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, // - - - - a u t h | ||
53 | 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, // o r i z a t i o | ||
54 | 0x6e, 0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, // n - - - - c a c | ||
55 | 0x68, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, // h e - c o n t r | ||
56 | 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f, // o l - - - - c o | ||
57 | 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, // n n e c t i o n | ||
58 | 0x00, 0x00, 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, // - - - - c o n t | ||
59 | 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65, // e n t - b a s e | ||
60 | 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e, 0x74, // - - - - c o n t | ||
61 | 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, // e n t - e n c o | ||
62 | 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, // d i n g - - - - | ||
63 | 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, // c o n t e n t - | ||
64 | 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, // l a n g u a g e | ||
65 | 0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, // - - - - c o n t | ||
66 | 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, // e n t - l e n g | ||
67 | 0x74, 0x68, 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, // t h - - - - c o | ||
68 | 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x6f, // n t e n t - l o | ||
69 | 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, // c a t i o n - - | ||
70 | 0x00, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, // - - c o n t e n | ||
71 | 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00, 0x00, 0x00, // t - m d 5 - - - | ||
72 | 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, // - c o n t e n t | ||
73 | 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, // - r a n g e - - | ||
74 | 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, // - - c o n t e n | ||
75 | 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, // t - t y p e - - | ||
76 | 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, // - - d a t e - - | ||
77 | 0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, // - - e t a g - - | ||
78 | 0x00, 0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, // - - e x p e c t | ||
79 | 0x00, 0x00, 0x00, 0x07, 0x65, 0x78, 0x70, 0x69, // - - - - e x p i | ||
80 | 0x72, 0x65, 0x73, 0x00, 0x00, 0x00, 0x04, 0x66, // r e s - - - - f | ||
81 | 0x72, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x68, // r o m - - - - h | ||
82 | 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x08, 0x69, // o s t - - - - i | ||
83 | 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, // f - m a t c h - | ||
84 | 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d, 0x6f, // - - - i f - m o | ||
85 | 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73, // d i f i e d - s | ||
86 | 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, // i n c e - - - - | ||
87 | 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, // i f - n o n e - | ||
88 | 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, // m a t c h - - - | ||
89 | 0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, // - i f - r a n g | ||
90 | 0x65, 0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, // e - - - - i f - | ||
91 | 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, // u n m o d i f i | ||
92 | 0x65, 0x64, 0x2d, 0x73, 0x69, 0x6e, 0x63, 0x65, // e d - s i n c e | ||
93 | 0x00, 0x00, 0x00, 0x0d, 0x6c, 0x61, 0x73, 0x74, // - - - - l a s t | ||
94 | 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, // - m o d i f i e | ||
95 | 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63, // d - - - - l o c | ||
96 | 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, // a t i o n - - - | ||
97 | 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72, // - m a x - f o r | ||
98 | 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, // w a r d s - - - | ||
99 | 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, // - p r a g m a - | ||
100 | 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, // - - - p r o x y | ||
101 | 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, // - a u t h e n t | ||
102 | 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, // i c a t e - - - | ||
103 | 0x13, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, // - p r o x y - a | ||
104 | 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, // u t h o r i z a | ||
105 | 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, // t i o n - - - - | ||
106 | 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, 0x00, // r a n g e - - - | ||
107 | 0x07, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, // - r e f e r e r | ||
108 | 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74, 0x72, // - - - - r e t r | ||
109 | 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, // y - a f t e r - | ||
110 | 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, // - - - s e r v e | ||
111 | 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, // r - - - - t e - | ||
112 | 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, // - - - t r a i l | ||
113 | 0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, // e r - - - - t r | ||
114 | 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, // a n s f e r - e | ||
115 | 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, // n c o d i n g - | ||
116 | 0x00, 0x00, 0x07, 0x75, 0x70, 0x67, 0x72, 0x61, // - - - u p g r a | ||
117 | 0x64, 0x65, 0x00, 0x00, 0x00, 0x0a, 0x75, 0x73, // d e - - - - u s | ||
118 | 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, // e r - a g e n t | ||
119 | 0x00, 0x00, 0x00, 0x04, 0x76, 0x61, 0x72, 0x79, // - - - - v a r y | ||
120 | 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61, 0x00, // - - - - v i a - | ||
121 | 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, // - - - w a r n i | ||
122 | 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, // n g - - - - w w | ||
123 | 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, // w - a u t h e n | ||
124 | 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, // t i c a t e - - | ||
125 | 0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, // - - m e t h o d | ||
126 | 0x00, 0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, // - - - - g e t - | ||
127 | 0x00, 0x00, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, // - - - s t a t u | ||
128 | 0x73, 0x00, 0x00, 0x00, 0x06, 0x32, 0x30, 0x30, // s - - - - 2 0 0 | ||
129 | 0x20, 0x4f, 0x4b, 0x00, 0x00, 0x00, 0x07, 0x76, // - O K - - - - v | ||
130 | 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, // e r s i o n - - | ||
131 | 0x00, 0x08, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, // - - H T T P - 1 | ||
132 | 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75, 0x72, // - 1 - - - - u r | ||
133 | 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62, // l - - - - p u b | ||
134 | 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, // l i c - - - - s | ||
135 | 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, // e t - c o o k i | ||
136 | 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, // e - - - - k e e | ||
137 | 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, // p - a l i v e - | ||
138 | 0x00, 0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, // - - - o r i g i | ||
139 | 0x6e, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, // n 1 0 0 1 0 1 2 | ||
140 | 0x30, 0x31, 0x32, 0x30, 0x32, 0x32, 0x30, 0x35, // 0 1 2 0 2 2 0 5 | ||
141 | 0x32, 0x30, 0x36, 0x33, 0x30, 0x30, 0x33, 0x30, // 2 0 6 3 0 0 3 0 | ||
142 | 0x32, 0x33, 0x30, 0x33, 0x33, 0x30, 0x34, 0x33, // 2 3 0 3 3 0 4 3 | ||
143 | 0x30, 0x35, 0x33, 0x30, 0x36, 0x33, 0x30, 0x37, // 0 5 3 0 6 3 0 7 | ||
144 | 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34, 0x30, // 4 0 2 4 0 5 4 0 | ||
145 | 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34, // 6 4 0 7 4 0 8 4 | ||
146 | 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, // 0 9 4 1 0 4 1 1 | ||
147 | 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, // 4 1 2 4 1 3 4 1 | ||
148 | 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, // 4 4 1 5 4 1 6 4 | ||
149 | 0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, // 1 7 5 0 2 5 0 4 | ||
150 | 0x35, 0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, // 5 0 5 2 0 3 - N | ||
151 | 0x6f, 0x6e, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, // o n - A u t h o | ||
152 | 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, // r i t a t i v e | ||
153 | 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, // - I n f o r m a | ||
154 | 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x30, 0x34, 0x20, // t i o n 2 0 4 - | ||
155 | 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, // N o - C o n t e | ||
156 | 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d, 0x6f, // n t 3 0 1 - M o | ||
157 | 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d, // v e d - P e r m | ||
158 | 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, // a n e n t l y 4 | ||
159 | 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, // 0 0 - B a d - R | ||
160 | 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, // e q u e s t 4 0 | ||
161 | 0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, // 1 - U n a u t h | ||
162 | 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, // o r i z e d 4 0 | ||
163 | 0x33, 0x20, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, // 3 - F o r b i d | ||
164 | 0x64, 0x65, 0x6e, 0x34, 0x30, 0x34, 0x20, 0x4e, // d e n 4 0 4 - N | ||
165 | 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, // o t - F o u n d | ||
166 | 0x35, 0x30, 0x30, 0x20, 0x49, 0x6e, 0x74, 0x65, // 5 0 0 - I n t e | ||
167 | 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x72, // r n a l - S e r | ||
168 | 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, 0x6f, // v e r - E r r o | ||
169 | 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74, // r 5 0 1 - N o t | ||
170 | 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, // - I m p l e m e | ||
171 | 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, // n t e d 5 0 3 - | ||
172 | 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, // S e r v i c e - | ||
173 | 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, // U n a v a i l a | ||
174 | 0x62, 0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, // b l e J a n - F | ||
175 | 0x65, 0x62, 0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, // e b - M a r - A | ||
176 | 0x70, 0x72, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x4a, // p r - M a y - J | ||
177 | 0x75, 0x6e, 0x20, 0x4a, 0x75, 0x6c, 0x20, 0x41, // u n - J u l - A | ||
178 | 0x75, 0x67, 0x20, 0x53, 0x65, 0x70, 0x74, 0x20, // u g - S e p t - | ||
179 | 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f, 0x76, 0x20, // O c t - N o v - | ||
180 | 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a, 0x30, // D e c - 0 0 - 0 | ||
181 | 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e, // 0 - 0 0 - M o n | ||
182 | 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, // - - T u e - - W | ||
183 | 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, // e d - - T h u - | ||
184 | 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, // - F r i - - S a | ||
185 | 0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, // t - - S u n - - | ||
186 | 0x47, 0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, // G M T c h u n k | ||
187 | 0x65, 0x64, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, // e d - t e x t - | ||
188 | 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6d, 0x61, // h t m l - i m a | ||
189 | 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x2c, 0x69, // g e - p n g - i | ||
190 | 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x67, // m a g e - j p g | ||
191 | 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, // - i m a g e - g | ||
192 | 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, // i f - a p p l i | ||
193 | 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, // c a t i o n - x | ||
194 | 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, // m l - a p p l i | ||
195 | 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, // c a t i o n - x | ||
196 | 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, // h t m l - x m l | ||
197 | 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, // - t e x t - p l | ||
198 | 0x61, 0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, // a i n - t e x t | ||
199 | 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, // - j a v a s c r | ||
200 | 0x69, 0x70, 0x74, 0x2c, 0x70, 0x75, 0x62, 0x6c, // i p t - p u b l | ||
201 | 0x69, 0x63, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, // i c p r i v a t | ||
202 | 0x65, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, // e m a x - a g e | ||
203 | 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x64, 0x65, // - g z i p - d e | ||
204 | 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, // f l a t e - s d | ||
205 | 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, // c h c h a r s e | ||
206 | 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, // t - u t f - 8 c | ||
207 | 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, // h a r s e t - i | ||
208 | 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, // s o - 8 8 5 9 - | ||
209 | 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, // 1 - u t f - - - | ||
210 | 0x2c, 0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e // - e n q - 0 - | ||
211 | }; | ||
212 | |||
213 | |||
214 | int | ||
215 | SPDYF_zlib_deflate_init(z_stream *strm) | ||
216 | { | ||
217 | int ret; | ||
218 | |||
219 | strm->zalloc = Z_NULL; | ||
220 | strm->zfree = Z_NULL; | ||
221 | strm->opaque = Z_NULL; | ||
222 | //the second argument is "level of compression" | ||
223 | //use 0 for no compression; 9 for best compression | ||
224 | ret = deflateInit(strm, Z_DEFAULT_COMPRESSION); | ||
225 | if(ret != Z_OK) | ||
226 | { | ||
227 | SPDYF_DEBUG("deflate init"); | ||
228 | return SPDY_NO; | ||
229 | } | ||
230 | ret = deflateSetDictionary(strm, | ||
231 | spdyf_zlib_dictionary, | ||
232 | sizeof(spdyf_zlib_dictionary)); | ||
233 | if(ret != Z_OK) | ||
234 | { | ||
235 | SPDYF_DEBUG("deflate set dict"); | ||
236 | deflateEnd(strm); | ||
237 | return SPDY_NO; | ||
238 | } | ||
239 | return SPDY_YES; | ||
240 | } | ||
241 | |||
242 | |||
243 | void | ||
244 | SPDYF_zlib_deflate_end(z_stream *strm) | ||
245 | { | ||
246 | deflateEnd(strm); | ||
247 | } | ||
248 | |||
249 | int | ||
250 | SPDYF_zlib_deflate(z_stream *strm, | ||
251 | const void *src, | ||
252 | size_t src_size, | ||
253 | size_t *data_used, | ||
254 | void **dest, | ||
255 | size_t *dest_size) | ||
256 | { | ||
257 | int ret; | ||
258 | int flush; | ||
259 | unsigned int have; | ||
260 | Bytef out[SPDYF_ZLIB_CHUNK]; | ||
261 | |||
262 | *dest = NULL; | ||
263 | *dest_size = 0; | ||
264 | |||
265 | do | ||
266 | { | ||
267 | /* check for big data bigger than the buffer used */ | ||
268 | if(src_size > SPDYF_ZLIB_CHUNK) | ||
269 | { | ||
270 | strm->avail_in = SPDYF_ZLIB_CHUNK; | ||
271 | src_size -= SPDYF_ZLIB_CHUNK; | ||
272 | /* flush is used for the loop to detect if we still | ||
273 | * need to supply additional | ||
274 | * data to the stream via avail_in and next_in. */ | ||
275 | flush = Z_NO_FLUSH; | ||
276 | } | ||
277 | else | ||
278 | { | ||
279 | strm->avail_in = src_size; | ||
280 | flush = Z_SYNC_FLUSH; | ||
281 | } | ||
282 | *data_used += strm->avail_in; | ||
283 | |||
284 | strm->next_in = (Bytef *)src; | ||
285 | |||
286 | /* Loop while output data is available */ | ||
287 | do | ||
288 | { | ||
289 | strm->avail_out = SPDYF_ZLIB_CHUNK; | ||
290 | strm->next_out = out; | ||
291 | |||
292 | /* No need to check return value of deflate. | ||
293 | * (See zlib documentation at http://www.zlib.net/zlib_how.html */ | ||
294 | ret = deflate(strm, flush); | ||
295 | have = SPDYF_ZLIB_CHUNK - strm->avail_out; | ||
296 | |||
297 | /* (Re)allocate memory for dest and keep track of it's size. */ | ||
298 | *dest_size += have; | ||
299 | *dest = realloc(*dest, *dest_size); | ||
300 | if(!*dest) | ||
301 | { | ||
302 | SPDYF_DEBUG("realloc data for result"); | ||
303 | deflateEnd(strm); | ||
304 | return SPDY_NO; | ||
305 | } | ||
306 | memcpy((*dest) + ((*dest_size) - have), out, have); | ||
307 | } | ||
308 | while(strm->avail_out == 0); | ||
309 | /* At this point, all of the input data should already | ||
310 | * have been used. */ | ||
311 | SPDYF_ASSERT(strm->avail_in == 0,"compressing bug"); | ||
312 | } | ||
313 | while(flush != Z_SYNC_FLUSH); | ||
314 | |||
315 | return Z_OK == ret ? SPDY_YES : SPDY_NO; | ||
316 | } | ||
317 | |||
318 | |||
319 | int | ||
320 | SPDYF_zlib_inflate_init(z_stream *strm) | ||
321 | { | ||
322 | int ret; | ||
323 | |||
324 | strm->zalloc = Z_NULL; | ||
325 | strm->zfree = Z_NULL; | ||
326 | strm->opaque = Z_NULL; | ||
327 | strm->avail_in = 0; | ||
328 | strm->next_in = Z_NULL; | ||
329 | //change 15 to lower value for performance and benchmark | ||
330 | //"The windowBits parameter is the base two logarithm of the | ||
331 | // maximum window size (the size of the history buffer)." | ||
332 | ret = inflateInit2(strm, 15); | ||
333 | if(ret != Z_OK) | ||
334 | { | ||
335 | SPDYF_DEBUG("Cannot inflateInit2 the stream"); | ||
336 | return SPDY_NO; | ||
337 | } | ||
338 | return SPDY_YES; | ||
339 | } | ||
340 | |||
341 | |||
342 | void | ||
343 | SPDYF_zlib_inflate_end(z_stream *strm) | ||
344 | { | ||
345 | inflateEnd(strm); | ||
346 | } | ||
347 | |||
348 | |||
349 | int | ||
350 | SPDYF_zlib_inflate(z_stream *strm, | ||
351 | const void *src, | ||
352 | size_t src_size, | ||
353 | void **dest, | ||
354 | size_t *dest_size) | ||
355 | { | ||
356 | int ret = Z_OK; | ||
357 | uint32_t have; | ||
358 | Bytef out[SPDYF_ZLIB_CHUNK]; | ||
359 | |||
360 | *dest = NULL; | ||
361 | *dest_size = 0; | ||
362 | |||
363 | /* decompress until deflate stream ends or end of file */ | ||
364 | do | ||
365 | { | ||
366 | if(src_size > SPDYF_ZLIB_CHUNK) | ||
367 | { | ||
368 | strm->avail_in = SPDYF_ZLIB_CHUNK; | ||
369 | src_size -= SPDYF_ZLIB_CHUNK; | ||
370 | } | ||
371 | else | ||
372 | { | ||
373 | strm->avail_in = src_size; | ||
374 | src_size = 0; | ||
375 | } | ||
376 | |||
377 | if(strm->avail_in == 0){ | ||
378 | //the loop breaks always here as the stream never ends | ||
379 | break; | ||
380 | } | ||
381 | |||
382 | strm->next_in = (Bytef *) src; | ||
383 | /* run inflate() on input until output buffer not full */ | ||
384 | do { | ||
385 | strm->avail_out = SPDYF_ZLIB_CHUNK; | ||
386 | strm->next_out = out; | ||
387 | ret = inflate(strm, Z_SYNC_FLUSH); | ||
388 | |||
389 | switch (ret) | ||
390 | { | ||
391 | case Z_STREAM_ERROR: | ||
392 | SPDYF_DEBUG("Error on inflate"); | ||
393 | //no inflateEnd here, same in zlib example | ||
394 | return SPDY_NO; | ||
395 | |||
396 | case Z_NEED_DICT: | ||
397 | ret = inflateSetDictionary(strm, | ||
398 | spdyf_zlib_dictionary, | ||
399 | sizeof(spdyf_zlib_dictionary)); | ||
400 | if(ret != Z_OK) | ||
401 | { | ||
402 | SPDYF_DEBUG("Error on inflateSetDictionary"); | ||
403 | inflateEnd(strm); | ||
404 | return SPDY_NO; | ||
405 | } | ||
406 | ret = inflate(strm, Z_SYNC_FLUSH); | ||
407 | if(Z_STREAM_ERROR == ret) | ||
408 | { | ||
409 | SPDYF_DEBUG("Error on inflate"); | ||
410 | return SPDY_NO; | ||
411 | } | ||
412 | break; | ||
413 | |||
414 | case Z_DATA_ERROR: | ||
415 | SPDYF_DEBUG("Z_DATA_ERROR"); | ||
416 | inflateEnd(strm); | ||
417 | return SPDY_NO; | ||
418 | |||
419 | case Z_MEM_ERROR: | ||
420 | SPDYF_DEBUG("Z_MEM_ERROR"); | ||
421 | inflateEnd(strm); | ||
422 | return SPDY_NO; | ||
423 | } | ||
424 | have = SPDYF_ZLIB_CHUNK - strm->avail_out; | ||
425 | *dest_size += have; | ||
426 | /* (re)alloc memory for the output buffer */ | ||
427 | *dest = realloc(*dest, *dest_size); | ||
428 | if(!*dest) | ||
429 | { | ||
430 | SPDYF_DEBUG("Cannot realloc memory"); | ||
431 | inflateEnd(strm); | ||
432 | return SPDY_NO; | ||
433 | } | ||
434 | memcpy((*dest) + ((*dest_size) - have), out, have); | ||
435 | } | ||
436 | while (0 == strm->avail_out); | ||
437 | } | ||
438 | while (Z_STREAM_END != ret); | ||
439 | |||
440 | return Z_OK == ret || Z_STREAM_END == ret ? SPDY_YES : SPDY_NO; | ||
441 | } | ||