[svn-commits] kmoore: branch kmoore/stasis-bridging_events-rework r390429 - in /team/kmoore...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jun 4 13:37:18 CDT 2013


Author: kmoore
Date: Tue Jun  4 13:37:16 2013
New Revision: 390429

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=390429
Log:
Address David's comments

Modified:
    team/kmoore/stasis-bridging_events-rework/include/asterisk/stasis_app.h
    team/kmoore/stasis-bridging_events-rework/res/res_stasis.c
    team/kmoore/stasis-bridging_events-rework/res/stasis_http/resource_bridges.c

Modified: team/kmoore/stasis-bridging_events-rework/include/asterisk/stasis_app.h
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/stasis-bridging_events-rework/include/asterisk/stasis_app.h?view=diff&rev=390429&r1=390428&r2=390429
==============================================================================
--- team/kmoore/stasis-bridging_events-rework/include/asterisk/stasis_app.h (original)
+++ team/kmoore/stasis-bridging_events-rework/include/asterisk/stasis_app.h Tue Jun  4 13:37:16 2013
@@ -199,7 +199,7 @@
 /*!
  * \brief Returns the bridge with the given id.
  * \param bridge_id Uniqueid of the bridge.
- * \return NULL bridge not in Stasis application, or bridge does not exist.
+ * \return NULL bridge not created by a Stasis application, or bridge does not exist.
  * \return Pointer to bridge.
  */
 struct ast_bridge *stasis_app_bridge_find_by_id(

Modified: team/kmoore/stasis-bridging_events-rework/res/res_stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/stasis-bridging_events-rework/res/res_stasis.c?view=diff&rev=390429&r1=390428&r2=390429
==============================================================================
--- team/kmoore/stasis-bridging_events-rework/res/res_stasis.c (original)
+++ team/kmoore/stasis-bridging_events-rework/res/res_stasis.c Tue Jun  4 13:37:16 2013
@@ -413,20 +413,19 @@
 struct ast_bridge *stasis_app_bridge_create(const char *type)
 {
 	struct ast_bridge *bridge;
-	int flags;
-	if (ast_strlen_zero(type)) {
-		flags = AST_BRIDGE_CAPABILITY_MULTIMIX;
-	} else if (!strcmp(type, "two-party")) {
-		flags = AST_BRIDGE_CAPABILITY_1TO1MIX;
-	} else if (!strcmp(type, "multi-party")) {
-		flags = AST_BRIDGE_CAPABILITY_MULTIMIX;
+	int capabilities, flags = 0;
+	if (ast_strlen_zero(type) || !strcmp(type, "mixing")) {
+		capabilities = AST_BRIDGE_CAPABILITY_1TO1MIX |
+			AST_BRIDGE_CAPABILITY_MULTIMIX |
+			AST_BRIDGE_CAPABILITY_NATIVE;
+		flags = AST_BRIDGE_FLAG_SMART;
 	} else if (!strcmp(type, "holding")) {
-		flags = AST_BRIDGE_CAPABILITY_HOLDING;
+		capabilities = AST_BRIDGE_CAPABILITY_HOLDING;
 	} else {
 		return NULL;
 	}
 
-	bridge = ast_bridge_base_new(flags, 0);
+	bridge = ast_bridge_base_new(capabilities, flags);
 	if (bridge) {
 		ao2_link(app_bridges, bridge);
 	}

Modified: team/kmoore/stasis-bridging_events-rework/res/stasis_http/resource_bridges.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/stasis-bridging_events-rework/res/stasis_http/resource_bridges.c?view=diff&rev=390429&r1=390428&r2=390429
==============================================================================
--- team/kmoore/stasis-bridging_events-rework/res/stasis_http/resource_bridges.c (original)
+++ team/kmoore/stasis-bridging_events-rework/res/stasis_http/resource_bridges.c Tue Jun  4 13:37:16 2013
@@ -57,6 +57,14 @@
 
 	bridge = stasis_app_bridge_find_by_id(bridge_id);
 	if (bridge == NULL) {
+		RAII_VAR(struct ast_bridge_snapshot *, snapshot,
+			ast_bridge_snapshot_get_latest(bridge_id), ao2_cleanup);
+		if (!snapshot) {
+			stasis_http_response_error(response, 404, "Not found",
+				"Bridge not found");
+			return NULL;
+		}
+
 		stasis_http_response_error(response, 409, "Conflict",
 			"Bridge not in Stasis application");
 		return NULL;
@@ -84,16 +92,7 @@
 
 	control = stasis_app_control_find_by_channel_id(channel_id);
 	if (control == NULL) {
-		/* Distinguish between 404 and 409 errors */
-		RAII_VAR(struct ast_channel *, chan, NULL, ao2_cleanup);
-		chan = ast_channel_get_by_name(channel_id);
-		if (chan == NULL) {
-			stasis_http_response_error(response, 404, "Not Found",
-				"Channel not found");
-			return NULL;
-		}
-
-		stasis_http_response_error(response, 409, "Conflict",
+		stasis_http_response_error(response, 422, "Unprocessable Entity",
 			"Channel not in Stasis application");
 		return NULL;
 	}
@@ -106,7 +105,6 @@
 {
 	RAII_VAR(struct ast_bridge *, bridge, find_bridge(response, args->bridge_id), ao2_cleanup);
 	RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
-	struct ast_channel *channel;
 	if (!bridge) {
 		return;
 	}
@@ -116,13 +114,6 @@
 		return;
 	}
 
-	channel = ast_channel_get_by_name(args->channel);
-	if (!channel) {
-		stasis_http_response_error(response, 404, "Not Found",
-			"Could not acquire channel structure");
-		return;
-	}
-
 	stasis_app_control_add_channel_to_bridge(control, bridge);
 	stasis_http_response_no_content(response);
 }
@@ -131,7 +122,6 @@
 {
 	RAII_VAR(struct ast_bridge *, bridge, find_bridge(response, args->bridge_id), ao2_cleanup);
 	RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
-	struct ast_channel *channel;
 	if (!bridge) {
 		return;
 	}
@@ -141,14 +131,10 @@
 		return;
 	}
 
-	/* channel reference is consumed by the remove channel call */
-	channel = ast_channel_get_by_name(args->channel);
-	if (!channel) {
-		stasis_http_response_error(response, 404, "Not Found",
-			"Could not acquire channel structure");
-		return;
-	}
-
+	/* BUGBUG this should make sure the bridge requested for removal is actually
+	 * the bridge the channel is in. This will be possible once the bridge uniqueid
+	 * is added to the channel snapshot. A 409 response should be issued if the bridge
+	 * uniqueids don't match */
 	if (stasis_app_control_remove_channel_from_bridge(control, bridge)) {
 		stasis_http_response_error(response, 500, "Internal Error",
 			"Could not remove channel from bridge");
@@ -242,21 +228,14 @@
 		return;
 	}
 
-	snapshot = ast_bridge_snapshot_get_latest(bridge->uniqueid);
-	if (snapshot) {
-		stasis_http_response_ok(response,
-			ast_bridge_snapshot_to_json(snapshot));
-		return;
-	}
-
 	snapshot = ast_bridge_snapshot_create(bridge);
-	if (snapshot) {
-		stasis_http_response_ok(response,
-			ast_bridge_snapshot_to_json(snapshot));
-		return;
-	}
-
-	stasis_http_response_error(
-		response, 500, "Internal Error",
-		"Unable to get snapshot for new bridge");
-}
+	if (!snapshot) {
+		stasis_http_response_error(
+			response, 500, "Internal Error",
+			"Unable to create snapshot for new bridge");
+		return;
+	}
+
+	stasis_http_response_ok(response,
+		ast_bridge_snapshot_to_json(snapshot));
+}




More information about the svn-commits mailing list