Only in asterisk/channels: .#chan_h323.c diff -ur asterisk/channels/chan_h323.c asterisk_new/channels/chan_h323.c --- asterisk/channels/chan_h323.c Wed Apr 27 15:53:46 2005 +++ asterisk_new/channels/chan_h323.c Wed Apr 27 23:54:47 2005 @@ -358,6 +358,7 @@ memset(user, 0, sizeof(struct oh323_user)); strncpy(user->name, name, sizeof(user->name) - 1); user->options.dtmfcodec = 101; + user->dtmfmode = dtmfmode; /* set a native brigding default value */ user->bridge = bridging; /* and default context */ @@ -403,6 +404,15 @@ user->options.progress_audio = ast_true(v->value); } else if (!strcasecmp(v->name, "dtmfcodec")) { user->options.dtmfcodec = atoi(v->value); + } else if (!strcasecmp(v->name, "dtmfmode")) { + if (!strcasecmp(v->value, "inband")) { + user->dtmfmode = H323_DTMF_INBAND; + } else if (!strcasecmp(v->value, "rfc2833")) { + user->dtmfmode = H323_DTMF_RFC2833; + } else { + ast_log(LOG_WARNING, "Unknown DTMF Mode %s, using RFC2833\n", v->value); + user->dtmfmode = H323_DTMF_RFC2833; + } } else if (!strcasecmp(v->name, "host")) { if (!strcasecmp(v->value, "dynamic")) { ast_log(LOG_ERROR, "A dynamic host on a type=user does not make any sense\n"); @@ -474,7 +484,7 @@ peer->addr.sin_family = AF_INET; peer->capability = capability; peer->options.dtmfcodec = 101; - peer->dtmfmode = H323_DTMF_RFC2833; + peer->dtmfmode = dtmfmode; while(v) { if (!strcasecmp(v->name, "bridge")) { @@ -530,7 +540,7 @@ if (format < 1) { ast_log(LOG_WARNING, "Cannot disallow unknown format '%s'\n", v->value); } else { - peer->capability |= ~format; + peer->capability &= ~format; } } else if (!strcasecmp(v->name, "host")) { if (!strcasecmp(v->value, "dynamic")) { @@ -1196,7 +1206,7 @@ } /* Assign default capabilities */ pvt->capability = capability; - pvt->dtmfmode = H323_DTMF_RFC2833; + pvt->dtmfmode = dtmfmode; strncpy(tmp, dest, sizeof(tmp) - 1); host = strchr(tmp, '@'); @@ -1545,6 +1555,14 @@ pvt->amaflags = user->amaflags; } call_options = &user->options; + if (user->dtmfmode) { + pvt->dtmfmode = user->dtmfmode; + if (pvt->dtmfmode & H323_DTMF_RFC2833) { + pvt->nonCodecCapability |= AST_RTP_DTMF; + } else { + pvt->nonCodecCapability &= ~AST_RTP_DTMF; + } + } } } return call_options; @@ -2028,7 +2046,7 @@ ast_verbose(VERBOSE_PREFIX_2 "Setting default context to %s\n", default_context); } else if (!strcasecmp(v->name, "dtmfmode")) { if (!strcasecmp(v->value, "inband")) { - dtmfmode=H323_DTMF_INBAND; + dtmfmode = H323_DTMF_INBAND; } else if (!strcasecmp(v->value, "rfc2833")) { dtmfmode = H323_DTMF_RFC2833; } else { @@ -2064,7 +2082,8 @@ userl.users = user; ast_mutex_unlock(&userl.lock); } - } else if (!strcasecmp(utype, "peer") || !strcasecmp(utype, "friend")) { + } + if (!strcasecmp(utype, "peer") || !strcasecmp(utype, "friend")) { peer = build_peer(cat, ast_variable_browse(cfg, cat)); if (peer) { ast_mutex_lock(&peerl.lock); @@ -2080,7 +2099,7 @@ aliasl.aliases = alias; ast_mutex_unlock(&aliasl.lock); } - } else { + } else if (strcasecmp(utype, "user")) { ast_log(LOG_WARNING, "Unknown type '%s' for '%s' in %s\n", utype, cat, config); } } else {