Asterisk - The Open Source Telephony Project
21.4.1
|
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 | ast_http_server |
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 | HTTP_SERVER_BUCKETS 5 |
Number of HTTP server buckets. | |
#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. | |
AO2_STRING_FIELD_CMP_FN (ast_http_server, address) | |
AO2_STRING_FIELD_HASH_FN (ast_http_server, address) | |
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. | |
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. | |
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. | |
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. | |
void | ast_http_uri_unlink_all_with_key (const char *key) |
Unregister all handlers with matching key. | |
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 struct ast_http_server * | http_server_create (const char *name, const char *address, const struct ast_sockaddr *addr) |
static void | http_server_destroy (void *obj) |
static void | http_server_discard (struct ast_http_server *server) |
Discard/Drop a HTTP server. More... | |
static struct ast_http_server * | http_server_get (const char *name, const char *host, uint32_t port, struct ast_http_server **replace_me) |
Retrieve, or create and start a HTTP server. More... | |
static struct ast_http_server * | http_server_get_by_addr (const char *name, const struct ast_sockaddr *addr) |
Retrieve, or create a HTTP server object by sock address. More... | |
static struct ast_http_server * | http_server_get_by_host (const char *name, const char *host, uint32_t port) |
Retrieve, or create a HTTP server object by host. More... | |
static int | http_server_start (struct ast_http_server *server) |
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 = "da6642af068ee5e6490c5b1d2cc1d238" , .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 [] |
struct ast_http_server * | global_http_server = NULL |
static char | http_server_name [MAX_SERVER_NAME_LENGTH] |
struct ao2_container * | http_servers = NULL |
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. | |
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 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 |
#define DEFAULT_SESSION_KEEP_ALIVE 15000 |
#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 |
#define MAX_HTTP_REQUEST_HEADERS 100 |
#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_create_response(), and ast_http_send().
#define MIN_INITIAL_REQUEST_TIMEOUT 10000 |
enum http_private_flags |
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().
|
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 |
NULL | on failure |
Definition at line 1184 of file http.c.
References ast_debug, ast_malloc, ast_realloc, http_worker_private_data::body_length, http_worker_private_data::flags, HTTP_FLAG_BODY_READ, HTTP_FLAG_CLOSE_ON_COMPLETION, HTTP_FLAG_HAS_BODY, MAX_CONTENT_LENGTH, and ast_tcptls_session_instance::private_data.
Referenced by ast_http_get_json(), and ast_http_get_post_vars().
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 | ) |
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 676 of file http.c.
References AST_RWLIST_UNLOCK, and AST_RWLIST_WRLOCK.
Referenced by load_module().
|
static |
Returns the value of the Content-Length header.
headers | HTTP headers. |
0 | if header is not present. |
-1 | if header is invalid. |
Definition at line 790 of file http.c.
References get_header().
|
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.
NULL | if the header is not found. |
Definition at line 765 of file http.c.
References ast_strndup, and get_header().
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 742 of file http.c.
References ast_variable::name, ast_variable::next, and ast_variable::value.
Referenced by get_content_length(), get_content_type(), and get_transfer_encoding().
|
static |
Returns the value of the Transfer-Encoding header.
headers | HTTP headers. |
NULL | if header is not present. |
Definition at line 815 of file http.c.
References get_header().
|
static |
Discard/Drop a HTTP server.
Decrements the reference to the given object, and unlinks it from the servers container if it's the last reference.
After a server object has been added to the container this method should always be called to decrement the object's reference instead of the regular ao2 methods.
server | The server object |
Definition at line 2170 of file http.c.
References ao2_ref, and ao2_unlink.
Referenced by http_server_get().
|
static |
Retrieve, or create and start a HTTP server.
Resolve the given host, and retrieve a listening server object. If the server is not already listening then start it. If a replace_me parameter is given, and it points to a non-NULL value then that server is discarded and replaced.
name | The name of the server | |
host | The host to resolve, and match on or create a new object with | |
port | Optional port used if one is not specified with the host (default 8088) | |
[out] | replace_me | Optional server to be replaced |
Definition at line 2280 of file http.c.
References ao2_ref, http_server_discard(), and http_server_get_by_host().
|
static |
Retrieve, or create a HTTP server object by sock address.
Look for, and return a matching server object by addr. If an object is not found then create a new one.
name | The name of the server |
addr | The address to match on, or create a new object with |
Definition at line 2198 of file http.c.
References address, ast_sockaddr_stringify(), OBJ_KEY, and OBJ_NOLOCK.
Referenced by http_server_get_by_host().
|
static |
Retrieve, or create a HTTP server object by host.
Resolve the given host, and then look for, and return a matching server object. If an object is not found then create a new one.
name | The name of the server |
host | The host to resolve, and match on or create a new object with |
port | Optional port used if one is not specified with the host (default 8088) |
Definition at line 2228 of file http.c.
References ast_sockaddr_port, ast_sockaddr_resolve(), ast_sockaddr_set_port, and http_server_get_by_addr().
Referenced by http_server_get().
|
static |
struct ast_http_server* global_http_server = NULL |