#include "internal.h"
#include "connection.h"
#include "memorypool.h"
#include "response.h"
#include "reason_phrase.h"
Go to the source code of this file.
Defines | |
#define | HTTP_100_CONTINUE "HTTP/1.1 100 Continue\r\n\r\n" |
#define | REQUEST_TOO_BIG "" |
#define | REQUEST_LACKS_HOST "" |
#define | REQUEST_MALFORMED "" |
#define | INTERNAL_ERROR "" |
#define | EXTRA_CHECKS MHD_YES |
#define | EXTRA_CHECK(a) |
#define | DEBUG_CLOSE MHD_NO |
#define | DEBUG_SEND_DATA MHD_NO |
#define | DEBUG_STATES MHD_NO |
Functions | |
int | MHD_get_connection_values (struct MHD_Connection *connection, enum MHD_ValueKind kind, MHD_KeyValueIterator iterator, void *iterator_cls) |
const char * | MHD_lookup_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key) |
int | MHD_queue_response (struct MHD_Connection *connection, unsigned int status_code, struct MHD_Response *response) |
static int | need_100_continue (struct MHD_Connection *connection) |
static void | connection_close_error (struct MHD_Connection *connection) |
static int | try_ready_normal_body (struct MHD_Connection *connection) |
static int | try_ready_chunked_body (struct MHD_Connection *connection) |
static void | add_extra_headers (struct MHD_Connection *connection) |
static void | get_date_string (char *date, unsigned int max) |
static int | try_grow_read_buffer (struct MHD_Connection *connection) |
static int | build_header_response (struct MHD_Connection *connection) |
static void | transmit_error_response (struct MHD_Connection *connection, unsigned int status_code, const char *message) |
static void | do_fd_set (int fd, fd_set *set, int *max_fd) |
int | MHD_connection_get_fdset (struct MHD_Connection *connection, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *except_fd_set, int *max_fd) |
static char * | get_next_header_line (struct MHD_Connection *connection) |
static int | connection_add_header (struct MHD_Connection *connection, char *key, char *value, enum MHD_ValueKind kind) |
static int | parse_arguments (enum MHD_ValueKind kind, struct MHD_Connection *connection, char *args) |
static int | parse_cookie_header (struct MHD_Connection *connection) |
static int | parse_initial_message_line (struct MHD_Connection *connection, char *line) |
static void | call_connection_handler (struct MHD_Connection *connection) |
static int | do_read (struct MHD_Connection *connection) |
static int | process_header_line (struct MHD_Connection *connection, char *line) |
static int | process_broken_line (struct MHD_Connection *connection, char *line, enum MHD_ValueKind kind) |
static void | parse_connection_headers (struct MHD_Connection *connection) |
int | MHD_connection_handle_read (struct MHD_Connection *connection) |
static int | do_write (struct MHD_Connection *connection) |
static int | check_write_done (struct MHD_Connection *connection, enum MHD_CONNECTION_STATE next_state) |
int | MHD_connection_handle_write (struct MHD_Connection *connection) |
int | MHD_connection_handle_idle (struct MHD_Connection *connection) |
Definition in file connection.c.
#define DEBUG_CLOSE MHD_NO |
Add extra debug messages with reasons for closing connections (non-error reasons).
Definition at line 109 of file connection.c.
#define DEBUG_SEND_DATA MHD_NO |
Should all data send be printed to stderr?
Definition at line 114 of file connection.c.
#define DEBUG_STATES MHD_NO |
Should all state transitions be printed to stderr?
Definition at line 119 of file connection.c.
#define EXTRA_CHECK | ( | a | ) |
Definition at line 102 of file connection.c.
Referenced by MHD_connection_get_fdset(), MHD_connection_handle_idle(), MHD_connection_handle_write(), process_broken_line(), and transmit_error_response().
#define EXTRA_CHECKS MHD_YES |
Definition at line 97 of file connection.c.
#define HTTP_100_CONTINUE "HTTP/1.1 100 Continue\r\n\r\n" |
Message to transmit when http 1.1 request is received
Definition at line 44 of file connection.c.
Referenced by MHD_connection_handle_idle(), MHD_connection_handle_write(), and need_100_continue().
#define INTERNAL_ERROR "" |
Response text used when there is an internal server error.
Intentionally empty here to keep our memory footprint minimal.
Definition at line 94 of file connection.c.
Referenced by MHD_connection_get_fdset().
#define REQUEST_LACKS_HOST "" |
Response text used when the request (http header) does not contain a "Host:" header and still claims to be HTTP 1.1.
Intentionally empty here to keep our memory footprint minimal.
Definition at line 69 of file connection.c.
Referenced by parse_connection_headers().
#define REQUEST_MALFORMED "" |
Response text used when the request (http header) is malformed.
Intentionally empty here to keep our memory footprint minimal.
Definition at line 82 of file connection.c.
Referenced by MHD_connection_handle_idle(), and process_broken_line().
#define REQUEST_TOO_BIG "" |
Response text used when the request (http header) is too big to be processed.
Intentionally empty here to keep our memory footprint minimal.
Definition at line 56 of file connection.c.
Referenced by connection_add_header(), get_next_header_line(), MHD_connection_get_fdset(), parse_cookie_header(), and process_broken_line().
static void add_extra_headers | ( | struct MHD_Connection * | connection | ) | [static] |
Check if we need to set some additional headers for http-compiliance.
Definition at line 389 of file connection.c.
References _REAL_SNPRINTF, MHD_Connection::have_chunked_upload, MHD_add_response_header(), MHD_get_response_header(), MHD_HTTP_HEADER_CONNECTION, MHD_HTTP_HEADER_CONTENT_LENGTH, MHD_HTTP_HEADER_TRANSFER_ENCODING, MHD_HTTP_VERSION_1_1, MHD_NO, MHD_YES, MHD_Connection::response, MHD_Response::total_size, and MHD_Connection::version.
Referenced by build_header_response().
static int build_header_response | ( | struct MHD_Connection * | connection | ) | [static] |
Allocate the connection's write buffer and fill it with all of the headers (or footers, if we have already sent the body) from the HTTPd's response.
Definition at line 489 of file connection.c.
References _REAL_SNPRINTF, add_extra_headers(), MHD_Connection::daemon, MHD_Response::first_header, get_date_string(), MHD_HTTP_Header::header, MHD_HTTP_Header::kind, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_FOOTER_KIND, MHD_get_reason_phrase_for(), MHD_get_response_header(), MHD_HEADER_KIND, MHD_HTTP_HEADER_DATE, MHD_HTTP_VERSION_1_1, MHD_NO, MHD_pool_allocate(), MHD_YES, MHD_HTTP_Header::next, MHD_Connection::pool, MHD_Connection::response, MHD_Connection::responseCode, SPRINTF, MHD_Connection::state, MHD_HTTP_Header::value, MHD_Connection::write_buffer, MHD_Connection::write_buffer_append_offset, MHD_Connection::write_buffer_send_offset, and MHD_Connection::write_buffer_size.
Referenced by MHD_connection_handle_idle(), and transmit_error_response().
static void call_connection_handler | ( | struct MHD_Connection * | connection | ) | [static] |
Call the handler of the application for this connection. Handles chunking of the upload as well as normal uploads.
Definition at line 1011 of file connection.c.
References MHD_Connection::client_context, connection_close_error(), MHD_Connection::current_chunk_offset, MHD_Connection::current_chunk_size, MHD_Connection::daemon, MHD_Daemon::default_handler, MHD_Connection::have_chunked_upload, MHD_Connection::method, MHD_NO, MHD_YES, MHD_Connection::read_buffer, MHD_Connection::read_buffer_offset, MHD_Connection::remaining_upload_size, MHD_Connection::response, MHD_Connection::url, and MHD_Connection::version.
Referenced by MHD_connection_handle_idle().
static int check_write_done | ( | struct MHD_Connection * | connection, | |
enum MHD_CONNECTION_STATE | next_state | |||
) | [static] |
Check if we are done sending the write-buffer. If so, transition into "next_state".
Definition at line 1482 of file connection.c.
References MHD_NO, MHD_pool_reallocate(), MHD_YES, MHD_Connection::pool, MHD_Connection::state, MHD_Connection::write_buffer, MHD_Connection::write_buffer_append_offset, MHD_Connection::write_buffer_send_offset, and MHD_Connection::write_buffer_size.
Referenced by MHD_connection_handle_write().
static int connection_add_header | ( | struct MHD_Connection * | connection, | |
char * | key, | |||
char * | value, | |||
enum MHD_ValueKind | kind | |||
) | [static] |
Definition at line 837 of file connection.c.
References MHD_Connection::daemon, MHD_HTTP_Header::header, MHD_Connection::headers_received, MHD_HTTP_Header::kind, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, MHD_NO, MHD_pool_allocate(), MHD_YES, MHD_HTTP_Header::next, MHD_Connection::pool, REQUEST_TOO_BIG, transmit_error_response(), and MHD_HTTP_Header::value.
Referenced by parse_arguments(), parse_cookie_header(), and process_broken_line().
static void connection_close_error | ( | struct MHD_Connection * | connection | ) | [static] |
A serious error occured, close the connection (and notify the application).
Definition at line 254 of file connection.c.
References MHD_Connection::client_context, CLOSE, MHD_Connection::daemon, MHD_CONNECTION_CLOSED, MHD_REQUEST_TERMINATED_WITH_ERROR, MHD_Daemon::notify_completed, SHUTDOWN, MHD_Connection::socket_fd, and MHD_Connection::state.
Referenced by call_connection_handler(), do_read(), do_write(), MHD_connection_get_fdset(), MHD_connection_handle_idle(), MHD_connection_handle_read(), MHD_connection_handle_write(), try_ready_chunked_body(), and try_ready_normal_body().
static void do_fd_set | ( | int | fd, | |
fd_set * | set, | |||
int * | max_fd | |||
) | [static] |
Add "fd" to the "fd_set". If "fd" is greater than "*max", set "*max" to fd.
Definition at line 615 of file connection.c.
Referenced by MHD_connection_get_fdset().
static int do_read | ( | struct MHD_Connection * | connection | ) | [static] |
Try reading data from the socket into the read buffer of the connection.
Definition at line 1178 of file connection.c.
References connection_close_error(), MHD_Connection::daemon, MHD_NO, MHD_YES, MHD_Connection::read_buffer, MHD_Connection::read_buffer_offset, MHD_Connection::read_buffer_size, MHD_Connection::read_closed, RECV, SHUTDOWN, MHD_Connection::socket_fd, and STRERROR.
Referenced by MHD_connection_handle_read().
static int do_write | ( | struct MHD_Connection * | connection | ) | [static] |
Try writing data to the socket from the write buffer of the connection.
Definition at line 1446 of file connection.c.
References connection_close_error(), MHD_Connection::daemon, MHD_NO, MHD_YES, SEND, MHD_Connection::socket_fd, STRERROR, MHD_Connection::write_buffer, MHD_Connection::write_buffer_append_offset, and MHD_Connection::write_buffer_send_offset.
Referenced by MHD_connection_handle_write().
static void get_date_string | ( | char * | date, | |
unsigned int | max | |||
) | [static] |
Produce HTTP "Date:" header.
date | where to write the header | |
max | maximum number of characters to write |
Definition at line 437 of file connection.c.
Referenced by build_header_response().
static char* get_next_header_line | ( | struct MHD_Connection * | connection | ) | [static] |
Parse a single line of the HTTP header. Advance read_buffer (!) appropriately. If the current line does not fit, consider growing the buffer. If the line is far too long, close the connection. If no line is found (incomplete, buffer too small, line too long), return NULL. Otherwise return a pointer to the line.
Definition at line 784 of file connection.c.
References MHD_BUF_INC_SIZE, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, MHD_HTTP_REQUEST_URI_TOO_LONG, MHD_pool_reallocate(), MHD_Connection::pool, MHD_Connection::read_buffer, MHD_Connection::read_buffer_offset, MHD_Connection::read_buffer_size, REQUEST_TOO_BIG, transmit_error_response(), and MHD_Connection::url.
Referenced by MHD_connection_handle_idle().
int MHD_connection_get_fdset | ( | struct MHD_Connection * | connection, | |
fd_set * | read_fd_set, | |||
fd_set * | write_fd_set, | |||
fd_set * | except_fd_set, | |||
int * | max_fd | |||
) |
Obtain the select sets for this connection
Definition at line 628 of file connection.c.
References connection_close_error(), MHD_Connection::daemon, do_fd_set(), EXTRA_CHECK, INTERNAL_ERROR, MHD_CONNECTION_BODY_RECEIVED, MHD_CONNECTION_BODY_SENT, MHD_CONNECTION_CHUNKED_BODY_READY, MHD_CONNECTION_CHUNKED_BODY_UNREADY, MHD_CONNECTION_CLOSED, MHD_CONNECTION_CONTINUE_SENDING, MHD_CONNECTION_CONTINUE_SENT, MHD_CONNECTION_FOOTER_PART_RECEIVED, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_CONNECTION_FOOTERS_SENDING, MHD_CONNECTION_FOOTERS_SENT, MHD_CONNECTION_HEADER_PART_RECEIVED, MHD_CONNECTION_HEADERS_PROCESSED, MHD_CONNECTION_HEADERS_RECEIVED, MHD_CONNECTION_HEADERS_SENDING, MHD_CONNECTION_HEADERS_SENT, MHD_CONNECTION_INIT, MHD_CONNECTION_NORMAL_BODY_READY, MHD_CONNECTION_NORMAL_BODY_UNREADY, MHD_CONNECTION_URL_RECEIVED, MHD_HTTP_INTERNAL_SERVER_ERROR, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, MHD_HTTP_REQUEST_URI_TOO_LONG, MHD_NO, MHD_pool_create(), MHD_USE_SELECT_INTERNALLY, MHD_USE_THREAD_PER_CONNECTION, MHD_YES, MHD_Daemon::options, MHD_Connection::pool, MHD_Daemon::pool_size, MHD_Connection::read_buffer_offset, MHD_Connection::read_buffer_size, MHD_Connection::read_closed, REQUEST_TOO_BIG, MHD_Connection::socket_fd, MHD_Connection::state, transmit_error_response(), try_grow_read_buffer(), and MHD_Connection::url.
Referenced by MHD_get_fdset(), and MHD_handle_connection().
int MHD_connection_handle_idle | ( | struct MHD_Connection * | connection | ) |
This function was created to handle per-connection processing that has to happen even if the socket cannot be read or written to. All implementations (multithreaded, external select, internal select) call this function.
Definition at line 1656 of file connection.c.
References build_header_response(), call_connection_handler(), MHD_Connection::client_context, connection_close_error(), MHD_Daemon::connection_timeout, MHD_Connection::continue_message_write_offset, MHD_Response::crc, MHD_Connection::daemon, EXTRA_CHECK, get_next_header_line(), MHD_Connection::have_chunked_upload, MHD_Connection::headers_received, HTTP_100_CONTINUE, MHD_Connection::last_activity, MHD_Connection::method, MHD_CONNECTION_BODY_RECEIVED, MHD_CONNECTION_BODY_SENT, MHD_CONNECTION_CHUNKED_BODY_READY, MHD_CONNECTION_CHUNKED_BODY_UNREADY, MHD_CONNECTION_CLOSED, MHD_CONNECTION_CONTINUE_SENDING, MHD_CONNECTION_CONTINUE_SENT, MHD_CONNECTION_FOOTER_PART_RECEIVED, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_CONNECTION_FOOTERS_SENDING, MHD_CONNECTION_FOOTERS_SENT, MHD_CONNECTION_HEADER_PART_RECEIVED, MHD_CONNECTION_HEADERS_PROCESSED, MHD_CONNECTION_HEADERS_RECEIVED, MHD_CONNECTION_HEADERS_SENDING, MHD_CONNECTION_HEADERS_SENT, MHD_CONNECTION_INIT, MHD_CONNECTION_NORMAL_BODY_READY, MHD_CONNECTION_NORMAL_BODY_UNREADY, MHD_CONNECTION_URL_RECEIVED, MHD_destroy_response(), MHD_FOOTER_KIND, MHD_HEADER_KIND, MHD_HTTP_BAD_REQUEST, MHD_HTTP_HEADER_CONNECTION, MHD_HTTP_VERSION_1_1, MHD_lookup_connection_value(), MHD_NO, MHD_pool_destroy(), MHD_pool_reset(), MHD_REQUEST_TERMINATED_COMPLETED_OK, MHD_YES, MHD_Response::mutex, need_100_continue(), MHD_Daemon::notify_completed, parse_connection_headers(), parse_initial_message_line(), MHD_Connection::pool, process_broken_line(), process_header_line(), MHD_Connection::read_buffer, MHD_Connection::read_buffer_offset, MHD_Connection::read_buffer_size, MHD_Connection::read_closed, MHD_Connection::remaining_upload_size, REQUEST_MALFORMED, MHD_Connection::response, MHD_Connection::response_write_position, MHD_Connection::responseCode, MHD_Connection::socket_fd, MHD_Connection::state, transmit_error_response(), try_ready_chunked_body(), try_ready_normal_body(), MHD_Connection::url, MHD_Connection::version, MHD_Connection::write_buffer, MHD_Connection::write_buffer_append_offset, MHD_Connection::write_buffer_send_offset, and MHD_Connection::write_buffer_size.
Referenced by MHD_handle_connection(), and MHD_select().
int MHD_connection_handle_read | ( | struct MHD_Connection * | connection | ) |
This function handles a particular connection when it has been determined that there is data to be read off a socket. All implementations (multithreaded, external select, internal select) call this function to handle reads.
Definition at line 1391 of file connection.c.
References connection_close_error(), do_read(), MHD_Connection::last_activity, MHD_CONNECTION_BODY_RECEIVED, MHD_CONNECTION_CLOSED, MHD_CONNECTION_CONTINUE_SENDING, MHD_CONNECTION_CONTINUE_SENT, MHD_CONNECTION_FOOTER_PART_RECEIVED, MHD_CONNECTION_HEADER_PART_RECEIVED, MHD_CONNECTION_HEADERS_PROCESSED, MHD_CONNECTION_HEADERS_RECEIVED, MHD_CONNECTION_INIT, MHD_CONNECTION_URL_RECEIVED, MHD_NO, MHD_pool_reallocate(), MHD_YES, MHD_Connection::pool, MHD_Connection::read_buffer, MHD_Connection::read_buffer_offset, MHD_Connection::read_buffer_size, MHD_Connection::read_closed, MHD_Connection::socket_fd, and MHD_Connection::state.
Referenced by MHD_handle_connection(), and MHD_select().
int MHD_connection_handle_write | ( | struct MHD_Connection * | connection | ) |
This function was created to handle writes to sockets when it has been determined that the socket can be written to. All implementations (multithreaded, external select, internal select) call this function
Definition at line 1509 of file connection.c.
References check_write_done(), connection_close_error(), MHD_Connection::continue_message_write_offset, MHD_Response::crc, MHD_Connection::daemon, MHD_Response::data, MHD_Response::data_size, MHD_Response::data_start, do_write(), EXTRA_CHECK, HTTP_100_CONTINUE, MHD_Connection::last_activity, MHD_CONNECTION_BODY_RECEIVED, MHD_CONNECTION_BODY_SENT, MHD_CONNECTION_CHUNKED_BODY_READY, MHD_CONNECTION_CHUNKED_BODY_UNREADY, MHD_CONNECTION_CLOSED, MHD_CONNECTION_CONTINUE_SENDING, MHD_CONNECTION_CONTINUE_SENT, MHD_CONNECTION_FOOTER_PART_RECEIVED, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_CONNECTION_FOOTERS_SENDING, MHD_CONNECTION_FOOTERS_SENT, MHD_CONNECTION_HEADER_PART_RECEIVED, MHD_CONNECTION_HEADERS_PROCESSED, MHD_CONNECTION_HEADERS_RECEIVED, MHD_CONNECTION_HEADERS_SENDING, MHD_CONNECTION_HEADERS_SENT, MHD_CONNECTION_INIT, MHD_CONNECTION_NORMAL_BODY_READY, MHD_CONNECTION_NORMAL_BODY_UNREADY, MHD_CONNECTION_URL_RECEIVED, MHD_NO, MHD_YES, MHD_Response::mutex, MHD_Connection::response, MHD_Connection::response_write_position, SEND, MHD_Connection::socket_fd, MHD_Connection::state, STRERROR, MHD_Response::total_size, and try_ready_normal_body().
Referenced by MHD_handle_connection(), and MHD_select().
int MHD_get_connection_values | ( | struct MHD_Connection * | connection, | |
enum MHD_ValueKind | kind, | |||
MHD_KeyValueIterator | iterator, | |||
void * | iterator_cls | |||
) |
Get all of the headers from the request.
iterator | callback to call on each header; maybe NULL (then just count headers) | |
iterator_cls | extra argument to iterator |
Definition at line 130 of file connection.c.
References MHD_HTTP_Header::header, MHD_Connection::headers_received, MHD_HTTP_Header::kind, MHD_YES, MHD_HTTP_Header::next, and MHD_HTTP_Header::value.
const char* MHD_lookup_connection_value | ( | struct MHD_Connection * | connection, | |
enum MHD_ValueKind | kind, | |||
const char * | key | |||
) |
Get a particular header value. If multiple values match the kind, return any one of them.
key | the header to look for |
Definition at line 164 of file connection.c.
References MHD_HTTP_Header::header, MHD_Connection::headers_received, MHD_HTTP_Header::kind, MHD_HTTP_Header::next, and MHD_HTTP_Header::value.
Referenced by MHD_connection_handle_idle(), MHD_create_post_processor(), need_100_continue(), parse_connection_headers(), and parse_cookie_header().
int MHD_queue_response | ( | struct MHD_Connection * | connection, | |
unsigned int | status_code, | |||
struct MHD_Response * | response | |||
) |
Queue a response to be transmitted to the client (as soon as possible).
connection | the connection identifying the client | |
status_code | HTTP status code (i.e. 200 for OK) | |
response | response to transmit |
Definition at line 192 of file connection.c.
References MHD_Connection::have_chunked_response, MHD_Connection::method, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_CONNECTION_HEADERS_PROCESSED, MHD_HTTP_METHOD_HEAD, MHD_HTTP_VERSION_1_1, MHD_increment_response_rc(), MHD_NO, MHD_YES, MHD_Connection::read_closed, MHD_Connection::response, MHD_Connection::response_write_position, MHD_Connection::responseCode, SHUTDOWN, MHD_Connection::socket_fd, MHD_Connection::state, MHD_Response::total_size, and MHD_Connection::version.
Referenced by parse_connection_headers(), and transmit_error_response().
static int need_100_continue | ( | struct MHD_Connection * | connection | ) | [static] |
Do we (still) need to send a 100 continue message for this connection?
Definition at line 233 of file connection.c.
References MHD_Connection::continue_message_write_offset, HTTP_100_CONTINUE, MHD_HEADER_KIND, MHD_HTTP_HEADER_EXPECT, MHD_HTTP_VERSION_1_1, MHD_lookup_connection_value(), MHD_Connection::response, and MHD_Connection::version.
Referenced by MHD_connection_handle_idle().
static int parse_arguments | ( | enum MHD_ValueKind | kind, | |
struct MHD_Connection * | connection, | |||
char * | args | |||
) | [static] |
Definition at line 866 of file connection.c.
References connection_add_header(), MHD_http_unescape(), MHD_NO, and MHD_YES.
Referenced by parse_initial_message_line().
static void parse_connection_headers | ( | struct MHD_Connection * | connection | ) | [static] |
Parse the various headers; figure out the size of the upload and make sure the headers follow the protocol. Advance to the appropriate state.
Definition at line 1313 of file connection.c.
References MHD_Connection::daemon, MHD_Connection::have_chunked_upload, MHD_CONNECTION_CLOSED, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_create_response_from_data(), MHD_destroy_response(), MHD_HEADER_KIND, MHD_HTTP_BAD_REQUEST, MHD_HTTP_HEADER_CONTENT_LENGTH, MHD_HTTP_HEADER_HOST, MHD_HTTP_HEADER_TRANSFER_ENCODING, MHD_HTTP_VERSION_1_1, MHD_lookup_connection_value(), MHD_NO, MHD_queue_response(), MHD_USE_PEDANTIC_CHECKS, MHD_YES, MHD_Daemon::options, parse_cookie_header(), MHD_Connection::read_closed, MHD_Connection::remaining_upload_size, REQUEST_LACKS_HOST, MHD_Connection::state, and MHD_Connection::version.
Referenced by MHD_connection_handle_idle().
static int parse_cookie_header | ( | struct MHD_Connection * | connection | ) | [static] |
Parse the cookie header (see RFC 2109).
Definition at line 900 of file connection.c.
References connection_add_header(), MHD_Connection::daemon, MHD_COOKIE_KIND, MHD_HEADER_KIND, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, MHD_lookup_connection_value(), MHD_NO, MHD_pool_allocate(), MHD_YES, MHD_Connection::pool, REQUEST_TOO_BIG, and transmit_error_response().
Referenced by parse_connection_headers().
static int parse_initial_message_line | ( | struct MHD_Connection * | connection, | |
char * | line | |||
) | [static] |
Parse the first line of the HTTP HEADER.
connection | the connection (updated) | |
line | the first line |
Definition at line 970 of file connection.c.
References MHD_Connection::method, MHD_GET_ARGUMENT_KIND, MHD_NO, MHD_YES, parse_arguments(), MHD_Connection::url, and MHD_Connection::version.
Referenced by MHD_connection_handle_idle().
static int process_broken_line | ( | struct MHD_Connection * | connection, | |
char * | line, | |||
enum MHD_ValueKind | kind | |||
) | [static] |
Process a header value that spans multiple lines. The previous line(s) are in connection->last.
line | the current input line | |
kind | if the line is complete, add a header of the given kind |
Definition at line 1257 of file connection.c.
References MHD_Connection::colon, connection_add_header(), EXTRA_CHECK, MHD_Connection::last, MHD_HTTP_BAD_REQUEST, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, MHD_NO, MHD_pool_reallocate(), MHD_YES, MHD_Connection::pool, process_header_line(), REQUEST_MALFORMED, REQUEST_TOO_BIG, and transmit_error_response().
Referenced by MHD_connection_handle_idle().
static int process_header_line | ( | struct MHD_Connection * | connection, | |
char * | line | |||
) | [static] |
We have received (possibly the beginning of) a line in the header (or footer). Validate (check for ":") and prepare to process.
Definition at line 1216 of file connection.c.
References MHD_Connection::colon, MHD_Connection::daemon, MHD_Connection::last, MHD_CONNECTION_CLOSED, MHD_NO, MHD_YES, and MHD_Connection::state.
Referenced by MHD_connection_handle_idle(), and process_broken_line().
static void transmit_error_response | ( | struct MHD_Connection * | connection, | |
unsigned int | status_code, | |||
const char * | message | |||
) | [static] |
We encountered an error processing the request. Handle it properly by stopping to read data and sending the indicated response code and message.
status_code | the response code to send (400, 413 or 414) |
Definition at line 577 of file connection.c.
References build_header_response(), MHD_Connection::daemon, EXTRA_CHECK, MHD_CONNECTION_CLOSED, MHD_CONNECTION_FOOTERS_RECEIVED, MHD_CONNECTION_HEADERS_SENDING, MHD_create_response_from_data(), MHD_destroy_response(), MHD_NO, MHD_queue_response(), MHD_YES, MHD_Connection::read_closed, MHD_Connection::response, and MHD_Connection::state.
Referenced by connection_add_header(), get_next_header_line(), MHD_connection_get_fdset(), MHD_connection_handle_idle(), parse_cookie_header(), and process_broken_line().
static int try_grow_read_buffer | ( | struct MHD_Connection * | connection | ) | [static] |
try growing the read buffer
Definition at line 464 of file connection.c.
References MHD_BUF_INC_SIZE, MHD_NO, MHD_pool_reallocate(), MHD_YES, MHD_Connection::pool, MHD_Connection::read_buffer, and MHD_Connection::read_buffer_size.
Referenced by MHD_connection_get_fdset().
static int try_ready_chunked_body | ( | struct MHD_Connection * | connection | ) | [static] |
Prepare the response buffer of this connection for sending. Assumes that the response mutex is already held. If the transmission is complete, this function may close the socket (and return MHD_NO).
Definition at line 321 of file connection.c.
References connection_close_error(), MHD_Response::crc, MHD_Response::crc_cls, MHD_Connection::daemon, MHD_CONNECTION_CHUNKED_BODY_UNREADY, MHD_NO, MHD_pool_allocate(), MHD_YES, MHD_Connection::pool, MHD_Daemon::pool_size, MHD_Connection::response, MHD_Connection::response_write_position, MHD_Connection::state, MHD_Response::total_size, MHD_Connection::write_buffer, MHD_Connection::write_buffer_append_offset, MHD_Connection::write_buffer_send_offset, and MHD_Connection::write_buffer_size.
Referenced by MHD_connection_handle_idle().
static int try_ready_normal_body | ( | struct MHD_Connection * | connection | ) | [static] |
Prepare the response buffer of this connection for sending. Assumes that the response mutex is already held. If the transmission is complete, this function may close the socket (and return MHD_NO).
Definition at line 277 of file connection.c.
References connection_close_error(), MHD_Response::crc, MHD_Response::crc_cls, MHD_Connection::daemon, MHD_Response::data, MHD_Response::data_buffer_size, MHD_Response::data_size, MHD_Response::data_start, MHD_NO, MHD_YES, MIN, MHD_Connection::response, MHD_Connection::response_write_position, and MHD_Response::total_size.
Referenced by MHD_connection_handle_idle(), and MHD_connection_handle_write().