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.h 21 * @brief zlib handling functions 22 * @author Andrey Uzunov 23 */ 24 25 #ifndef COMPRESSION_H 26 #define COMPRESSION_H 27 28 #include "platform.h" 29 30 /* size of buffers used by zlib on (de)compressing */ 31 #define SPDYF_ZLIB_CHUNK 16384 32 33 34 /** 35 * Initializes the zlib stream for compression. Must be called once 36 * for a session on initialization. 37 * 38 * @param strm Zlib stream on which we work 39 * @return SPDY_NO if zlib failed. SPDY_YES otherwise 40 */ 41 int 42 SPDYF_zlib_deflate_init(z_stream *strm); 43 44 45 /** 46 * Deinitializes the zlib stream for compression. Should be called once 47 * for a session on cleaning up. 48 * 49 * @param strm Zlib stream on which we work 50 */ 51 void 52 SPDYF_zlib_deflate_end(z_stream *strm); 53 54 55 /** 56 * Compressing stream with zlib. 57 * 58 * @param strm Zlib stream on which we work 59 * @param src stream of the data to be compressed 60 * @param src_size size of the data 61 * @param data_used the number of bytes from src_stream that were used 62 * TODO do we need 63 * @param dest the resulting compressed stream. Should be NULL. Must be 64 * freed later manually. 65 * @param dest_size size of the data after compression 66 * @return SPDY_NO if malloc or zlib failed. SPDY_YES otherwise 67 */ 68 int 69 SPDYF_zlib_deflate(z_stream *strm, 70 const void *src, 71 size_t src_size, 72 size_t *data_used, 73 void **dest, 74 size_t *dest_size); 75 76 77 /** 78 * Initializes the zlib stream for decompression. Must be called once 79 * for a session. 80 * 81 * @param strm Zlib stream on which we work 82 * @return SPDY_NO if zlib failed. SPDY_YES otherwise 83 */ 84 int 85 SPDYF_zlib_inflate_init(z_stream *strm); 86 87 88 /** 89 * Deinitializes the zlib stream for decompression. Should be called once 90 * for a session on cleaning up. 91 * 92 * @param strm Zlib stream on which we work 93 */ 94 void 95 SPDYF_zlib_inflate_end(z_stream *strm); 96 97 98 /** 99 * Decompressing stream with zlib. 100 * 101 * @param strm Zlib stream on which we work 102 * @param src stream of the data to be decompressed 103 * @param src_size size of the data 104 * @param dest the resulting decompressed stream. Should be NULL. Must 105 * be freed manually. 106 * @param dest_size size of the data after decompression 107 * @return SPDY_NO if malloc or zlib failed. SPDY_YES otherwise. If the 108 * function fails, the SPDY session must be closed 109 */ 110 int 111 SPDYF_zlib_inflate(z_stream *strm, 112 const void *src, 113 size_t src_size, 114 void **dest, 115 size_t *dest_size); 116 117 #endif 118