86 size_t prefix_len = strlen(aor_id) +
sizeof(
";@") - 1;
87 char prefix[prefix_len + 1];
94 sprintf(
prefix,
"%s;@", aor_id);
125 char *aor_separator =
NULL;
137 if ((aor_separator = strstr(
id,
";@")) || (aor_separator = strstr(
id,
"@@"))) {
138 *aor_separator =
'\0';
224 char prefix[prefix_len + 1];
377 if (path_info &&
aor->support_path) {
426 return contact ? 0 : -1;
461 ast_verb(3,
"Removed contact '%s' from AOR '%s' due to system boot\n",
462 contact->
uri, contact->
aor);
502 const char *right_key = obj_right;
534 int theres_a_port = 0;
542 if (!strncasecmp(contact,
"sip:", 4)) {
544 }
else if (!strncasecmp(contact,
"sips:", 5)) {
551 at = strchr(contact,
'@');
557 if (host[0] ==
'[') {
561 close_bracket = strchr(host,
']');
562 if (!close_bracket) {
566 if (*close_bracket ==
':') {
569 *close_bracket =
'\0';
572 host =
strsep(&host,
";?");
574 if (strchr(host,
':')) {
576 host =
strsep(&host,
":");
580 if (!theres_a_port) {
581 max_length -= strlen(
"_sips.tcp.");
584 if (strlen(host) > max_length) {
608 char contact_id[strlen(aor_id) +
sizeof(hash) + 2];
615 ast_log(
LOG_ERROR,
"Contact uri or hostname length exceeds pjproject limit or is not a sip(s) uri: %s\n", contact_uri);
619 if (!
aor->permanent_contacts) {
622 if (!
aor->permanent_contacts) {
628 snprintf(contact_id,
sizeof(contact_id),
"%s@@%s", aor_id, hash);
703 res = on_aor(aor, arg, 0);
747 wrapper->contact_id =
ast_malloc(strlen(aor_id) + strlen(contact->uri) + 2);
748 if (!wrapper->contact_id) {
752 sprintf(wrapper->contact_id,
"%s/%s", aor_id, contact->uri);
754 if (!wrapper->aor_id) {
758 wrapper->contact = contact;
761 if ((res = on_contact(wrapper, arg, 0))) {
796 for (i = objset; i; i = i->
next) {
799 if (strcmp(camel,
"Contact") == 0) {
828 return *
buf ? 0 : -1;
858 total_contacts - num_permanent);
873 ami->
arg = (
void *)endpoint;
929 const char *right_key = arg;
937 cmp = strcmp(left_wrapper->
contact_id, right_key);
940 cmp = strncmp(left_wrapper->
contact_id, right_key, strlen(right_key));
954 const char *right_key = arg;
962 if (strcmp(left_wrapper->
contact_id, right_key) == 0) {;
967 if (strncmp(left_wrapper->
contact_id, right_key, strlen(right_key)) == 0) {
987 regex_t *regexbuf = arg;
1011 wrapper->contact_id =
ast_malloc(strlen(contact->
aor) + strlen(contact->
uri) + 2);
1012 if (!wrapper->contact_id) {
1015 sprintf(wrapper->contact_id,
"%s/%s", contact->
aor, contact->
uri);
1018 if (!wrapper->aor_id) {
1022 wrapper->contact =
ao2_bump(contact);
1047 if (!contacts_container) {
1053 ao2_ref(contacts_container, -1);
1061 ao2_ref(contacts_container, -1);
1068 if (regcomp(®exbuf,
regex, REG_EXTENDED | REG_NOSUB)) {
1069 ao2_ref(contacts_container, -1);
1076 return contacts_container;
1103 "%*s: <Aor/ContactUri%*.*s> <Hash....> <Status> <RTT(ms)..>\n",
1117 const char *hash_start = contact_id + strlen(contact->
aor) + 2;
1132 flexwidth, flexwidth,
1168 "%*s: <Aor%*.*s> <MaxContact>\n",
1176 if (formatter_entry) {
1203 flexwidth, flexwidth,
1212 if (formatter_entry) {
1219 if (
context->indent_level == 0) {
1296 .
usage =
"Usage: pjsip list aors [ like <pattern> ]\n"
1297 " List the configured PJSIP Aors\n"
1298 " Optional regular expression pattern is used to filter the list.\n"),
1301 .
usage =
"Usage: pjsip show aors [ like <pattern> ]\n"
1302 " Show the configured PJSIP Aors\n"
1303 " Optional regular expression pattern is used to filter the list.\n"),
1306 .
usage =
"Usage: pjsip show aor <id>\n"
1307 " Show the configured PJSIP Aor\n"),
1310 .
command =
"pjsip list contacts",
1311 .
usage =
"Usage: pjsip list contacts [ like <pattern> ]\n"
1312 " List the configured PJSIP contacts\n"
1313 " Optional regular expression pattern is used to filter the list.\n"),
1315 .
command =
"pjsip show contacts",
1316 .
usage =
"Usage: pjsip show contacts [ like <pattern> ]\n"
1317 " Show the configured PJSIP contacts\n"
1318 " Optional regular expression pattern is used to filter the list.\n"),
1320 .
command =
"pjsip show contact",
1321 .
usage =
"Usage: pjsip show contact\n"
1322 " Show the configured PJSIP contact\n"),
1464 for (i = 0; i <=
REMOVED; i++) {
static int copy(char *infile, char *outfile)
Utility function to copy a file.
Asterisk main include file. File version handling, generic pbx functions.
#define ast_strdup(str)
A wrapper for strdup()
#define ast_strdupa(s)
duplicate a string in memory from the stack
#define ast_asprintf(ret, fmt,...)
A wrapper for asprintf()
#define ast_malloc(len)
A wrapper for malloc()
int ao2_container_dup(struct ao2_container *dest, struct ao2_container *src, enum search_flags flags)
Copy all object references in the src container into the dest container.
#define ao2_iterator_next(iter)
#define ao2_link(container, obj)
Add an object to a container.
@ AO2_ALLOC_OPT_LOCK_NOLOCK
#define ao2_callback(c, flags, cb_fn, arg)
ao2_callback() is a generic function that applies cb_fn() to all objects in a container,...
int ao2_container_count(struct ao2_container *c)
Returns the number of elements in a container.
int() ao2_callback_fn(void *obj, void *arg, int flags)
Type of a generic callback function.
#define ao2_find(container, arg, flags)
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) attribute_warn_unused_result
Create an iterator for a container.
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
#define ao2_alloc_options(data_size, destructor_fn, options)
#define ao2_bump(obj)
Bump refcount on an AO2 object by one, returning the object.
void ao2_iterator_destroy(struct ao2_iterator *iter)
Destroy a container iterator.
@ OBJ_SEARCH_PARTIAL_KEY
The arg parameter is a partial search key similar to OBJ_SEARCH_KEY.
@ OBJ_SEARCH_OBJECT
The arg parameter is an object of the same type.
@ OBJ_SEARCH_MASK
Search option field mask.
@ OBJ_SEARCH_KEY
The arg parameter is a search key, but is not an object.
#define ao2_container_alloc_list(ao2_options, container_options, sort_fn, cmp_fn)
Allocate and initialize a list container.
#define ao2_alloc(data_size, destructor_fn)
@ AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT
Reject objects with duplicate keys in container.
int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
Unregister multiple commands.
#define AST_CLI_DEFINE(fn, txt,...)
#define ast_cli_register_multiple(e, len)
Register multiple commands.
#define STRFLDSET(type,...)
Convert a struct and a list of stringfield fields to an argument list of field offsets.
#define FLDSET(type,...)
Convert a struct and list of fields to an argument list of field offsets.
@ OPT_UINT_T
Type for default option handler for unsigned integers.
@ OPT_NOOP_T
Type for a default handler that should do nothing.
@ OPT_BOOL_T
Type for default option handler for bools (ast_true/ast_false)
@ OPT_YESNO_T
Type for default option handler for bools (ast_true/ast_false)
@ OPT_DOUBLE_T
Type for default option handler for doubles.
@ OPT_STRINGFIELD_T
Type for default option handler for stringfields.
static int regex(struct ast_channel *chan, const char *cmd, char *parse, char *buf, size_t len)
void astman_send_listack(struct mansession *s, const struct message *m, char *msg, char *listflag)
Send ack in manager transaction to begin a list.
void astman_send_error(struct mansession *s, const struct message *m, char *error)
Send error in manager transaction.
void astman_send_list_complete_start(struct mansession *s, const struct message *m, const char *event_name, int count)
Start the list complete event.
const char * astman_get_header(const struct message *m, char *var)
Get header from manager transaction.
void astman_send_list_complete_end(struct mansession *s)
End the list complete event.
void astman_append(struct mansession *s, const char *fmt,...)
int ast_manager_unregister(const char *action)
Unregister a registered manager command.
#define ast_named_lock_get(lock_type, keyspace, key)
Geta named lock handle.
@ AST_NAMED_LOCK_TYPE_MUTEX
static char prefix[MAX_PREFIX]
char * strsep(char **str, const char *delims)
#define ast_variable_new(name, value, filename)
#define ast_variable_list_append(head, new_var)
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
Support for logging to various files, console and syslog Configuration in file logger....
#define ast_verb(level,...)
static int contact_apply_handler(const struct ast_sorcery *sorcery, void *object)
Always create a contact_status for each contact.
int ast_sip_validate_uri_length(const char *contact_uri)
static int expiration_str2struct(const struct aco_option *opt, struct ast_variable *var, void *obj)
Custom handler for translating from a string timeval to actual structure.
static struct ast_cli_entry cli_commands[]
static void * contact_alloc(const char *name)
Allocator for contact.
struct ast_sip_contact * ast_sip_location_retrieve_contact_from_aor_list(const char *aor_list)
Retrieve the first bound contact from a list of AORs.
int ast_sip_location_add_contact(struct ast_sip_aor *aor, const char *uri, struct timeval expiration_time, const char *path_info, const char *user_agent, const char *via_addr, int via_port, const char *call_id, struct ast_sip_endpoint *endpoint)
Add a new contact to an AOR.
void ast_sip_location_retrieve_contact_and_aor_from_list(const char *aor_list, struct ast_sip_aor **aor, struct ast_sip_contact **contact)
Retrieve the first bound contact AND the AOR chosen from a list of AORs.
static int cli_aor_print_body(void *obj, void *arg, int flags)
static const struct ast_sorcery_observer aor_observer
Observer for contacts so state can be updated on respective endpoints.
static int contacts_to_var_list(const void *obj, struct ast_variable **fields)
struct ast_sip_aor * ast_sip_location_retrieve_aor(const char *aor_name)
Retrieve a named AOR.
static void contact_wrapper_destroy(void *obj)
struct ao2_container * ast_sip_location_retrieve_aor_contacts_nolock_filtered(const struct ast_sip_aor *aor, unsigned int flags)
Retrieve all contacts currently available for an AOR without locking the AOR and filter based on flag...
static int aor_apply_outbound_proxy(void *obj, void *arg, int flags)
static int contact_to_var_list(void *object, void *arg, int flags)
static int format_ami_aorlist_handler(void *obj, void *arg, int flags)
int ast_sip_for_each_contact(const struct ast_sip_aor *aor, ao2_callback_fn on_contact, void *arg)
For every contact on an AOR call the given 'on_contact' handler.
int ast_sip_for_each_aor(const char *aors, ao2_callback_fn on_aor, void *arg)
For every aor in the comma separated aors string call the given 'on_aor' handler.
struct ast_sip_contact * ast_sip_location_retrieve_first_aor_contact_filtered(const struct ast_sip_aor *aor, unsigned int flags)
Retrieve the first bound contact for an AOR and filter based on flags.
static struct ao2_container * cli_get_aors(void)
static int format_ami_aor_handler(void *obj, void *arg, int flags)
static int pjsip_max_url_size
static int format_ami_endpoint_aor(const struct ast_sip_endpoint *endpoint, struct ast_sip_ami *ami)
static int cli_contact_iterate(void *container, ao2_callback_fn callback, void *args)
static int cli_filter_contacts(void *obj, void *arg, int flags)
static int voicemail_extension_to_str(const void *obj, const intptr_t *args, char **buf)
struct ast_sip_cli_formatter_entry * contact_formatter
static int expiration_struct2str(const void *obj, const intptr_t *args, char **buf)
Custom handler for translating from an actual structure timeval to string.
static int contact_link_static(void *obj, void *arg, int flags)
Internal callback function which links static contacts into another container.
struct ast_sip_cli_formatter_entry * aor_formatter
static int cli_gather_contact(void *obj, void *arg, int flags)
static int prune_boot_contacts_cb(void *obj, void *arg, int flags)
static int cli_contact_compare(void *obj, void *arg, int flags)
static void contact_destroy(void *obj)
Destructor for contact.
static const char * cli_contact_get_id(const void *obj)
static void * aor_alloc(const char *name)
Allocator for AOR.
static int permanent_uri_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
Custom handler for permanent URIs.
static int permanent_uri_sort_fn(const void *obj_left, const void *obj_right, int flags)
static int voicemail_extension_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
static void * cli_contact_retrieve_by_id(const char *id)
static int sip_aor_to_ami(const struct ast_sip_aor *aor, struct ast_str **buf)
struct ao2_container * ast_sip_location_retrieve_aor_contacts_nolock(const struct ast_sip_aor *aor)
Retrieve all contacts currently available for an AOR without locking the AOR.
static int contacts_to_str(const void *obj, const intptr_t *args, char **buf)
static int pj_max_hostname
static int gather_contacts_for_aor(void *obj, void *arg, int flags)
struct ast_sip_contact * ast_sip_location_retrieve_contact(const char *contact_name)
Retrieve a named contact.
static int contact_remove_unreachable(void *obj, void *arg, int flags)
Internal callback function which removes any contact which is unreachable.
static int contact_expire(void *obj, void *arg, int flags)
Internal callback function which deletes and unlinks any expired contacts.
static int cli_aor_print_header(void *obj, void *arg, int flags)
struct ao2_container * ast_sip_location_retrieve_contacts_from_aor_list(const char *aor_list)
Retrieve all contacts from a list of AORs.
static struct ao2_container * cli_contact_get_container(const char *regex)
static const char * cli_aor_get_id(const void *obj)
int ast_sip_initialize_sorcery_location(void)
Initialize sorcery with location support.
static void aor_destroy(void *obj)
Destructor for AOR.
static struct ao2_container * cli_aor_get_container(const char *regex)
void ast_sip_location_retrieve_contact_and_aor_from_list_filtered(const char *aor_list, unsigned int flags, struct ast_sip_aor **aor, struct ast_sip_contact **contact)
Retrieve the first bound contact AND the AOR chosen from a list of AORs and filter based on flags.
struct ast_sip_endpoint_formatter endpoint_aor_formatter
int ast_sip_destroy_sorcery_location(void)
struct ast_sip_contact * ast_sip_location_create_contact(struct ast_sip_aor *aor, const char *uri, struct timeval expiration_time, const char *path_info, const char *user_agent, const char *via_addr, int via_port, const char *call_id, int prune_on_boot, struct ast_sip_endpoint *endpoint)
Create a new contact for an AOR without locking the AOR.
static void * cli_aor_retrieve_by_id(const char *id)
static int cli_contact_print_header(void *obj, void *arg, int flags)
static void aor_deleted_observer(const void *object)
int ast_sip_location_update_contact(struct ast_sip_contact *contact)
Update a contact.
static int cli_contact_populate_container(void *obj, void *arg, int flags)
static int aor_apply_handler(const struct ast_sorcery *sorcery, void *object)
static int cli_contact_sort(const void *obj, const void *arg, int flags)
static int cli_contact_print_body(void *obj, void *arg, int flags)
int ast_sip_contact_to_str(void *object, void *arg, int flags)
Handler used to convert a contact to a string.
struct ast_sip_contact * ast_sip_location_retrieve_first_aor_contact(const struct ast_sip_aor *aor)
Retrieve the first bound contact for an AOR.
static int cli_aor_iterate(void *container, ao2_callback_fn callback, void *args)
void ast_sip_location_prune_boot_contacts(void)
Prune the prune_on_boot contacts.
struct ao2_container * ast_sip_location_retrieve_aor_contacts(const struct ast_sip_aor *aor)
Retrieve all contacts currently available for an AOR.
static int destroy_contact(void *obj, void *arg, int flags)
Internal callback function which destroys the specified contact.
struct ao2_container * ast_sip_location_retrieve_aor_contacts_filtered(const struct ast_sip_aor *aor, unsigned int flags)
Retrieve all contacts currently available for an AOR and filter based on flags.
static int cli_aor_gather_contacts(void *obj, void *arg, int flags)
int ast_sip_location_delete_contact(struct ast_sip_contact *contact)
Delete a contact.
static int ami_show_aors(struct mansession *s, const struct message *m)
int ast_sip_location_add_contact_nolock(struct ast_sip_aor *aor, const char *uri, struct timeval expiration_time, const char *path_info, const char *user_agent, const char *via_addr, int via_port, const char *call_id, struct ast_sip_endpoint *endpoint)
Add a new contact to an AOR without locking the AOR.
#define EVENT_FLAG_SYSTEM
#define ast_manager_register_xml(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Asterisk file paths, configured in asterisk.conf.
const char * ast_config_AST_SYSTEM_NAME
static int default_expiration
static struct stasis_rest_handlers mailboxes
REST handler for /api-docs/mailboxes.json.
struct ao2_container * container
int ast_pjproject_get_buildopt(char *option, char *format_string,...)
Retrieve a pjproject build option.
const char * ast_sip_get_contact_short_status_label(const enum ast_sip_contact_status_type status)
@ AST_SIP_CONTACT_FILTER_REACHABLE
Return only reachable or unknown contacts.
@ AST_SIP_CONTACT_FILTER_DEFAULT
Default filter flags.
void ast_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
Register an endpoint formatter.
void ast_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj)
Unregister an endpoint formatter.
struct ast_str * ast_sip_create_ami_event(const char *event, struct ast_sip_ami *ami)
Creates a string to store AMI event data in.
struct ast_sorcery * ast_sip_get_sorcery(void)
Get a pointer to the SIP sorcery structure.
struct ast_sip_contact_status * ast_sip_get_contact_status(const struct ast_sip_contact *contact)
Retrieve the current status for a contact.
const char * ast_sip_get_contact_status_label(const enum ast_sip_contact_status_type status)
translate ast_sip_contact_status_type to character string.
int ast_sip_unregister_cli_formatter(struct ast_sip_cli_formatter_entry *formatter)
Unregisters a CLI formatter.
#define CLI_HEADER_FILLER
int ast_sip_cli_print_sorcery_objectset(void *obj, void *arg, int flags)
Prints a sorcery object's ast_variable list.
struct ast_sip_cli_formatter_entry * ast_sip_lookup_cli_formatter(const char *name)
Looks up a CLI formatter by type.
char * ast_sip_cli_traverse_objects(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
#define CLI_INDENT_TO_SPACES(x)
int ast_sip_register_cli_formatter(struct ast_sip_cli_formatter_entry *formatter)
Registers a CLI formatter.
static struct ast_sorcery * sorcery
struct ast_sip_contact_status * ast_res_pjsip_find_or_create_contact_status(const struct ast_sip_contact *contact)
Sorcery Data Access Layer API.
const char * ast_sorcery_object_get_id(const void *object)
Get the unique identifier of a sorcery object.
void ast_sorcery_observer_remove(const struct ast_sorcery *sorcery, const char *type, const struct ast_sorcery_observer *callbacks)
Remove an observer from a specific object type.
@ AST_RETRIEVE_FLAG_MULTIPLE
Return all matching objects.
@ AST_RETRIEVE_FLAG_ALL
Perform no matching, return all objects.
const char * ast_sorcery_object_get_type(const void *object)
Get the type of a sorcery object.
int ast_sorcery_create(const struct ast_sorcery *sorcery, void *object)
Create and potentially persist an object using an available wizard.
void * ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id)
Retrieve an object using its unique identifier.
#define ast_sorcery_object_register(sorcery, type, alloc, transform, apply)
Register an object type.
struct ao2_container * ast_sorcery_retrieve_by_regex(const struct ast_sorcery *sorcery, const char *type, const char *regex)
Retrieve multiple objects using a regular expression on their id.
int ast_sorcery_observer_add(const struct ast_sorcery *sorcery, const char *type, const struct ast_sorcery_observer *callbacks)
Add an observer to a specific object type.
#define ast_sorcery_object_field_register_custom(sorcery, type, name, default_val, config_handler, sorcery_handler, multiple_handler, flags,...)
Register a field within an object with custom handlers.
void * ast_sorcery_generic_alloc(size_t size, ao2_destructor_fn destructor)
Allocate a generic sorcery capable object.
int ast_sorcery_object_id_compare(void *obj, void *arg, int flags)
ao2 object comparator based on sorcery id.
#define ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, flags,...)
Register a field within an object.
void * ast_sorcery_alloc(const struct ast_sorcery *sorcery, const char *type, const char *id)
Allocate an object.
int ast_sorcery_object_id_sort(const void *obj, const void *arg, int flags)
ao2 object sorter based on sorcery id.
void * ast_sorcery_lockable_alloc(size_t size, ao2_destructor_fn destructor, void *lockobj)
Allocate a generic sorcery capable object with locking.
int ast_sorcery_update(const struct ast_sorcery *sorcery, void *object)
Update an object.
@ AST_HANDLER_ONLY_STRING
Use string handler only.
#define MAX_OBJECT_FIELD
Maximum length of an object field name.
#define ast_sorcery_apply_default(sorcery, type, name, data)
struct ast_variable * ast_sorcery_objectset_create2(const struct ast_sorcery *sorcery, const void *object, enum ast_sorcery_field_handler_flags flags)
Create an object set (KVP list) for an object.
void * ast_sorcery_retrieve_by_fields(const struct ast_sorcery *sorcery, const char *type, unsigned int flags, struct ast_variable *fields)
Retrieve an object or multiple objects using specific fields.
int ast_sorcery_object_set_congestion_levels(struct ast_sorcery *sorcery, const char *type, long low_water, long high_water)
Set the high and low alert water marks of the sorcery object type.
int ast_sorcery_delete(const struct ast_sorcery *sorcery, void *object)
Delete an object.
struct ao2_container * ast_sorcery_retrieve_by_prefix(const struct ast_sorcery *sorcery, const char *type, const char *prefix, const size_t prefix_len)
Retrieve multiple objects whose id begins with the specified prefix.
#define AST_STATSD_GAUGE
Support for publishing to a statsd server.
void ast_statsd_log_full_va(const char *metric_name, const char *metric_type, intmax_t value, double sample_rate,...)
Send a stat to the configured statsd server.
#define ast_string_field_set(x, field, data)
Set a field to a simple string value.
#define ast_string_field_init(x, size)
Initialize a field pool and fields.
#define ast_string_field_free_memory(x)
free all memory - to be called before destroying the object
char * ast_str_truncate(struct ast_str *buf, ssize_t len)
Truncates the enclosed string to the given length.
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one.
static force_inline int attribute_pure ast_strlen_zero(const char *s)
char * ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
Strip leading/trailing whitespace and quotes from a string.
#define ast_str_create(init_len)
Create a malloc'ed dynamic length string.
char * ast_strip(char *s)
Strip leading/trailing whitespace from a string.
#define ast_to_camel_case(s)
Attempts to convert the given string to camel case using an underscore as the specified delimiter.
int ast_get_timeval(const char *src, struct timeval *tv, struct timeval _default, int *consumed)
Parse a time (float) string.
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
descriptor for a cli entry.
char * voicemail_extension
unsigned int max_contacts
struct ao2_container * permanent_contacts
const ast_string_field outbound_proxy
CLI Formatter Context passed to all formatters.
CLI Formatter Registry Entry.
int(* iterate)(void *container, ao2_callback_fn callback, void *args)
ao2_callback_fn * print_header
void *(* retrieve_by_id)(const char *id)
const char *(* get_id)(const void *obj)
ao2_callback_fn * print_body
struct ao2_container *(* get_container)(const char *regex)
An entity with which Asterisk communicates.
const ast_string_field aors
Interface for a sorcery object type observer.
void(* deleted)(const void *object)
Callback for when an object is deleted.
Full structure for sorcery.
Support for dynamic strings.
Structure for variables, used for configurations and for channel variables.
struct ast_variable * next
In case you didn't read that giant block of text above the mansession_session struct,...
An API for managing task processing threads that can be shared across modules.
#define AST_TASKPROCESSOR_HIGH_WATER_LEVEL
int ast_time_t_to_string(time_t time, char *buf, size_t length)
Converts to a string representation of a time_t as decimal seconds since the epoch....
int64_t ast_tvdiff_ms(struct timeval end, struct timeval start)
Computes the difference (in milliseconds) between two struct timeval instances.
struct timeval ast_tvnow(void)
Returns current timeval. Meant to replace calls to gettimeofday().
struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec)
Returns a timeval from sec, usec.
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
void ast_md5_hash(char *output, const char *input)
Produces MD5 hash based on input string.