summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorMartin Pycko <martinp@digium.com>2003-06-05 21:13:12 +0000
committerMartin Pycko <martinp@digium.com>2003-06-05 21:13:12 +0000
commitf08922f6b71ad7daa86b38358084ca6e08439783 (patch)
tree79f9239084e383c4567f133cbf7325a48bf696e0 /channels
parent71633c9523aa559a606d538563e703c8592c3bd0 (diff)
Add support for handling INFORMATION messages carying more than one digit
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1076 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_zap.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index 889f71ca5..1c1e95838 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -5615,7 +5615,13 @@ static void *pri_dchannel(void *vpri)
}
/* Get called number */
else if (strlen(e->ring.callednum)) {
- strncpy(pri->pvt[chan]->exten, e->ring.callednum, sizeof(pri->pvt[chan]->exten)-1);
+#ifndef PRI_COPY_DIGITS_CALLED_NUMBER
+#error Please update the libpri package
+#endif
+ if (e->e==PRI_EVENT_RING)
+ strncpy(pri->pvt[chan]->exten, e->ring.callednum, sizeof(pri->pvt[chan]->exten)-1);
+ else
+ strncat(pri->pvt[chan]->exten, e->ring.callednum, sizeof(pri->pvt[chan]->exten)-1);
}
#if 0
else
@@ -5626,12 +5632,20 @@ static void *pri_dchannel(void *vpri)
/* queue DTMF frame if the PBX for this call was already started (we're forwarding INFORMATION further on */
if (pri->overlapdial && pri->pvt[chan]->call==e->ring.call && pri->pvt[chan]->owner) {
/* how to do that */
- char digit = e->ring.callednum[strlen(e->ring.callednum)-1];
- struct ast_frame f = { AST_FRAME_DTMF, digit, };
+ int digitlen = strlen(e->ring.callednum);
+ char digit;
+ int i;
/* make sure that we store the right number in CDR */
if (pri->pvt[chan]->owner->cdr)
- strncat(pri->pvt[chan]->owner->cdr->dst,&digit,1);
- ast_queue_frame(pri->pvt[chan]->owner, &f, 0);
+ strncat(pri->pvt[chan]->owner->cdr->dst,e->ring.callednum,digitlen);
+
+ for (i=0; i<digitlen; i++) {
+ digit = e->ring.callednum[i];
+ {
+ struct ast_frame f = { AST_FRAME_DTMF, digit, };
+ ast_queue_frame(pri->pvt[chan]->owner, &f, 0);
+ }
+ }
}
/* Make sure extension exists */
/* If extensions is empty then make sure we send later on SETUP_ACKNOWLEDGE to get digits in overlap mode */