diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-15 19:52:25 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-15 19:52:25 +0000 |
commit | 08c3aa37921a36fbe430a1afbde1003b2ff27d1f (patch) | |
tree | 891d9938f1362d5609b61dc57f1a2bbaa223a5a6 | |
parent | c44967b62f311bcb49a3d8dd9160052d2b9703ad (diff) |
issue #5751
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7104 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | ChangeLog | 2 | ||||
-rwxr-xr-x | channels/chan_sip.c | 70 |
2 files changed, 38 insertions, 34 deletions
@@ -1,5 +1,7 @@ 2005-11-15 Kevin P. Fleming <kpfleming@limerick.digium.com> + * channels/chan_sip.c (handle_request_info): properly forward 'flash' events received via SIP INFO (issue #5751, different patch) + * apps/app_disa.c (disa_exec): don't duplicate constant strings when not needed * apps/app_playback.c (playback_exec): use correct logic tests for options (issue #5752) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 3c7aef5af..2de41da8e 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -8575,8 +8575,6 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req) { char buf[1024]; unsigned int event; - char resp = 0; - struct ast_frame f; char *c; /* Need to check the media/type */ @@ -8592,42 +8590,46 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req) ast_copy_string(buf, c, sizeof(buf)); } - if (p->owner) { /* PBX call */ - if (!ast_strlen_zero(buf)) { - if (sipdebug) - ast_verbose("* DTMF received: '%c'\n", buf[0]); - if (buf[0] == '*') - event = 10; - else if (buf[0] == '#') - event = 11; - else if ((buf[0] >= 'A') && (buf[0] <= 'D')) - event = 12 + buf[0] - 'A'; - else - 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); - } - /* Build DTMF frame and deliver to PBX for transmission to other call leg*/ - 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); - } + if (!p->owner) { /* not a PBX call */ + transmit_response(p, "481 Call leg/transaction does not exist", req); + ast_set_flag(p, SIP_NEEDDESTROY); + return; + } + + if (ast_strlen_zero(buf)) { transmit_response(p, "200 OK", req); return; + } + + if (sipdebug) + ast_verbose("* DTMF-relay event received: '%c'\n", buf[0]); + if (buf[0] == '*') + event = 10; + else if (buf[0] == '#') + event = 11; + else if ((buf[0] >= 'A') && (buf[0] <= 'D')) + event = 12 + buf[0] - 'A'; + else + event = atoi(buf); + if (event == 16) { + /* send a FLASH event */ + struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_FLASH, }; + ast_queue_frame(p->owner, &f); } else { - transmit_response(p, "481 Call leg/transaction does not exist", req); - ast_set_flag(p, SIP_NEEDDESTROY); + /* send a DTMF event */ + struct ast_frame f = { AST_FRAME_DTMF, }; + if (event < 10) { + f.subclass = '0' + event; + } else if (event < 11) { + f.subclass = '*'; + } else if (event < 12) { + f.subclass = '#'; + } else if (event < 16) { + f.subclass = 'A' + (event - 12); + } + ast_queue_frame(p->owner, &f); } + transmit_response(p, "200 OK", req); return; } else if (!strcasecmp(get_header(req, "Content-Type"), "application/media_control+xml")) { /* Eh, we'll just assume it's a fast picture update for now */ |