[svn-commits] kmoore: branch 12 r420408 - /branches/12/main/stasis_bridges.c
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Aug 7 15:23:34 CDT 2014
Author: kmoore
Date: Thu Aug 7 15:23:30 2014
New Revision: 420408
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=420408
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/
Modified:
branches/12/main/stasis_bridges.c
Modified: branches/12/main/stasis_bridges.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/main/stasis_bridges.c?view=diff&rev=420408&r1=420407&r2=420408
==============================================================================
--- branches/12/main/stasis_bridges.c (original)
+++ branches/12/main/stasis_bridges.c Thu Aug 7 15:23:30 2014
@@ -624,7 +624,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);
@@ -637,21 +637,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;
}
@@ -767,7 +769,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;
@@ -784,26 +787,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