Asterisk - The Open Source Telephony Project
21.4.1
|
Support for Private Asterisk HTTP Servers. More...
Go to the source code of this file.
Data Structures | |
struct | ast_http_auth |
HTTP authentication information. More... | |
struct | ast_http_uri |
Definition of a URI handler. More... | |
Typedefs | |
typedef int(* | ast_http_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_params, struct ast_variable *headers) |
HTTP Callbacks. More... | |
Enumerations | |
enum | ast_http_method { AST_HTTP_UNKNOWN = -1, AST_HTTP_GET = 0, AST_HTTP_POST, AST_HTTP_HEAD, AST_HTTP_PUT, AST_HTTP_DELETE, AST_HTTP_OPTIONS, AST_HTTP_MAX_METHOD } |
HTTP Request methods known by Asterisk. More... | |
Functions | |
const char * | ast_get_http_method (enum ast_http_method method) attribute_pure |
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. | |
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, const char *title, const char *text) |
Send HTTP error message and close socket. | |
const char * | ast_http_ftype2mtype (const char *ftype) attribute_pure |
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... | |
struct ast_variable * | ast_http_get_cookies (struct ast_variable *headers) |
Get cookie from Request headers. | |
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) attribute_pure |
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 *urihandler) |
Register a URI handler. More... | |
void | ast_http_uri_unlink (struct ast_http_uri *urihandler) |
Unregister a URI handler. | |
void | ast_http_uri_unlink_all_with_key (const char *key) |
Unregister all handlers with matching key. | |
Support for Private Asterisk HTTP Servers.
Definition in file http.h.
typedef int(* ast_http_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_params, struct ast_variable *headers) |
HTTP Callbacks.
ser | TCP/TLS session object |
urih | Registered URI handler struct for the URI. |
uri | Remaining request URI path (also with the get_params removed). |
method | enum ast_http_method GET, POST, etc. |
get_params | URI argument list passed with the HTTP request. |
headers | HTTP request header-name/value pair list |
Status and status text should be sent as arguments to the ast_http_send() function to reflect the status of the request (200 or 304, for example). Content length is calculated by ast_http_send() automatically.
Static content may be indicated to the ast_http_send() function, to indicate that it may be cached.
For a need authentication response, the ast_http_auth() function should be used.
For an error response, the ast_http_error() function should be used.
0 | Continue and process the next HTTP request. |
-1 | Fatal HTTP connection error. Force the HTTP connection closed. |
enum ast_http_method |
const char* ast_get_http_method | ( | enum ast_http_method | method | ) |
Return http method name string.
Definition at line 193 of file http.c.
Referenced by handle_options().
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 1122 of file http.c.
References ast_debug, http_worker_private_data::body_length, http_worker_private_data::flags, HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, and ast_tcptls_session_instance::private_data.
Referenced by ast_http_send().
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 901 of file http.c.
References http_worker_private_data::flags, HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, and ast_tcptls_session_instance::private_data.
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 570 of file http.c.
References ast_debug, ast_http_send(), AST_HTTP_UNKNOWN, ast_str_buffer(), ast_str_create, ast_str_set(), ast_tcptls_close_session_file(), ast_xml_escape(), INITIAL_RESPONSE_BODY_BUFFER, and MAX_SERVER_NAME_LENGTH.
Referenced by ast_http_auth(), and ast_http_error().
const char* ast_http_ftype2mtype | ( | const char * | ftype | ) |
Return mime type based on extension.
ftype | filename extension |
Definition at line 206 of file http.c.
References mimetypes.
Referenced by build_profile().
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 1582 of file http.c.
References ast_base64decode(), ast_begins_with(), BASIC_LEN, ast_variable::name, ast_variable::next, and ast_variable::value.
Referenced by authenticate_user().
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 1317 of file http.c.
References ast_http_get_contents(), ast_json_load_buf(), get_content_type(), and RAII_VAR.
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 1356 of file http.c.
References ast_http_get_contents(), ast_uri_decode(), get_content_type(), and RAII_VAR.
Referenced by 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 |
0 | if the name and expected name do not match |
-1 | if the value and expected value do not match |
1 | if the both the name and value match their expected value |
Definition at line 1713 of file http.c.
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) |
0 | if the name and expected name do not match |
-1 | if the value and is not in the expected value |
1 | if the name matches expected name and value is in expected value |
Definition at line 1729 of file http.c.
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 | |
[out] | name | header name |
[out] | value | header value |
-1 | if buf is empty |
0 | if buf could be separated into name and value |
1 | if name or value portion don't exist |
Definition at line 1691 of file http.c.
References ast_skip_blanks(), and ast_trim_blanks().
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 220 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().
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 236 of file http.c.
References ast_copy_string().
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 840 of file http.c.
References http_worker_private_data::flags, HTTP_FLAG_CLOSE_ON_COMPLETION, and ast_tcptls_session_instance::private_data.
Referenced by generic_http_callback().
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 |
-1 | if version didn't match or status code conversion fails. |
Definition at line 1639 of file http.c.
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 459 of file http.c.
References ast_debug, ast_http_body_discard(), ast_iostream_printf(), ast_iostream_write(), ast_localtime(), ast_str_buffer(), ast_str_create, ast_str_set(), ast_str_strlen(), ast_strftime(), ast_tcptls_close_session_file(), ast_tvnow(), http_worker_private_data::flags, HTTP_FLAG_CLOSE_ON_COMPLETION, MAX_SERVER_NAME_LENGTH, ast_tcptls_session_instance::private_data, and ast_tcptls_session_instance::stream.
Referenced by ast_http_create_response(), and generic_http_callback().
int ast_http_uri_link | ( | struct ast_http_uri * | urih | ) |
Register a URI handler.
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 676 of file http.c.
References AST_RWLIST_UNLOCK, and AST_RWLIST_WRLOCK.
Referenced by load_module().