02b8fa5fd796db81c93960c80f6cdf63f3f7dae8
[asterisk/asterisk.git] / include / asterisk / features.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2005, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  * \brief Call Parking and Pickup API 
21  * Includes code and algorithms from the Zapata library.
22  */
23
24 #ifndef _AST_FEATURES_H
25 #define _AST_FEATURES_H
26
27 #define FEATURE_MAX_LEN         11
28 #define FEATURE_APP_LEN         64
29 #define FEATURE_APP_ARGS_LEN    256
30 #define FEATURE_SNAME_LEN       32
31 #define FEATURE_EXTEN_LEN       32
32 #define FEATURE_MOH_LEN         80  /* same as MAX_MUSICCLASS from channel.h */
33
34 /*! \brief main call feature structure */
35 struct ast_call_feature {
36         int feature_mask;
37         char *fname;
38         char sname[FEATURE_SNAME_LEN];
39         char exten[FEATURE_MAX_LEN];
40         char default_exten[FEATURE_MAX_LEN];
41         int (*operation)(struct ast_channel *chan, struct ast_channel *peer, struct ast_bridge_config *config, char *code, int sense);
42         unsigned int flags;
43         char app[FEATURE_APP_LEN];              
44         char app_args[FEATURE_APP_ARGS_LEN];
45         char moh_class[FEATURE_MOH_LEN];
46         AST_LIST_ENTRY(ast_call_feature) feature_entry;
47 };
48
49
50
51 /*! \brief Park a call and read back parked location 
52  *  \param chan the channel to actually be parked
53     \param host the channel which will have the parked location read to
54         Park the channel chan, and read back the parked location to the
55         host.  If the call is not picked up within a specified period of
56         time, then the call will return to the last step that it was in 
57         (in terms of exten, priority and context)
58         \param timeout is a timeout in milliseconds
59         \param extout is a parameter to an int that will hold the parked location, or NULL if you want
60 */
61 int ast_park_call(struct ast_channel *chan, struct ast_channel *host, int timeout, int *extout);
62
63 /*! \brief Park a call via a masqueraded channel
64  *  \param rchan the real channel to be parked
65     \param host the channel to have the parking read to
66         Masquerade the channel rchan into a new, empty channel which is then
67         parked with ast_park_call
68         \param timeout is a timeout in milliseconds
69         \param extout is a parameter to an int that will hold the parked location, or NULL if you want
70 */
71 int ast_masq_park_call(struct ast_channel *rchan, struct ast_channel *host, int timeout, int *extout);
72
73 /*! \brief Determine system parking extension
74  *  Returns the call parking extension for drivers that provide special
75     call parking help */
76 char *ast_parking_ext(void);
77
78 /*! \brief Determine system call pickup extension */
79 char *ast_pickup_ext(void);
80
81 /*! \brief Bridge a call, optionally allowing redirection */
82 int ast_bridge_call(struct ast_channel *chan, struct ast_channel *peer,struct ast_bridge_config *config);
83
84 /*! \brief Pickup a call */
85 int ast_pickup_call(struct ast_channel *chan);
86
87 /*! \brief register new feature into feature_set 
88    \param feature an ast_call_feature object which contains a keysequence
89    and a callback function which is called when this keysequence is pressed
90    during a call. */
91 void ast_register_feature(struct ast_call_feature *feature);
92
93 /*! \brief unregister feature from feature_set
94     \param feature the ast_call_feature object which was registered before*/
95 void ast_unregister_feature(struct ast_call_feature *feature);
96
97 /*! \brief look for a feature entry by its sname
98         \param name a string ptr, should match "automon", "blindxfer", "atxfer", etc. */
99 struct ast_call_feature *find_feature(char *name);
100
101 #endif /* _AST_FEATURES_H */