From 8e875bf298c5505f3b74d1ee15c94286e6c24260 Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Thu, 17 May 2012 16:30:50 +0000 Subject: Make the new SIP_CAUSE backend behave more like the original SIP_CAUSE There was a slight discrepancy in the behaviors of the old SIP_CAUSE and the new SIP_CAUSE/HANGUPCAUSE when a channel had been originated and had not yet been answered. This caused the noload_res_srtp_attempt_srtp test to fail since the SIP_CAUSE variable was never actually set. This behavior has been restored. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@366843 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/channel.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'main') diff --git a/main/channel.c b/main/channel.c index e7bfa1d33..469e97bad 100644 --- a/main/channel.c +++ b/main/channel.c @@ -4201,6 +4201,21 @@ static int attribute_const is_visible_indication(enum ast_control_frame_type con return 0; } +/*! \brief Sets the HANGUPCAUSE hash and optionally the SIP_CAUSE hash + * on the given channel */ +static void set_hangupcause_hash(struct ast_channel *chan, const void *data) +{ + char causevar[256]; + const struct ast_control_pvt_cause_code *cause_code = data; + + snprintf(causevar, sizeof(causevar), "HASH(HANGUPCAUSE,%s)", cause_code->chan_name); + ast_func_write(chan, causevar, cause_code->code); + if (cause_code->emulate_sip_cause) { + snprintf(causevar, sizeof(causevar), "HASH(SIP_CAUSE,%s)", cause_code->chan_name); + ast_func_write(chan, causevar, cause_code->code); + } +} + int ast_indicate_data(struct ast_channel *chan, int _condition, const void *data, size_t datalen) { @@ -4346,20 +4361,9 @@ int ast_indicate_data(struct ast_channel *chan, int _condition, ts = ast_get_indication_tone(ast_channel_zone(chan), "congestion"); break; case AST_CONTROL_PVT_CAUSE_CODE: - { - char causevar[256]; - const struct ast_control_pvt_cause_code *cause_code = data; - - snprintf(causevar, sizeof(causevar), "HASH(HANGUPCAUSE,%s)", cause_code->chan_name); - ast_func_write(chan, causevar, cause_code->code); - if (cause_code->emulate_sip_cause) { - snprintf(causevar, sizeof(causevar), "HASH(SIP_CAUSE,%s)", cause_code->chan_name); - ast_func_write(chan, causevar, cause_code->code); - } - + set_hangupcause_hash(chan, data); res = 0; break; - } case AST_CONTROL_PROGRESS: case AST_CONTROL_PROCEEDING: case AST_CONTROL_VIDUPDATE: @@ -5506,8 +5510,11 @@ struct ast_channel *__ast_request_and_dial(const char *type, struct ast_format_c timeout = 0; /* trick to force exit from the while() */ break; - /* Ignore these */ case AST_CONTROL_PVT_CAUSE_CODE: + set_hangupcause_hash(chan, f->data.ptr); + break; + + /* Ignore these */ case AST_CONTROL_PROGRESS: case AST_CONTROL_PROCEEDING: case AST_CONTROL_HOLD: -- cgit v1.2.3