[commit] r3525 - freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference
Author: knhor Date: Sun Dec 3 23:00:29 2006 New Revision: 3525 Modified: freeswitch/branches/knhor/trunk/src/mod/applications/mod_conference/mod_conference.c Log: a little more polish 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 Sun Dec 3 23:00:29 2006 @@ -92,8 +92,15 @@ struct conference_member; typedef struct conference_member conference_member_t; -typedef struct caller_control_actions { +typedef struct caller_control_fn_table { + char *key; + char *digits; + caller_control_t action; void (*handler)(conference_member_t *, void *); +} caller_control_fn_table_t; + +typedef struct caller_control_actions { + caller_control_fn_table_t *fndesc; void *data; } caller_control_action_t; @@ -1125,12 +1132,7 @@ switch_thread_create(&thread, thd_attr, conference_loop_input, member, pool); } -static struct caller_control_fn_table { - char *key; - char *digits; - caller_control_t action; - void (*handler)(conference_member_t *, void *); -} ccfntbl[] = { +static caller_control_fn_table_t ccfntbl[] = { {"mute", "0", CALLER_CONTROL_MUTE, conference_loop_fn_mute_toggle}, {"deaf mute", "*", CALLER_CONTROL_DEAF_MUTE, conference_loop_fn_deafmute_toggle}, {"energy up", "9", CALLER_CONTROL_ENERGY_UP, conference_loop_fn_energy_up}, @@ -1249,21 +1251,22 @@ } // if a caller action has been detected, handle it - if (caller_action != NULL) { - - if (caller_action->handler != NULL) { - int i,found; + if (caller_action != NULL && caller_action->fndesc != NULL && caller_action->fndesc->handler != NULL) { + switch_channel_t *channel = switch_core_session_get_channel(member->session); + switch_caller_profile_t *profile = switch_channel_get_caller_profile(channel); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "digit_stream_parser_feed result != NULL %u\n",caller_action != NULL); - for(i=0,found=0; i<CCFNTBL_QTY && !found; i++) { - if (caller_action->handler == ccfntbl[i].handler) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "excuting caller control '%s' param '%s'\n",ccfntbl[i].key,(ccfntbl[i].action != CALLER_CONTROL_MENU ? caller_action->data : "")); - found = 1; - } - } + switch_log_printf(SWITCH_CHANNEL_LOG, + SWITCH_LOG_INFO, + "executing caller control '%s' param '%s' on call '%u,%s,%s,%s'\n", + caller_action->fndesc->key, + (caller_action->fndesc->action != CALLER_CONTROL_MENU ? caller_action->data : ""), + member->id, + switch_channel_get_name(channel), + profile->caller_id_name, + profile->caller_id_number + ); + caller_action->fndesc->handler(member,caller_action->data); - caller_action->handler(member,caller_action->data); - } // set up for next pass caller_action = NULL; } @@ -3516,7 +3519,7 @@ ccfntbl[i].digits); action = (caller_control_action_t *)switch_core_alloc(conference->pool,sizeof(caller_control_action_t)); if (action != NULL) { - action->handler = ccfntbl[i].handler; + action->fndesc = &ccfntbl[i]; action->data = NULL; status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,ccfntbl[i].digits,action); } else { @@ -3572,7 +3575,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Installing caller control action '%s' bound to '%s'.\n",key,val); action = (caller_control_action_t *)switch_core_alloc(conference->pool,sizeof(caller_control_action_t)); if (action != NULL) { - action->handler = ccfntbl[i].handler; + action->fndesc = &ccfntbl[i]; action->data = (void *)data; status = switch_ivr_digit_stream_parser_set_event(conference->dtmf_parser,val,action); } else {
participants (1)
-
Freeswitch SVN