[svn-commits] kmoore: trunk r420410 - in /trunk: ./ main/stasis_bridges.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Aug 7 15:24:18 CDT 2014


Author: kmoore
Date: Thu Aug  7 15:24:15 2014
New Revision: 420410

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=420410
Log:
Stasis: Ensure transfer messages follow validation rules

This makes Stasis() event generation for transfer messages follow
validation rules. Currently, ast_json_null() is being used in place of
omitting a key entirely which falls afoul of these validation rules.

https://reviewboard.asterisk.org/r/3892/
........

Merged revisions 420408 from http://svn.asterisk.org/svn/asterisk/branches/12

Modified:
    trunk/   (props changed)
    trunk/main/stasis_bridges.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-12-merged' - no diff available.

Modified: trunk/main/stasis_bridges.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/stasis_bridges.c?view=diff&rev=420410&r1=420409&r2=420410
==============================================================================
--- trunk/main/stasis_bridges.c (original)
+++ trunk/main/stasis_bridges.c Thu Aug  7 15:24:15 2014
@@ -636,7 +636,7 @@
 	const struct stasis_message_sanitizer *sanitize)
 {
 	struct ast_blind_transfer_message *transfer_msg = stasis_message_data(msg);
-	struct ast_json *json_transferer, *json_transferee, *out;
+	struct ast_json *json_transferer, *json_transferee = NULL, *out;
 	const struct timeval *tv = stasis_message_timestamp(msg);
 
 	json_transferer = ast_channel_snapshot_to_json(transfer_msg->to_transferee.channel_snapshot, sanitize);
@@ -649,21 +649,23 @@
 		if (!json_transferee) {
 			return NULL;
 		}
-	} else {
-		json_transferee = ast_json_null();
 	}
 
 	out = ast_json_pack("{s: s, s: o, s: o, s: o, s: s, s: s, s: s, s: o}",
 		"type", "BridgeBlindTransfer",
 		"timestamp", ast_json_timeval(*tv, NULL),
 		"transferer", json_transferer,
-		"transferee", json_transferee,
 		"exten", transfer_msg->exten,
 		"context", transfer_msg->context,
 		"result", result_strs[transfer_msg->result],
 		"is_external", ast_json_boolean(transfer_msg->is_external));
 
 	if (!out) {
+		return NULL;
+	}
+
+	if (json_transferee && ast_json_object_set(out, "transferee", json_transferee)) {
+		ast_json_unref(out);
 		return NULL;
 	}
 
@@ -779,7 +781,8 @@
 {
 	struct ast_attended_transfer_message *transfer_msg = stasis_message_data(msg);
 	RAII_VAR(struct ast_json *, out, NULL, ast_json_unref);
-	struct ast_json *json_transferer1, *json_transferer2, *json_bridge, *json_channel, *json_transferee, *json_target;
+	struct ast_json *json_transferer1, *json_transferer2, *json_bridge, *json_channel;
+	struct ast_json *json_transferee = NULL, *json_target = NULL;
 	const struct timeval *tv = stasis_message_timestamp(msg);
 	int res = 0;
 
@@ -796,26 +799,32 @@
 
 	if (transfer_msg->transferee) {
 		json_transferee = ast_channel_snapshot_to_json(transfer_msg->transferee, sanitize);
-	} else {
-		json_transferee = ast_json_null();
+		if (!json_transferee) {
+			return NULL;
+		}
 	}
 
 	if (transfer_msg->target) {
 		json_target = ast_channel_snapshot_to_json(transfer_msg->target, sanitize);
-	} else {
-		json_target = ast_json_null();
-	}
-
-	out = ast_json_pack("{s: s, s: o, s: o, s: o, s: o, s: o, s: s, s: o}",
+		if (!json_target) {
+			return NULL;
+		}
+	}
+
+	out = ast_json_pack("{s: s, s: o, s: o, s: o, s: s, s: o}",
 		"type", "BridgeAttendedTransfer",
 		"timestamp", ast_json_timeval(*tv, NULL),
 		"transferer_first_leg", json_transferer1,
 		"transferer_second_leg", json_transferer2,
-		"transferee", json_transferee,
-		"transfer_target", json_target,
 		"result", result_strs[transfer_msg->result],
 		"is_external", ast_json_boolean(transfer_msg->is_external));
 	if (!out) {
+		return NULL;
+	}
+	if (json_transferee && ast_json_object_set(out, "transferee", json_transferee)) {
+		return NULL;
+	}
+	if (json_target && ast_json_object_set(out, "transfer_target", json_target)) {
 		return NULL;
 	}
 




More information about the svn-commits mailing list