diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8c2b4bd45e..6e0a6f1c65 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -3857,6 +3857,8 @@ static int sip_show_channel(int fd, int argc, char *argv[]) static void receive_info(struct sip_pvt *p, struct sip_request *req) { char buf[1024] = ""; + unsigned int event; + char resp = 0; struct ast_frame f; char *c; /* Try getting the "signal=" part */ @@ -3872,13 +3874,23 @@ static void receive_info(struct sip_pvt *p, struct sip_request *req) if (strlen(buf)) { if (sipdebug) ast_verbose("DTMF received: '%c'\n", buf[0]); - memset(&f, 0, sizeof(f)); - f.frametype = AST_FRAME_DTMF; - f.subclass = buf[0]; - f.offset = 0; - f.data = NULL; - f.datalen = 0; - ast_queue_frame(p->owner, &f, 0); + event = atoi(buf); + if (event < 10) { + resp = '0' + event; + } else if (event < 11) { + resp = '*'; + } else if (event < 12) { + resp = '#'; + } else if (event < 16) { + resp = 'A' + (event - 12); + } + memset(&f, 0, sizeof(f)); + f.frametype = AST_FRAME_DTMF; + f.subclass = resp; + f.offset = 0; + f.data = NULL; + f.datalen = 0; + ast_queue_frame(p->owner, &f, 0); } } }