Asterisk - The Open Source Telephony Project  21.4.1
Macros | Functions
asterisk.h File Reference

Asterisk main include file. File version handling, generic pbx functions. More...

#include "asterisk/autoconfig.h"
#include "asterisk/compat.h"
#include "asterisk/astmm.h"

Go to the source code of this file.

Macros

#define __stringify(x)   __stringify_1(x)
 
#define __stringify_1(x)   #x
 
#define AST_CURL_USER_AGENT   "asterisk-libcurl-agent/1.0"
 
#define AST_DIR_MODE   0777
 
#define AST_FILE_MODE   0666
 
#define DEFAULT_LANGUAGE   "en"
 
#define DEFAULT_SAMPLE_RATE   8000
 
#define DEFAULT_SAMPLES_PER_MS   ((DEFAULT_SAMPLE_RATE)/1000)
 
#define PATH_MAX   4096
 
#define sched_setscheduler   __PLEASE_USE_ast_set_priority_INSTEAD_OF_sched_setscheduler__
 
#define setpriority   __PLEASE_USE_ast_set_priority_INSTEAD_OF_setpriority__
 
#define strtok   __PLEASE_USE_strtok_r_INSTEAD_OF_strtok__
 

Functions

int ast_add_profile (const char *, uint64_t scale)
 support for event profiling More...
 
int ast_cancel_shutdown (void)
 Cancel an existing shutdown and return to normal operation. More...
 
int ast_fd_init (void)
 
int64_t ast_mark (int, int start1_stop0)
 
int ast_pbx_init (void)
 
int ast_pbx_uuid_get (char *pbx_uuid, int length)
 Retrieve the PBX UUID. More...
 
int64_t ast_profile (int, int64_t)
 
int ast_register_atexit (void(*func)(void))
 Register a function to be executed before Asterisk exits. More...
 
int ast_register_cleanup (void(*func)(void))
 Register a function to be executed before Asterisk gracefully exits. More...
 
int ast_set_priority (int)
 We set ourselves to a high priority, that we might pre-empt everything else. If your PBX has heavy activity on it, this is a good thing. More...
 
int ast_shutdown_final (void)
 
int ast_shutting_down (void)
 
void ast_unregister_atexit (void(*func)(void))
 Unregister a function registered with ast_register_atexit(). More...
 

Detailed Description

Asterisk main include file. File version handling, generic pbx functions.

Definition in file asterisk.h.

Function Documentation

int ast_add_profile ( const char *  name,
uint64_t  scale 
)

support for event profiling

(note, this must be documented a lot more) ast_add_profile allocates a generic 'counter' with a given name, which can be shown with the command 'core show profile <name>'

The counter accumulates positive or negative values supplied by

See also
ast_add_profile(), dividing them by the 'scale' value passed in the create call, and also counts the number of 'events'. Values can also be taked by the TSC counter on ia32 architectures, in which case you can mark the start of an event calling ast_mark(id, 1) and then the end of the event with ast_mark(id, 0). For non-i386 architectures, these two calls return 0.

support for event profiling

Returns
Returns the identifier of the counter.

Definition at line 92 of file astman.c.

References ast_calloc, ast_realloc, and ast_strdup.

93 {
94  return -1;
95 }
int ast_cancel_shutdown ( void  )

Cancel an existing shutdown and return to normal operation.

Note
Shutdown can be cancelled while the server is waiting for any existing channels to be destroyed before shutdown becomes irreversible.
Returns
non-zero if shutdown cancelled.

Definition at line 1881 of file asterisk.c.

References NOT_SHUTTING_DOWN, SHUTDOWN_FAST, and shutdown_pending.

1882 {
1883  int shutdown_aborted = 0;
1884 
1885  ast_mutex_lock(&safe_system_lock);
1886  if (shuttingdown >= SHUTDOWN_FAST) {
1887  shuttingdown = NOT_SHUTTING_DOWN;
1888  shutdown_pending = 0;
1889  shutdown_aborted = 1;
1890  }
1891  ast_mutex_unlock(&safe_system_lock);
1892  return shutdown_aborted;
1893 }
static int shutdown_pending
Definition: asterisk.c:384
int ast_fd_init ( void  )

Provided by astfd.c

Definition at line 370 of file astfd.c.

371 {
372  return 0;
373 }
int ast_pbx_init ( void  )

Provided by pbx.c

Definition at line 8989 of file pbx.c.

