/*
This file is part of libmicrospdy
Copyright Copyright (C) 2012 Andrey Uzunov
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file stream.h
* @brief SPDY streams handling
* @author Andrey Uzunov
*/
#ifndef STREAM_H
#define STREAM_H
#include "platform.h"
/**
* Reads data from session's read buffer and tries to create a new SPDY
* stream. This function is called after control frame's header has been
* read from the buffer (after the length field). If bogus frame is
* received the function changes the read handler of the session and
* fails, i.e. there is no need of further error handling by the caller.
*
* @param session SPDY_Session whose read buffer is being read
* @return SPDY_YES if a new SPDY stream request was correctly received
* and handled. SPDY_NO if the whole SPDY frame was not yet
* received or memory error occurred.
*/
int
SPDYF_stream_new (struct SPDY_Session *session);
/**
* Destroys stream structure and whatever is in it.
*
* @param stream SPDY_Stream to destroy
*/
void
SPDYF_stream_destroy(struct SPDYF_Stream *stream);
/**
* Set stream flags if needed based on the type of the frame that was
* just sent (e.g., close stream if it was RST_STREAM).
*
* @param response_queue sent for this stream
*/
void
SPDYF_stream_set_flags_on_write(struct SPDYF_Response_Queue *response_queue);
/**
* Find and return a session's stream, based on stream's ID.
*
* @param stream_id to search for
* @param session whose streams are considered
* @return SPDY_Stream with the desired ID. Can be NULL.
*/
struct SPDYF_Stream *
SPDYF_stream_find(uint32_t stream_id, struct SPDY_Session * session);
#endif