blob: ad614c1baf3aa6cedb2a303f3d4467d6c84bb5da [file] [log] [blame]
/*
This file is part of libmicrohttpd
Copyright (C) 2007 Daniel Pittman and Christian Grothoff
Copyright (C) 2015-2022 Karlson2k (Evgeny Grin)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file response.h
* @brief Methods for managing response objects
* @author Daniel Pittman
* @author Christian Grothoff
* @author Karlson2k (Evgeny Grin)
*/
#ifndef RESPONSE_H
#define RESPONSE_H
/**
* Increments the reference counter for the @a response.
*
* @param response object to modify
*/
void
MHD_increment_response_rc (struct MHD_Response *response);
/**
* We are done sending the header of a given response
* to the client. Now it is time to perform the upgrade
* and hand over the connection to the application.
* @remark To be called only from thread that process connection's
* recv(), send() and response. Must be called right after sending
* response headers.
*
* @param response the response that was created for an upgrade
* @param connection the specific connection we are upgrading
* @return #MHD_YES on success, #MHD_NO on failure (will cause
* connection to be closed)
*/
enum MHD_Result
MHD_response_execute_upgrade_ (struct MHD_Response *response,
struct MHD_Connection *connection);
/**
* Get a particular header (or footer) element from the response.
*
* Function returns the first found element.
* @param response response to query
* @param kind the kind of element: header or footer
* @param key the key which header to get
* @param key_len the length of the @a key
* @return NULL if header element does not exist
* @ingroup response
*/
struct MHD_HTTP_Res_Header *
MHD_get_response_element_n_ (struct MHD_Response *response,
enum MHD_ValueKind kind,
const char *key,
size_t key_len);
/**
* Add a header or footer line to the response without checking.
*
* It is assumed that parameters are correct.
*
* @param response response to add a header to
* @param kind header or footer
* @param header the header to add, does not need to be zero-terminated
* @param header_len the length of the @a header
* @param content value to add, does not need to be zero-terminated
* @param content_len the length of the @a content
* @return false on error (like out-of-memory),
* true if succeed
*/
bool
MHD_add_response_entry_no_check_ (struct MHD_Response *response,
enum MHD_ValueKind kind,
const char *header,
size_t header_len,
const char *content,
size_t content_len);
/**
* Add preallocated strings a header or footer line to the response without
* checking.
*
* Header/footer strings are not checked and assumed to be correct.
*
* The string must not be statically allocated!
* The strings must be malloc()'ed and zero terminated. The strings will
* be free()'ed when the response is destroyed.
*
* @param response response to add a header to
* @param kind header or footer
* @param header the header string to add, must be malloc()'ed and
* zero-terminated
* @param header_len the length of the @a header
* @param content the value string to add, must be malloc()'ed and
* zero-terminated
* @param content_len the length of the @a content
*/
bool
MHD_add_response_entry_no_alloc_ (struct MHD_Response *response,
enum MHD_ValueKind kind,
char *header,
size_t header_len,
char *content,
size_t content_len);
#endif