/src/haproxy/include/import/slz.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (C) 2013-2015 Willy Tarreau <w@1wt.eu> |
3 | | * |
4 | | * Permission is hereby granted, free of charge, to any person obtaining |
5 | | * a copy of this software and associated documentation files (the |
6 | | * "Software"), to deal in the Software without restriction, including |
7 | | * without limitation the rights to use, copy, modify, merge, publish, |
8 | | * distribute, sublicense, and/or sell copies of the Software, and to |
9 | | * permit persons to whom the Software is furnished to do so, subject to |
10 | | * the following conditions: |
11 | | * |
12 | | * The above copyright notice and this permission notice shall be |
13 | | * included in all copies or substantial portions of the Software. |
14 | | * |
15 | | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
16 | | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
17 | | * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
18 | | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
19 | | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
20 | | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
21 | | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
22 | | * OTHER DEALINGS IN THE SOFTWARE. |
23 | | */ |
24 | | |
25 | | #ifndef _SLZ_H |
26 | | #define _SLZ_H |
27 | | |
28 | | #include <inttypes.h> |
29 | | |
30 | | /* We have two macros UNALIGNED_LE_OK and UNALIGNED_FASTER. The latter indicates |
31 | | * that using unaligned data is faster than a simple shift. On x86 32-bit at |
32 | | * least it is not the case as the per-byte access is 30% faster. A core2-duo on |
33 | | * x86_64 is 7% faster to read one byte + shifting by 8 than to read one word, |
34 | | * but a core i5 is 7% faster doing the unaligned read, so we privilege more |
35 | | * recent implementations here. |
36 | | */ |
37 | | #if defined(__x86_64__) |
38 | | #define UNALIGNED_LE_OK |
39 | | #define UNALIGNED_FASTER |
40 | | #define USE_64BIT_QUEUE |
41 | | #define HAVE_FAST_MULT |
42 | | #elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) |
43 | | #define UNALIGNED_LE_OK |
44 | | //#define UNALIGNED_FASTER |
45 | | #elif defined(__ARMEL__) && defined(__ARM_ARCH_7A__) |
46 | | #define UNALIGNED_LE_OK |
47 | | #define UNALIGNED_FASTER |
48 | | #elif defined(__ARM_ARCH_8A) || defined(__ARM_FEATURE_UNALIGNED) |
49 | | #define UNALIGNED_LE_OK |
50 | | #define UNALIGNED_FASTER |
51 | | #define HAVE_FAST_MULT |
52 | | #endif |
53 | | |
54 | | /* Log2 of the size of the hash table used for the references table. */ |
55 | 0 | #define HASH_BITS 13 |
56 | | |
57 | | enum slz_state { |
58 | | SLZ_ST_INIT, /* stream initialized */ |
59 | | SLZ_ST_EOB, /* header or end of block already sent */ |
60 | | SLZ_ST_FIXED, /* inside a fixed huffman sequence */ |
61 | | SLZ_ST_LAST, /* last block, BFINAL sent */ |
62 | | SLZ_ST_DONE, /* BFINAL+EOB sent BFINAL */ |
63 | | SLZ_ST_END /* end sent (BFINAL, EOB, CRC + len) */ |
64 | | }; |
65 | | |
66 | | enum { |
67 | | SLZ_FMT_GZIP, /* RFC1952: gzip envelope and crc32 for CRC */ |
68 | | SLZ_FMT_ZLIB, /* RFC1950: zlib envelope and adler-32 for CRC */ |
69 | | SLZ_FMT_DEFLATE, /* RFC1951: raw deflate, and no crc */ |
70 | | }; |
71 | | |
72 | | struct slz_stream { |
73 | | #ifdef USE_64BIT_QUEUE |
74 | | uint64_t queue; /* last pending bits, LSB first */ |
75 | | #else |
76 | | uint32_t queue; /* last pending bits, LSB first */ |
77 | | #endif |
78 | | uint32_t qbits; /* number of bits in queue, < 8 on 32-bit, < 32 on 64-bit */ |
79 | | unsigned char *outbuf; /* set by encode() */ |
80 | | uint16_t state; /* one of slz_state */ |
81 | | uint8_t level:1; /* 0 = no compression, 1 = compression */ |
82 | | uint8_t format:2; /* SLZ_FMT_* */ |
83 | | uint8_t unused1; /* unused for now */ |
84 | | uint32_t crc32; |
85 | | uint32_t ilen; |
86 | | }; |
87 | | |
88 | | /* Functions specific to rfc1951 (deflate) */ |
89 | | long slz_rfc1951_encode(struct slz_stream *strm, unsigned char *out, const unsigned char *in, long ilen, int more); |
90 | | int slz_rfc1951_init(struct slz_stream *strm, int level); |
91 | | int slz_rfc1951_flush(struct slz_stream *strm, unsigned char *buf); |
92 | | int slz_rfc1951_finish(struct slz_stream *strm, unsigned char *buf); |
93 | | |
94 | | /* Functions specific to rfc1952 (gzip) */ |
95 | | uint32_t slz_crc32_by1(uint32_t crc, const unsigned char *buf, int len); |
96 | | uint32_t slz_crc32_by4(uint32_t crc, const unsigned char *buf, int len); |
97 | | long slz_rfc1952_encode(struct slz_stream *strm, unsigned char *out, const unsigned char *in, long ilen, int more); |
98 | | int slz_rfc1952_send_header(struct slz_stream *strm, unsigned char *buf); |
99 | | int slz_rfc1952_init(struct slz_stream *strm, int level); |
100 | | int slz_rfc1952_flush(struct slz_stream *strm, unsigned char *buf); |
101 | | int slz_rfc1952_finish(struct slz_stream *strm, unsigned char *buf); |
102 | | |
103 | | /* Functions specific to rfc1950 (zlib) */ |
104 | | uint32_t slz_adler32_by1(uint32_t crc, const unsigned char *buf, int len); |
105 | | uint32_t slz_adler32_block(uint32_t crc, const unsigned char *buf, long len); |
106 | | long slz_rfc1950_encode(struct slz_stream *strm, unsigned char *out, const unsigned char *in, long ilen, int more); |
107 | | int slz_rfc1950_send_header(struct slz_stream *strm, unsigned char *buf); |
108 | | int slz_rfc1950_init(struct slz_stream *strm, int level); |
109 | | int slz_rfc1950_flush(struct slz_stream *strm, unsigned char *buf); |
110 | | int slz_rfc1950_finish(struct slz_stream *strm, unsigned char *buf); |
111 | | |
112 | | /* generic functions */ |
113 | | |
114 | | /* Initializes stream <strm>. It will configure the stream to use format |
115 | | * <format> for the data, which must be one of SLZ_FMT_*. The compression level |
116 | | * passed in <level> is set. This value can only be 0 (no compression) or 1 |
117 | | * (compression) and other values will lead to unpredictable behaviour. The |
118 | | * function should always return 0. |
119 | | */ |
120 | | static inline int slz_init(struct slz_stream *strm, int level, int format) |
121 | 0 | { |
122 | 0 | int ret; |
123 | 0 |
|
124 | 0 | if (format == SLZ_FMT_GZIP) |
125 | 0 | ret = slz_rfc1952_init(strm, level); |
126 | 0 | else if (format == SLZ_FMT_ZLIB) |
127 | 0 | ret = slz_rfc1950_init(strm, level); |
128 | 0 | else { /* deflate for anything else */ |
129 | 0 | ret = slz_rfc1951_init(strm, level); |
130 | 0 | strm->format = format; |
131 | 0 | } |
132 | 0 | return ret; |
133 | 0 | } Unexecuted instantiation: cfgparse.c:slz_init Unexecuted instantiation: cli.c:slz_init Unexecuted instantiation: clock.c:slz_init Unexecuted instantiation: connection.c:slz_init Unexecuted instantiation: debug.c:slz_init Unexecuted instantiation: dynbuf.c:slz_init Unexecuted instantiation: errors.c:slz_init Unexecuted instantiation: fd.c:slz_init Unexecuted instantiation: frontend.c:slz_init Unexecuted instantiation: http_ana.c:slz_init Unexecuted instantiation: http_ext.c:slz_init Unexecuted instantiation: http_htx.c:slz_init Unexecuted instantiation: http_rules.c:slz_init Unexecuted instantiation: htx.c:slz_init Unexecuted instantiation: limits.c:slz_init Unexecuted instantiation: listener.c:slz_init Unexecuted instantiation: log.c:slz_init Unexecuted instantiation: mailers.c:slz_init Unexecuted instantiation: mworker.c:slz_init Unexecuted instantiation: peers.c:slz_init Unexecuted instantiation: pool.c:slz_init Unexecuted instantiation: proto_rhttp.c:slz_init Unexecuted instantiation: proto_sockpair.c:slz_init Unexecuted instantiation: protocol.c:slz_init Unexecuted instantiation: proxy.c:slz_init Unexecuted instantiation: queue.c:slz_init Unexecuted instantiation: regex.c:slz_init Unexecuted instantiation: resolvers.c:slz_init Unexecuted instantiation: ring.c:slz_init Unexecuted instantiation: sample.c:slz_init Unexecuted instantiation: server.c:slz_init Unexecuted instantiation: session.c:slz_init Unexecuted instantiation: signal.c:slz_init Unexecuted instantiation: sink.c:slz_init Unexecuted instantiation: sock.c:slz_init Unexecuted instantiation: sock_inet.c:slz_init Unexecuted instantiation: stats-html.c:slz_init Unexecuted instantiation: stats.c:slz_init Unexecuted instantiation: stconn.c:slz_init Unexecuted instantiation: stick_table.c:slz_init Unexecuted instantiation: stream.c:slz_init Unexecuted instantiation: systemd.c:slz_init Unexecuted instantiation: task.c:slz_init Unexecuted instantiation: tcp_rules.c:slz_init Unexecuted instantiation: tcpcheck.c:slz_init Unexecuted instantiation: thread.c:slz_init Unexecuted instantiation: tools.c:slz_init Unexecuted instantiation: trace.c:slz_init Unexecuted instantiation: uri_auth.c:slz_init Unexecuted instantiation: vars.c:slz_init Unexecuted instantiation: version.c:slz_init Unexecuted instantiation: acl.c:slz_init Unexecuted instantiation: action.c:slz_init Unexecuted instantiation: activity.c:slz_init Unexecuted instantiation: applet.c:slz_init Unexecuted instantiation: arg.c:slz_init Unexecuted instantiation: auth.c:slz_init Unexecuted instantiation: backend.c:slz_init Unexecuted instantiation: cfgcond.c:slz_init Unexecuted instantiation: cfgparse-global.c:slz_init Unexecuted instantiation: cfgparse-listen.c:slz_init Unexecuted instantiation: channel.c:slz_init Unexecuted instantiation: check.c:slz_init Unexecuted instantiation: chunk.c:slz_init Unexecuted instantiation: compression.c:slz_init Unexecuted instantiation: counters.c:slz_init Unexecuted instantiation: dgram.c:slz_init Unexecuted instantiation: dns.c:slz_init Unexecuted instantiation: dns_ring.c:slz_init Unexecuted instantiation: event_hdl.c:slz_init Unexecuted instantiation: extcheck.c:slz_init Unexecuted instantiation: filters.c:slz_init Unexecuted instantiation: fix.c:slz_init Unexecuted instantiation: flt_http_comp.c:slz_init Unexecuted instantiation: freq_ctr.c:slz_init Unexecuted instantiation: guid.c:slz_init Unexecuted instantiation: h1.c:slz_init Unexecuted instantiation: haterm.c:slz_init Unexecuted instantiation: http.c:slz_init Unexecuted instantiation: http_fetch.c:slz_init Unexecuted instantiation: lb_chash.c:slz_init Unexecuted instantiation: lb_fas.c:slz_init Unexecuted instantiation: lb_fwlc.c:slz_init Unexecuted instantiation: lb_fwrr.c:slz_init Unexecuted instantiation: lb_map.c:slz_init Unexecuted instantiation: lb_ss.c:slz_init Unexecuted instantiation: mqtt.c:slz_init Unexecuted instantiation: mux_spop.c:slz_init Unexecuted instantiation: pattern.c:slz_init Unexecuted instantiation: payload.c:slz_init Unexecuted instantiation: pipe.c:slz_init Unexecuted instantiation: proto_tcp.c:slz_init Unexecuted instantiation: slz.c:slz_init Unexecuted instantiation: stats-file.c:slz_init Unexecuted instantiation: stats-json.c:slz_init Unexecuted instantiation: stats-proxy.c:slz_init Unexecuted instantiation: cache.c:slz_init Unexecuted instantiation: fcgi-app.c:slz_init Unexecuted instantiation: flt_spoe.c:slz_init Unexecuted instantiation: h1_htx.c:slz_init Unexecuted instantiation: shctx.c:slz_init |
134 | | |
135 | | /* Encodes the block according to the format used by the stream. This means |
136 | | * that the CRC of the input block may be computed according to the CRC32 or |
137 | | * adler-32 algorithms. The number of output bytes is returned. |
138 | | */ |
139 | | static inline long slz_encode(struct slz_stream *strm, void *out, |
140 | | const void *in, long ilen, int more) |
141 | 0 | { |
142 | 0 | long ret; |
143 | |
|
144 | 0 | if (strm->format == SLZ_FMT_GZIP) |
145 | 0 | ret = slz_rfc1952_encode(strm, (unsigned char *) out, (const unsigned char *) in, ilen, more); |
146 | 0 | else if (strm->format == SLZ_FMT_ZLIB) |
147 | 0 | ret = slz_rfc1950_encode(strm, (unsigned char *) out, (const unsigned char *) in, ilen, more); |
148 | 0 | else /* deflate for other ones */ |
149 | 0 | ret = slz_rfc1951_encode(strm, (unsigned char *) out, (const unsigned char *) in, ilen, more); |
150 | |
|
151 | 0 | return ret; |
152 | 0 | } Unexecuted instantiation: cfgparse.c:slz_encode Unexecuted instantiation: cli.c:slz_encode Unexecuted instantiation: clock.c:slz_encode Unexecuted instantiation: connection.c:slz_encode Unexecuted instantiation: debug.c:slz_encode Unexecuted instantiation: dynbuf.c:slz_encode Unexecuted instantiation: errors.c:slz_encode Unexecuted instantiation: fd.c:slz_encode Unexecuted instantiation: frontend.c:slz_encode Unexecuted instantiation: http_ana.c:slz_encode Unexecuted instantiation: http_ext.c:slz_encode Unexecuted instantiation: http_htx.c:slz_encode Unexecuted instantiation: http_rules.c:slz_encode Unexecuted instantiation: htx.c:slz_encode Unexecuted instantiation: limits.c:slz_encode Unexecuted instantiation: listener.c:slz_encode Unexecuted instantiation: log.c:slz_encode Unexecuted instantiation: mailers.c:slz_encode Unexecuted instantiation: mworker.c:slz_encode Unexecuted instantiation: peers.c:slz_encode Unexecuted instantiation: pool.c:slz_encode Unexecuted instantiation: proto_rhttp.c:slz_encode Unexecuted instantiation: proto_sockpair.c:slz_encode Unexecuted instantiation: protocol.c:slz_encode Unexecuted instantiation: proxy.c:slz_encode Unexecuted instantiation: queue.c:slz_encode Unexecuted instantiation: regex.c:slz_encode Unexecuted instantiation: resolvers.c:slz_encode Unexecuted instantiation: ring.c:slz_encode Unexecuted instantiation: sample.c:slz_encode Unexecuted instantiation: server.c:slz_encode Unexecuted instantiation: session.c:slz_encode Unexecuted instantiation: signal.c:slz_encode Unexecuted instantiation: sink.c:slz_encode Unexecuted instantiation: sock.c:slz_encode Unexecuted instantiation: sock_inet.c:slz_encode Unexecuted instantiation: stats-html.c:slz_encode Unexecuted instantiation: stats.c:slz_encode Unexecuted instantiation: stconn.c:slz_encode Unexecuted instantiation: stick_table.c:slz_encode Unexecuted instantiation: stream.c:slz_encode Unexecuted instantiation: systemd.c:slz_encode Unexecuted instantiation: task.c:slz_encode Unexecuted instantiation: tcp_rules.c:slz_encode Unexecuted instantiation: tcpcheck.c:slz_encode Unexecuted instantiation: thread.c:slz_encode Unexecuted instantiation: tools.c:slz_encode Unexecuted instantiation: trace.c:slz_encode Unexecuted instantiation: uri_auth.c:slz_encode Unexecuted instantiation: vars.c:slz_encode Unexecuted instantiation: version.c:slz_encode Unexecuted instantiation: acl.c:slz_encode Unexecuted instantiation: action.c:slz_encode Unexecuted instantiation: activity.c:slz_encode Unexecuted instantiation: applet.c:slz_encode Unexecuted instantiation: arg.c:slz_encode Unexecuted instantiation: auth.c:slz_encode Unexecuted instantiation: backend.c:slz_encode Unexecuted instantiation: cfgcond.c:slz_encode Unexecuted instantiation: cfgparse-global.c:slz_encode Unexecuted instantiation: cfgparse-listen.c:slz_encode Unexecuted instantiation: channel.c:slz_encode Unexecuted instantiation: check.c:slz_encode Unexecuted instantiation: chunk.c:slz_encode Unexecuted instantiation: compression.c:slz_encode Unexecuted instantiation: counters.c:slz_encode Unexecuted instantiation: dgram.c:slz_encode Unexecuted instantiation: dns.c:slz_encode Unexecuted instantiation: dns_ring.c:slz_encode Unexecuted instantiation: event_hdl.c:slz_encode Unexecuted instantiation: extcheck.c:slz_encode Unexecuted instantiation: filters.c:slz_encode Unexecuted instantiation: fix.c:slz_encode Unexecuted instantiation: flt_http_comp.c:slz_encode Unexecuted instantiation: freq_ctr.c:slz_encode Unexecuted instantiation: guid.c:slz_encode Unexecuted instantiation: h1.c:slz_encode Unexecuted instantiation: haterm.c:slz_encode Unexecuted instantiation: http.c:slz_encode Unexecuted instantiation: http_fetch.c:slz_encode Unexecuted instantiation: lb_chash.c:slz_encode Unexecuted instantiation: lb_fas.c:slz_encode Unexecuted instantiation: lb_fwlc.c:slz_encode Unexecuted instantiation: lb_fwrr.c:slz_encode Unexecuted instantiation: lb_map.c:slz_encode Unexecuted instantiation: lb_ss.c:slz_encode Unexecuted instantiation: mqtt.c:slz_encode Unexecuted instantiation: mux_spop.c:slz_encode Unexecuted instantiation: pattern.c:slz_encode Unexecuted instantiation: payload.c:slz_encode Unexecuted instantiation: pipe.c:slz_encode Unexecuted instantiation: proto_tcp.c:slz_encode Unexecuted instantiation: slz.c:slz_encode Unexecuted instantiation: stats-file.c:slz_encode Unexecuted instantiation: stats-json.c:slz_encode Unexecuted instantiation: stats-proxy.c:slz_encode Unexecuted instantiation: cache.c:slz_encode Unexecuted instantiation: fcgi-app.c:slz_encode Unexecuted instantiation: flt_spoe.c:slz_encode Unexecuted instantiation: h1_htx.c:slz_encode Unexecuted instantiation: shctx.c:slz_encode |
153 | | |
154 | | /* Flushes pending bits and sends the trailer for stream <strm> into buffer |
155 | | * <buf> if needed. When it's done, the stream state is updated to SLZ_ST_END. |
156 | | * It returns the number of bytes emitted. The trailer consists in flushing the |
157 | | * possibly pending bits from the queue (up to 24 bits), rounding to the next |
158 | | * byte, then 4 bytes for the CRC when doing zlib/gzip, then another 4 bytes |
159 | | * for the input length for gzip. That may about to 4+4+4 = 12 bytes, that the |
160 | | * caller must ensure are available before calling the function. Note that if |
161 | | * the initial header was never sent, it will be sent first as well (up to 10 |
162 | | * extra bytes). |
163 | | */ |
164 | | static inline int slz_finish(struct slz_stream *strm, void *buf) |
165 | 0 | { |
166 | 0 | int ret; |
167 | |
|
168 | 0 | if (strm->format == SLZ_FMT_GZIP) |
169 | 0 | ret = slz_rfc1952_finish(strm, (unsigned char *) buf); |
170 | 0 | else if (strm->format == SLZ_FMT_ZLIB) |
171 | 0 | ret = slz_rfc1950_finish(strm, (unsigned char *) buf); |
172 | 0 | else /* deflate for other ones */ |
173 | 0 | ret = slz_rfc1951_finish(strm, (unsigned char *) buf); |
174 | |
|
175 | 0 | return ret; |
176 | 0 | } Unexecuted instantiation: cfgparse.c:slz_finish Unexecuted instantiation: cli.c:slz_finish Unexecuted instantiation: clock.c:slz_finish Unexecuted instantiation: connection.c:slz_finish Unexecuted instantiation: debug.c:slz_finish Unexecuted instantiation: dynbuf.c:slz_finish Unexecuted instantiation: errors.c:slz_finish Unexecuted instantiation: fd.c:slz_finish Unexecuted instantiation: frontend.c:slz_finish Unexecuted instantiation: http_ana.c:slz_finish Unexecuted instantiation: http_ext.c:slz_finish Unexecuted instantiation: http_htx.c:slz_finish Unexecuted instantiation: http_rules.c:slz_finish Unexecuted instantiation: htx.c:slz_finish Unexecuted instantiation: limits.c:slz_finish Unexecuted instantiation: listener.c:slz_finish Unexecuted instantiation: log.c:slz_finish Unexecuted instantiation: mailers.c:slz_finish Unexecuted instantiation: mworker.c:slz_finish Unexecuted instantiation: peers.c:slz_finish Unexecuted instantiation: pool.c:slz_finish Unexecuted instantiation: proto_rhttp.c:slz_finish Unexecuted instantiation: proto_sockpair.c:slz_finish Unexecuted instantiation: protocol.c:slz_finish Unexecuted instantiation: proxy.c:slz_finish Unexecuted instantiation: queue.c:slz_finish Unexecuted instantiation: regex.c:slz_finish Unexecuted instantiation: resolvers.c:slz_finish Unexecuted instantiation: ring.c:slz_finish Unexecuted instantiation: sample.c:slz_finish Unexecuted instantiation: server.c:slz_finish Unexecuted instantiation: session.c:slz_finish Unexecuted instantiation: signal.c:slz_finish Unexecuted instantiation: sink.c:slz_finish Unexecuted instantiation: sock.c:slz_finish Unexecuted instantiation: sock_inet.c:slz_finish Unexecuted instantiation: stats-html.c:slz_finish Unexecuted instantiation: stats.c:slz_finish Unexecuted instantiation: stconn.c:slz_finish Unexecuted instantiation: stick_table.c:slz_finish Unexecuted instantiation: stream.c:slz_finish Unexecuted instantiation: systemd.c:slz_finish Unexecuted instantiation: task.c:slz_finish Unexecuted instantiation: tcp_rules.c:slz_finish Unexecuted instantiation: tcpcheck.c:slz_finish Unexecuted instantiation: thread.c:slz_finish Unexecuted instantiation: tools.c:slz_finish Unexecuted instantiation: trace.c:slz_finish Unexecuted instantiation: uri_auth.c:slz_finish Unexecuted instantiation: vars.c:slz_finish Unexecuted instantiation: version.c:slz_finish Unexecuted instantiation: acl.c:slz_finish Unexecuted instantiation: action.c:slz_finish Unexecuted instantiation: activity.c:slz_finish Unexecuted instantiation: applet.c:slz_finish Unexecuted instantiation: arg.c:slz_finish Unexecuted instantiation: auth.c:slz_finish Unexecuted instantiation: backend.c:slz_finish Unexecuted instantiation: cfgcond.c:slz_finish Unexecuted instantiation: cfgparse-global.c:slz_finish Unexecuted instantiation: cfgparse-listen.c:slz_finish Unexecuted instantiation: channel.c:slz_finish Unexecuted instantiation: check.c:slz_finish Unexecuted instantiation: chunk.c:slz_finish Unexecuted instantiation: compression.c:slz_finish Unexecuted instantiation: counters.c:slz_finish Unexecuted instantiation: dgram.c:slz_finish Unexecuted instantiation: dns.c:slz_finish Unexecuted instantiation: dns_ring.c:slz_finish Unexecuted instantiation: event_hdl.c:slz_finish Unexecuted instantiation: extcheck.c:slz_finish Unexecuted instantiation: filters.c:slz_finish Unexecuted instantiation: fix.c:slz_finish Unexecuted instantiation: flt_http_comp.c:slz_finish Unexecuted instantiation: freq_ctr.c:slz_finish Unexecuted instantiation: guid.c:slz_finish Unexecuted instantiation: h1.c:slz_finish Unexecuted instantiation: haterm.c:slz_finish Unexecuted instantiation: http.c:slz_finish Unexecuted instantiation: http_fetch.c:slz_finish Unexecuted instantiation: lb_chash.c:slz_finish Unexecuted instantiation: lb_fas.c:slz_finish Unexecuted instantiation: lb_fwlc.c:slz_finish Unexecuted instantiation: lb_fwrr.c:slz_finish Unexecuted instantiation: lb_map.c:slz_finish Unexecuted instantiation: lb_ss.c:slz_finish Unexecuted instantiation: mqtt.c:slz_finish Unexecuted instantiation: mux_spop.c:slz_finish Unexecuted instantiation: pattern.c:slz_finish Unexecuted instantiation: payload.c:slz_finish Unexecuted instantiation: pipe.c:slz_finish Unexecuted instantiation: proto_tcp.c:slz_finish Unexecuted instantiation: slz.c:slz_finish Unexecuted instantiation: stats-file.c:slz_finish Unexecuted instantiation: stats-json.c:slz_finish Unexecuted instantiation: stats-proxy.c:slz_finish Unexecuted instantiation: cache.c:slz_finish Unexecuted instantiation: fcgi-app.c:slz_finish Unexecuted instantiation: flt_spoe.c:slz_finish Unexecuted instantiation: h1_htx.c:slz_finish Unexecuted instantiation: shctx.c:slz_finish |
177 | | |
178 | | /* Flushes any pending data for stream <strm> into buffer <buf>, then emits an |
179 | | * empty literal block to byte-align the output, allowing to completely flush |
180 | | * the queue. Note that if the initial header was never sent, it will be sent |
181 | | * first as well (0, 2 or 10 extra bytes). This requires that the output buffer |
182 | | * still has this plus the size of the queue available (up to 4 bytes), plus |
183 | | * one byte for (BFINAL,BTYPE), plus 4 bytes for LEN+NLEN, or a total of 19 |
184 | | * bytes in the worst case. The number of bytes emitted is returned. It is |
185 | | * guaranteed that the queue is empty on return. This may cause some overhead |
186 | | * by adding needless 5-byte blocks if called to often. |
187 | | */ |
188 | | static inline int slz_flush(struct slz_stream *strm, void *buf) |
189 | 0 | { |
190 | 0 | int ret; |
191 | |
|
192 | 0 | if (strm->format == SLZ_FMT_GZIP) |
193 | 0 | ret = slz_rfc1952_flush(strm, (unsigned char *) buf); |
194 | 0 | else if (strm->format == SLZ_FMT_ZLIB) |
195 | 0 | ret = slz_rfc1950_flush(strm, (unsigned char *) buf); |
196 | 0 | else /* deflate for other ones */ |
197 | 0 | ret = slz_rfc1951_flush(strm, (unsigned char *) buf); |
198 | |
|
199 | 0 | return ret; |
200 | 0 | } Unexecuted instantiation: cfgparse.c:slz_flush Unexecuted instantiation: cli.c:slz_flush Unexecuted instantiation: clock.c:slz_flush Unexecuted instantiation: connection.c:slz_flush Unexecuted instantiation: debug.c:slz_flush Unexecuted instantiation: dynbuf.c:slz_flush Unexecuted instantiation: errors.c:slz_flush Unexecuted instantiation: fd.c:slz_flush Unexecuted instantiation: frontend.c:slz_flush Unexecuted instantiation: http_ana.c:slz_flush Unexecuted instantiation: http_ext.c:slz_flush Unexecuted instantiation: http_htx.c:slz_flush Unexecuted instantiation: http_rules.c:slz_flush Unexecuted instantiation: htx.c:slz_flush Unexecuted instantiation: limits.c:slz_flush Unexecuted instantiation: listener.c:slz_flush Unexecuted instantiation: log.c:slz_flush Unexecuted instantiation: mailers.c:slz_flush Unexecuted instantiation: mworker.c:slz_flush Unexecuted instantiation: peers.c:slz_flush Unexecuted instantiation: pool.c:slz_flush Unexecuted instantiation: proto_rhttp.c:slz_flush Unexecuted instantiation: proto_sockpair.c:slz_flush Unexecuted instantiation: protocol.c:slz_flush Unexecuted instantiation: proxy.c:slz_flush Unexecuted instantiation: queue.c:slz_flush Unexecuted instantiation: regex.c:slz_flush Unexecuted instantiation: resolvers.c:slz_flush Unexecuted instantiation: ring.c:slz_flush Unexecuted instantiation: sample.c:slz_flush Unexecuted instantiation: server.c:slz_flush Unexecuted instantiation: session.c:slz_flush Unexecuted instantiation: signal.c:slz_flush Unexecuted instantiation: sink.c:slz_flush Unexecuted instantiation: sock.c:slz_flush Unexecuted instantiation: sock_inet.c:slz_flush Unexecuted instantiation: stats-html.c:slz_flush Unexecuted instantiation: stats.c:slz_flush Unexecuted instantiation: stconn.c:slz_flush Unexecuted instantiation: stick_table.c:slz_flush Unexecuted instantiation: stream.c:slz_flush Unexecuted instantiation: systemd.c:slz_flush Unexecuted instantiation: task.c:slz_flush Unexecuted instantiation: tcp_rules.c:slz_flush Unexecuted instantiation: tcpcheck.c:slz_flush Unexecuted instantiation: thread.c:slz_flush Unexecuted instantiation: tools.c:slz_flush Unexecuted instantiation: trace.c:slz_flush Unexecuted instantiation: uri_auth.c:slz_flush Unexecuted instantiation: vars.c:slz_flush Unexecuted instantiation: version.c:slz_flush Unexecuted instantiation: acl.c:slz_flush Unexecuted instantiation: action.c:slz_flush Unexecuted instantiation: activity.c:slz_flush Unexecuted instantiation: applet.c:slz_flush Unexecuted instantiation: arg.c:slz_flush Unexecuted instantiation: auth.c:slz_flush Unexecuted instantiation: backend.c:slz_flush Unexecuted instantiation: cfgcond.c:slz_flush Unexecuted instantiation: cfgparse-global.c:slz_flush Unexecuted instantiation: cfgparse-listen.c:slz_flush Unexecuted instantiation: channel.c:slz_flush Unexecuted instantiation: check.c:slz_flush Unexecuted instantiation: chunk.c:slz_flush Unexecuted instantiation: compression.c:slz_flush Unexecuted instantiation: counters.c:slz_flush Unexecuted instantiation: dgram.c:slz_flush Unexecuted instantiation: dns.c:slz_flush Unexecuted instantiation: dns_ring.c:slz_flush Unexecuted instantiation: event_hdl.c:slz_flush Unexecuted instantiation: extcheck.c:slz_flush Unexecuted instantiation: filters.c:slz_flush Unexecuted instantiation: fix.c:slz_flush Unexecuted instantiation: flt_http_comp.c:slz_flush Unexecuted instantiation: freq_ctr.c:slz_flush Unexecuted instantiation: guid.c:slz_flush Unexecuted instantiation: h1.c:slz_flush Unexecuted instantiation: haterm.c:slz_flush Unexecuted instantiation: http.c:slz_flush Unexecuted instantiation: http_fetch.c:slz_flush Unexecuted instantiation: lb_chash.c:slz_flush Unexecuted instantiation: lb_fas.c:slz_flush Unexecuted instantiation: lb_fwlc.c:slz_flush Unexecuted instantiation: lb_fwrr.c:slz_flush Unexecuted instantiation: lb_map.c:slz_flush Unexecuted instantiation: lb_ss.c:slz_flush Unexecuted instantiation: mqtt.c:slz_flush Unexecuted instantiation: mux_spop.c:slz_flush Unexecuted instantiation: pattern.c:slz_flush Unexecuted instantiation: payload.c:slz_flush Unexecuted instantiation: pipe.c:slz_flush Unexecuted instantiation: proto_tcp.c:slz_flush Unexecuted instantiation: slz.c:slz_flush Unexecuted instantiation: stats-file.c:slz_flush Unexecuted instantiation: stats-json.c:slz_flush Unexecuted instantiation: stats-proxy.c:slz_flush Unexecuted instantiation: cache.c:slz_flush Unexecuted instantiation: fcgi-app.c:slz_flush Unexecuted instantiation: flt_spoe.c:slz_flush Unexecuted instantiation: h1_htx.c:slz_flush Unexecuted instantiation: shctx.c:slz_flush |
201 | | |
202 | | #endif |