References AO2_ALLOC_OPT_LOCK_MUTEX, AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_container_alloc_hash, ao2_container_alloc_list, ao2_container_register(), ast_register_cleanup(), autohint_hash_cb(), hintdevice_cmp_multiple(), hintdevice_hash_cb(), and STASIS_MESSAGE_TYPE_INIT.

8990 {
8992  HASH_EXTENHINT_SIZE, hint_hash, NULL, hint_cmp);
8993  if (hints) {
8994  ao2_container_register("hints", hints, print_hints_key);
8995  }
8997  HASH_EXTENHINT_SIZE, hintdevice_hash_cb, NULL, hintdevice_cmp_multiple);
8998  if (hintdevices) {
8999  ao2_container_register("hintdevices", hintdevices, print_hintdevices_key);
9000  }
9001  /* This is protected by the context_and_merge lock */
9003  autohint_hash_cb, NULL, autohint_cmp);
9004  if (autohints) {
9005  ao2_container_register("autohints", autohints, print_autohint_key);
9006  }
9007  statecbs = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_MUTEX, 0, NULL, statecbs_cmp);
9008  if (statecbs) {
9009  ao2_container_register("statecbs", statecbs, print_statecbs_key);
9010  }
9011 
9012  ast_register_cleanup(pbx_shutdown);
9013 
9014  if (STASIS_MESSAGE_TYPE_INIT(hint_change_message_type) != 0) {
9015  return -1;
9016  }
9017  if (STASIS_MESSAGE_TYPE_INIT(hint_remove_message_type) != 0) {
9018  return -1;
9019  }
9020 
9021  return (hints && hintdevices && autohints && statecbs) ? 0 : -1;
9022 }
#define STASIS_MESSAGE_TYPE_INIT(name)
Boiler-plate messaging macro for initializing message types.
Definition: stasis.h:1493
#define ao2_container_alloc_list(ao2_options, container_options, sort_fn, cmp_fn)
Allocate and initialize a list container.
Definition: astobj2.h:1327
static struct ao2_container * hintdevices
Container for hint devices.
Definition: pbx.c:370
static int hintdevice_cmp_multiple(void *obj, void *arg, int flags)
Definition: pbx.c:428
int ao2_container_register(const char *name, struct ao2_container *self, ao2_prnt_obj_fn *prnt_obj)
Register a container for CLI stats and integrity check.
int ast_register_cleanup(void(*func)(void))
Register a function to be executed before Asterisk gracefully exits.
Definition: clicompat.c:19
#define ao2_container_alloc_hash(ao2_options, container_options, n_buckets, hash_fn, sort_fn, cmp_fn)
Allocate and initialize a hash container with the desired number of buckets.
Definition: astobj2.h:1303
static int autohint_hash_cb(const void *obj, const int flags)
Definition: pbx.c:460
static int hintdevice_hash_cb(const void *obj, const int flags)
Definition: pbx.c:402
static struct ao2_container * autohints
Container for autohint contexts.
Definition: pbx.c:387
int ast_pbx_uuid_get ( char *  pbx_uuid,
int  length 
)

Retrieve the PBX UUID.

Parameters
pbx_uuidA buffer of at least AST_UUID_STR_LEN (36 + 1) size to receive the UUID
lengthThe buffer length

Definition at line 976 of file asterisk.c.

References ast_db_get().

Referenced by handle_show_settings().

977 {
978  return ast_db_get("pbx", "UUID", pbx_uuid, length);
979 }
int ast_db_get(const char *family, const char *key, char *value, int valuelen)
Get key value specified by family/key.
Definition: main/db.c:427
int ast_register_atexit ( void(*)(void)  func)

Register a function to be executed before Asterisk exits.

Parameters
funcThe callback function to use.
Return values
0on success.
-1on error.
Note
This function should be rarely used in situations where something must be shutdown to avoid corruption, excessive data loss, or when external programs must be stopped. All other cleanup in the core should use ast_register_cleanup.

Definition at line 13 of file clicompat.c.

Referenced by ast_rtp_engine_init(), ast_stun_init(), astdb_init(), and load_module().

14 {
15  return 0;
16 }
int ast_register_cleanup ( void(*)(void)  func)

Register a function to be executed before Asterisk gracefully exits.

Since
11.9 If Asterisk is immediately shutdown (core stop now, or sending the TERM signal), the callback is not run. When the callbacks are run, they are run in sequence with ast_register_atexit() callbacks, in the reverse order of registration.
Parameters
funcThe callback function to use.
Return values
0on success.
-1on error.

