Thu Apr 28 2011 17:15:36

Asterisk developer's documentation


asterisk.h File Reference

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

Include dependency graph for asterisk.h:
This graph shows which files directly or indirectly include this file:

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 ASTERISK_FILE_VERSION (   file,
  version 
)

Register/unregister a source code file with the core.

Parameters:
filethe source file name
versionthe 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

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

{
   int l = sizeof(struct profile_data);
   int n = 10; /* default entries */

   if (prof_data == NULL) {
      prof_data = ast_calloc(1, l + n*sizeof(struct profile_entry));
      if (prof_data == NULL)
         return -1;
      prof_data->entries = 0;
      prof_data->max_size = n;
   }
   if (prof_data->entries >= prof_data->max_size) {
      void *p;
      n = prof_data->max_size + 20;
      p = ast_realloc(prof_data, l + n*sizeof(struct profile_entry));
      if (p == NULL)
         return -1;
      prof_data = p;
      prof_data->max_size = n;
   }
   n = prof_data->entries++;
   prof_data->e[n].name = ast_strdup(name);
   prof_data->e[n].value = 0;
   prof_data->e[n].events = 0;
   prof_data->e[n].mark = 0;
   prof_data->e[n].scale = scale;
   return n;
}
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, and len().

Referenced by handle_verbose().

{
   struct file_version *find;
   size_t len = strlen(partial);
   int count = 0;
   char *res = NULL;

   AST_RWLIST_RDLOCK(&file_versions);
   AST_RWLIST_TRAVERSE(&file_versions, find, list) {
      if (!strncasecmp(find->file, partial, len) && ++count > n) {
         res = ast_strdup(find->file);
         break;
      }
   }
   AST_RWLIST_UNLOCK(&file_versions);
   return res;
}
int ast_fd_init ( void  )

Provided by astfd.c

Definition at line 275 of file astfd.c.

Referenced by main().

{
   return 0;
}
const char* ast_file_version_find ( const char *  file)

Find version for given module name.

Parameters:
fileModule 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, and AST_RWLIST_WRLOCK.

Referenced by manager_modulecheck().

{
   struct file_version *iterator;

   AST_RWLIST_WRLOCK(&file_versions);
   AST_RWLIST_TRAVERSE_SAFE_BEGIN(&file_versions, iterator, list) {
      if (!strcasecmp(iterator->file, file))
         break;
   }
   AST_RWLIST_TRAVERSE_SAFE_END;
   AST_RWLIST_UNLOCK(&file_versions);
   if (iterator)
      return iterator->version;
   return NULL;
}      
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().

{
   if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */
      return 0;
   if (startstop == 1)
      prof_data->e[i].mark = rdtsc();
   else {
      prof_data->e[i].mark = (rdtsc() - prof_data->e[i].mark);
      if (prof_data->e[i].scale > 1)
         prof_data->e[i].mark /= prof_data->e[i].scale;
      prof_data->e[i].value += prof_data->e[i].mark;
      prof_data->e[i].events++;
   }
   return prof_data->e[i].mark;
}
int ast_pbx_init ( void  )
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.

{
   if (!prof_data || i < 0 || i > prof_data->entries) /* invalid index */
      return 0;
   if (prof_data->e[i].scale > 1)
      delta /= prof_data->e[i].scale;
   prof_data->e[i].value += delta;
   prof_data->e[i].events++;
   return prof_data->e[i].value;
}
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.

Definition at line 923 of file asterisk.c.

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

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

{
   struct ast_atexit *ae;

   if (!(ae = ast_calloc(1, sizeof(*ae))))
      return -1;

   ae->func = func;

   ast_unregister_atexit(func);  

   AST_RWLIST_WRLOCK(&atexits);
   AST_RWLIST_INSERT_HEAD(&atexits, ae, list);
   AST_RWLIST_UNLOCK(&atexits);

   return 0;
}
void ast_register_file_version ( const char *  file,
const char *  version 
)

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

Parameters:
filethe source file name
versionthe 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().

{
   struct file_version *new;
   char *work;
   size_t version_length;

   work = ast_strdupa(version);
   work = ast_strip(ast_strip_quoted(work, "$", "$"));
   version_length = strlen(work) + 1;
   
   if (!(new = ast_calloc(1, sizeof(*new) + version_length)))
      return;

   new->file = file;
   new->version = (char *) new + sizeof(*new);
   memcpy(new->version, work, version_length);
   AST_RWLIST_WRLOCK(&file_versions);
   AST_RWLIST_INSERT_HEAD(&file_versions, new, list);
   AST_RWLIST_UNLOCK(&file_versions);
}
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().

{
   struct sched_param sched;
   memset(&sched, 0, sizeof(sched));
#ifdef __linux__
   if (pri) {  
      sched.sched_priority = 10;
      if (sched_setscheduler(0, SCHED_RR, &sched)) {
         ast_log(LOG_WARNING, "Unable to set high priority\n");
         return -1;
      } else
         if (option_verbose)
            ast_verbose("Set to realtime thread\n");
   } else {
      sched.sched_priority = 0;
      /* According to the manpage, these parameters can never fail. */
      sched_setscheduler(0, SCHED_OTHER, &sched);
   }
#else
   if (pri) {
      if (setpriority(PRIO_PROCESS, 0, -10) == -1) {
         ast_log(LOG_WARNING, "Unable to set high priority\n");
         return -1;
      } else
         if (option_verbose)
            ast_verbose("Set to high priority\n");
   } else {
      /* According to the manpage, these parameters can never fail. */
      setpriority(PRIO_PROCESS, 0, 0);
   }
#endif
   return 0;
}
void ast_unregister_atexit ( void(*)(void)  func)

Unregister a function registered with ast_register_atexit().

Parameters:
funcThe 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, and ast_atexit::func.

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

void ast_unregister_file_version ( const char *  file)

Unregister a source code file from the core.

Parameters:
filethe 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, and AST_RWLIST_WRLOCK.

{
   struct file_version *find;

   AST_RWLIST_WRLOCK(&file_versions);
   AST_RWLIST_TRAVERSE_SAFE_BEGIN(&file_versions, find, list) {
      if (!strcasecmp(find->file, file)) {
         AST_RWLIST_REMOVE_CURRENT(list);
         break;
      }
   }
   AST_RWLIST_TRAVERSE_SAFE_END;
   AST_RWLIST_UNLOCK(&file_versions);

   if (find)
      ast_free(find);
}