From 175b9831f23ef97944398d476180682efa3b9a8b Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Sat, 22 Jun 2013 22:42:34 +0000 Subject: [PATCH] Properly extract channel variables for the SendFAX/ReceiveFAX Stasis messages By the time something extracts the pointers from ast_json_pack, the channels will already be disposed of. This patch properly pulls the information out of the variables and packs them into the JSON blob. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@392607 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_fax.c | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/res/res_fax.c b/res/res_fax.c index f3a794ba94..40a43189c6 100644 --- a/res/res_fax.c +++ b/res/res_fax.c @@ -1783,18 +1783,33 @@ static int report_receive_fax_status(struct ast_channel *chan, const char *filen SCOPED_CHANNELLOCK(lock, chan); remote_station_id = S_OR(pbx_builtin_getvar_helper(chan, "REMOTESTATIONID"), ""); + if (!ast_strlen_zero(remote_station_id)) { + remote_station_id = ast_strdupa(remote_station_id); + } local_station_id = S_OR(pbx_builtin_getvar_helper(chan, "LOCALSTATIONID"), ""); + if (!ast_strlen_zero(local_station_id)) { + local_station_id = ast_strdupa(local_station_id); + } fax_pages = S_OR(pbx_builtin_getvar_helper(chan, "FAXPAGES"), ""); + if (!ast_strlen_zero(fax_pages)) { + fax_pages = ast_strdupa(fax_pages); + } fax_resolution = S_OR(pbx_builtin_getvar_helper(chan, "FAXRESOLUTION"), ""); + if (!ast_strlen_zero(fax_resolution)) { + fax_resolution = ast_strdupa(fax_resolution); + } fax_bitrate = S_OR(pbx_builtin_getvar_helper(chan, "FAXBITRATE"), ""); + if (!ast_strlen_zero(fax_bitrate)) { + fax_bitrate = ast_strdupa(fax_bitrate); + } json_object = ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: s, s: O}", "type", "receive", - "remote_station_id", remote_station_id, - "local_station_id", local_station_id, - "fax_pages", fax_pages, - "fax_resolution", fax_resolution, - "fax_bitrate", fax_bitrate, + "remote_station_id", S_OR(remote_station_id, ""), + "local_station_id", S_OR(local_station_id, ""), + "fax_pages", S_OR(fax_pages, ""), + "fax_resolution", S_OR(fax_resolution, ""), + "fax_bitrate", S_OR(fax_bitrate, ""), "filenames", json_array); if (!json_object) { return -1; @@ -2274,18 +2289,33 @@ static int report_send_fax_status(struct ast_channel *chan, struct ast_fax_sessi SCOPED_CHANNELLOCK(lock, chan); remote_station_id = S_OR(pbx_builtin_getvar_helper(chan, "REMOTESTATIONID"), ""); + if (!ast_strlen_zero(remote_station_id)) { + remote_station_id = ast_strdupa(remote_station_id); + } local_station_id = S_OR(pbx_builtin_getvar_helper(chan, "LOCALSTATIONID"), ""); + if (!ast_strlen_zero(local_station_id)) { + local_station_id = ast_strdupa(local_station_id); + } fax_pages = S_OR(pbx_builtin_getvar_helper(chan, "FAXPAGES"), ""); + if (!ast_strlen_zero(fax_pages)) { + fax_pages = ast_strdupa(fax_pages); + } fax_resolution = S_OR(pbx_builtin_getvar_helper(chan, "FAXRESOLUTION"), ""); + if (!ast_strlen_zero(fax_resolution)) { + fax_resolution = ast_strdupa(fax_resolution); + } fax_bitrate = S_OR(pbx_builtin_getvar_helper(chan, "FAXBITRATE"), ""); + if (!ast_strlen_zero(fax_bitrate)) { + fax_bitrate = ast_strdupa(fax_bitrate); + } json_obj = ast_json_pack("{s: s, s: s, s: s, s: s, s: s, s: s, s: o}", "type", "send" - "remote_station_id", remote_station_id, - "local_station_id", local_station_id, - "fax_pages", fax_pages, - "fax_resolution", fax_resolution, - "fax_bitrate", fax_bitrate, + "remote_station_id", S_OR(remote_station_id, ""), + "local_station_id", S_OR(local_station_id, ""), + "fax_pages", S_OR(fax_pages, ""), + "fax_resolution", S_OR(fax_resolution, ""), + "fax_bitrate", S_OR(fax_bitrate, ""), "filenames", json_filenames); if (!json_obj) { return -1;