Sat Mar 10 01:54:04 2012

Asterisk developer's documentation


asterisk.h

Go to the documentation of this file.
00001 /*
00002  * Asterisk -- A telephony toolkit for Linux.
00003  *
00004  * General Definitions for Asterisk top level program
00005  *
00006  * Copyright (C) 1999-2006, Digium, Inc.
00007  *
00008  * Mark Spencer <markster@digium.com>
00009  *
00010  * This program is free software, distributed under the terms of
00011  * the GNU General Public License
00012  */
00013 
00014 /*! \file
00015  * \brief Asterisk main include file. File version handling, generic pbx functions.
00016  */
00017 
00018 #ifndef _ASTERISK_H
00019 #define _ASTERISK_H
00020 
00021 #include "asterisk/autoconfig.h"
00022 
00023 #if !defined(NO_MALLOC_DEBUG) && !defined(STANDALONE) && !defined(STANDALONE2) && defined(MALLOC_DEBUG)
00024 #include "asterisk/astmm.h"
00025 #endif
00026 
00027 #include "asterisk/compat.h"
00028 
00029 /* Default to allowing the umask or filesystem ACLs to determine actual file
00030  * creation permissions
00031  */
00032 #ifndef AST_DIR_MODE
00033 #define AST_DIR_MODE 0777
00034 #endif
00035 #ifndef AST_FILE_MODE
00036 #define AST_FILE_MODE 0666
00037 #endif
00038 
00039 #define DEFAULT_LANGUAGE "en"
00040 
00041 #define DEFAULT_SAMPLE_RATE 8000
00042 #define DEFAULT_SAMPLES_PER_MS  ((DEFAULT_SAMPLE_RATE)/1000)
00043 #define  setpriority __PLEASE_USE_ast_set_priority_INSTEAD_OF_setpriority__
00044 #define  sched_setscheduler   __PLEASE_USE_ast_set_priority_INSTEAD_OF_sched_setscheduler__
00045 
00046 #if defined(DEBUG_FD_LEAKS) && !defined(STANDALONE) && !defined(STANDALONE2) && !defined(STANDALONE_AEL)
00047 /* These includes are all about ordering */
00048 #include <stdio.h>
00049 #include <sys/types.h>
00050 #include <sys/stat.h>
00051 #include <sys/socket.h>
00052 #include <fcntl.h>
00053 
00054 #define  open(a,...) __ast_fdleak_open(__FILE__,__LINE__,__PRETTY_FUNCTION__, a, __VA_ARGS__)
00055 #define pipe(a)      __ast_fdleak_pipe(a, __FILE__,__LINE__,__PRETTY_FUNCTION__)
00056 #define socket(a,b,c)   __ast_fdleak_socket(a, b, c, __FILE__,__LINE__,__PRETTY_FUNCTION__)
00057 #define close(a)  __ast_fdleak_close(a)
00058 #define  fopen(a,b)  __ast_fdleak_fopen(a, b, __FILE__,__LINE__,__PRETTY_FUNCTION__)
00059 #define  fclose(a)   __ast_fdleak_fclose(a)
00060 #define  dup2(a,b)   __ast_fdleak_dup2(a, b, __FILE__,__LINE__,__PRETTY_FUNCTION__)
00061 #define dup(a)    __ast_fdleak_dup(a, __FILE__,__LINE__,__PRETTY_FUNCTION__)
00062 
00063 #if defined(__cplusplus) || defined(c_plusplus)
00064 extern "C" {
00065 #endif
00066 int __ast_fdleak_open(const char *file, int line, const char *func, const char *path, int flags, ...);
00067 int __ast_fdleak_pipe(int *fds, const char *file, int line, const char *func);
00068 int __ast_fdleak_socket(int domain, int type, int protocol, const char *file, int line, const char *func);
00069 int __ast_fdleak_close(int fd);
00070 FILE *__ast_fdleak_fopen(const char *path, const char *mode, const char *file, int line, const char *func);
00071 int __ast_fdleak_fclose(FILE *ptr);
00072 int __ast_fdleak_dup2(int oldfd, int newfd, const char *file, int line, const char *func);
00073 int __ast_fdleak_dup(int oldfd, const char *file, int line, const char *func);
00074 #if defined(__cplusplus) || defined(c_plusplus)
00075 }
00076 #endif
00077 #endif
00078 
00079 int ast_set_priority(int);       /*!< Provided by asterisk.c */
00080 int ast_fd_init(void);           /*!< Provided by astfd.c */
00081 int ast_pbx_init(void);                         /*!< Provided by pbx.c */
00082 
00083 /*!
00084  * \brief Register a function to be executed before Asterisk exits.
00085  * \param func The callback function to use.
00086  *
00087  * \retval 0 on success.
00088  * \retval -1 on error.
00089  */
00090 int ast_register_atexit(void (*func)(void));
00091 
00092 /*!
00093  * \brief Unregister a function registered with ast_register_atexit().
00094  * \param func The callback function to unregister.
00095  */
00096 void ast_unregister_atexit(void (*func)(void));
00097 
00098 #if !defined(LOW_MEMORY)
00099 /*!
00100  * \brief Register the version of a source code file with the core.
00101  * \param file the source file name
00102  * \param version the version string (typically a SVN revision keyword string)
00103  * \return nothing
00104  *
00105  * This function should not be called directly, but instead the
00106  * ASTERISK_FILE_VERSION macro should be used to register a file with the core.
00107  */
00108 void ast_register_file_version(const char *file, const char *version);
00109 
00110 /*!
00111  * \brief Unregister a source code file from the core.
00112  * \param file the source file name
00113  * \return nothing
00114  *
00115  * This function should not be called directly, but instead the
00116  * ASTERISK_FILE_VERSION macro should be used to automatically unregister
00117  * the file when the module is unloaded.
00118  */
00119 void ast_unregister_file_version(const char *file);
00120 
00121 /*! \brief Find version for given module name
00122  * \param file Module name (i.e. chan_sip.so)
00123  * \return version string or NULL if the module is not found
00124  */
00125 const char *ast_file_version_find(const char *file);
00126 
00127 char *ast_complete_source_filename(const char *partial, int n);
00128 
00129 /*!
00130  * \brief Register/unregister a source code file with the core.
00131  * \param file the source file name
00132  * \param version the version string (typically a SVN revision keyword string)
00133  *
00134  * This macro will place a file-scope constructor and destructor into the
00135  * source of the module using it; this will cause the version of this file
00136  * to registered with the Asterisk core (and unregistered) at the appropriate
00137  * times.
00138  *
00139  * Example:
00140  *
00141  * \code
00142  * ASTERISK_FILE_VERSION(__FILE__, "\$Revision\$")
00143  * \endcode
00144  *
00145  * \note The dollar signs above have been protected with backslashes to keep
00146  * SVN from modifying them in this file; under normal circumstances they would
00147  * not be present and SVN would expand the Revision keyword into the file's
00148  * revision number.
00149  */
00150 #ifdef MTX_PROFILE
00151 #define  HAVE_MTX_PROFILE  /* used in lock.h */
00152 #define ASTERISK_FILE_VERSION(file, version) \
00153    static int mtx_prof = -1;       /* profile mutex */   \
00154    static void __attribute__((constructor)) __register_file_version(void) \
00155    { \
00156       mtx_prof = ast_add_profile("mtx_lock_" file, 0);   \
00157       ast_register_file_version(file, version); \
00158    } \
00159    static void __attribute__((destructor)) __unregister_file_version(void) \
00160    { \
00161       ast_unregister_file_version(file); \
00162    }
00163 #else /* !MTX_PROFILE */
00164 #define ASTERISK_FILE_VERSION(file, version) \
00165    static void __attribute__((constructor)) __register_file_version(void) \
00166    { \
00167       ast_register_file_version(file, version); \
00168    } \
00169    static void __attribute__((destructor)) __unregister_file_version(void) \
00170    { \
00171       ast_unregister_file_version(file); \
00172    }
00173 #endif /* !MTX_PROFILE */
00174 #else /* LOW_MEMORY */
00175 #define ASTERISK_FILE_VERSION(file, x)
00176 #endif /* LOW_MEMORY */
00177 
00178 #if !defined(LOW_MEMORY)
00179 /*!
00180  * \brief support for event profiling
00181  *
00182  * (note, this must be documented a lot more)
00183  * ast_add_profile allocates a generic 'counter' with a given name,
00184  * which can be shown with the command 'core show profile &lt;name&gt;'
00185  *
00186  * The counter accumulates positive or negative values supplied by
00187  * \see ast_add_profile(), dividing them by the 'scale' value passed in the
00188  * create call, and also counts the number of 'events'.
00189  * Values can also be taked by the TSC counter on ia32 architectures,
00190  * in which case you can mark the start of an event calling ast_mark(id, 1)
00191  * and then the end of the event with ast_mark(id, 0).
00192  * For non-i386 architectures, these two calls return 0.
00193  */
00194 int ast_add_profile(const char *, uint64_t scale);
00195 int64_t ast_profile(int, int64_t);
00196 int64_t ast_mark(int, int start1_stop0);
00197 #else /* LOW_MEMORY */
00198 #define ast_add_profile(a, b) 0
00199 #define ast_profile(a, b) do { } while (0)
00200 #define ast_mark(a, b) do { } while (0)
00201 #endif /* LOW_MEMORY */
00202 
00203 /*! \brief
00204  * Definition of various structures that many asterisk files need,
00205  * but only because they need to know that the type exists.
00206  *
00207  */
00208 
00209 struct ast_channel;
00210 struct ast_frame;
00211 struct ast_module;
00212 struct ast_variable;
00213 struct ast_str;
00214 
00215 #ifdef bzero
00216 #undef bzero
00217 #endif
00218 
00219 #ifdef bcopy
00220 #undef bcopy
00221 #endif
00222 
00223 #define bzero  0x__dont_use_bzero__use_memset_instead""
00224 #define bcopy  0x__dont_use_bcopy__use_memmove_instead()
00225 
00226 #endif /* _ASTERISK_H */

Generated on Sat Mar 10 01:54:04 2012 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7