--- mod_callcenter.c.original 2011-08-13 12:55:20 -0500 +++ mod_callcenter.c 2011-08-15 10:19:42 -0500 @@ -850,7 +850,7 @@ switch_event_t *event; char res[256]; - /* Check to see if agent already exist */ + /* Check to see if agent already exists */ sql = switch_mprintf("SELECT count(*) FROM agents WHERE name = '%q'", agent); cc_execute_sql2str(NULL, NULL, sql, res, sizeof(res)); switch_safe_free(sql); @@ -861,7 +861,7 @@ } if (!strcasecmp(key, "status") ) { - /* Check to see if agent already exist */ + /* Check to see if agent already exists */ sql = switch_mprintf("SELECT %q FROM agents WHERE name = '%q'", key, agent); cc_execute_sql2str(NULL, NULL, sql, res, sizeof(res)); switch_safe_free(sql); @@ -875,6 +875,36 @@ switch_event_fire(&event); } + } else if (!strcasecmp(key, "state")) { + /* Check to see if agent already exists */ + sql = switch_mprintf("SELECT %q FROM agents WHERE name = '%q'", key, agent); + cc_execute_sql2str(NULL, NULL, sql, res, sizeof(res)); + switch_safe_free(sql); + switch_snprintf(ret_result, ret_result_size, "%s", res); + result = CC_STATUS_SUCCESS; + + if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-state-get"); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-State", res); + switch_event_fire(&event); + } + + } else if (!strcasecmp(key, "uuid")) { + /* Check to see if agent already exists */ + sql = switch_mprintf("SELECT %q FROM agents WHERE name = '%q'", key, agent); + cc_execute_sql2str(NULL, NULL, sql, res, sizeof(res)); + switch_safe_free(sql); + switch_snprintf(ret_result, ret_result_size, "%s", res); + result = CC_STATUS_SUCCESS; + + if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-uuid-get"); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", res); + switch_event_fire(&event); + } + } else { result = CC_STATUS_INVALID_KEY; goto done; @@ -2666,34 +2696,36 @@ } #define CC_CONFIG_API_SYNTAX "callcenter_config ,\n"\ -"\tcallcenter_config agent add [name] [type] | \n" \ -"\tcallcenter_config agent del [name] | \n" \ -"\tcallcenter_config agent set status [agent_name] [status] | \n" \ -"\tcallcenter_config agent set state [agent_name] [state] | \n" \ -"\tcallcenter_config agent set contact [agent_name] [contact] | \n" \ -"\tcallcenter_config agent set ready_time [agent_name] [wait till epoch] | \n"\ -"\tcallcenter_config agent set reject_delay_time [agent_name] [wait second] | \n"\ -"\tcallcenter_config agent set busy_delay_time [agent_name] [wait second] | \n"\ -"\tcallcenter_config agent set no_answer_delay_time [agent_name] [wait second] | \n"\ -"\tcallcenter_config agent get status [agent_name] | \n" \ -"\tcallcenter_config agent list | \n" \ -"\tcallcenter_config tier add [queue_name] [agent_name] [level] [position] | \n" \ -"\tcallcenter_config tier set state [queue_name] [agent_name] [state] | \n" \ -"\tcallcenter_config tier set level [queue_name] [agent_name] [level] | \n" \ -"\tcallcenter_config tier set position [queue_name] [agent_name] [position] | \n" \ -"\tcallcenter_config tier del [queue_name] [agent_name] | \n" \ +"\tcallcenter_config agent add | \n" \ +"\tcallcenter_config agent del | \n" \ +"\tcallcenter_config agent set status | \n" \ +"\tcallcenter_config agent set state | \n" \ +"\tcallcenter_config agent set contact | \n" \ +"\tcallcenter_config agent set ready_time | \n"\ +"\tcallcenter_config agent set reject_delay_time | \n"\ +"\tcallcenter_config agent set busy_delay_time | \n"\ +"\tcallcenter_config agent set no_answer_delay_time | \n"\ +"\tcallcenter_config agent get status | \n" \ +"\tcallcenter_config agent get state | \n" \ +"\tcallcenter_config agent get uuid | \n" \ +"\tcallcenter_config agent list [] | \n" \ +"\tcallcenter_config tier add | \n" \ +"\tcallcenter_config tier set state | \n" \ +"\tcallcenter_config tier set level | \n" \ +"\tcallcenter_config tier set position | \n" \ +"\tcallcenter_config tier del | \n" \ "\tcallcenter_config tier list | \n" \ -"\tcallcenter_config queue load [queue_name] | \n" \ -"\tcallcenter_config queue unload [queue_name] | \n" \ -"\tcallcenter_config queue reload [queue_name] | \n" \ +"\tcallcenter_config queue load | \n" \ +"\tcallcenter_config queue unload | \n" \ +"\tcallcenter_config queue reload | \n" \ "\tcallcenter_config queue list | \n" \ -"\tcallcenter_config queue list agents [queue_name] [status] | \n" \ -"\tcallcenter_config queue list members [queue_name] | \n" \ -"\tcallcenter_config queue list tiers [queue_name] | \n" \ +"\tcallcenter_config queue list agents | \n" \ +"\tcallcenter_config queue list members | \n" \ +"\tcallcenter_config queue list tiers | \n" \ "\tcallcenter_config queue count | \n" \ -"\tcallcenter_config queue count agents [queue_name] [status] | \n" \ -"\tcallcenter_config queue count members [queue_name] | \n" \ -"\tcallcenter_config queue count tiers [queue_name]" +"\tcallcenter_config queue count agents | \n" \ +"\tcallcenter_config queue count members | \n" \ +"\tcallcenter_config queue count tiers " SWITCH_STANDARD_API(cc_config_api_function) { @@ -2832,7 +2864,14 @@ struct list_result cbt; cbt.row_process = 0; cbt.stream = stream; + if ( argc-initial_argc > 1 ) { + stream->write_function(stream, "%s", "-ERR Invalid!\n"); + goto done; + } else if ( argc-initial_argc == 1 ) { + sql = switch_mprintf("SELECT * FROM agents WHERE name='%s'", argv[0 + initial_argc]); + } else { sql = switch_mprintf("SELECT * FROM agents"); + } cc_execute_sql_callback(NULL /* queue */, NULL /* mutex */, sql, list_result_callback, &cbt /* Call back variables */); switch_safe_free(sql); stream->write_function(stream, "%s", "+OK\n");