summaryrefslogtreecommitdiff
path: root/main/bridge.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/bridge.c')
-rw-r--r--main/bridge.c40
1 files changed, 15 insertions, 25 deletions
diff --git a/main/bridge.c b/main/bridge.c
index 9e9e65c17..2e2c87bc6 100644
--- a/main/bridge.c
+++ b/main/bridge.c
@@ -3781,32 +3781,31 @@ static struct ast_channel *get_transferee(struct ao2_container *channels, struct
return transferee;
}
-enum try_parking_result {
- PARKING_SUCCESS,
- PARKING_FAILURE,
- PARKING_NOT_APPLICABLE,
-};
-
-static enum try_parking_result try_parking(struct ast_channel *transferer, const char *exten, const char *context)
+static enum ast_transfer_result try_parking(struct ast_channel *transferer, const char *context, const char *exten)
{
RAII_VAR(struct ast_bridge_channel *, transferer_bridge_channel, NULL, ao2_cleanup);
- struct ast_exten *parking_exten;
+ RAII_VAR(struct ast_parking_bridge_feature_fn_table *, parking_provider,
+ ast_parking_get_bridge_features(),
+ ao2_cleanup);
+
+ if (!parking_provider) {
+ return AST_BRIDGE_TRANSFER_FAIL;
+ }
ast_channel_lock(transferer);
transferer_bridge_channel = ast_channel_get_bridge_channel(transferer);
ast_channel_unlock(transferer);
if (!transferer_bridge_channel) {
- return PARKING_FAILURE;
+ return AST_BRIDGE_TRANSFER_FAIL;
}
- parking_exten = ast_get_parking_exten(exten, NULL, context);
- if (parking_exten) {
- return ast_park_blind_xfer(transferer_bridge_channel, parking_exten) == 0 ?
- PARKING_SUCCESS : PARKING_FAILURE;
+ if (parking_provider->parking_blind_transfer_park(transferer_bridge_channel,
+ context, exten)) {
+ return AST_BRIDGE_TRANSFER_FAIL;
}
- return PARKING_NOT_APPLICABLE;
+ return AST_BRIDGE_TRANSFER_SUCCESS;
}
/*!
@@ -3883,7 +3882,6 @@ enum ast_transfer_result ast_bridge_transfer_blind(int is_external,
RAII_VAR(struct ast_channel *, transferee, NULL, ast_channel_cleanup);
int do_bridge_transfer;
int transfer_prohibited;
- enum try_parking_result parking_result;
enum ast_transfer_result transfer_result;
bridge = acquire_bridge(transferer);
@@ -3902,17 +3900,9 @@ enum ast_transfer_result ast_bridge_transfer_blind(int is_external,
/* Take off hold if they are on hold. */
ast_bridge_channel_write_unhold(bridge_channel);
- parking_result = try_parking(transferer, exten, context);
- switch (parking_result) {
- case PARKING_SUCCESS:
- transfer_result = AST_BRIDGE_TRANSFER_SUCCESS;
- goto publish;
- case PARKING_FAILURE:
- transfer_result = AST_BRIDGE_TRANSFER_FAIL;
+ transfer_result = try_parking(transferer, context, exten);
+ if (transfer_result == AST_BRIDGE_TRANSFER_SUCCESS) {
goto publish;
- case PARKING_NOT_APPLICABLE:
- default:
- break;
}
{