Thu Oct 11 06:47:59 2012

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"

Include dependency graph for asterisk.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.
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 165 of file asterisk.h.

#define bcopy   0x__dont_use_bcopy__use_memmove_instead()

Definition at line 225 of file asterisk.h.

#define bzero   0x__dont_use_bzero__use_memset_instead""

Definition at line 224 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

#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 682 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().

00683 {
00684    int l = sizeof(struct profile_data);
00685    int n = 10; /* default entries */
00686 
00687    if (prof_data == NULL) {
00688       prof_data = ast_calloc(1, l + n*sizeof(struct profile_entry));
00689       if (prof_data == NULL)
00690          return -1;
00691       prof_data->entries = 0;
00692       prof_data->max_size = n;
00693    }
00694    if (prof_data->entries >= prof_data->max_size) {
00695       void *p;
00696       n = prof_data->max_size + 20;
00697       p = ast_realloc(prof_data, l + n*sizeof(struct profile_entry));
00698       if (p == NULL)
00699          return -1;
00700       prof_data = p;
00701       prof_data->max_size = n;
00702    }
00703    n = prof_data->entries++;
00704    prof_data->e[n].name = ast_strdup(name);
00705    prof_data->e[n].value = 0;
00706    prof_data->e[n].events = 0;
00707    prof_data->e[n].mark = 0;
00708    prof_data->e[n].scale = scale;
00709    return n;
00710 }

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

Definition at line 338 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().

00339 {
00340    struct file_version *find;
00341    size_t len = strlen(partial);
00342    int count = 0;
00343    char *res = NULL;
00344 
00345    AST_RWLIST_RDLOCK(&file_versions);
00346    AST_RWLIST_TRAVERSE(&file_versions, find, list) {
00347       if (!strncasecmp(find->file, partial, len) && ++count > n) {
00348          res = ast_strdup(find->file);
00349          break;
00350       }
00351    }
00352    AST_RWLIST_UNLOCK(&file_versions);
00353    return res;
00354 }

int ast_fd_init ( void   ) 

Provided by astfd.c

Definition at line 275 of file astfd.c.

Referenced by main().

00276 {
00277    return 0;
00278 }

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

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

Referenced by manager_modulecheck().

00358 {
00359    struct file_version *iterator;
00360 
00361    AST_RWLIST_WRLOCK(&file_versions);
00362    AST_RWLIST_TRAVERSE_SAFE_BEGIN(&file_versions, iterator, list) {
00363       if (!strcasecmp(iterator->file, file))
00364          break;
00365    }
00366    AST_RWLIST_TRAVERSE_SAFE_END;
00367    AST_RWLIST_UNLOCK(&file_versions);
00368    if (iterator)
00369       return iterator->version;
00370    return NULL;
00371 }      

int64_t ast_mark ( int  ,
int  start1_stop0 
)

Definition at line 747 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 extension_match_core().

00748 {
00749    if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */
00750       return 0;
00751    if (startstop == 1)
00752       prof_data->e[i].mark = rdtsc();
00753    else {
00754       prof_data->e[i].mark = (rdtsc() - prof_data->e[i].mark);
00755       if (prof_data->e[i].scale > 1)
00756          prof_data->e[i].mark /= prof_data->e[i].scale;
00757       prof_data->e[i].value += prof_data->e[i].mark;
00758       prof_data->e[i].events++;
00759    }
00760    return prof_data->e[i].mark;
00761 }

int ast_pbx_init ( void   ) 

Provided by pbx.c

Definition at line 9739 of file pbx.c.

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

Referenced by main().

09740 {
09741    hints = ao2_container_alloc(HASH_EXTENHINT_SIZE, hint_hash, hint_cmp);
09742    statecbs = ao2_container_alloc(HASH_EXTENHINT_SIZE, NULL, statecbs_cmp);
09743 
09744    return (hints && statecbs) ? 0 : -1;
09745 }

int64_t ast_profile ( int  ,
int64_t   
)

Definition at line 712 of file asterisk.c.

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

00713 {
00714    if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */
00715       return 0;
00716    if (prof_data->e[i].scale > 1)
00717       delta /= prof_data->e[i].scale;
00718    prof_data->e[i].value += delta;
00719    prof_data->e[i].events++;
00720    return prof_data->e[i].value;
00721 }

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

