--- ../asterisk-1.4.4/channels/chan_sip.c 2007-04-27 16:04:07.000000000 +0200 +++ channels/chan_sip.c 2007-05-29 16:47:47.000000000 +0200 @@ -6474,6 +6564,11 @@ if (*e) *e++ = '\0'; e = ast_skip_blanks(e); + if (strcasecmp(e, "Cirpack KeepAlive Packet") == 0) + { + ast_log(LOG_NOTICE, "Cirpack keepalive received."); + return -1; + } if (strcasecmp(e, "SIP/2.0") ) { ast_log(LOG_WARNING, "Bad request protocol %s\n", e); return -1; @@ -10831,6 +10939,32 @@ ast_queue_control(p->owner, AST_CONTROL_VIDUPDATE); transmit_response(p, "200 OK", req); return; + } else if (!strcasecmp(c, "audio/telephone-event")) { + /* Support for eConf (France Telecom) we receive an INFO message containing a DTMF in RFC2833 format */ + get_msg_text(buf, sizeof(buf), req); + event = buf[0]; + + /* Print out debug if turned on */ + if (sipdebug) + ast_log(LOG_DEBUG, "RTP 2833 in SIP INFO (eConf) Event: %08x \n", event); + + /* Figure out what digit was pressed */ + 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); + } + else if (event < 17) { /* Event 16: Hook flash */ + f.subclass = 'X'; + } + + //f.len = duration; + f.len = 220 ; + ast_queue_frame(p->owner, &f); + if (sipdebug) + ast_verbose("* DTMF telephone event received: %c\n", f.subclass); + + transmit_response(p, "200 OK", req); + return; } else if (!ast_strlen_zero(c = get_header(req, "X-ClientCode"))) { /* Client code (from SNOM phone) */ if (ast_test_flag(&p->flags[0], SIP_USECLIENTCODE)) {