Dial API: Add a dial option to indicate the dialed channel will replace dialer
[asterisk/asterisk.git] / include / asterisk / dial.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2007, Digium, Inc.
5  *
6  * Joshua Colp <jcolp@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 Dialing API
21  */
22
23 #ifndef _ASTERISK_DIAL_H
24 #define _ASTERISK_DIAL_H
25
26 #if defined(__cplusplus) || defined(c_plusplus)
27 extern "C" {
28 #endif
29
30 /*! \brief Main dialing structure. Contains global options, channels being dialed, and more! */
31 struct ast_dial;
32
33 /*! \brief Dialing channel structure. Contains per-channel dialing options, asterisk channel, and more! */
34 struct ast_dial_channel;
35
36 /*! \brief Forward declaration for format capabilities, used in prerun */
37 struct ast_format_cap;
38
39 typedef void (*ast_dial_state_callback)(struct ast_dial *);
40
41 /*! \brief List of options that are applicable either globally or per dialed channel */
42 enum ast_dial_option {
43         AST_DIAL_OPTION_RINGING,                 /*!< Always indicate ringing to caller */
44         AST_DIAL_OPTION_ANSWER_EXEC,             /*!< Execute application upon answer in async mode */
45         AST_DIAL_OPTION_MUSIC,                   /*!< Play music on hold instead of ringing to the calling channel */
46         AST_DIAL_OPTION_DISABLE_CALL_FORWARDING, /*!< Disable call forwarding on channels */
47         AST_DIAL_OPTION_PREDIAL,                 /*!< Execute a predial subroutine before dialing */
48         AST_DIAL_OPTION_DIAL_REPLACES_SELF,      /*!< The dial operation is a replacement for the requester */
49         AST_DIAL_OPTION_MAX,                     /*!< End terminator -- must always remain last */
50 };
51
52 /*! \brief List of return codes for dial run API calls */
53 enum ast_dial_result {
54         AST_DIAL_RESULT_INVALID,     /*!< Invalid options were passed to run function */
55         AST_DIAL_RESULT_FAILED,      /*!< Attempts to dial failed before reaching critical state */
56         AST_DIAL_RESULT_TRYING,      /*!< Currently trying to dial */
57         AST_DIAL_RESULT_RINGING,     /*!< Dial is presently ringing */
58         AST_DIAL_RESULT_PROGRESS,    /*!< Dial is presently progressing */
59         AST_DIAL_RESULT_PROCEEDING,  /*!< Dial is presently proceeding */
60         AST_DIAL_RESULT_ANSWERED,    /*!< A channel was answered */
61         AST_DIAL_RESULT_TIMEOUT,     /*!< Timeout was tripped, nobody answered */
62         AST_DIAL_RESULT_HANGUP,      /*!< Caller hung up */
63         AST_DIAL_RESULT_UNANSWERED,  /*!< Nobody answered */
64 };
65
66 /*! \brief New dialing structure
67  * \note Create a dialing structure
68  * \return Returns a calloc'd ast_dial structure, NULL on failure
69  */
70 struct ast_dial *ast_dial_create(void);
71
72 /*! \brief Append a channel
73  * \note Appends a channel to a dialing structure
74  * \return Returns channel reference number on success, -1 on failure
75  */
76 int ast_dial_append(struct ast_dial *dial, const char *tech, const char *device, const struct ast_assigned_ids *assignedids);
77
78 /*! \brief Request all appended channels, but do not dial
79  * \param dial Dialing structure
80  * \param chan Optional dialing channel
81  * \param cap Optional requested capabilities
82  * \retval -1 failure
83  * \reval 0 success
84  */
85 int ast_dial_prerun(struct ast_dial *dial, struct ast_channel *chan, struct ast_format_cap *cap);
86
87 /*! \brief Execute dialing synchronously or asynchronously
88  * \note Dials channels in a dial structure.
89  * \return Returns dial result code. (TRYING/INVALID/FAILED/ANSWERED/TIMEOUT/UNANSWERED).
90  */
91 enum ast_dial_result ast_dial_run(struct ast_dial *dial, struct ast_channel *chan, int async);
92
93 /*! \brief Return channel that answered
94  * \note Returns the Asterisk channel that answered
95  * \param dial Dialing structure
96  */
97 struct ast_channel *ast_dial_answered(struct ast_dial *dial);
98
99 /*! \brief Steal the channel that answered
100  * \note Returns the Asterisk channel that answered and removes it from the dialing structure
101  * \param dial Dialing structure
102  */
103 struct ast_channel *ast_dial_answered_steal(struct ast_dial *dial);
104
105 /*! \brief Return state of dial
106  * \note Returns the state of the dial attempt
107  * \param dial Dialing structure
108  */
109 enum ast_dial_result ast_dial_state(struct ast_dial *dial);
110
111 /*! \brief Cancel async thread
112  * \note Cancel a running async thread
113  * \param dial Dialing structure
114  */
115 enum ast_dial_result ast_dial_join(struct ast_dial *dial);
116
117 /*! \brief Hangup channels
118  * \note Hangup all active channels
119  * \param dial Dialing structure
120  */
121 void ast_dial_hangup(struct ast_dial *dial);
122
123 /*! \brief Destroys a dialing structure
124  * \note Cancels dialing and destroys (free's) the given ast_dial structure
125  * \param dial Dialing structure to free
126  * \return Returns 0 on success, -1 on failure
127  */
128 int ast_dial_destroy(struct ast_dial *dial);
129
130 /*! \brief Enables an option globally
131  * \param dial Dial structure to enable option on
132  * \param option Option to enable
133  * \param data Data to pass to this option (not always needed)
134  * \return Returns 0 on success, -1 on failure
135  */
136 int ast_dial_option_global_enable(struct ast_dial *dial, enum ast_dial_option option, void *data);
137
138 /*! \brief Enables an option per channel
139  * \param dial Dial structure
140  * \param num Channel number to enable option on
141  * \param option Option to enable
142  * \param data Data to pass to this option (not always needed)
143  * \return Returns 0 on success, -1 on failure
144  */
145 int ast_dial_option_enable(struct ast_dial *dial, int num, enum ast_dial_option option, void *data);
146
147 /*! \brief Disables an option globally
148  * \param dial Dial structure to disable option on
149  * \param option Option to disable
150  * \return Returns 0 on success, -1 on failure
151  */
152 int ast_dial_option_global_disable(struct ast_dial *dial, enum ast_dial_option option);
153
154 /*! \brief Disables an option per channel
155  * \param dial Dial structure
156  * \param num Channel number to disable option on
157  * \param option Option to disable
158  * \return Returns 0 on success, -1 on failure
159  */
160 int ast_dial_option_disable(struct ast_dial *dial, int num, enum ast_dial_option option);
161
162 /*! \brief Get the reason an outgoing channel has failed
163  * \param dial Dial structure
164  * \param num Channel number to get the reason from
165  * \return Numerical cause code
166  */
167 int ast_dial_reason(struct ast_dial *dial, int num);
168
169 /*! \brief Get the dialing channel, if prerun has been executed
170  * \param dial Dial structure
171  * \param num Channel number to get channel of
172  * \return Pointer to channel, without reference
173  */
174 struct ast_channel *ast_dial_get_channel(struct ast_dial *dial, int num);
175
176 /*! \brief Set a callback for state changes
177  * \param dial The dial structure to watch for state changes
178  * \param callback the callback
179  * \return nothing
180  */
181 void ast_dial_set_state_callback(struct ast_dial *dial, ast_dial_state_callback callback);
182
183 /*! \brief Set user data on a dial structure
184  * \param dial The dial structure to set a user data pointer on
185  * \param user_data The user data pointer
186  * \return nothing
187  */
188 void ast_dial_set_user_data(struct ast_dial *dial, void *user_data);
189
190 /*! \brief Return the user data on a dial structure
191  * \param dial The dial structure
192  * \return A pointer to the user data
193  */
194 void *ast_dial_get_user_data(struct ast_dial *dial);
195
196 /*! \brief Set the maximum time (globally) allowed for trying to ring phones
197  * \param dial The dial structure to apply the time limit to
198  * \param timeout Maximum time allowed in milliseconds
199  * \return nothing
200  */
201 void ast_dial_set_global_timeout(struct ast_dial *dial, int timeout);
202
203 /*! \brief Set the maximum time (per channel) allowed for trying to ring the phone
204  * \param dial The dial structure the channel belongs to
205  * \param num Channel number to set timeout on
206  * \param timeout Maximum time allowed in milliseconds
207  * \return nothing
208  */
209 void ast_dial_set_timeout(struct ast_dial *dial, int num, int timeout);
210
211 /*! \since 12
212  * \brief Convert a hangup cause to a publishable dial status
213  */
214 const char *ast_hangup_cause_to_dial_status(int hangup_cause);
215
216 #if defined(__cplusplus) || defined(c_plusplus)
217 }
218 #endif
219
220 #endif /* _ASTERISK_DIAL_H */