Thu Sep 7 01:02:53 2017

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

Generated on 7 Sep 2017 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1