Mon Aug 31 12:30:20 2015

Asterisk developer's documentation


asterisk.h File Reference

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

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

Go to the source code of this file.

Defines

#define AST_DIR_MODE   0777
#define AST_FILE_MODE   0666
#define ASTERISK_FILE_VERSION(file, version)
 Register/unregister a source code file with the core.
#define bcopy   0x__dont_use_bcopy__use_memmove_instead()
#define bzero   0x__dont_use_bzero__use_memset_instead""
#define DEFAULT_LANGUAGE   "en"
#define DEFAULT_SAMPLE_RATE   8000
#define DEFAULT_SAMPLES_PER_MS   ((DEFAULT_SAMPLE_RATE)/1000)
#define sched_setscheduler   __PLEASE_USE_ast_set_priority_INSTEAD_OF_sched_setscheduler__
#define setpriority   __PLEASE_USE_ast_set_priority_INSTEAD_OF_setpriority__

Functions

int ast_add_profile (const char *, uint64_t scale)
 support for event profiling
char * ast_complete_source_filename (const char *partial, int n)
int ast_fd_init (void)
const char * ast_file_version_find (const char *file)
 Find version for given module name.
int64_t ast_mark (int, int start1_stop0)
int ast_pbx_init (void)
int64_t ast_profile (int, int64_t)
int ast_register_atexit (void(*func)(void))
 Register a function to be executed before Asterisk exits.
int ast_register_cleanup (void(*func)(void))
 Register a function to be executed before Asterisk gracefully exits.
void ast_register_file_version (const char *file, const char *version)
 Register the version of a source code file with the core.
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.
void ast_unregister_atexit (void(*func)(void))
 Unregister a function registered with ast_register_atexit().
void ast_unregister_file_version (const char *file)
 Unregister a source code file from the core.

Detailed Description

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

Definition in file asterisk.h.


Define Documentation

#define AST_DIR_MODE   0777

Definition at line 33 of file asterisk.h.

#define AST_FILE_MODE   0666
#define ASTERISK_FILE_VERSION ( file,
version   ) 

Register/unregister a source code file with the core.

Parameters:
file the source file name
version the version string (typically a SVN revision keyword string)

This macro will place a file-scope constructor and destructor into the source of the module using it; this will cause the version of this file to registered with the Asterisk core (and unregistered) at the appropriate times.

Example:

 ASTERISK_FILE_VERSION(__FILE__, "\$Revision\$")
Note:
The dollar signs above have been protected with backslashes to keep SVN from modifying them in this file; under normal circumstances they would not be present and SVN would expand the Revision keyword into the file's revision number.

Definition at line 180 of file asterisk.h.

#define bcopy   0x__dont_use_bcopy__use_memmove_instead()

Definition at line 240 of file asterisk.h.

#define bzero   0x__dont_use_bzero__use_memset_instead""

Definition at line 239 of file asterisk.h.

#define DEFAULT_LANGUAGE   "en"

Definition at line 39 of file asterisk.h.

Referenced by fileexists_core().

#define DEFAULT_SAMPLE_RATE   8000

Definition at line 41 of file asterisk.h.

Referenced by check_header(), ogg_vorbis_open(), ogg_vorbis_rewrite(), setformat(), and write_header().

#define DEFAULT_SAMPLES_PER_MS   ((DEFAULT_SAMPLE_RATE)/1000)

Definition at line 42 of file asterisk.h.

Referenced by ast_stream_fastforward(), ast_stream_rewind(), and isAnsweringMachine().

#define sched_setscheduler   __PLEASE_USE_ast_set_priority_INSTEAD_OF_sched_setscheduler__

Definition at line 44 of file asterisk.h.

Referenced by ast_set_priority().

#define setpriority   __PLEASE_USE_ast_set_priority_INSTEAD_OF_setpriority__

Definition at line 43 of file asterisk.h.

Referenced by ast_set_priority().


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 710 of file asterisk.c.

References ast_calloc, ast_realloc, ast_strdup, profile_data::e, profile_data::entries, profile_entry::events, profile_entry::mark, profile_data::max_size, profile_entry::name, prof_data, profile_entry::scale, and profile_entry::value.

Referenced by extension_match_core().