Register a function to be executed before Asterisk exits.

Parameters:
func The callback function to use.
Return values:
0 on success.
-1 on error.

Definition at line 923 of file asterisk.c.

References ast_calloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_unregister_atexit(), ast_atexit::func, and ast_atexit::list.

Referenced by do_reload(), load_module(), and main().

00924 {
00925    struct ast_atexit *ae;
00926 
00927    if (!(ae = ast_calloc(1, sizeof(*ae))))
00928       return -1;
00929 
00930    ae->func = func;
00931 
00932    ast_unregister_atexit(func);  
00933 
00934    AST_RWLIST_WRLOCK(&atexits);
00935    AST_RWLIST_INSERT_HEAD(&atexits, ae, list);
00936    AST_RWLIST_UNLOCK(&atexits);
00937 
00938    return 0;
00939 }

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 299 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().

00300 {
00301    struct file_version *new;
00302    char *work;
00303    size_t version_length;
00304 
00305    work = ast_strdupa(version);
00306    work = ast_strip(ast_strip_quoted(work, "$", "$"));
00307    version_length = strlen(work) + 1;
00308    
00309    if (!(new = ast_calloc(1, sizeof(*new) + version_length)))
00310       return;
00311 
00312    new->file = file;
00313    new->version = (char *) new + sizeof(*new);
00314    memcpy(new->version, work, version_length);
00315    AST_RWLIST_WRLOCK(&file_versions);
00316    AST_RWLIST_INSERT_HEAD(&file_versions, new, list);
00317    AST_RWLIST_UNLOCK(&file_versions);
00318 }

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 1542 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().

01543 {
01544    struct sched_param sched;
01545    memset(&sched, 0, sizeof(sched));
01546 #ifdef __linux__
01547    if (pri) {  
01548       sched.sched_priority = 10;
01549       if (sched_setscheduler(0, SCHED_RR, &sched)) {
01550          ast_log(LOG_WARNING, "Unable to set high priority\n");
01551          return -1;
01552       } else
01553          if (option_verbose)
01554             ast_verbose("Set to realtime thread\n");
01555    } else {
01556       sched.sched_priority = 0;
01557       /* According to the manpage, these parameters can never fail. */
01558       sched_setscheduler(0, SCHED_OTHER, &sched);
01559    }
01560 #else
01561    if (pri) {
01562       if (setpriority(PRIO_PROCESS, 0, -10) == -1) {
01563          ast_log(LOG_WARNING, "Unable to set high priority\n");
01564          return -1;
01565       } else
01566          if (option_verbose)
01567             ast_verbose("Set to high priority\n");
01568    } else {
01569       /* According to the manpage, these parameters can never fail. */
01570       setpriority(PRIO_PROCESS, 0, 0);
01571    }
01572 #endif
01573    return 0;
01574 }

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

References AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, free, ast_atexit::func, and ast_atexit::list.

Referenced by ast_register_atexit(), do_reload(), and unload_module().

00942 {
00943    struct ast_atexit *ae = NULL;
00944 
00945    AST_RWLIST_WRLOCK(&atexits);
00946    AST_RWLIST_TRAVERSE_SAFE_BEGIN(&atexits, ae, list) {
00947       if (ae->func == func) {
00948          AST_RWLIST_REMOVE_CURRENT(list);
00949          break;
00950       }
00951    }
00952    AST_RWLIST_TRAVERSE_SAFE_END;
00953    AST_RWLIST_UNLOCK(&atexits);
00954 
00955    free(ae);
00956 }

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 320 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.

00321 {
00322    struct file_version *find;
00323 
00324    AST_RWLIST_WRLOCK(&file_versions);
00325    AST_RWLIST_TRAVERSE_SAFE_BEGIN(&file_versions, find, list) {
00326       if (!strcasecmp(find->file, file)) {
00327          AST_RWLIST_REMOVE_CURRENT(list);
00328          break;
00329       }
00330    }
00331    AST_RWLIST_TRAVERSE_SAFE_END;
00332    AST_RWLIST_UNLOCK(&file_versions);
00333 
00334    if (find)
00335       ast_free(find);
00336 }


Generated on Thu Oct 11 06:47:59 2012 for Asterisk - the Open Source PBX by  doxygen 1.5.6