diff options
Diffstat (limited to 'res')
-rw-r--r-- | res/ari/ari_model_validators.c | 9 | ||||
-rw-r--r-- | res/ari/ari_model_validators.h | 1 | ||||
-rw-r--r-- | res/stasis/app.c | 31 |
3 files changed, 28 insertions, 13 deletions
diff --git a/res/ari/ari_model_validators.c b/res/ari/ari_model_validators.c index be1a244df..06c3cf7ee 100644 --- a/res/ari/ari_model_validators.c +++ b/res/ari/ari_model_validators.c @@ -2062,6 +2062,15 @@ int ast_ari_validate_bridge_blind_transfer(struct ast_json *json) res = 0; } } else + if (strcmp("replace_channel", ast_json_object_iter_key(iter)) == 0) { + int prop_is_valid; + prop_is_valid = ast_ari_validate_channel( + ast_json_object_iter_value(iter)); + if (!prop_is_valid) { + ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field replace_channel failed validation\n"); + res = 0; + } + } else if (strcmp("result", ast_json_object_iter_key(iter)) == 0) { int prop_is_valid; has_result = 1; diff --git a/res/ari/ari_model_validators.h b/res/ari/ari_model_validators.h index 64dd1b071..3a0bdb94a 100644 --- a/res/ari/ari_model_validators.h +++ b/res/ari/ari_model_validators.h @@ -1304,6 +1304,7 @@ ari_validator ast_ari_validate_application_fn(void); * - context: string (required) * - exten: string (required) * - is_external: boolean (required) + * - replace_channel: Channel * - result: string (required) * - transferee: Channel * BridgeCreated diff --git a/res/stasis/app.c b/res/stasis/app.c index 245936734..9440cf1bd 100644 --- a/res/stasis/app.c +++ b/res/stasis/app.c @@ -696,19 +696,6 @@ static int bridge_app_subscribed_involved(struct stasis_app *app, struct ast_bri return subscribed; } -static void bridge_blind_transfer_handler(void *data, struct stasis_subscription *sub, - struct stasis_message *message) -{ - struct stasis_app *app = data; - struct ast_blind_transfer_message *transfer_msg = stasis_message_data(message); - struct ast_bridge_snapshot *bridge = transfer_msg->to_transferee.bridge_snapshot; - - if (bridge_app_subscribed(app, transfer_msg->to_transferee.channel_snapshot->uniqueid) || - (bridge && bridge_app_subscribed_involved(app, bridge))) { - stasis_publish(app->topic, message); - } -} - static void set_replacement_channel(struct ast_channel_snapshot *to_be_replaced, struct ast_channel_snapshot *replacing) { @@ -726,6 +713,24 @@ static void set_replacement_channel(struct ast_channel_snapshot *to_be_replaced, ao2_cleanup(control); } +static void bridge_blind_transfer_handler(void *data, struct stasis_subscription *sub, + struct stasis_message *message) +{ + struct stasis_app *app = data; + struct ast_blind_transfer_message *transfer_msg = stasis_message_data(message); + struct ast_bridge_snapshot *bridge = transfer_msg->to_transferee.bridge_snapshot; + + if (transfer_msg->replace_channel) { + set_replacement_channel(transfer_msg->to_transferee.channel_snapshot, + transfer_msg->replace_channel); + } + + if (bridge_app_subscribed(app, transfer_msg->to_transferee.channel_snapshot->uniqueid) || + (bridge && bridge_app_subscribed_involved(app, bridge))) { + stasis_publish(app->topic, message); + } +} + static void bridge_attended_transfer_handler(void *data, struct stasis_subscription *sub, struct stasis_message *message) { |