Fri Aug 17 00:17:11 2018

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  * \since 1.8.29
00094  * \brief Register a function to be executed before Asterisk gracefully exits.
00095  *
00096  * If Asterisk is immediately shutdown (core stop now, or sending the TERM
00097  * signal), the callback is not run. When the callbacks are run, they are run in
00098  * sequence with ast_register_atexit() callbacks, in the reverse order of
00099  * registration.
00100  *
00101  * \param func The callback function to use.
00102  *
00103  * \retval 0 on success.
00104  * \retval -1 on error.
00105  */
00106 int ast_register_cleanup(void (*func)(void));
00107 
00108 /*!
00109  * \brief Unregister a function registered with ast_register_atexit().
00110  * \param func The callback function to unregister.
00111  */
00112 void ast_unregister_atexit(void (*func)(void));
00113 
00114 #if !defined(LOW_MEMORY)
00115 /*!
00116  * \brief Register the version of a source code file with the core.
00117  * \param file the source file name
00118  * \param version the version string (typically a SVN revision keyword string)
00119  * \return nothing
00120  *
00121  * This function should not be called directly, but instead the
00122  * ASTERISK_FILE_VERSION macro should be used to register a file with the core.
00123  */
00124 void ast_register_file_version(const char *file, const char *version);
00125 
00126 /*!
00127  * \brief Unregister a source code file from the core.
00128  * \param file the source file name
00129  * \return nothing
00130  *
00131  * This function should not be called directly, but instead the
00132  * ASTERISK_FILE_VERSION macro should be used to automatically unregister
00133  * the file when the module is unloaded.
00134  */
00135 void ast_unregister_file_version(const char *file);
00136 
00137 /*! \brief Find version for given module name
00138  * \param file Module name (i.e. chan_sip.so)
00139  * \return version string or NULL if the module is not found
00140  */
00141 const char *ast_file_version_find(const char *file);
00142 
00143 char *ast_complete_source_filename(const char *partial, int n);
00144 
00145 /*!
00146  * \brief Register/unregister a source code file with the core.
00147  * \param file the source file name
00148  * \param version the version string (typically a SVN revision keyword string)
00149  *
00150  * This macro will place a file-scope constructor and destructor into the
00151  * source of the module using it; this will cause the version of this file
00152  * to registered with the Asterisk core (and unregistered) at the appropriate
00153  * times.
00154  *
00155  * Example:
00156  *
00157  * \code
00158  * ASTERISK_FILE_VERSION(__FILE__, "\$Revision\$")
00159  * \endcode
00160  *
00161  * \note The dollar signs above have been protected with backslashes to keep
00162  * SVN from modifying them in this file; under normal circumstances they would
00163  * not be present and SVN would expand the Revision keyword into the file's
00164  * revision number.
00165  */
00166 #ifdef MTX_PROFILE
00167 #define  HAVE_MTX_PROFILE  /* used in lock.h */
00168 #define ASTERISK_FILE_VERSION(file, version) \
00169    static int mtx_prof = -1;       /* profile mutex */   \
00170    static void __attribute__((constructor)) __register_file_version(void) \
00171    { \
00172       mtx_prof = ast_add_profile("mtx_lock_" file, 0);   \
00173       ast_register_file_version(file, version); \
00174    } \
00175    static void __attribute__((destructor)) __unregister_file_version(void) \
00176    { \
00177       ast_unregister_file_version(file); \
00178    }
00179 #else /* !MTX_PROFILE */
00180 #define ASTERISK_FILE_VERSION(file, version) \
00181    static void __attribute__((constructor)) __register_file_version(void) \
00182    { \
00183       ast_register_file_version(file, version); \
00184    } \
00185    static void __attribute__((destructor)) __unregister_file_version(void) \
00186    { \
00187       ast_unregister_file_version(file); \
00188    }
00189 #endif /* !MTX_PROFILE */
00190 #else /* LOW_MEMORY */
00191 #define ASTERISK_FILE_VERSION(file, x)
00192 #endif /* LOW_MEMORY */
00193 
00194 #if !defined(LOW_MEMORY)
00195 /*!
00196  * \brief support for event profiling
00197  *
00198  * (note, this must be documented a lot more)
00199  * ast_add_profile allocates a generic 'counter' with a given name,
00200  * which can be shown with the command 'core show profile &lt;name&gt;'
00201  *
00202  * The counter accumulates positive or negative values supplied by
00203  * \see ast_add_profile(), dividing them by the 'scale' value passed in the
00204  * create call, and also counts the number of 'events'.
00205  * Values can also be taked by the TSC counter on ia32 architectures,
00206  * in which case you can mark the start of an event calling ast_mark(id, 1)
00207  * and then the end of the event with ast_mark(id, 0).
00208  * For non-i386 architectures, these two calls return 0.
00209  */
00210 int ast_add_profile(const char *, uint64_t scale);
00211 int64_t ast_profile(int, int64_t);
00212 int64_t ast_mark(int, int start1_stop0);
00213 #else /* LOW_MEMORY */
00214 #define ast_add_profile(a, b) 0
00215 #define ast_profile(a, b) do { } while (0)
00216 #define ast_mark(a, b) do { } while (0)
00217 #endif /* LOW_MEMORY */
00218 
00219 /*! \brief
00220  * Definition of various structures that many asterisk files need,
00221  * but only because they need to know that the type exists.
00222  *
00223  */
00224 
00225 struct ast_channel;
00226 struct ast_frame;
00227 struct ast_module;
00228 struct ast_variable;
00229 struct ast_str;
00230 
00231 #ifdef bzero
00232 #undef bzero
00233 #endif
00234 
00235 #ifdef bcopy
00236 #undef bcopy
00237 #endif
00238 
00239 #define bzero  0x__dont_use_bzero__use_memset_instead""
00240 #define bcopy  0x__dont_use_bcopy__use_memmove_instead()
00241 
00242 #endif /* _ASTERISK_H */

Generated on 17 Aug 2018 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1