00001 /* 00002 * Asterisk -- An open source telephony toolkit. 00003 * 00004 * Copyright (C) 1999 - 2005, Digium, Inc. 00005 * 00006 * Mark Spencer <markster@digium.com> 00007 * 00008 * See http://www.asterisk.org for more information about 00009 * the Asterisk project. Please do not directly contact 00010 * any of the maintainers of this project for assistance; 00011 * the project provides a web site, mailing lists and IRC 00012 * channels for your use. 00013 * 00014 * This program is free software, distributed under the terms of 00015 * the GNU General Public License Version 2. See the LICENSE file 00016 * at the top of the source tree. 00017 */ 00018 00019 /*! \file 00020 * \brief Call Parking and Pickup API 00021 * Includes code and algorithms from the Zapata library. 00022 */ 00023 00024 #ifndef _AST_FEATURES_H 00025 #define _AST_FEATURES_H 00026 00027 #define FEATURE_MAX_LEN 11 00028 #define FEATURE_APP_LEN 64 00029 #define FEATURE_APP_ARGS_LEN 256 00030 #define FEATURE_SNAME_LEN 32 00031 #define FEATURE_EXTEN_LEN 32 00032 00033 /*! \brief main call feature structure */ 00034 struct ast_call_feature { 00035 int feature_mask; 00036 char *fname; 00037 char sname[FEATURE_SNAME_LEN]; 00038 char exten[FEATURE_MAX_LEN]; 00039 char default_exten[FEATURE_MAX_LEN]; 00040 int (*operation)(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config, char *code, int sense); 00041 unsigned int flags; 00042 char app[FEATURE_APP_LEN]; 00043 char app_args[FEATURE_APP_ARGS_LEN]; 00044 AST_LIST_ENTRY(ast_call_feature) feature_entry; 00045 }; 00046 00047 00048 00049 /*! \brief Park a call and read back parked location 00050 * \param chan the channel to actually be parked 00051 \param host the channel which will have the parked location read to 00052 Park the channel chan, and read back the parked location to the 00053 host. If the call is not picked up within a specified period of 00054 time, then the call will return to the last step that it was in 00055 (in terms of exten, priority and context) 00056 \param timeout is a timeout in milliseconds 00057 \param extout is a parameter to an int that will hold the parked location, or NULL if you want 00058 */ 00059 extern int ast_park_call(struct ast_channel *chan, struct ast_channel *host, int timeout, int *extout); 00060 00061 /*! \brief Park a call via a masqueraded channel 00062 * \param rchan the real channel to be parked 00063 \param host the channel to have the parking read to 00064 Masquerade the channel rchan into a new, empty channel which is then 00065 parked with ast_park_call 00066 \param timeout is a timeout in milliseconds 00067 \param extout is a parameter to an int that will hold the parked location, or NULL if you want 00068 */ 00069 extern int ast_masq_park_call(struct ast_channel *rchan, struct ast_channel *host, int timeout, int *extout); 00070 00071 /*! \brief Determine system parking extension 00072 * Returns the call parking extension for drivers that provide special 00073 call parking help */ 00074 extern char *ast_parking_ext(void); 00075 00076 /*! \brief Determine system call pickup extension */ 00077 extern char *ast_pickup_ext(void); 00078 00079 /*! \brief Bridge a call, optionally allowing redirection */ 00080 extern int ast_bridge_call(struct ast_channel *chan, struct ast_channel *peer,struct ast_bridge_config *config); 00081 00082 /*! \brief Pickup a call */ 00083 extern int ast_pickup_call(struct ast_channel *chan); 00084 00085 /*! \brief register new feature into feature_set 00086 \param feature an ast_call_feature object which contains a keysequence 00087 and a callback function which is called when this keysequence is pressed 00088 during a call. */ 00089 extern void ast_register_feature(struct ast_call_feature *feature); 00090 00091 /*! \brief unregister feature from feature_set 00092 \param feature the ast_call_feature object which was registered before*/ 00093 extern void ast_unregister_feature(struct ast_call_feature *feature); 00094 00095 00096 /*! \brief Add parking watcher (metermaid) to list. These will be notified when we create 00097 or remove parking extensions in the dial plan 00098 00099 */ 00100 int ast_park_metermaid_add(void (*maid)(char *exten, char *context), char *context); 00101 00102 /*! Remove parking watcher 00103 \param id Watcher ID returned by ast_park_metermaid_add() 00104 \return -1 on error (ID not found), otherwise 0 00105 */ 00106 int ast_park_metermaid_remove(int id); 00107 00108 #endif /* _AST_FEATURES_H */