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 stream.h
21  * @brief  SPDY streams handling
22  * @author Andrey Uzunov
23  */
24 
25 #ifndef STREAM_H
26 #define STREAM_H
27 
28 #include "platform.h"
29 
30 
31 /**
32  * Reads data from session's read buffer and tries to create a new SPDY
33  * stream. This function is called after control frame's header has been
34  * read from the buffer (after the length field). If bogus frame is
35  * received the function changes the read handler of the session and
36  * fails, i.e. there is no need of further error handling by the caller.
37  *
38  * @param session SPDY_Session whose read buffer is being read
39  * @return SPDY_YES if a new SPDY stream request was correctly received
40  * 			and handled. SPDY_NO if the whole SPDY frame was not yet
41  * 			received or memory error occurred.
42  */
43 int
44 SPDYF_stream_new (struct SPDY_Session *session);
45 
46 
47 /**
48  * Destroys stream structure and whatever is in it.
49  *
50  * @param stream SPDY_Stream to destroy
51  */
52 void
53 SPDYF_stream_destroy(struct SPDYF_Stream *stream);
54 
55 
56 /**
57  * Set stream flags if needed based on the type of the frame that was
58  * just sent (e.g., close stream if it was RST_STREAM).
59  *
60  * @param response_queue sent for this stream
61  */
62 void
63 SPDYF_stream_set_flags_on_write(struct SPDYF_Response_Queue *response_queue);
64 
65 
66 /**
67  * Find and return a session's stream, based on stream's ID.
68  *
69  * @param stream_id to search for
70  * @param session whose streams are considered
71  * @return SPDY_Stream with the desired ID. Can be NULL.
72  */
73 struct SPDYF_Stream *
74 SPDYF_stream_find(uint32_t stream_id, struct SPDY_Session * session);
75 
76 #endif
77