[Freeswitch-svn] [commit] r3325 - freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference
Freeswitch SVN
knhor at freeswitch.org
Sat Nov 11 23:54:13 EST 2006
Author: knhor
Date: Sat Nov 11 23:54:12 2006
New Revision: 3325
Modified:
freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c
Log:
better invalid caller control config entry handling. do not populate default handlers if there are config entries in the profile.
Modified: freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c (original)
+++ freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c Sat Nov 11 23:54:12 2006
@@ -3447,7 +3447,6 @@
conference->interval = interval;
if(switch_ivr_digit_stream_parser_new(conference->pool,&conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) {
- int i;
struct _ccds {
char *key;
char *digits;
@@ -3467,29 +3466,38 @@
{"hangup", "#", CALLER_CONTROL_HANGUP},
};
int ccds_qty = sizeof(ccds)/sizeof(ccds[0]);
+ int i;
- // set the default control handler strings
- for(i=0,status=SWITCH_STATUS_SUCCESS; status == SWITCH_STATUS_SUCCESS && i<ccds_qty; i++) {
- status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,ccds[i].digits,ccds[i].action);
+ // count the number of caller control definitons in the profile
+ for (i=0,xml_kvp = switch_xml_child(profile, "control"); xml_kvp; xml_kvp = xml_kvp->next) {
+ i++;
}
+ // map in the default control handler strings only if the profile has no caller control definitions
+ if (i == 0) {
+ for(i=0,status=SWITCH_STATUS_SUCCESS; status == SWITCH_STATUS_SUCCESS && i<ccds_qty; i++) {
+ status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,ccds[i].digits,ccds[i].action);
+ }
+ }
// parse the profile tree for caller control digit strings
for (xml_kvp = switch_xml_child(profile, "control"); xml_kvp; xml_kvp = xml_kvp->next) {
- char *key = (char *) switch_xml_attr_soft(xml_kvp, "action");
- char *val = (char *) switch_xml_attr_soft(xml_kvp, "digits");
+ char *key = (char *) switch_xml_attr(xml_kvp, "action");
+ char *val = (char *) switch_xml_attr(xml_kvp, "digits");
- if(key != NULL && val != NULL) {
+ if(key != NULL && val != NULL && *key && *val) {
// scan through all of the valid actions, and if found,
// set the new caller control action digit string, then
// stop scanning the table, and go to the next xml kvp.
for(i=0,status=SWITCH_STATUS_NOOP; i<ccds_qty && status == SWITCH_STATUS_NOOP; i++) {
if(strcasecmp(ccds[i].key,key) == 0) {
- status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,ccds[i].key,ccds[i].action);
+ status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,val,ccds[i].action);
}
}
if(status == SWITCH_STATUS_NOOP) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid caller control action name '%'.\n",key);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid caller control action name '%s'.\n",key);
}
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invalid caller control config entry pair action='%s' digits='%s'\n",key,val);
}
}
} else {
More information about the Freeswitch-svn
mailing list