⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbx.h

📁 Astercon2 开源软交换 2.2.0
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Asterisk -- An open source telephony toolkit. * * Copyright (C) 1999 - 2005, Digium, Inc. * * Mark Spencer <markster@digium.com> * * See http://www.asterisk.org for more information about * the Asterisk project. Please do not directly contact * any of the maintainers of this project for assistance; * the project provides a web site, mailing lists and IRC * channels for your use. * * This program is free software, distributed under the terms of * the GNU General Public License Version 2. See the LICENSE file * at the top of the source tree. *//*! \file * \brief Core PBX routines and definitions. */#ifndef _ASTERISK_PBX_H#define _ASTERISK_PBX_H#include "asterisk/sched.h"#include "asterisk/channel.h"#if defined(__cplusplus) || defined(c_plusplus)extern "C" {#endif#define AST_PBX_KEEP    0#define AST_PBX_REPLACE 1/*! Max length of an application */#define AST_MAX_APP	32/*! Special return values from applications to the PBX */#define AST_PBX_KEEPALIVE	10		/* Destroy the thread, but don't hang up the channel */#define AST_PBX_NO_HANGUP_PEER       11/*! Special Priority for an hint */#define PRIORITY_HINT	-1/*! Extension states */enum ast_extension_states {	/*! Extension removed */	AST_EXTENSION_REMOVED = -2,	/*! Extension hint removed */	AST_EXTENSION_DEACTIVATED = -1,	/*! No device INUSE or BUSY  */	AST_EXTENSION_NOT_INUSE = 0,	/*! One or more devices INUSE */	AST_EXTENSION_INUSE = 1 << 0,	/*! All devices BUSY */	AST_EXTENSION_BUSY = 1 << 1,	/*! All devices UNAVAILABLE/UNREGISTERED */	AST_EXTENSION_UNAVAILABLE = 1 << 2,	/*! All devices RINGING */	AST_EXTENSION_RINGING = 1 << 3,};static const struct cfextension_states {	int extension_state;	const char * const text;} extension_states[] = {	{ AST_EXTENSION_NOT_INUSE,                     "Idle" },	{ AST_EXTENSION_INUSE,                         "InUse" },	{ AST_EXTENSION_BUSY,                          "Busy" },	{ AST_EXTENSION_UNAVAILABLE,                   "Unavailable" },	{ AST_EXTENSION_RINGING,                       "Ringing" },	{ AST_EXTENSION_INUSE | AST_EXTENSION_RINGING, "InUse&Ringing" }};struct ast_context;struct ast_exten;     struct ast_include;struct ast_ignorepat;struct ast_sw;typedef int (*ast_state_cb_type)(char *context, char* id, enum ast_extension_states state, void *data);/*! Data structure associated with a custom function */struct ast_custom_function {	char *name;	char *synopsis;	char *desc;	char *syntax;	char *(*read)(struct ast_channel *, char *, char *, char *, size_t);	void (*write)(struct ast_channel *, char *, char *, const char *);	struct ast_custom_function *next;};/*! Data structure associated with an asterisk switch */struct ast_switch {	/*! NULL */	struct ast_switch *next;		/*! Name of the switch */	const char *name;					/*! Description of the switch */	const char *description;				int (*exists)(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data);		int (*canmatch)(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data);		int (*exec)(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, int newstack, const char *data);	int (*matchmore)(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data);};struct ast_timing {	int hastime;				/* If time construct exists */	unsigned int monthmask;			/* Mask for month */	unsigned int daymask;			/* Mask for date */	unsigned int dowmask;			/* Mask for day of week (mon-sun) */	unsigned int minmask[24];		/* Mask for minute */};extern int ast_build_timing(struct ast_timing *i, char *info);extern int ast_check_timing(struct ast_timing *i);struct ast_pbx {        int dtimeout;                                   /* Timeout between digits (seconds) */        int rtimeout;                                   /* Timeout for response							   (seconds) */};/*! Register an alternative switch *//*! * \param sw switch to register * This function registers a populated ast_switch structure with the * asterisk switching architecture. * It returns 0 on success, and other than 0 on failure */extern int ast_register_switch(struct ast_switch *sw);/*! Unregister an alternative switch *//*! * \param sw switch to unregister * Unregisters a switch from asterisk. * Returns nothing */extern void ast_unregister_switch(struct ast_switch *sw);/*! Look up an application *//*! * \param app name of the app * This function searches for the ast_app structure within * the apps that are registered for the one with the name * you passed in. * Returns the ast_app structure that matches on success, or NULL on failure */extern struct ast_app *pbx_findapp(const char *app);/*! executes an application *//*! * \param c channel to execute on * \param app which app to execute * \param data the data passed into the app * \param newstack stack pointer * This application executes an application on a given channel.  It * saves the stack and executes the given appliation passing in * the given data. * It returns 0 on success, and -1 on failure */int pbx_exec(struct ast_channel *c, struct ast_app *app, void *data, int newstack);/*! Register a new context *//*! * \param extcontexts pointer to the ast_context structure pointer * \param name name of the new context * \param registrar registrar of the context * This will first search for a context with your name.  If it exists already, it will not * create a new one.  If it does not exist, it will create a new one with the given name * and registrar. * It returns NULL on failure, and an ast_context structure on success */struct ast_context *ast_context_create(struct ast_context **extcontexts, const char *name, const char *registrar);/*! Merge the temporary contexts into a global contexts list and delete from the global list the ones that are being added *//*! * \param extcontexts pointer to the ast_context structure pointer * \param registrar of the context; if it's set the routine will delete all contexts that belong to that registrar; if NULL only the contexts that are specified in extcontexts */void ast_merge_contexts_and_delete(struct ast_context **extcontexts, const char *registrar);/*! Destroy a context (matches the specified context (or ANY context if NULL) *//*! * \param con context to destroy * \param registrar who registered it * You can optionally leave out either parameter.  It will find it * based on either the ast_context or the registrar name. * Returns nothing */void ast_context_destroy(struct ast_context *con, const char *registrar);/*! Find a context *//*! * \param name name of the context to find * Will search for the context with the given name. * Returns the ast_context on success, NULL on failure. */struct ast_context *ast_context_find(const char *name);enum ast_pbx_result {	AST_PBX_SUCCESS = 0,	AST_PBX_FAILED = -1,	AST_PBX_CALL_LIMIT = -2,};/*! Create a new thread and start the PBX (or whatever) *//*! * \param c channel to start the pbx on * \return Zero on success, non-zero on failure */enum ast_pbx_result ast_pbx_start(struct ast_channel *c);/*! Execute the PBX in the current thread *//*! * \param c channel to run the pbx on * \return Zero on success, non-zero on failure * This executes the PBX on a given channel. It allocates a new * PBX structure for the channel, and provides all PBX functionality. */enum ast_pbx_result ast_pbx_run(struct ast_channel *c);/*!  * \param context context to add the extension to * \param replace * \param extension extension to add * \param priority priority level of extension addition * \param label extension label * \param callerid callerid of extension * \param application application to run on the extension with that priority level * \param data data to pass to the application * \param datad * \param registrar who registered the extension * Add and extension to an extension context.   * Callerid is a pattern to match CallerID, or NULL to match any callerid * Returns 0 on success, -1 on failure */int ast_add_extension(const char *context, int replace, const char *extension, int priority, const char *label, const char *callerid,	const char *application, void *data, void (*datad)(void *), const char *registrar);/*! Add an extension to an extension context, this time with an ast_context *.  CallerID is a pattern to match on callerid, or NULL to not care about callerid *//*!  * For details about the arguements, check ast_add_extension() */int ast_add_extension2(struct ast_context *con,				      int replace, const char *extension, int priority, const char *label, const char *callerid, 					  const char *application, void *data, void (*datad)(void *),					  const char *registrar);/*! Add an application.  The function 'execute' should return non-zero if the line needs to be hung up.  *//*!  \param app Short name of the application  \param execute a function callback to execute the application  \param synopsis a short description of the application  \param description long description of the application   Include a one-line synopsis (e.g. 'hangs up a channel') and a more lengthy, multiline   description with more detail, including under what conditions the application   will return 0 or -1.   This registers an application with asterisks internal application list.  Please note:   The individual applications themselves are responsible for registering and unregistering   CLI commands.   It returns 0 on success, -1 on failure.*/int ast_register_application(const char *app, int (*execute)(struct ast_channel *, void *),			     const char *synopsis, const char *description);/*! Remove an application *//*! * \param app name of the application (does not have to be the same string as the one that was registered) * This unregisters an application from asterisk's internal registration mechanisms. * It returns 0 on success, and -1 on failure. */int ast_unregister_application(const char *app);/*! Uses hint and devicestate callback to get the state of an extension *//*! * \param c this is not important * \param context which context to look in * \param exten which extension to get state * Returns extension state !! = AST_EXTENSION_??? */int ast_extension_state(struct ast_channel *c, char *context, char *exten);/*! Return string of the state of an extension *//*! * \param extension_state is the numerical state delivered by ast_extension_state * Returns the state of an extension as string */const char *ast_extension_state2str(int extension_state);/*! Registers a state change callback *//*! * \param context which context to look in * \param exten which extension to get state * \param callback callback to call if state changed * \param data to pass to callback * The callback is called if the state for extension is changed * Return -1 on failure, ID on success */ int ast_extension_state_add(const char *context, const char *exten, 			    ast_state_cb_type callback, void *data);/*! Deletes a registered state change callback by ID *//*! * \param id of the callback to delete * \param callback callback * Removes the callback from list of callbacks * Return 0 on success, -1 on failure */int ast_extension_state_del(int id, ast_state_cb_type callback);/*! If an extension exists, return non-zero *//*! * \param hint buffer for hint * \param maxlen size of hint buffer * \param name buffer for name portion of hint * \param maxnamelen size of name buffer * \param c this is not important * \param context which context to look in * \param exten which extension to search for * If an extension within the given context with the priority PRIORITY_HINT * is found a non zero value will be returned. * Otherwise, 0 is returned. */int ast_get_hint(char *hint, int maxlen, char *name, int maxnamelen, struct ast_channel *c, const char *context, const char *exten);/*! If an extension exists, return non-zero */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -