[commit] r3254 - freeswitch/branches/knhor/wip/mod_conference
Author: knhor Date: Wed Nov 1 23:16:06 2006 New Revision: 3254 Modified: freeswitch/branches/knhor/wip/mod_conference/mod_conference.c Log: make caller dtmf control digits configurable in the conference profile Modified: freeswitch/branches/knhor/wip/mod_conference/mod_conference.c ============================================================================== --- freeswitch/branches/knhor/wip/mod_conference/mod_conference.c (original) +++ freeswitch/branches/knhor/wip/mod_conference/mod_conference.c Wed Nov 1 23:16:06 2006 @@ -126,6 +126,7 @@ char *kicked_sound; char *caller_id_name; char *caller_id_number; + char *caller_dtmf_control; char *pin; char *pin_sound; char *bad_pin_sound; @@ -1015,47 +1016,55 @@ if (switch_channel_has_dtmf(channel)) { switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); + char *pcontroldigit; for (digit = dtmf; *digit; digit++) { - switch(*digit) { - case '0': - conference_loop_fn_mute_toggle(member); - break; - case '*': - conference_loop_fn_deafmute_toggle(member); - break; - case '9': - conference_loop_fn_energy_up(member); - break; - case '8': - conference_loop_fn_energy_equ_conference(member); - break; - case '7': - conference_loop_fn_energy_dn(member); - break; - case '3': - conference_loop_fn_volume_talk_up(member); - break; - case '2': - conference_loop_fn_volume_talk_zero(member); - break; - case '1': - conference_loop_fn_volume_talk_dn(member); - break; - case '6': - conference_loop_fn_volume_listen_up(member); - break; - case '5': - conference_loop_fn_volume_listen_zero(member); - break; - case '4': - conference_loop_fn_volume_listen_dn(member); - break; - case '#': - conference_loop_fn_hangup(member); - break; - default: - break; + // The position of the dialed digit in the control string + // determines the operation that is being requested + // To disable the function for the user, make the control + // string digit something that can't be dialed... ie. a space + // The control string should have at least 11 characters in it + pcontroldigit = strchr(member->conference->caller_dtmf_control,*digit); + + if(pcontroldigit != NULL) { + switch(pcontroldigit-member->conference->caller_dtmf_control) { + case 0: + conference_loop_fn_mute_toggle(member); + break; + case 1: + conference_loop_fn_deafmute_toggle(member); + break; + case 2: + conference_loop_fn_energy_up(member); + break; + case 3: + conference_loop_fn_energy_equ_conference(member); + break; + case 4: + conference_loop_fn_energy_dn(member); + break; + case 5: + conference_loop_fn_volume_talk_up(member); + break; + case 6: + conference_loop_fn_volume_talk_zero(member); + break; + case 7: + conference_loop_fn_volume_talk_dn(member); + break; + case 8: + conference_loop_fn_volume_listen_up(member); + break; + case 9: + conference_loop_fn_volume_listen_zero(member); + break; + case 10: + conference_loop_fn_volume_listen_dn(member); + break; + case 11: + conference_loop_fn_hangup(member); + break; + } } } } @@ -3207,6 +3216,7 @@ char *energy_level = NULL; char *caller_id_name = NULL; char *caller_id_number = NULL; + char *caller_dtmf_control = "0*987321654#"; uint32_t rate = 8000, interval = 20; switch_status_t status; @@ -3274,6 +3284,8 @@ caller_id_name = val; } else if (!strcasecmp(var, "caller-id-number")) { caller_id_number = val; + } else if (!strcasecmp(var, "caller-dtmf-control")) { + caller_dtmf_control = val; } } @@ -3334,6 +3346,23 @@ conference->caller_id_name = switch_core_strdup(conference->pool, caller_id_name); conference->caller_id_number = switch_core_strdup(conference->pool, caller_id_number); + + // The position of the dialed digit in the control string + // determines the operation that is being requested + // To disable the function for the user, make the control + // string digit something that can't be dialed... ie. a space + // The control string should have at least 11 characters in it + if(strlen(caller_dtmf_control) < 11) { + char dbuf[12]; + + memset(dbuf,' ',sizeof(dbuf)); + dbuf[11] = '\0'; + memcpy(dbuf,caller_dtmf_control,strlen(caller_dtmf_control)); + + conference->caller_dtmf_control = switch_core_strdup(conference->pool, dbuf); + } else { + conference->caller_dtmf_control = switch_core_strdup(conference->pool, caller_dtmf_control); + } if (!switch_strlen_zero(enter_sound)) { conference->enter_sound = switch_core_strdup(conference->pool, enter_sound);
participants (1)
-
Freeswitch SVN