00711 {
00712    int l = sizeof(struct profile_data);
00713    int n = 10; /* default entries */
00714 
00715    if (prof_data == NULL) {
00716       prof_data = ast_calloc(1, l + n*sizeof(struct profile_entry));
00717       if (prof_data == NULL)
00718          return -1;
00719       prof_data->entries = 0;
00720       prof_data->max_size = n;
00721    }
00722    if (prof_data->entries >= prof_data->max_size) {
00723       void *p;
00724       n = prof_data->max_size + 20;
00725       p = ast_realloc(prof_data, l + n*sizeof(struct profile_entry));
00726       if (p == NULL)
00727          return -1;
00728       prof_data = p;
00729       prof_data->max_size = n;
00730    }
00731    n = prof_data->entries++;
00732    prof_data->e[n].name = ast_strdup(name);
00733    prof_data->e[n].value = 0;
00734    prof_data->e[n].events = 0;
00735    prof_data->e[n].mark = 0;
00736    prof_data->e[n].scale = scale;
00737    return n;
00738 }

char* ast_complete_source_filename ( const char *  partial,
int  n 
)

Definition at line 357 of file asterisk.c.

References AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, ast_strdup, file_version::file, len(), and ast_atexit::list.

Referenced by handle_verbose().

00358 {
00359    struct file_version *find;
00360    size_t len = strlen(partial);
00361    int count = 0;
00362    char *res = NULL;
00363 
00364    AST_RWLIST_RDLOCK(&file_versions);
00365    AST_RWLIST_TRAVERSE(&file_versions, find, list) {
00366       if (!strncasecmp(find->file, partial, len) && ++count > n) {
00367          res = ast_strdup(find->file);
00368          break;
00369       }
00370    }
00371    AST_RWLIST_UNLOCK(&file_versions);
00372    return res;
00373 }

int ast_fd_init ( void   ) 

Provided by astfd.c

Definition at line 289 of file astfd.c.

Referenced by main().

00290 {
00291    return 0;
00292 }

const char* ast_file_version_find ( const char *  file  ) 

Find version for given module name.

Parameters:
file Module name (i.e. chan_sip.so)
Returns:
version string or NULL if the module is not found

Definition at line 376 of file asterisk.c.

References AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, file_version::file, ast_atexit::list, and file_version::version.

Referenced by manager_modulecheck().

00377 {
00378    struct file_version *iterator;
00379 
00380    AST_RWLIST_WRLOCK(&file_versions);
00381    AST_RWLIST_TRAVERSE(&file_versions, iterator, list) {
00382       if (!strcasecmp(iterator->file, file))
00383          break;
00384    }
00385    AST_RWLIST_UNLOCK(&file_versions);
00386    if (iterator)
00387       return iterator->version;
00388    return NULL;
00389 }

int64_t ast_mark ( int  ,
int  start1_stop0 
)

Definition at line 775 of file asterisk.c.

References profile_data::e, profile_data::entries, profile_entry::events, profile_entry::mark, prof_data, rdtsc(), profile_entry::scale, and profile_entry::value.

Referenced by __ast_pthread_mutex_lock(), and extension_match_core().

00776 {
00777    if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */
00778       return 0;
00779    if (startstop == 1)
00780       prof_data->e[i].mark = rdtsc();
00781    else {
00782       prof_data->e[i].mark = (rdtsc() - prof_data->e[i].mark);
00783       if (prof_data->e[i].scale > 1)
00784          prof_data->e[i].mark /= prof_data->e[i].scale;
00785       prof_data->e[i].value += prof_data->e[i].mark;
00786       prof_data->e[i].events++;
00787    }
00788    return prof_data->e[i].mark;
00789 }

int ast_pbx_init ( void   ) 

Provided by pbx.c

Definition at line 11266 of file pbx.c.

References ao2_container_alloc, ast_register_atexit(), HASH_EXTENHINT_SIZE, hint_cmp(), hint_hash(), hints, pbx_shutdown(), statecbs, and statecbs_cmp().

Referenced by main().

11267 {
11268    hints = ao2_container_alloc(HASH_EXTENHINT_SIZE, hint_hash, hint_cmp);
11269    statecbs = ao2_container_alloc(1, NULL, statecbs_cmp);
11270 
11271    ast_register_atexit(pbx_shutdown);
11272 
11273    return (hints && statecbs) ? 0 : -1;
11274 }

int64_t ast_profile ( int  ,
int64_t   
)

Definition at line 740 of file asterisk.c.

References profile_data::e, profile_data::entries, profile_entry::events, prof_data, profile_entry::scale, and profile_entry::value.

00741 {
00742    if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */
00743       return 0;
00744    if (prof_data->e[i].scale > 1)
00745       delta /= prof_data->e[i].scale;
00746    prof_data->e[i].value += delta;
00747    prof_data->e[i].events++;
00748    return prof_data->e[i].value;
00749 }

int ast_register_atexit ( void(*)(void)  func  ) 
int ast_register_cleanup ( void(*)(void)  func  ) 

Register a function to be executed before Asterisk gracefully exits.

