aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_h323.c
diff options
context:
space:
mode:
authorpcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-01 19:40:00 +0000
committerpcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-01 19:40:00 +0000
commit4344681c295913454429366af5aecea2c262a54c (patch)
tree16b8f98c212a4e331b253af998194b8d1dc510f0 /channels/chan_h323.c
parentc8183a8a97f6d85771b822a1bb03180c1fc12e0c (diff)
Merged revisions 44135 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r44135 | pcadach | 2006-10-02 01:32:24 +0600 (Пнд, 02 Окт 2006) | 1 line Do not simulate any audio tones if we got PROGRESS message ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@44136 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_h323.c')
-rw-r--r--channels/chan_h323.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/channels/chan_h323.c b/channels/chan_h323.c
index adc0dcd3f..abe68d7da 100644
--- a/channels/chan_h323.c
+++ b/channels/chan_h323.c
@@ -193,6 +193,7 @@ struct oh323_pvt {
int txDtmfDigit; /* DTMF digit being to send to H.323 side */
int noInbandDtmf; /* Inband DTMF processing by DSP isn't available */
int connection_established; /* Call got CONNECT message */
+ int got_progress; /* Call got PROGRESS message, pass inband audio */
struct oh323_pvt *next; /* Next channel in list */
} *iflist = NULL;
@@ -864,9 +865,14 @@ static int oh323_indicate(struct ast_channel *c, int condition, const void *data
struct oh323_pvt *pvt = (struct oh323_pvt *) c->tech_pvt;
char *token = (char *)NULL;
+ int res = -1;
+ int got_progress;
ast_mutex_lock(&pvt->lock);
token = (pvt->cd.call_token ? strdup(pvt->cd.call_token) : NULL);
+ got_progress = pvt->got_progress;
+ if (condition == AST_CONTROL_PROGRESS)
+ pvt->got_progress = 1;
ast_mutex_unlock(&pvt->lock);
if (h323debug)
@@ -876,6 +882,7 @@ static int oh323_indicate(struct ast_channel *c, int condition, const void *data
case AST_CONTROL_RINGING:
if (c->_state == AST_STATE_RING || c->_state == AST_STATE_RINGING) {
h323_send_alerting(token);
+ res = (got_progress ? 0 : -1); /* Do not simulate any audio tones if we got PROGRESS message */
break;
}
if (token)
@@ -883,7 +890,9 @@ static int oh323_indicate(struct ast_channel *c, int condition, const void *data
return -1;
case AST_CONTROL_PROGRESS:
if (c->_state != AST_STATE_UP) {
- h323_send_progress(token);
+ /* Do not send PROGRESS message more than once */
+ if (!got_progress)
+ h323_send_progress(token);
break;
}
if (token)
@@ -944,7 +953,7 @@ static int oh323_indicate(struct ast_channel *c, int condition, const void *data
free(token);
oh323_update_info(c);
- return -1;
+ return res;
}
static int oh323_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)