summaryrefslogtreecommitdiff
path: root/res/ari/resource_bridges.c
diff options
context:
space:
mode:
Diffstat (limited to 'res/ari/resource_bridges.c')
-rw-r--r--res/ari/resource_bridges.c52
1 files changed, 49 insertions, 3 deletions
diff --git a/res/ari/resource_bridges.c b/res/ari/resource_bridges.c
index a8f2c3c04..418b7c8cb 100644
--- a/res/ari/resource_bridges.c
+++ b/res/ari/resource_bridges.c
@@ -314,7 +314,7 @@ static struct ast_channel *prepare_bridge_media_channel(const char *type)
return NULL;
}
- return ast_request(type, cap, NULL, "ARI", NULL);
+ return ast_request(type, cap, NULL, NULL, "ARI", NULL);
}
void ast_ari_bridges_play(struct ast_variable *headers,
@@ -370,7 +370,7 @@ void ast_ari_bridges_play(struct ast_variable *headers,
playback = stasis_app_control_play_uri(control, args->media, language,
args->bridge_id, STASIS_PLAYBACK_TARGET_BRIDGE, args->skipms,
- args->offsetms);
+ args->offsetms, NULL);
if (!playback) {
ast_ari_response_alloc_failed(response);
@@ -697,7 +697,7 @@ void ast_ari_bridges_create(struct ast_variable *headers,
struct ast_ari_bridges_create_args *args,
struct ast_ari_response *response)
{
- RAII_VAR(struct ast_bridge *, bridge, stasis_app_bridge_create(args->type, args->name), ao2_cleanup);
+ RAII_VAR(struct ast_bridge *, bridge, stasis_app_bridge_create(args->type, args->name, args->bridge_id), ao2_cleanup);
RAII_VAR(struct ast_bridge_snapshot *, snapshot, NULL, ao2_cleanup);
if (!bridge) {
@@ -718,3 +718,49 @@ void ast_ari_bridges_create(struct ast_variable *headers,
ast_ari_response_ok(response,
ast_bridge_snapshot_to_json(snapshot, stasis_app_get_sanitizer()));
}
+
+void ast_ari_bridges_create_or_update_with_id(struct ast_variable *headers,
+ struct ast_ari_bridges_create_or_update_with_id_args *args,
+ struct ast_ari_response *response)
+{
+ RAII_VAR(struct ast_bridge *, bridge, find_bridge(response, args->bridge_id), ao2_cleanup);
+ RAII_VAR(struct ast_bridge_snapshot *, snapshot, NULL, ao2_cleanup);
+
+ if (bridge) {
+ /* update */
+ if (strcmp(args->name, bridge->name)) {
+ ast_ari_response_error(
+ response, 500, "Internal Error",
+ "Changing bridge name is not implemented");
+ return;
+ }
+ if (!ast_strlen_zero(args->type)) {
+ ast_ari_response_error(
+ response, 500, "Internal Error",
+ "Changing bridge type is not implemented");
+ return;
+ }
+ ast_ari_response_ok(response,
+ ast_bridge_snapshot_to_json(snapshot, stasis_app_get_sanitizer()));
+ return;
+ }
+
+ bridge = stasis_app_bridge_create(args->type, args->name, args->bridge_id);
+ if (!bridge) {
+ ast_ari_response_error(
+ response, 500, "Internal Error",
+ "Unable to create bridge");
+ return;
+ }
+
+ snapshot = ast_bridge_snapshot_create(bridge);
+ if (!snapshot) {
+ ast_ari_response_error(
+ response, 500, "Internal Error",
+ "Unable to create snapshot for new bridge");
+ return;
+ }
+
+ ast_ari_response_ok(response,
+ ast_bridge_snapshot_to_json(snapshot, stasis_app_get_sanitizer()));
+}