Asterisk - The Open Source Telephony Project
18.5.0
|
http server for AMI access More...
#include "asterisk.h"
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <signal.h>
#include <fcntl.h>
#include "asterisk/paths.h"
#include "asterisk/cli.h"
#include "asterisk/tcptls.h"
#include "asterisk/http.h"
#include "asterisk/utils.h"
#include "asterisk/strings.h"
#include "asterisk/config.h"
#include "asterisk/stringfields.h"
#include "asterisk/ast_version.h"
#include "asterisk/manager.h"
#include "asterisk/module.h"
#include "asterisk/astobj2.h"
#include "asterisk/netsock2.h"
#include "asterisk/json.h"
Go to the source code of this file.
Data Structures | |
struct | ast_cfhttp_methods_text |
struct | http_uri_redirect |
struct | http_worker_private_data |
struct | uri_redirects |
struct | uris |
Macros | |
#define | BASIC_LEN 6 |
#define | BASIC_PREFIX "Basic " |
#define | DEFAULT_PORT 8088 |
#define | DEFAULT_RESPONSE_HEADER_LENGTH 512 |
#define | DEFAULT_SESSION_INACTIVITY 30000 |
#define | DEFAULT_SESSION_KEEP_ALIVE 15000 |
#define | DEFAULT_SESSION_LIMIT 100 |
#define | DEFAULT_TLS_PORT 8089 |
#define | INITIAL_RESPONSE_BODY_BUFFER 1024 |
#define | MAX_CONTENT_LENGTH 40960 |
#define | MAX_HTTP_LINE_LENGTH 4096 |
#define | MAX_HTTP_REQUEST_HEADERS 100 |
#define | MAX_PREFIX 80 |
#define | MAX_SERVER_NAME_LENGTH 128 |
#define | MIN_INITIAL_REQUEST_TIMEOUT 10000 |
Enumerations | |
enum | http_private_flags { HTTP_FLAG_HAS_BODY = (1 << 0), HTTP_FLAG_BODY_READ = (1 << 1), HTTP_FLAG_CLOSE_ON_COMPLETION = (1 << 2) } |
Functions | |
static int | __ast_http_load (int reload) |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static void | add_redirect (const char *value) |
Add a new URI redirect The entries in the redirect list are sorted by length, just like the list of URI handlers. More... | |
const char * | ast_get_http_method (enum ast_http_method method) |
Return http method name string. More... | |
void | ast_http_auth (struct ast_tcptls_session_instance *ser, const char *realm, const unsigned long nonce, const unsigned long opaque, int stale, const char *text) |
Send http "401 Unauthorized" response and close socket. More... | |
int | ast_http_body_discard (struct ast_tcptls_session_instance *ser) |
Read and discard any unread HTTP request body. More... | |
void | ast_http_body_read_status (struct ast_tcptls_session_instance *ser, int read_success) |
Update the body read success status. More... | |
void | ast_http_create_response (struct ast_tcptls_session_instance *ser, int status_code, const char *status_title, struct ast_str *http_header_data, const char *text) |
Creates and sends a formatted http response message. More... | |
void | ast_http_error (struct ast_tcptls_session_instance *ser, int status_code, const char *status_title, const char *text) |
Send HTTP error message and close socket. More... | |
const char * | ast_http_ftype2mtype (const char *ftype) |
Return mime type based on extension. More... | |
struct ast_http_auth * | ast_http_get_auth (struct ast_variable *headers) |
Get HTTP authentication information from headers. More... | |
static char * | ast_http_get_contents (int *return_length, struct ast_tcptls_session_instance *ser, struct ast_variable *headers) |
Returns the contents (body) of the HTTP request. More... | |
struct ast_variable * | ast_http_get_cookies (struct ast_variable *headers) |
Get cookie from Request headers. More... | |
struct ast_json * | ast_http_get_json (struct ast_tcptls_session_instance *ser, struct ast_variable *headers) |
Get JSON from client Request Entity-Body, if content type is application/json. More... | |
struct ast_variable * | ast_http_get_post_vars (struct ast_tcptls_session_instance *ser, struct ast_variable *headers) |
Get post variables from client Request Entity-Body, if content type is application/x-www-form-urlencoded. More... | |
int | ast_http_header_match (const char *name, const char *expected_name, const char *value, const char *expected_value) |
Check if the header and value match (case insensitive) their associated expected values. More... | |
int | ast_http_header_match_in (const char *name, const char *expected_name, const char *value, const char *expected_value) |
Check if the header name matches the expected header name. If so, then check to see if the value can be located in the expected value. More... | |
int | ast_http_header_parse (char *buf, char **name, char **value) |
Parse a header into the given name/value strings. More... | |
uint32_t | ast_http_manid_from_vars (struct ast_variable *headers) |
Return manager id, if exist, from request headers. More... | |
void | ast_http_prefix (char *buf, int len) |
Return the current prefix. More... | |
void | ast_http_request_close_on_completion (struct ast_tcptls_session_instance *ser) |
Request the HTTP connection be closed after this HTTP request. More... | |
int | ast_http_response_status_line (const char *buf, const char *version, int code) |
Parse the http response status line. More... | |
void | ast_http_send (struct ast_tcptls_session_instance *ser, enum ast_http_method method, int status_code, const char *status_title, struct ast_str *http_header, struct ast_str *out, int fd, unsigned int static_content) |
Generic function for sending HTTP/1.1 response. More... | |
int | ast_http_uri_link (struct ast_http_uri *urih) |
Link the new uri into the list. More... | |
void | ast_http_uri_unlink (struct ast_http_uri *urih) |
Unregister a URI handler. More... | |
void | ast_http_uri_unlink_all_with_key (const char *key) |
Unregister all handlers with matching key. More... | |
struct ast_module * | AST_MODULE_SELF_SYM (void) |
static struct ast_http_auth * | auth_create (const char *userid, const char *password) |
static int | chunked_atoh (const char *s, int len) |
static int | get_content_length (struct ast_variable *headers) |
Returns the value of the Content-Length header. More... | |
static char * | get_content_type (struct ast_variable *headers) |
Retrieves the content type specified in the "Content-Type" header. More... | |
static const char * | get_header (struct ast_variable *headers, const char *field_name) |
Retrieves the header with the given field name. More... | |
static const char * | get_transfer_encoding (struct ast_variable *headers) |
Returns the value of the Transfer-Encoding header. More... | |
static char * | handle_show_http (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static int | handle_uri (struct ast_tcptls_session_instance *ser, char *uri, enum ast_http_method method, struct ast_variable *headers) |
static int | http_body_check_chunk_sync (struct ast_tcptls_session_instance *ser) |
static int | http_body_discard_chunk_trailer_headers (struct ast_tcptls_session_instance *ser) |
static int | http_body_discard_contents (struct ast_tcptls_session_instance *ser, int length, const char *what_getting) |
static int | http_body_get_chunk_length (struct ast_tcptls_session_instance *ser) |
static int | http_body_read_contents (struct ast_tcptls_session_instance *ser, char *buf, int length, const char *what_getting) |
static int | http_check_connection_close (struct ast_variable *headers) |
static int | http_request_headers_get (struct ast_tcptls_session_instance *ser, struct ast_variable **headers) |
static void | http_request_tracking_init (struct http_worker_private_data *request) |
static int | http_request_tracking_setup (struct ast_tcptls_session_instance *ser, struct ast_variable *headers) |
static void * | httpd_helper_thread (void *arg) |
static int | httpd_process_request (struct ast_tcptls_session_instance *ser) |
static int | httpstatus_callback (struct ast_tcptls_session_instance *ser, const struct ast_http_uri *urih, const char *uri, enum ast_http_method method, struct ast_variable *get_vars, struct ast_variable *headers) |
static int | load_module (void) |
static struct ast_variable * | parse_cookies (const char *cookies) |
static int | reload_module (void) |
static void | remove_excess_lws (char *s) |
static int | static_callback (struct ast_tcptls_session_instance *ser, const struct ast_http_uri *urih, const char *uri, enum ast_http_method method, struct ast_variable *get_vars, struct ast_variable *headers) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER , .description = "Built-in HTTP Server" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "30ef0c93b36035ec78c9cfd712d36d9b" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .reload = reload_module, .load_pri = AST_MODPRI_CORE, .requires = "extconfig", } |
static const struct ast_cfhttp_methods_text | ast_http_methods_text [] |
static const struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_cli_entry | cli_http [] |
static struct ast_tcptls_session_args | http_desc |
static char | http_server_name [MAX_SERVER_NAME_LENGTH] |
static struct ast_tls_config | http_tls_cfg |
static struct ast_tcptls_session_args | https_desc |
struct { | |
const char * ext | |
const char * mtype | |
} | mimetypes [] |
Limit the kinds of files we're willing to serve up. More... | |
static char | prefix [MAX_PREFIX] |
static int | session_count = 0 |
static int | session_inactivity = DEFAULT_SESSION_INACTIVITY |
static int | session_keep_alive = DEFAULT_SESSION_KEEP_ALIVE |
static int | session_limit = DEFAULT_SESSION_LIMIT |
static struct ast_http_uri | static_uri |
static int | static_uri_enabled |
static struct ast_http_uri | status_uri |
static int | status_uri_enabled |
static struct uri_redirects | uri_redirects = { .first = NULL, .last = NULL, .lock = { PTHREAD_RWLOCK_INITIALIZER , NULL, {1, 0} } , } |
static struct uris | uris = { .first = NULL, .last = NULL, .lock = { PTHREAD_RWLOCK_INITIALIZER , NULL, {1, 0} } , } |
http server for AMI access
This program implements a tiny http server and was inspired by micro-httpd by Jef Poskanzer
GMime http://spruce.sourceforge.net/gmime/
AMI over HTTP support - AMI over the http protocol
Definition in file http.c.
#define BASIC_LEN 6 |
#define BASIC_PREFIX "Basic " |
Definition at line 1576 of file http.c.
Referenced by ast_http_get_auth().
#define DEFAULT_PORT 8088 |
Definition at line 69 of file http.c.
Referenced by __ast_http_load().
#define DEFAULT_RESPONSE_HEADER_LENGTH 512 |
Max size for the http response header
Definition at line 81 of file http.c.
Referenced by ast_http_auth(), and ast_http_error().
#define DEFAULT_SESSION_INACTIVITY 30000 |
(ms) Idle time waiting for data.
Definition at line 73 of file http.c.
Referenced by __ast_http_load().
#define DEFAULT_SESSION_KEEP_ALIVE 15000 |
(ms) Idle time between HTTP requests
Definition at line 77 of file http.c.
Referenced by __ast_http_load().
#define DEFAULT_SESSION_LIMIT 100 |
Definition at line 71 of file http.c.
Referenced by __ast_http_load().
#define DEFAULT_TLS_PORT 8089 |
Definition at line 70 of file http.c.
Referenced by __ast_http_load().
#define INITIAL_RESPONSE_BODY_BUFFER 1024 |
Initial response body length.
Definition at line 92 of file http.c.
Referenced by ast_http_create_response().
#define MAX_CONTENT_LENGTH 40960 |
Maximum application/json or application/x-www-form-urlencoded body content length.
Definition at line 85 of file http.c.
Referenced by ast_http_get_contents().
#define MAX_HTTP_LINE_LENGTH 4096 |
Maximum line length for HTTP requests.
Definition at line 99 of file http.c.
Referenced by http_body_discard_chunk_trailer_headers(), http_body_get_chunk_length(), http_request_headers_get(), and httpd_process_request().
#define MAX_HTTP_REQUEST_HEADERS 100 |
Limit the number of request headers in case the sender is being ridiculous.
Definition at line 1744 of file http.c.
Referenced by http_request_headers_get().
#define MAX_PREFIX 80 |
Definition at line 68 of file http.c.
Referenced by __ast_http_load().
#define MAX_SERVER_NAME_LENGTH 128 |
Max size for the http server name
Definition at line 79 of file http.c.
Referenced by __ast_http_load(), ast_http_create_response(), and ast_http_send().
#define MIN_INITIAL_REQUEST_TIMEOUT 10000 |
(ms) Min timeout for initial HTTP request to start coming in.
Definition at line 75 of file http.c.
Referenced by httpd_helper_thread().
enum http_private_flags |
|
static |
Definition at line 2077 of file http.c.
References ast_tcptls_session_args::accept_fd, add_redirect(), AST_AF_UNSPEC, AST_CERTFILE, ast_config_destroy(), ast_config_load2(), ast_copy_string(), ast_free, ast_get_version(), ast_http_uri_link(), ast_http_uri_unlink(), ast_log, ast_parse_arg(), AST_RWLIST_REMOVE_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_set_flag, ast_sockaddr_copy(), ast_sockaddr_isnull(), ast_sockaddr_port, ast_sockaddr_resolve(), ast_sockaddr_set_port, ast_sockaddr_setnull(), ast_sockaddr_stringify(), AST_SSL_DISABLE_TLSV1, AST_SSL_SERVER_CIPHER_ORDER, ast_ssl_setup(), ast_strdup, ast_strlen_zero, ast_tcptls_server_start(), ast_tcptls_server_stop(), ast_tls_read_conf(), ast_true(), ast_variable_browse(), ast_verb, ast_tls_config::capath, ast_tls_config::certfile, ast_tls_config::cipher, CONFIG_FLAG_FILEUNCHANGED, CONFIG_STATUS_FILEINVALID, CONFIG_STATUS_FILEUNCHANGED, DEFAULT_PORT, DEFAULT_SESSION_INACTIVITY, DEFAULT_SESSION_KEEP_ALIVE, DEFAULT_SESSION_LIMIT, DEFAULT_TLS_PORT, ast_tls_config::enabled, enabled, ast_tls_config::flags, http_server_name, http_tls_cfg, ast_variable::lineno, ast_tcptls_session_args::local_address, LOG_WARNING, MAX_PREFIX, MAX_SERVER_NAME_LENGTH, ast_variable::name, ast_variable::next, NULL, PARSE_DEFAULT, PARSE_IN_RANGE, PARSE_INT32, PARSE_UINT32, prefix, ast_tls_config::pvtfile, RAII_VAR, session_inactivity, session_keep_alive, session_limit, static_uri_enabled, status_uri_enabled, ast_tcptls_session_args::tls_cfg, and ast_variable::value.
Referenced by load_module(), and reload_module().
|
static |
Add a new URI redirect The entries in the redirect list are sorted by length, just like the list of URI handlers.
Definition at line 2022 of file http.c.
References ast_calloc, ast_copy_string(), ast_log, AST_RWLIST_EMPTY, AST_RWLIST_FIRST, AST_RWLIST_INSERT_AFTER, AST_RWLIST_INSERT_HEAD, AST_RWLIST_INSERT_TAIL, AST_RWLIST_NEXT, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_skip_blanks(), ast_strdupa, http_uri_redirect::dest, LOG_WARNING, strsep(), and http_uri_redirect::target.
Referenced by __ast_http_load().
const char* ast_get_http_method | ( | enum ast_http_method | method | ) |
Return http method name string.
Definition at line 190 of file http.c.
References ARRAY_LEN, ast_http_methods_text, NULL, and ast_cfhttp_methods_text::text.
Referenced by add_allow_header(), ast_ari_invoke(), auth_http_callback(), and handle_options().
void ast_http_auth | ( | struct ast_tcptls_session_instance * | ser, |
const char * | realm, | ||
const unsigned long | nonce, | ||
const unsigned long | opaque, | ||
int | stale, | ||
const char * | text | ||
) |
Send http "401 Unauthorized" response and close socket.
Definition at line 622 of file http.c.
References ast_http_create_response(), ast_str_create, ast_str_set(), and DEFAULT_RESPONSE_HEADER_LENGTH.
Referenced by auth_http_callback().
int ast_http_body_discard | ( | struct ast_tcptls_session_instance * | ser | ) |
Read and discard any unread HTTP request body.
ser | HTTP TCP/TLS session object. |
0 | on success. |
-1 | on error. |
Definition at line 1120 of file http.c.
References ast_assert, ast_debug, ast_set_flag, ast_test_flag, http_worker_private_data::body_length, http_worker_private_data::flags, http_body_check_chunk_sync(), http_body_discard_chunk_trailer_headers(), http_body_discard_contents(), http_body_get_chunk_length(), HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, ast_tcptls_session_instance::private_data, and request().
Referenced by ast_http_send(), and ast_websocket_uri_cb().
void ast_http_body_read_status | ( | struct ast_tcptls_session_instance * | ser, |
int | read_success | ||
) |
Update the body read success status.
ser | HTTP TCP/TLS session object. |
read_success | TRUE if body was read successfully. |
Definition at line 899 of file http.c.
References ast_set_flag, ast_test_flag, http_worker_private_data::flags, HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, ast_tcptls_session_instance::private_data, and request().
Referenced by http_post_callback().
void ast_http_create_response | ( | struct ast_tcptls_session_instance * | ser, |
int | status_code, | ||
const char * | status_title, | ||
struct ast_str * | http_header_data, | ||
const char * | text | ||
) |
Creates and sends a formatted http response message.
ser | TCP/TLS session object |
status_code | HTTP response code (200/401/403/404/500) |
status_title | English equivalent to the status_code parameter |
http_header_data | The formatted text to use in the http header |
text | Additional informational text to use in the response |
The response body is created as HTML content, from the status_code, status_title, and the text parameters.
The http_header_data parameter will be freed as a result of calling function.
Definition at line 567 of file http.c.
References ast_debug, ast_free, ast_http_send(), AST_HTTP_UNKNOWN, ast_str_buffer(), ast_str_create, ast_str_set(), ast_strlen_zero, ast_tcptls_close_session_file(), ast_xml_escape(), http_server_name, INITIAL_RESPONSE_BODY_BUFFER, MAX_SERVER_NAME_LENGTH, and out.
Referenced by ast_http_auth(), and ast_http_error().
void ast_http_error | ( | struct ast_tcptls_session_instance * | ser, |
int | status_code, | ||
const char * | status_title, | ||
const char * | text | ||
) |
Send HTTP error message and close socket.
Definition at line 648 of file http.c.
References ast_http_create_response(), ast_str_create, ast_str_set(), and DEFAULT_RESPONSE_HEADER_LENGTH.
Referenced by ast_ari_callback(), ast_ari_events_event_websocket_ws_attempted_cb(), ast_websocket_uri_cb(), auth_http_callback(), event_session_allocation_error_handler(), generic_http_callback(), handle_uri(), http_callback(), http_post_callback(), http_request_headers_get(), http_request_tracking_setup(), httpd_helper_thread(), httpd_process_request(), httpstatus_callback(), static_callback(), and websocket_bad_request().
const char* ast_http_ftype2mtype | ( | const char * | ftype | ) |
Return mime type based on extension.
ftype | filename extension |
Definition at line 203 of file http.c.
References ARRAY_LEN, ext, mimetypes, and NULL.
Referenced by build_profile(), and static_callback().
struct ast_http_auth* ast_http_get_auth | ( | struct ast_variable * | headers | ) |
Get HTTP authentication information from headers.
The returned object is AO2 managed, so clean up with ao2_cleanup().
headers | HTTP request headers. |
NULL
if no supported HTTP auth headers present. Definition at line 1579 of file http.c.
References ast_assert, ast_base64decode(), ast_begins_with(), ast_log, auth_create(), base64, BASIC_LEN, BASIC_PREFIX, LOG_DEBUG, LOG_WARNING, ast_variable::name, ast_variable::next, NULL, password, strsep(), and ast_variable::value.
Referenced by authenticate_user(), and http_callback().
|
static |
Returns the contents (body) of the HTTP request.
return_length | ptr to int that returns content length |
ser | HTTP TCP/TLS session object |
headers | List of HTTP headers |
Definition at line 1181 of file http.c.
References ast_assert, ast_debug, ast_free, ast_log, ast_malloc, ast_realloc, ast_set_flag, ast_test_flag, http_worker_private_data::body_length, buf, errno, http_worker_private_data::flags, http_body_check_chunk_sync(), http_body_discard_chunk_trailer_headers(), http_body_get_chunk_length(), http_body_read_contents(), HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, LOG_WARNING, MAX_CONTENT_LENGTH, NULL, ast_tcptls_session_instance::private_data, and request().
Referenced by ast_http_get_json(), and ast_http_get_post_vars().
struct ast_variable* ast_http_get_cookies | ( | struct ast_variable * | headers | ) |
Get cookie from Request headers.
Definition at line 1532 of file http.c.
References ast_variables_destroy(), ast_variable::name, ast_variable::next, NULL, parse_cookies(), and ast_variable::value.
Referenced by ast_http_manid_from_vars(), and httpstatus_callback().
struct ast_json* ast_http_get_json | ( | struct ast_tcptls_session_instance * | ser, |
struct ast_variable * | headers | ||
) |
Get JSON from client Request Entity-Body, if content type is application/json.
ser | TCP/TLS session object |
headers | List of HTTP headers |
NULL
on error, if no content, or if different content type. Definition at line 1314 of file http.c.
References ast_free, ast_http_get_contents(), ast_json_load_buf(), ast_strlen_zero, buf, errno, get_content_type(), NULL, RAII_VAR, and type.
Referenced by ast_ari_callback().
struct ast_variable* ast_http_get_post_vars | ( | struct ast_tcptls_session_instance * | ser, |
struct ast_variable * | headers | ||
) |
Get post variables from client Request Entity-Body, if content type is application/x-www-form-urlencoded.
ser | TCP/TLS session object |
headers | List of HTTP headers |
Definition at line 1353 of file http.c.
References ast_free, ast_http_get_contents(), ast_strlen_zero, ast_uri_decode(), ast_uri_http_legacy, ast_variable_new, buf, errno, get_content_type(), NULL, RAII_VAR, strsep(), type, and var.
Referenced by ast_ari_callback(), auth_http_callback(), and generic_http_callback().
int ast_http_header_match | ( | const char * | name, |
const char * | expected_name, | ||
const char * | value, | ||
const char * | expected_value | ||
) |
Check if the header and value match (case insensitive) their associated expected values.
name | header name to check |
expected_name | the expected name of the header |
value | header value to check |
expected_value | the expected value of the header |
Definition at line 1710 of file http.c.
References ast_log, and LOG_ERROR.
Referenced by websocket_client_handshake_get_response().
int ast_http_header_match_in | ( | const char * | name, |
const char * | expected_name, | ||
const char * | value, | ||
const char * | expected_value | ||
) |
Check if the header name matches the expected header name. If so, then check to see if the value can be located in the expected value.
name | header name to check |
expected_name | the expected name of the header |
value | header value to check if in expected value |
expected_value | the expected value(s) |
Definition at line 1726 of file http.c.
References ast_log, LOG_ERROR, and strcasestr().
Referenced by websocket_client_handshake_get_response().
int ast_http_header_parse | ( | char * | buf, |
char ** | name, | ||
char ** | value | ||
) |
Parse a header into the given name/value strings.
buf | a string containing the name/value to point to |
name | out parameter pointing to the header name |
value | out parameter pointing to header value |
Definition at line 1688 of file http.c.
References ast_skip_blanks(), ast_strlen_zero, ast_trim_blanks(), buf, remove_excess_lws(), and strsep().
Referenced by websocket_client_handshake_get_response().
uint32_t ast_http_manid_from_vars | ( | struct ast_variable * | headers | ) |
Return manager id, if exist, from request headers.
headers | List of HTTP headers |
Definition at line 217 of file http.c.
References ast_http_get_cookies(), ast_variables_destroy(), ast_variable::name, ast_variable::next, and ast_variable::value.
Referenced by generic_http_callback(), http_post_callback(), and static_callback().
void ast_http_prefix | ( | char * | buf, |
int | len | ||
) |
Return the current prefix.
[out] | buf | destination buffer for previous |
[in] | len | length of prefix to copy |
Definition at line 233 of file http.c.
References ast_copy_string(), and prefix.
void ast_http_request_close_on_completion | ( | struct ast_tcptls_session_instance * | ser | ) |
Request the HTTP connection be closed after this HTTP request.
ser | HTTP TCP/TLS session object. |
Definition at line 836 of file http.c.
References ast_set_flag, http_worker_private_data::flags, HTTP_FLAG_CLOSE_ON_COMPLETION, ast_tcptls_session_instance::private_data, and request().
Referenced by ast_ari_callback(), auth_http_callback(), generic_http_callback(), handle_uri(), http_callback(), http_post_callback(), httpstatus_callback(), static_callback(), and websocket_bad_request().
int ast_http_response_status_line | ( | const char * | buf, |
const char * | version, | ||
int | code | ||
) |
Parse the http response status line.
buf | the http response line information |
version | the expected http version (e.g. HTTP/1.1) |
code | the expected status code |
Definition at line 1636 of file http.c.
References ast_log, and LOG_ERROR.
Referenced by websocket_client_handshake_get_response().
void ast_http_send | ( | struct ast_tcptls_session_instance * | ser, |
enum ast_http_method | method, | ||
int | status_code, | ||
const char * | status_title, | ||
struct ast_str * | http_header, | ||
struct ast_str * | out, | ||
int | fd, | ||
unsigned int | static_content | ||
) |
Generic function for sending HTTP/1.1 response.
ser | TCP/TLS session object |
method | GET/POST/HEAD |
status_code | HTTP response code (200/401/403/404/500) |
status_title | English equivalent to the status_code parameter |
http_header | An ast_str object containing all headers |
out | An ast_str object containing the body of the response |
fd | If out is NULL, a file descriptor where the body of the response is held (otherwise -1) |
static_content | Zero if the content is dynamically generated and should not be cached; nonzero otherwise |
Extra HTTP headers MUST be present only in the http_header argument. The argument "out" should contain only content of the response (no headers!).
HTTP content can be constructed from the argument "out", if it is not NULL; otherwise, the function will read content from FD.
This function calculates the content-length http header itself.
Both the http_header and out arguments will be freed by this function; however, if FD is open, it will remain open.
Definition at line 456 of file http.c.
References ast_assert, ast_debug, ast_free, ast_http_body_discard(), AST_HTTP_HEAD, ast_iostream_printf(), ast_iostream_write(), ast_localtime(), ast_str_buffer(), ast_str_create, ast_str_set(), ast_str_strlen(), ast_strftime(), ast_strlen_zero, ast_tcptls_close_session_file(), ast_test_flag, ast_tvnow(), buf, errno, http_worker_private_data::flags, HTTP_FLAG_CLOSE_ON_COMPLETION, http_server_name, len(), MAX_SERVER_NAME_LENGTH, ast_tcptls_session_instance::private_data, request(), session_keep_alive, and ast_tcptls_session_instance::stream.
Referenced by ast_ari_callback(), ast_http_create_response(), auth_http_callback(), generic_http_callback(), handle_uri(), http_callback(), httpstatus_callback(), static_callback(), and websocket_bad_request().
int ast_http_uri_link | ( | struct ast_http_uri * | urih | ) |
Link the new uri into the list.
Register a URI handler.
They are sorted by length of the string, not alphabetically. Duplicate entries are not replaced, but the insertion order (using <= and not just <) makes sure that more recent insertions hide older ones. On a lookup, we just scan the list and stop at the first matching entry.
Definition at line 673 of file http.c.
References AST_RWLIST_EMPTY, AST_RWLIST_FIRST, AST_RWLIST_INSERT_AFTER, AST_RWLIST_INSERT_HEAD, AST_RWLIST_INSERT_TAIL, AST_RWLIST_NEXT, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, len(), ast_http_uri::prefix, prefix, and ast_http_uri::uri.
Referenced by __ast_http_load(), __ast_http_post_load(), __init_manager(), load_module(), and reload_module().
void ast_http_uri_unlink | ( | struct ast_http_uri * | urih | ) |
Unregister a URI handler.
Definition at line 705 of file http.c.
References AST_RWLIST_REMOVE, AST_RWLIST_UNLOCK, and AST_RWLIST_WRLOCK.
Referenced by __ast_http_load(), __init_manager(), load_module(), reload_module(), and unload_module().
void ast_http_uri_unlink_all_with_key | ( | const char * | key | ) |
Unregister all handlers with matching key.
Definition at line 712 of file http.c.
References ast_free, AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_http_uri::data, ast_http_uri::dmallocd, ast_http_uri::key, and ast_http_uri::mallocd.
Referenced by __ast_http_post_load(), and unload_module().
struct ast_module* AST_MODULE_SELF_SYM | ( | void | ) |
|
static |
Definition at line 1545 of file http.c.
References ao2_alloc, ast_log, LOG_ERROR, NULL, ast_http_auth::password, and ast_http_auth::userid.
Referenced by ast_http_get_auth().
|
static |
Definition at line 987 of file http.c.
Referenced by http_body_get_chunk_length().
|
static |
Returns the value of the Content-Length header.
headers | HTTP headers. |
length | Value of the Content-Length header. |
0 | if header is not present. |
-1 | if header is invalid. |
Definition at line 786 of file http.c.
References get_header().
Referenced by http_request_tracking_setup().
|
static |
Retrieves the content type specified in the "Content-Type" header.
This function only returns the "type/subtype" and any trailing parameter is not included.
the | content type/subtype or NULL if the header is not found. |
Definition at line 761 of file http.c.
References ast_strndup, get_header(), and NULL.
Referenced by ast_http_get_json(), and ast_http_get_post_vars().
|
static |
Retrieves the header with the given field name.
headers | Headers to search. |
field_name | Name of the header to find. |
NULL
if header is not present. Definition at line 739 of file http.c.
References ast_variable::name, ast_variable::next, NULL, and ast_variable::value.
Referenced by get_content_length(), get_content_type(), get_transfer_encoding(), and http_check_connection_close().
|
static |
Returns the value of the Transfer-Encoding header.
headers | HTTP headers. |
string | Value of the Transfer-Encoding header. |
NULL | if header is not present. |
Definition at line 811 of file http.c.
References get_header().
Referenced by http_request_tracking_setup(), and httpd_process_request().
|
static |
Definition at line 2279 of file http.c.
References ast_cli_args::argc, ast_cli(), AST_RWLIST_EMPTY, AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, ast_sockaddr_isnull(), ast_sockaddr_stringify(), CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, CLI_SUCCESS, ast_cli_entry::command, ast_http_uri::description, http_uri_redirect::dest, ast_tls_config::enabled, ast_cli_args::fd, ast_http_uri::has_subtree, http_server_name, http_tls_cfg, NULL, ast_tcptls_session_args::old_address, prefix, http_uri_redirect::target, ast_http_uri::uri, and ast_cli_entry::usage.
|
static |
Definition at line 1401 of file http.c.
References ast_debug, ast_http_error(), ast_http_request_close_on_completion(), ast_http_send(), AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, ast_str_create, ast_str_set(), ast_uri_decode(), ast_uri_http_legacy, ast_variable_new, ast_variables_destroy(), c, ast_http_uri::callback, cleanup(), http_uri_redirect::dest, ast_http_uri::has_subtree, ast_http_uri::no_decode_uri, NULL, prefix, strsep(), http_uri_redirect::target, ast_http_uri::uri, and var.
Referenced by httpd_process_request().
|
static |
Definition at line 1069 of file http.c.
References ast_iostream_read(), ast_log, LOG_WARNING, and ast_tcptls_session_instance::stream.
Referenced by ast_http_body_discard(), and ast_http_get_contents().
|
static |
Definition at line 1100 of file http.c.
References ast_iostream_gets(), ast_log, ast_strlen_zero, ast_trim_blanks(), LOG_WARNING, MAX_HTTP_LINE_LENGTH, and ast_tcptls_session_instance::stream.
Referenced by ast_http_body_discard(), and ast_http_get_contents().
|
static |
Definition at line 964 of file http.c.
References ast_iostream_discard(), ast_log, LOG_WARNING, and ast_tcptls_session_instance::stream.
Referenced by ast_http_body_discard().
|
static |
Definition at line 1041 of file http.c.
References ast_iostream_gets(), ast_log, chunked_atoh(), LOG_WARNING, MAX_HTTP_LINE_LENGTH, and ast_tcptls_session_instance::stream.
Referenced by ast_http_body_discard(), and ast_http_get_contents().
|
static |
Definition at line 928 of file http.c.
References ast_iostream_read(), ast_log, LOG_WARNING, ast_tcptls_session_instance::stream, and total.
Referenced by ast_http_get_contents().
|
static |
Definition at line 825 of file http.c.
References get_header().
Referenced by http_request_tracking_setup().
|
static |
Definition at line 1757 of file http.c.
References ast_http_error(), ast_iostream_gets(), ast_skip_blanks(), ast_strlen_zero, ast_trim_blanks(), ast_variable_new, ast_variables_destroy(), len(), MAX_HTTP_LINE_LENGTH, MAX_HTTP_REQUEST_HEADERS, ast_tcptls_session_args::name, ast_variable::next, NULL, ast_tcptls_session_instance::stream, strsep(), and value.
Referenced by httpd_process_request().
|
static |
Definition at line 852 of file http.c.
References ast_set_flags_to, http_worker_private_data::flags, HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, and HTTP_FLAG_HAS_BODY.
Referenced by httpd_helper_thread(), and httpd_process_request().
|
static |
Definition at line 871 of file http.c.
References ast_http_error(), ast_set_flag, ast_set_flags_to, http_worker_private_data::body_length, http_worker_private_data::flags, get_content_length(), get_transfer_encoding(), http_check_connection_close(), HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, ast_tcptls_session_instance::private_data, and request().
Referenced by httpd_process_request().
|
static |
Definition at line 1937 of file http.c.
References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_alloc_options, ao2_cleanup, ao2_ref, ast_atomic_fetchadd_int(), ast_debug, ast_http_error(), ast_iostream_get_fd(), ast_iostream_nonblock(), ast_iostream_set_exclusive_input(), ast_iostream_set_timeout_idle_inactivity(), ast_log, ast_tcptls_close_session_file(), done, errno, http_request_tracking_init(), httpd_process_request(), LOG_WARNING, MIN_INITIAL_REQUEST_TIMEOUT, NULL, ast_tcptls_session_instance::private_data, session_count, session_inactivity, session_keep_alive, session_limit, ast_tcptls_session_instance::stream, and timeout.
|
static |
Definition at line 1839 of file http.c.
References AST_HTTP_DELETE, ast_http_error(), AST_HTTP_GET, AST_HTTP_HEAD, AST_HTTP_OPTIONS, AST_HTTP_POST, AST_HTTP_PUT, AST_HTTP_UNKNOWN, ast_iostream_gets(), ast_shutdown_final(), ast_skip_blanks(), ast_skip_nonblanks(), ast_test_flag, ast_variables_destroy(), c, http_worker_private_data::flags, get_transfer_encoding(), handle_uri(), HTTP_FLAG_CLOSE_ON_COMPLETION, http_request_headers_get(), http_request_tracking_init(), http_request_tracking_setup(), len(), MAX_HTTP_LINE_LENGTH, method, NULL, ast_tcptls_session_instance::private_data, RAII_VAR, request(), and ast_tcptls_session_instance::stream.
Referenced by httpd_helper_thread().
|
static |
Definition at line 368 of file http.c.
References ast_http_error(), AST_HTTP_GET, ast_http_get_cookies(), AST_HTTP_HEAD, ast_http_request_close_on_completion(), ast_http_send(), ast_sockaddr_stringify_addr(), ast_sockaddr_stringify_port(), ast_str_append(), ast_str_create, ast_variables_destroy(), ast_tls_config::enabled, http_server_name, http_tls_cfg, ast_variable::name, ast_variable::next, NULL, ast_tcptls_session_args::old_address, out, prefix, and ast_variable::value.
|
static |
Definition at line 2374 of file http.c.
References __ast_http_load(), ARRAY_LEN, ast_cli_register_multiple, AST_MODFLAG_GLOBAL_SYMBOLS, AST_MODFLAG_LOAD_ORDER, AST_MODPRI_CORE, AST_MODULE_INFO(), AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_SUCCESS, AST_MODULE_SUPPORT_CORE, ASTERISK_GPL_KEY, reload(), reload_module(), and unload_module().
|
static |
Definition at line 1498 of file http.c.
References ast_debug, ast_strdupa, ast_strip(), ast_strip_quoted(), ast_strlen_zero, ast_variable_new, ast_tcptls_session_args::name, NULL, parse(), strsep(), and var.
Referenced by ast_http_get_cookies().
|
static |
|
static |
Definition at line 1659 of file http.c.
References ast_free, ast_malloc, ast_skip_blanks(), ast_skip_nonblanks(), and buf.
Referenced by ast_http_header_parse().
|
static |
Definition at line 240 of file http.c.
References ast_alloca, ast_config_AST_DATA_DIR, ast_http_error(), ast_http_ftype2mtype(), AST_HTTP_GET, AST_HTTP_HEAD, ast_http_manid_from_vars(), ast_http_request_close_on_completion(), ast_http_send(), ast_localtime(), ast_str_create, ast_str_set(), ast_strftime(), ast_strlen_zero, astman_is_authed(), len(), mtype, ast_variable::name, ast_variable::next, NULL, S_OR, and ast_variable::value.
|
static |
Definition at line 2343 of file http.c.
References ARRAY_LEN, ast_cli_unregister_multiple(), ast_free, ast_http_uri_unlink(), AST_RWLIST_REMOVE_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_tcptls_server_stop(), ast_tls_config::capath, ast_tls_config::certfile, ast_tls_config::cipher, ast_tls_config::enabled, http_tls_cfg, ast_tls_config::pvtfile, static_uri_enabled, and status_uri_enabled.
Referenced by load_module().
|
static |
|
static |
Referenced by ast_get_http_method().
|
static |
|
static |
const char* ext |
Definition at line 147 of file http.c.
Referenced by ast_ext_ctx(), ast_http_ftype2mtype(), ast_media_cache_create_or_update(), ast_media_cache_retrieve(), ast_rtp_interpret(), bucket_file_update_path(), cli_console_dial(), common_exec(), dahdi_call(), do_directory(), filehelper(), filename_parse(), handle_cli_dialplan_save(), hintdevice_hash_cb(), is_recording(), json_array_from_list(), misdn_call(), misdn_request(), ooh323_request(), pbx_load_config(), pbx_load_users(), pvalGotoSetTarget(), read_dirs_cb(), record_exec(), register_exten(), register_peer_exten(), rtp_add_candidates_to_ice(), rtp_raw_write(), set_rec_filename(), sip_request_call(), and unregister_exten().
|
static |
|
static |
Definition at line 104 of file http.c.
Referenced by __ast_http_load(), ast_http_create_response(), ast_http_send(), handle_show_http(), and httpstatus_callback().
|
static |
Definition at line 111 of file http.c.
Referenced by __ast_http_load(), handle_show_http(), httpstatus_callback(), and unload_module().
|
static |
struct { ... } mimetypes[] |
Limit the kinds of files we're willing to serve up.
Referenced by ast_http_ftype2mtype().
const char* mtype |
Definition at line 148 of file http.c.
Referenced by static_callback().
|
static |
Definition at line 141 of file http.c.
Referenced by __ast_http_load(), _if_exec(), _while_exec(), aoc_d_event(), aoc_e_event(), aoc_s_event(), aor_deleted_observer(), ast_begins_with(), ast_db_deltree(), ast_db_gettree(), ast_db_gettree_by_prefix(), ast_http_prefix(), ast_http_uri_link(), ast_remotecontrol(), ast_sip_location_retrieve_aor_contacts_nolock_filtered(), console_print(), exec_clearhash(), handle_auth(), handle_cli_database_show(), handle_show_http(), handle_uri(), hashkeys_read(), hashkeys_read2(), httpstatus_callback(), process_config(), shared_read(), shared_write(), sip_options_apply_aor_configuration(), sip_show_settings(), sorcery_astdb_create(), sorcery_astdb_delete(), sorcery_astdb_retrieve_fields_common(), sorcery_astdb_retrieve_id(), sorcery_astdb_retrieve_regex(), sorcery_astdb_update(), sorcery_config_retrieve_prefix(), sorcery_memory_cache_retrieve_prefix(), test_xml_entry(), update_scoreboard(), and while_continue_exec().
|
static |
Definition at line 109 of file http.c.
Referenced by cli_fax_show_sessions(), httpd_helper_thread(), is_media_state_valid(), and manager_fax_sessions().
|
static |
Definition at line 107 of file http.c.
Referenced by __ast_http_load(), and httpd_helper_thread().
|
static |
Definition at line 108 of file http.c.
Referenced by __ast_http_load(), ast_http_send(), and httpd_helper_thread().
|
static |
Definition at line 106 of file http.c.
Referenced by __ast_http_load(), and httpd_helper_thread().
|
static |
|
static |
Definition at line 142 of file http.c.
Referenced by __ast_http_load(), and unload_module().
|
static |
|
static |
Definition at line 143 of file http.c.
Referenced by __ast_http_load(), and unload_module().
|
static |