[commit] r3351 - freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference
Author: knhor Date: Mon Nov 13 20:36:51 2006 New Revision: 3351 Modified: freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c Log: rescope the default caller control digits table. use pointers to the default caller control actions instead of casting to/from int when passing through switch_ivr_digit_stream_parser_xxx 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 Mon Nov 13 20:36:51 2006 @@ -72,6 +72,26 @@ CALLER_CONTROL_HANGUP, } caller_control_t; +static struct _caller_control_actions_struct { + char *key; + char *default_digits; + caller_control_t action; +} caller_control_actions[] = { + {"mute", "0", CALLER_CONTROL_MUTE}, + {"deaf mute", "*", CALLER_CONTROL_DEAF_MUTE}, + {"energy up", "9", CALLER_CONTROL_ENERGY_UP}, + {"energy equ", "8", CALLER_CONTROL_ENERGY_EQU_CONFERENCE}, + {"energy dn", "7", CALLER_CONTROL_ENERGEY_DN}, + {"vol talk up", "3", CALLER_CONTROL_VOL_TALK_UP}, + {"vol talk zero", "2", CALLER_CONTROL_VOL_TALK_ZERO}, + {"vol talk dn", "1", CALLER_CONTROL_VOL_TALK_DN}, + {"vol listen up", "6", CALLER_CONTROL_VOL_LISTEN_UP}, + {"vol listen zero", "5", CALLER_CONTROL_VOL_LISTEN_ZERO}, + {"vol listen dn", "4", CALLER_CONTROL_VOL_LISTEN_DN}, + {"hangup", "#", CALLER_CONTROL_HANGUP}, +}; +#define CALLER_CONTROL_ACTIONS_QTY (sizeof(caller_control_actions)/sizeof(caller_control_actions[0])) + /* Global Values */ static struct { switch_memory_pool_t *conference_pool; @@ -1019,46 +1039,50 @@ if(member->conference->dtmf_parser != NULL) { for (digit = dtmf; *digit; digit++) { - switch((int)switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, *digit)) { - case CALLER_CONTROL_NOEVENT: - // the digit string collected so far has not been recognized + int *action = (int *)switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, *digit); + + if (action != NULL) { + switch(*action) { + case CALLER_CONTROL_NOEVENT: + // the digit string collected so far has not been recognized + break; + case CALLER_CONTROL_MUTE: + conference_loop_fn_mute_toggle(member); + break; + case CALLER_CONTROL_DEAF_MUTE: + conference_loop_fn_deafmute_toggle(member); + break; + case CALLER_CONTROL_ENERGY_UP: + conference_loop_fn_energy_up(member); + break; + case CALLER_CONTROL_ENERGY_EQU_CONFERENCE: + conference_loop_fn_energy_equ_conference(member); + break; + case CALLER_CONTROL_ENERGEY_DN: + conference_loop_fn_energy_dn(member); + break; + case CALLER_CONTROL_VOL_TALK_UP: + conference_loop_fn_volume_talk_up(member); + break; + case CALLER_CONTROL_VOL_TALK_ZERO: + conference_loop_fn_volume_talk_zero(member); + break; + case CALLER_CONTROL_VOL_TALK_DN: + conference_loop_fn_volume_talk_dn(member); + break; + case CALLER_CONTROL_VOL_LISTEN_UP: + conference_loop_fn_volume_listen_up(member); + break; + case CALLER_CONTROL_VOL_LISTEN_ZERO: + conference_loop_fn_volume_listen_zero(member); + break; + case CALLER_CONTROL_VOL_LISTEN_DN: + conference_loop_fn_volume_listen_dn(member); + break; + case CALLER_CONTROL_HANGUP: + conference_loop_fn_hangup(member); break; - case CALLER_CONTROL_MUTE: - conference_loop_fn_mute_toggle(member); - break; - case CALLER_CONTROL_DEAF_MUTE: - conference_loop_fn_deafmute_toggle(member); - break; - case CALLER_CONTROL_ENERGY_UP: - conference_loop_fn_energy_up(member); - break; - case CALLER_CONTROL_ENERGY_EQU_CONFERENCE: - conference_loop_fn_energy_equ_conference(member); - break; - case CALLER_CONTROL_ENERGEY_DN: - conference_loop_fn_energy_dn(member); - break; - case CALLER_CONTROL_VOL_TALK_UP: - conference_loop_fn_volume_talk_up(member); - break; - case CALLER_CONTROL_VOL_TALK_ZERO: - conference_loop_fn_volume_talk_zero(member); - break; - case CALLER_CONTROL_VOL_TALK_DN: - conference_loop_fn_volume_talk_dn(member); - break; - case CALLER_CONTROL_VOL_LISTEN_UP: - conference_loop_fn_volume_listen_up(member); - break; - case CALLER_CONTROL_VOL_LISTEN_ZERO: - conference_loop_fn_volume_listen_zero(member); - break; - case CALLER_CONTROL_VOL_LISTEN_DN: - conference_loop_fn_volume_listen_dn(member); - break; - case CALLER_CONTROL_HANGUP: - conference_loop_fn_hangup(member); - break; + } } } } @@ -3447,25 +3471,6 @@ conference->interval = interval; if(switch_ivr_digit_stream_parser_new(conference->pool,&conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) { - struct _ccds { - char *key; - char *digits; - caller_control_t action; - } ccds[] = { - {"mute", "0", CALLER_CONTROL_MUTE}, - {"deaf mute", "*", CALLER_CONTROL_DEAF_MUTE}, - {"energy up", "9", CALLER_CONTROL_ENERGY_UP}, - {"energy equ", "8", CALLER_CONTROL_ENERGY_EQU_CONFERENCE}, - {"energy dn", "7", CALLER_CONTROL_ENERGEY_DN}, - {"vol talk up", "3", CALLER_CONTROL_VOL_TALK_UP}, - {"vol talk zero", "2", CALLER_CONTROL_VOL_TALK_ZERO}, - {"vol talk dn", "1", CALLER_CONTROL_VOL_TALK_DN}, - {"vol listen up", "6", CALLER_CONTROL_VOL_LISTEN_UP}, - {"vol listen zero", "5", CALLER_CONTROL_VOL_LISTEN_ZERO}, - {"vol listen dn", "4", CALLER_CONTROL_VOL_LISTEN_DN}, - {"hangup", "#", CALLER_CONTROL_HANGUP}, - }; - int ccds_qty = sizeof(ccds)/sizeof(ccds[0]); int i; // count the number of caller control definitons in the profile @@ -3474,8 +3479,10 @@ } // 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,(void *)ccds[i].action); + for(i=0,status=SWITCH_STATUS_SUCCESS; status == SWITCH_STATUS_SUCCESS && i<CALLER_CONTROL_ACTIONS_QTY; i++) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Installing default caller control action name '%s' bound to '%s' digits.\n", + caller_control_actions[i].key,caller_control_actions[i].default_digits); + status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,caller_control_actions[i].default_digits,(void *)&(caller_control_actions[i].action)); } } @@ -3488,9 +3495,10 @@ // 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,val,(void *)ccds[i].action); + for(i=0,status=SWITCH_STATUS_NOOP; i<CALLER_CONTROL_ACTIONS_QTY && status == SWITCH_STATUS_NOOP; i++) { + if(strcasecmp(caller_control_actions[i].key,key) == 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Installing caller control action name '%s' bound to '%s' digits.\n",key,val); + status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,val,(void *)&caller_control_actions[i].action); } } if(status == SWITCH_STATUS_NOOP) {
participants (1)
-
Freeswitch SVN