*
* \param control Control for \c res_stasis
* \param endpoint The endpoint to dial.
+ * \param exten Extension to dial if no endpoint specified.
+ * \param context Context to use with extension.
* \param timeout The amount of time to wait for answer, before giving up.
*
* \return 0 for success
* \return -1 for error.
*/
-int stasis_app_control_dial(struct stasis_app_control *control, const char *endpoint, int timeout);
+int stasis_app_control_dial(struct stasis_app_control *control, const char *endpoint, const char *exten,
+ const char *context, int timeout);
/*!
* \brief Apply a bridge role to a channel controlled by a stasis app control
int timeout;
};
+static void *app_control_add_channel_to_bridge(
+ struct stasis_app_control *control,
+ struct ast_channel *chan, void *data);
+
static void *app_control_dial(struct stasis_app_control *control,
struct ast_channel *chan, void *data)
{
RAII_VAR(struct stasis_app_control_dial_data *, dial_data, data, ast_free);
enum ast_dial_result res;
char *tech, *resource;
-
struct ast_channel *new_chan;
- struct ast_bridge *bridge;
+ RAII_VAR(struct ast_bridge *, bridge, NULL, ao2_cleanup);
tech = dial_data->endpoint;
if (!(resource = strchr(tech, '/'))) {
AST_BRIDGE_IMPART_CHAN_INDEPENDENT)) {
ast_hangup(new_chan);
} else {
- stasis_app_control_add_channel_to_bridge(control, bridge);
+ app_control_add_channel_to_bridge(control, chan, bridge);
}
return NULL;
}
-int stasis_app_control_dial(struct stasis_app_control *control, const char *endpoint, int timeout)
+int stasis_app_control_dial(struct stasis_app_control *control, const char *endpoint, const char *exten, const char *context,
+ int timeout)
{
struct stasis_app_control_dial_data *dial_data;
return -1;
}
- ast_copy_string(dial_data->endpoint, endpoint, sizeof(dial_data->endpoint));
+ if (!ast_strlen_zero(endpoint)) {
+ ast_copy_string(dial_data->endpoint, endpoint, sizeof(dial_data->endpoint));
+ } else if (!ast_strlen_zero(exten) && !ast_strlen_zero(context)) {
+ snprintf(dial_data->endpoint, sizeof(dial_data->endpoint), "Local/%s@%s", exten, context);
+ } else {
+ return -1;
+ }
if (timeout > 0) {
dial_data->timeout = timeout * 1000;