89#define REFRESH_DEFAULT 300
117 strcpy(entry->name,
name);
119 entry->
service = ((
char *) entry) +
sizeof(*entry) + strlen(
name);
145 ast_debug(6,
"removing dns manager for '%s'\n", entry->name);
159 if (*dnsmgr && !strcasecmp((*dnsmgr)->name,
name)) {
186 (*dnsmgr)->update_func = func;
187 (*dnsmgr)->data =
data;
211 ast_debug(6,
"refreshing '%s'\n", entry->name);
226 entry->name, old_addr, new_addr);
264 pthread_testcancel();
266 pthread_testcancel();
285 ast_debug(6,
"Refreshing DNS lookups.\n");
288 if (
info->regex_present && regexec(&
info->filter, entry->name, 0,
NULL, 0)) {
318 "Usage: dnsmgr reload\n"
319 " Reloads the DNS manager configuration.\n";
342 "Usage: dnsmgr refresh [pattern]\n"
343 " Performs an immediate refresh of the managed DNS entries.\n"
344 " Optional regular expression pattern is used to filter the entries to refresh.\n";
351 ast_cli(
a->fd,
"DNS Manager is disabled.\n");
360 if (regcomp(&
info.filter,
a->argv[2], REG_EXTENDED | REG_NOSUB)) {
363 info.regex_present = 1;
369 if (
info.regex_present) {
370 regfree(&
info.filter);
384 "Usage: dnsmgr status\n"
385 " Displays the DNS manager status.\n";
401 ast_cli(
a->fd,
"Number of entries: %d\n", count);
478 if (!strcasecmp(v->
name,
"enable")) {
480 }
else if (!strcasecmp(v->
name,
"refreshinterval")) {
481 if (sscanf(v->
value,
"%30d", &interval) < 1) {
483 }
else if (interval < 0) {
484 ast_log(
LOG_WARNING,
"Invalid refresh interval '%d' specified, using default\n", interval);
526 .
requires =
"extconfig",
Prototypes for public functions only of internal interest,.
Access Control of various sorts.
int ast_get_ip_or_srv_with_preference(struct ast_sockaddr *addr, const char *hostname, const char *service, struct ast_sockaddr *preference)
Get the IP address given a hostname and optional service with a preferred result.
int ast_get_ip_or_srv(struct ast_sockaddr *addr, const char *hostname, const char *service)
Get the IP address given a hostname and optional service.
Asterisk main include file. File version handling, generic pbx functions.
#define ast_strdupa(s)
duplicate a string in memory from the stack
#define ast_calloc(num, len)
A wrapper for calloc()
enum ast_cc_service_type service
static const char config[]
Standard Command Line Interface.
int ast_cli_unregister(struct ast_cli_entry *e)
Unregisters a command or an array of commands.
#define ast_cli_register(e)
Registers a command or an array of commands.
#define AST_CLI_DEFINE(fn, txt,...)
void ast_cli(int fd, const char *fmt,...)
void ast_dnsmgr_release(struct ast_dnsmgr_entry *entry)
Free a DNS manager entry.
static int refresh_interval
void dnsmgr_start_refresh(void)
struct ast_dnsmgr_entry * ast_dnsmgr_get_family(const char *name, struct ast_sockaddr *result, const char *service, unsigned int family)
Allocate a new DNS manager entry.
struct ast_dnsmgr_entry * ast_dnsmgr_get(const char *name, struct ast_sockaddr *result, const char *service)
Allocate a new DNS manager entry.
static struct ast_cli_entry cli_status
static void * do_refresh(void *data)
static struct ast_sched_context * sched
static ast_mutex_t refresh_lock
static int internal_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service, dns_update_func func, void *data)
int ast_dnsmgr_lookup_cb(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service, dns_update_func func, void *data)
Allocate and initialize a DNS manager entry, with update callback.
static char * handle_cli_refresh(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
int ast_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_dnsmgr_entry **dnsmgr, const char *service)
Allocate and initialize a DNS manager entry.
static int reload_module(void)
static int refresh_list(const void *data)
static struct refresh_info master_refresh_info
static pthread_t refresh_thread
static struct ast_cli_entry cli_refresh
static char * handle_cli_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
static struct ast_cli_entry cli_reload
static char * handle_cli_status(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
static int load_module(void)
static int unload_module(void)
int ast_dnsmgr_changed(struct ast_dnsmgr_entry *entry)
Check is see if a dnsmgr entry has changed.
int ast_dnsmgr_refresh(struct ast_dnsmgr_entry *entry)
Force a refresh of a dnsmgr entry.
static int do_reload(int loading)
static struct entry_list entry_list
static int dnsmgr_refresh(struct ast_dnsmgr_entry *entry, int verbose)
Background DNS update manager.
void(* dns_update_func)(struct ast_sockaddr *old_addr, struct ast_sockaddr *new_addr, void *data)
Configuration File Parser.
struct ast_config * ast_config_load2(const char *filename, const char *who_asked, struct ast_flags flags)
Load a config file.
#define CONFIG_STATUS_FILEMISSING
@ CONFIG_FLAG_FILEUNCHANGED
#define CONFIG_STATUS_FILEUNCHANGED
#define CONFIG_STATUS_FILEINVALID
void ast_config_destroy(struct ast_config *cfg)
Destroys a config.
struct ast_variable * ast_variable_browse(const struct ast_config *config, const char *category_name)
#define ast_debug(level,...)
Log a DEBUG message.
A set of macros to manage forward-linked lists.
#define AST_RWLIST_RDLOCK(head)
Read locks a list.
#define AST_RWLIST_WRLOCK(head)
Write locks a list.
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
#define AST_RWLIST_HEAD_STATIC(name, type)
Defines a structure to be used to hold a read/write list of specified type, statically initialized.
#define AST_RWLIST_REMOVE
#define AST_RWLIST_TRAVERSE
#define AST_RWLIST_INSERT_HEAD
#define AST_PTHREADT_NULL
#define ast_mutex_init(pmutex)
#define ast_mutex_unlock(a)
#define ast_mutex_trylock(a)
#define ast_mutex_destroy(a)
#define ast_mutex_lock(a)
#define AST_MUTEX_DEFINE_STATIC(mutex)
The AMI - Asterisk Manager Interface - is a TCP protocol created to manage Asterisk with third-party ...
Asterisk module definitions.
@ AST_MODFLAG_GLOBAL_SYMBOLS
#define AST_MODULE_INFO(keystr, flags_to_set, desc, fields...)
@ AST_MODULE_SUPPORT_CORE
#define ASTERISK_GPL_KEY
The text the key() function should return.
@ AST_MODULE_LOAD_FAILURE
Module could not be loaded properly.
@ AST_MODULE_LOAD_SUCCESS
static char * ast_sockaddr_stringify(const struct ast_sockaddr *addr)
Wrapper around ast_sockaddr_stringify_fmt() with default format.
#define ast_sockaddr_port(addr)
Get the port number of a socket address.
static void ast_sockaddr_copy(struct ast_sockaddr *dst, const struct ast_sockaddr *src)
Copies the data from one ast_sockaddr to another.
int ast_sockaddr_parse(struct ast_sockaddr *addr, const char *str, int flags)
Parse an IPv4 or IPv6 address string.
int ast_sockaddr_cmp(const struct ast_sockaddr *a, const struct ast_sockaddr *b)
Compares two ast_sockaddr structures.
#define ast_sockaddr_set_port(addr, port)
Sets the port number of a socket address.
Scheduler Routines (derived from cheops)
#define AST_SCHED_DEL(sched, id)
Remove a scheduler entry.
void ast_sched_context_destroy(struct ast_sched_context *c)
destroys a schedule context
int ast_sched_runq(struct ast_sched_context *con)
Runs the queue.
int ast_sched_add_variable(struct ast_sched_context *con, int when, ast_sched_cb callback, const void *data, int variable) attribute_warn_unused_result
Adds a scheduled event with rescheduling support.
struct ast_sched_context * ast_sched_context_create(void)
Create a scheduler context.
int ast_sched_wait(struct ast_sched_context *con) attribute_warn_unused_result
Determines number of seconds until the next outstanding event to take place.
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true"....
static force_inline int attribute_pure ast_strlen_zero(const char *s)
descriptor for a cli entry.
struct ast_sockaddr * result
dns_update_func update_func
Structure used to handle boolean flags.
Structure for mutex and tracking information.
Socket address structure.
struct sockaddr_storage ss
Structure for variables, used for configurations and for channel variables.
struct ast_variable * next
struct entry_list * entries
unsigned int regex_present
#define ast_pthread_create_background(a, b, c, d)