From a3ba55e7c7a725b09317e19ecc863ec7fe68e1b8 Mon Sep 17 00:00:00 2001 From: Richard Mudgett <rmudgett@digium.com> Date: Thu, 28 Jul 2011 17:16:07 +0000 Subject: [PATCH] Merged revisions 330051 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/10 ................ r330051 | rmudgett | 2011-07-28 12:10:37 -0500 (Thu, 28 Jul 2011) | 29 lines Merged revisions 330050 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r330050 | rmudgett | 2011-07-28 12:04:24 -0500 (Thu, 28 Jul 2011) | 22 lines Merged revisions 330033 from https://origsvn.digium.com/svn/asterisk/be/branches/C.3-bier .......... r330033 | rmudgett | 2011-07-28 11:26:38 -0500 (Thu, 28 Jul 2011) | 15 lines Datacalls with B410P fail. Incoming and outgoing call legs of a data call are using different formats: a-law, u-law. When the call is bridged, the media stream is run through translation to convert the media formats. The translation is bad for data calls. * Make incoming call that does not explicitly specify u-law or a-law use the DAHDI channel's default law. The outgoing call always uses the default law from the DAHDI channel. (closes issue ABE-2800) Patches: jira_abe_2800_companding.patch (license #5621) patch uploaded by rmudgett .......... ................ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@330052 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/sig_pri.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/channels/sig_pri.c b/channels/sig_pri.c index 28ff16ff79..f3d2a3800f 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -5334,6 +5334,7 @@ static void *pri_dchannel(void *vpri) int res; int chanpos = 0; int x; + int law; struct ast_channel *c; struct timeval tv, lowest, *next; int doidling=0; @@ -5962,7 +5963,20 @@ static void *pri_dchannel(void *vpri) /* Make sure extension exists (or in overlap dial mode, can exist) */ if (((pri->overlapdial & DAHDI_OVERLAPDIAL_INCOMING) && ast_canmatch_extension(NULL, pri->pvts[chanpos]->context, pri->pvts[chanpos]->exten, 1, pri->pvts[chanpos]->cid_num)) || ast_exists_extension(NULL, pri->pvts[chanpos]->context, pri->pvts[chanpos]->exten, 1, pri->pvts[chanpos]->cid_num)) { - /* Setup law */ + /* Select audio companding mode. */ + switch (e->ring.layer1) { + case PRI_LAYER_1_ALAW: + law = SIG_PRI_ALAW; + break; + case PRI_LAYER_1_ULAW: + law = SIG_PRI_ULAW; + break; + default: + /* This is a data call to us. */ + law = SIG_PRI_DEFLAW; + break; + } + if (e->ring.complete || !(pri->overlapdial & DAHDI_OVERLAPDIAL_INCOMING)) { /* Just announce proceeding */ pri->pvts[chanpos]->call_level = SIG_PRI_CALL_LEVEL_PROCEEDING; @@ -5988,10 +6002,8 @@ static void *pri_dchannel(void *vpri) sig_pri_unlock_private(pri->pvts[chanpos]); ast_mutex_unlock(&pri->lock); c = sig_pri_new_ast_channel(pri->pvts[chanpos], - AST_STATE_RESERVED, - (e->ring.layer1 == PRI_LAYER_1_ALAW) - ? SIG_PRI_ALAW : SIG_PRI_ULAW, - e->ring.ctype, pri->pvts[chanpos]->exten, NULL); + AST_STATE_RESERVED, law, e->ring.ctype, + pri->pvts[chanpos]->exten, NULL); ast_mutex_lock(&pri->lock); sig_pri_lock_private(pri->pvts[chanpos]); if (c) { @@ -6107,9 +6119,7 @@ static void *pri_dchannel(void *vpri) sig_pri_unlock_private(pri->pvts[chanpos]); ast_mutex_unlock(&pri->lock); c = sig_pri_new_ast_channel(pri->pvts[chanpos], - AST_STATE_RING, - (e->ring.layer1 == PRI_LAYER_1_ALAW) - ? SIG_PRI_ALAW : SIG_PRI_ULAW, e->ring.ctype, + AST_STATE_RING, law, e->ring.ctype, pri->pvts[chanpos]->exten, NULL); ast_mutex_lock(&pri->lock); sig_pri_lock_private(pri->pvts[chanpos]); -- GitLab