Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (révision 61597) +++ channels/chan_sip.c (copie de travail) @@ -6471,6 +6493,11 @@ if (*e) *e++ = '\0'; e = ast_skip_blanks(e); + if (strcasecmp(e, "Cirpack KeepAlive Packet") == 0) + { + ast_log(LOG_NOTICE, "Cirpack keeplive received."); + return -1; + } if (strcasecmp(e, "SIP/2.0") ) { ast_log(LOG_WARNING, "Bad request protocol %s\n", e); return -1; @@ -10826,6 +10866,40 @@ ast_queue_control(p->owner, AST_CONTROL_VIDUPDATE); transmit_response(p, "200 OK", req); return; + } else if (!strcasecmp(c, "audio/telephone-event")) { + /* IVeS - support for eConf (France Telecom) + * we receive an INFO message containing a DTMF in RCC2833 format + */ + get_msg_text(buf, sizeof(buf), req); + event = buf[0]; + ast_log(LOG_DEBUG, "RTP 2833 in SIP INFO (eConf) raw data Event: %02x %02x %02x %02x\n", buf[0], buf[1], buf[2], buf[3]); + + /* 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)) {