From: Kevin P. Fleming Date: Mon, 6 Jul 2009 13:38:29 +0000 (+0000) Subject: Improve handling of AST_CONTROL_T38 and AST_CONTROL_T38_PARAMETERS for non-T.38-capab... X-Git-Tag: 11.0.0-beta1~4544 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8b878c8303977655a583376ff9af881e8c2bdddc;p=thirdparty%2Fasterisk.git Improve handling of AST_CONTROL_T38 and AST_CONTROL_T38_PARAMETERS for non-T.38-capable channels. This change allows applications that request T.38 negotiation on a channel that does not support it to get the proper indication that it is not supported, rather than thinking that negotiation was started when it was not. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@204948 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/channel.c b/main/channel.c index b04dcd0b04..da7d3ac62b 100644 --- a/main/channel.c +++ b/main/channel.c @@ -3548,6 +3548,7 @@ int ast_indicate_data(struct ast_channel *chan, int _condition, default: break; } + if (chan->tech->indicate) { /* See if the channel driver can handle this condition. */ res = chan->tech->indicate(chan, condition, data, datalen); @@ -3557,7 +3558,7 @@ int ast_indicate_data(struct ast_channel *chan, int _condition, ast_channel_unlock(chan); - if (chan->tech->indicate && !res) { + if (!res) { /* The channel driver successfully handled this indication */ if (is_visible_indication(condition)) { chan->visible_indication = condition; @@ -3579,6 +3580,15 @@ int ast_indicate_data(struct ast_channel *chan, int _condition, /* Handle conditions that we have tones for. */ switch (condition) { + case AST_CONTROL_T38: + case AST_CONTROL_T38_PARAMETERS: + /* there is no way to provide 'default' behavior for these + * control frames, so we need to return failure, but there + * is also no value in the log message below being emitted + * since failure to handle these frames is not an 'error' + * so just return right now. + */ + return -1; case AST_CONTROL_RINGING: ts = ast_get_indication_tone(chan->zone, "ring"); /* It is common practice for channel drivers to return -1 if trying @@ -3614,11 +3624,9 @@ int ast_indicate_data(struct ast_channel *chan, int _condition, case AST_CONTROL_RING: case AST_CONTROL_HOLD: case AST_CONTROL_UNHOLD: - case AST_CONTROL_T38: case AST_CONTROL_TRANSFER: case AST_CONTROL_CONNECTED_LINE: case AST_CONTROL_REDIRECTING: - case AST_CONTROL_T38_PARAMETERS: /* Nothing left to do for these. */ res = 0; break;