1748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* 2748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This file is part of libmicrospdy 3748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat Copyright Copyright (C) 2012 Andrey Uzunov 4748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 5748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This program is free software: you can redistribute it and/or modify 6748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat it under the terms of the GNU General Public License as published by 7748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat the Free Software Foundation, either version 3 of the License, or 8748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat (at your option) any later version. 9748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 10748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat This program is distributed in the hope that it will be useful, 11748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat but WITHOUT ANY WARRANTY; without even the implied warranty of 12748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat GNU General Public License for more details. 14748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 15748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat You should have received a copy of the GNU General Public License 16748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat along with this program. If not, see <http://www.gnu.org/licenses/>. 17748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat*/ 18748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 19748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 20748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @file compression.h 21748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @brief zlib handling functions 22748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @author Andrey Uzunov 23748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 24748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 25748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#ifndef COMPRESSION_H 26748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define COMPRESSION_H 27748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 28748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#include "platform.h" 29748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 30748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/* size of buffers used by zlib on (de)compressing */ 31748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#define SPDYF_ZLIB_CHUNK 16384 32748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 33748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 34748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 35748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Initializes the zlib stream for compression. Must be called once 36748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * for a session on initialization. 37748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * 38748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param strm Zlib stream on which we work 39748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @return SPDY_NO if zlib failed. SPDY_YES otherwise 40748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 41748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 42748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratSPDYF_zlib_deflate_init(z_stream *strm); 43748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 44748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 45748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 46748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Deinitializes the zlib stream for compression. Should be called once 47748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * for a session on cleaning up. 48748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * 49748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param strm Zlib stream on which we work 50748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 51748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratvoid 52748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratSPDYF_zlib_deflate_end(z_stream *strm); 53748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 54748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 55748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 56748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Compressing stream with zlib. 57748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * 58748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param strm Zlib stream on which we work 59748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param src stream of the data to be compressed 60748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param src_size size of the data 61748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param data_used the number of bytes from src_stream that were used 62748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * TODO do we need 63748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param dest the resulting compressed stream. Should be NULL. Must be 64748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * freed later manually. 65748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param dest_size size of the data after compression 66748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @return SPDY_NO if malloc or zlib failed. SPDY_YES otherwise 67748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 68748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 69748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratSPDYF_zlib_deflate(z_stream *strm, 70748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const void *src, 71748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat size_t src_size, 72748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat size_t *data_used, 73748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat void **dest, 74748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat size_t *dest_size); 75748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 76748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 77748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 78748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Initializes the zlib stream for decompression. Must be called once 79748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * for a session. 80748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * 81748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param strm Zlib stream on which we work 82748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @return SPDY_NO if zlib failed. SPDY_YES otherwise 83748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 84748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 85748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratSPDYF_zlib_inflate_init(z_stream *strm); 86748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 87748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 88748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 89748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Deinitializes the zlib stream for decompression. Should be called once 90748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * for a session on cleaning up. 91748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * 92748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param strm Zlib stream on which we work 93748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 94748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratvoid 95748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratSPDYF_zlib_inflate_end(z_stream *strm); 96748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 97748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 98748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat/** 99748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * Decompressing stream with zlib. 100748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * 101748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param strm Zlib stream on which we work 102748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param src stream of the data to be decompressed 103748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param src_size size of the data 104748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param dest the resulting decompressed stream. Should be NULL. Must 105748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * be freed manually. 106748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @param dest_size size of the data after decompression 107748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * @return SPDY_NO if malloc or zlib failed. SPDY_YES otherwise. If the 108748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat * function fails, the SPDY session must be closed 109748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat */ 110748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Eratint 111748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel EratSPDYF_zlib_inflate(z_stream *strm, 112748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat const void *src, 113748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat size_t src_size, 114748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat void **dest, 115748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat size_t *dest_size); 116748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat 117748945ec6f1c67b7efc934ab0808e1d32f2fb98dDaniel Erat#endif 118