[svn-commits] mmichelson: branch mmichelson/transfer_stasis r392724 - /team/mmichelson/tran...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 24 11:20:56 CDT 2013


Author: mmichelson
Date: Mon Jun 24 11:20:54 2013
New Revision: 392724

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392724
Log:
Switch the blind transfer message to using a bridge blob.


Modified:
    team/mmichelson/transfer_stasis/main/stasis_bridging.c

Modified: team/mmichelson/transfer_stasis/main/stasis_bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/transfer_stasis/main/stasis_bridging.c?view=diff&rev=392724&r1=392723&r2=392724
==============================================================================
--- team/mmichelson/transfer_stasis/main/stasis_bridging.c (original)
+++ team/mmichelson/transfer_stasis/main/stasis_bridging.c Mon Jun 24 11:20:54 2013
@@ -714,14 +714,27 @@
 {
 	RAII_VAR(struct ast_str *, channel_state, NULL, ast_free_ptr);
 	RAII_VAR(struct ast_str *, bridge_state, NULL, ast_free_ptr);
-	struct ast_blind_transfer_message * transfer_msg = stasis_message_data(msg);
-
-	channel_state = ast_manager_build_channel_state_string_prefix(transfer_msg->transferer.channel_snapshot, "Transferer");
-	bridge_state = ast_manager_build_bridge_state_string(transfer_msg->transferer.bridge_snapshot, "");
+	struct ast_bridge_blob *blob = stasis_message_data(msg);
+	const char *exten;
+	const char *context;
+	enum ast_transfer_result result;
+	int is_external;
+
+	if (!blob) {
+		return NULL;
+	}
+
+	channel_state = ast_manager_build_channel_state_string_prefix(blob->channel, "Transferer");
+	bridge_state = ast_manager_build_bridge_state_string(blob->bridge, "");
 
 	if (!channel_state || !bridge_state) {
 		return NULL;
 	}
+
+	exten = ast_json_string_get(ast_json_object_get(blob->blob, "exten"));
+	context = ast_json_string_get(ast_json_object_get(blob->blob, "context"));
+	result = ast_json_integer_get(ast_json_object_get(blob->blob, "result"));
+	is_external = ast_json_integer_get(ast_json_object_get(blob->blob, "is_external"));
 
 	return ast_manager_event_blob_create(EVENT_FLAG_CALL, "BlindTransfer",
 			"Result: %s\r\n"
@@ -730,59 +743,33 @@
 			"IsExternal: %s\r\n"
 			"Context: %s\r\n"
 			"Extension: %s\r\n",
-			result_strs[transfer_msg->result],
+			result_strs[result],
 			ast_str_buffer(channel_state),
 			ast_str_buffer(bridge_state),
-			transfer_msg->is_external ? "Yes" : "No",
-			transfer_msg->context,
-			transfer_msg->exten);
-}
-
-static void blind_transfer_dtor(void *obj)
-{
-	struct ast_blind_transfer_message *msg = obj;
-
-	ast_string_field_free_memory(msg);
-	bridge_channel_snapshot_pair_cleanup(&msg->transferer);
-}
-
-static struct ast_blind_transfer_message *blind_transfer_message_create(int is_external,
-		enum ast_transfer_result result, struct ast_bridge_channel_pair *transferer,
-		const char *context, const char *exten)
-{
-	RAII_VAR(struct ast_blind_transfer_message *, msg, NULL, ao2_cleanup);
-
-	msg = ao2_alloc(sizeof(*msg), blind_transfer_dtor);
-	if (!msg || ast_string_field_init(msg, 32)) {
-		return NULL;
-	}
-
-	if (bridge_channel_snapshot_pair_init(transferer, &msg->transferer)) {
-		return NULL;
-	}
-
-	ast_string_field_set(msg, context, context);
-	ast_string_field_set(msg, exten, exten);
-	msg->is_external = is_external;
-	msg->result = result;
-
-	ao2_ref(msg, +1);
-	return msg;
+			is_external ? "Yes" : "No",
+			context,
+			exten);
 }
 
 void ast_bridge_publish_blind_transfer(int is_external, enum ast_transfer_result result,
 		struct ast_bridge_channel_pair *transferer, const char *context, const char *exten)
 {
-	RAII_VAR(struct ast_blind_transfer_message *, transfer_msg, NULL, ao2_cleanup);
+	RAII_VAR(struct ast_json *, json_object, NULL, ast_json_unref);
 	RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
 
-	transfer_msg = blind_transfer_message_create(is_external, result, transferer, context, exten);
-	if (!transfer_msg) {
-		return;
-	}
-
-	msg = stasis_message_create(ast_blind_transfer_type(), transfer_msg);
-	if (!msg) {
+	json_object = ast_json_pack("{s: s, s: s, s: i, s: i}",
+			"context", context, "exten", exten, "result", result, "is_external", is_external);
+
+	if (!json_object) {
+		ast_log(LOG_NOTICE, "Failed to create json bridge blob\n");
+		return;
+	}
+
+	msg = ast_bridge_blob_create(ast_blind_transfer_type(),
+			transferer->bridge, transferer->channel, json_object);
+
+	if (!msg) {
+		ast_log(LOG_NOTICE, "Failed to create blob msg\n");
 		return;
 	}
 
@@ -1055,20 +1042,20 @@
 static void transfer_cb(void *userdata, struct stasis_subscription *sub,
 		struct stasis_topic *topic, struct stasis_message *msg)
 {
-	struct ast_blind_transfer_message *xfer_msg;
+	struct ast_bridge_blob *blob;
 
 	if (ast_blind_transfer_type() != stasis_message_type(msg)) {
 		/* Don't care about other types of messages for now */
 		return;
 	}
 
-	xfer_msg = stasis_message_data(msg);
-
-	ast_log(LOG_NOTICE, "Blind transfer to %s@%s by %s\n", xfer_msg->exten,
-			xfer_msg->context, xfer_msg->transferer.channel_snapshot->name);
-	if (xfer_msg->result == AST_TRANSFER_SUCCESS) {
+	blob = stasis_message_data(msg);
+
+	ast_log(LOG_NOTICE, "Blind transfer to %s@%s by %s\n", ast_json_string_get(ast_json_object_get(blob->blob, "exten")),
+			ast_json_string_get(ast_json_object_get(blob->blob, "context")), blob->channel->name);
+	if (ast_json_integer_get(ast_json_object_get(blob->blob, "result")) == AST_TRANSFER_SUCCESS) {
 		ast_log(LOG_NOTICE, "Transfer from bridge %s was successful\n",
-				xfer_msg->transferer.bridge_snapshot->uniqueid);
+				blob->bridge->uniqueid);
 	} else {
 		ast_log(LOG_NOTICE, "Transfer was unsuccessful\n");
 	}




More information about the svn-commits mailing list