Definition at line 19 of file clicompat.c.

Referenced by aco_init(), app_init(), ast_aoc_cli_init(), ast_autoservice_init(), ast_bridging_init(), ast_bucket_init(), ast_builtins_init(), ast_channels_init(), ast_cli_channels_init(), ast_codec_init(), ast_device_state_engine_init(), ast_dns_system_resolver_init(), ast_endpoint_init(), ast_endpoint_stasis_init(), ast_file_init(), ast_format_cache_init(), ast_format_init(), ast_image_init(), ast_local_init(), ast_media_cache_init(), ast_msg_init(), ast_named_locks_init(), ast_parking_stasis_init(), ast_pbx_init(), ast_pickup_init(), ast_refer_init(), ast_rtp_engine_init(), ast_security_stasis_init(), ast_sorcery_init(), ast_stasis_channels_init(), ast_stasis_system_init(), ast_test_init(), ast_timing_init(), ast_tps_init(), ast_translate_init(), astobj2_init(), devstate_init(), dns_core_init(), load_pbx(), load_pbx_app(), load_pbx_builtins(), load_pbx_functions_cli(), load_pbx_hangup_handler(), load_pbx_switch(), load_pbx_variables(), manager_bridging_init(), manager_channels_init(), manager_endpoints_init(), manager_mwi_init(), manager_system_init(), mwi_init(), register_config_cli(), and stasis_init().

20 {
21  return 0;
22 }
int ast_set_priority ( int  )

We set ourselves to a high priority, that we might pre-empt everything else. If your PBX has heavy activity on it, this is a good thing.

Provided by asterisk.c

Definition at line 1841 of file asterisk.c.

Referenced by main(), safe_exec_prep(), and set_priority_all().

1842 {
1843  struct sched_param sched;
1844  memset(&sched, 0, sizeof(sched));
1845 #ifdef __linux__
1846  if (pri) {
1847  sched.sched_priority = 10;
1848  if (sched_setscheduler(0, SCHED_RR, &sched)) {
1849  return -1;
1850  }
1851  } else {
1852  sched.sched_priority = 0;
1853  /* According to the manpage, these parameters can never fail. */
1854  sched_setscheduler(0, SCHED_OTHER, &sched);
1855  }
1856 #else
1857  if (pri) {
1858  if (setpriority(PRIO_PROCESS, 0, -10) == -1) {
1859  ast_log(LOG_WARNING, "Unable to set high priority\n");
1860  return -1;
1861  } else
1862  ast_verb(1, "Set to high priority\n");
1863  } else {
1864  /* According to the manpage, these parameters can never fail. */
1865  setpriority(PRIO_PROCESS, 0, 0);
1866  }
1867 #endif
1868  return 0;
1869 }
Definition: sched.c:76
int ast_shutdown_final ( void  )
Returns
non-zero if the server is actively shutting down.
Since
13.3.0

The server is releasing resources and unloading modules. It won't be long now.

Definition at line 1871 of file asterisk.c.

References SHUTTING_DOWN_FINAL.

Referenced by load_resource().

1872 {
1873  return shuttingdown == SHUTTING_DOWN_FINAL;
1874 }
int ast_shutting_down ( void  )

The server is preventing new channel creation in preparation for shutdown and may actively be releasing resources. The shutdown process may be canceled by ast_cancel_shutdown() if it is not too late.

Note
The preparation to shutdown phase can be quite lengthy if we are gracefully shutting down. How long existing calls will last is not up to us.
Returns
non-zero if the server is preparing to or actively shutting down.

Definition at line 1876 of file asterisk.c.

References shutdown_pending.

Referenced by __ast_channel_alloc_ap(), ast_cli_command_full(), ast_unregister_translator(), confbridge_exec(), and process_message().

1877 {
1878  return shutdown_pending;
1879 }
static int shutdown_pending
Definition: asterisk.c:384
void ast_unregister_atexit ( void(*)(void)  func)

Unregister a function registered with ast_register_atexit().

Parameters
funcThe callback function to unregister.

Definition at line 1064 of file asterisk.c.

References AST_LIST_LOCK, and AST_LIST_UNLOCK.

1065 {
1067  __ast_unregister_atexit(func);
1069 }
#define AST_LIST_LOCK(head)
Locks a list.
Definition: linkedlists.h:40
#define AST_LIST_UNLOCK(head)
Attempts to unlock a list.
Definition: linkedlists.h:140