Since:
1.8.29 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:
func The callback function to use.
Return values:
0 on success.
-1 on error.

Definition at line 1003 of file asterisk.c.

References ast_atexit::func, and register_atexit().

Referenced by ast_autoservice_init().

01004 {
01005    return register_atexit(func, 1);
01006 }

void ast_register_file_version ( const char *  file,
const char *  version 
)

Register the version of a source code file with the core.

Parameters:
file the source file name
version the version string (typically a SVN revision keyword string)
Returns:
nothing

This function should not be called directly, but instead the ASTERISK_FILE_VERSION macro should be used to register a file with the core.

Definition at line 318 of file asterisk.c.

References ast_calloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_strdupa, ast_strip(), and ast_strip_quoted().

00319 {
00320    struct file_version *new;
00321    char *work;
00322    size_t version_length;
00323 
00324    work = ast_strdupa(version);
00325    work = ast_strip(ast_strip_quoted(work, "$", "$"));
00326    version_length = strlen(work) + 1;
00327 
00328    if (!(new = ast_calloc(1, sizeof(*new) + version_length)))
00329       return;
00330 
00331    new->file = file;
00332    new->version = (char *) new + sizeof(*new);
00333    memcpy(new->version, work, version_length);
00334    AST_RWLIST_WRLOCK(&file_versions);
00335    AST_RWLIST_INSERT_HEAD(&file_versions, new, list);
00336    AST_RWLIST_UNLOCK(&file_versions);
00337 }

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 1650 of file asterisk.c.

References ast_log(), ast_verbose, LOG_WARNING, sched_setscheduler, and setpriority.

Referenced by app_exec(), ast_safe_system(), canary_thread(), icesencode(), launch_script(), main(), mp3play(), NBScatplay(), send_waveform_to_fd(), spawn_mp3(), and spawn_ras().

01651 {
01652    struct sched_param sched;
01653    memset(&sched, 0, sizeof(sched));
01654 #ifdef __linux__
01655    if (pri) {
01656       sched.sched_priority = 10;
01657       if (sched_setscheduler(0, SCHED_RR, &sched)) {
01658          ast_log(LOG_WARNING, "Unable to set high priority\n");
01659          return -1;
01660       } else
01661          if (option_verbose)
01662             ast_verbose("Set to realtime thread\n");
01663    } else {
01664       sched.sched_priority = 0;
01665       /* According to the manpage, these parameters can never fail. */
01666       sched_setscheduler(0, SCHED_OTHER, &sched);
01667    }
01668 #else
01669    if (pri) {
01670       if (setpriority(PRIO_PROCESS, 0, -10) == -1) {
01671          ast_log(LOG_WARNING, "Unable to set high priority\n");
01672          return -1;
01673       } else
01674          if (option_verbose)
01675             ast_verbose("Set to high priority\n");
01676    } else {
01677       /* According to the manpage, these parameters can never fail. */
01678       setpriority(PRIO_PROCESS, 0, 0);
01679    }
01680 #endif
01681    return 0;
01682 }

void ast_unregister_atexit ( void(*)(void)  func  ) 

Unregister a function registered with ast_register_atexit().

Parameters:
func The callback function to unregister.

Definition at line 1008 of file asterisk.c.

References __ast_unregister_atexit(), AST_LIST_LOCK, AST_LIST_UNLOCK, and ast_atexit::func.

Referenced by do_reload(), and unload_module().

01009 {
01010    AST_LIST_LOCK(&atexits);
01011    __ast_unregister_atexit(func);
01012    AST_LIST_UNLOCK(&atexits);
01013 }

void ast_unregister_file_version ( const char *  file  ) 

Unregister a source code file from the core.

Parameters:
file the source file name
Returns:
nothing

This function should not be called directly, but instead the ASTERISK_FILE_VERSION macro should be used to automatically unregister the file when the module is unloaded.

Definition at line 339 of file asterisk.c.

References ast_free, AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, file_version::file, and ast_atexit::list.

00340 {
00341    struct file_version *find;
00342 
00343    AST_RWLIST_WRLOCK(&file_versions);
00344    AST_RWLIST_TRAVERSE_SAFE_BEGIN(&file_versions, find, list) {
00345       if (!strcasecmp(find->file, file)) {
00346          AST_RWLIST_REMOVE_CURRENT(list);
00347          break;
00348       }
00349    }
00350    AST_RWLIST_TRAVERSE_SAFE_END;
00351    AST_RWLIST_UNLOCK(&file_versions);
00352 
00353    if (find)
00354       ast_free(find);
00355 }


Generated on 31 Aug 2015 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1