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