Compare commits
4 Commits
732d93d557
...
351ffe9a69
Author | SHA1 | Date |
---|---|---|
sskorion | 351ffe9a69 | |
Andrey Volk | 5e82e4f305 | |
Andrey Volk | d895fdff60 | |
sskorion | e95364e0a6 |
|
@ -990,6 +990,8 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&handle->sockaddr, result->ai_addr, result->ai_addrlen);
|
memcpy(&handle->sockaddr, result->ai_addr, result->ai_addrlen);
|
||||||
|
freeaddrinfo(result);
|
||||||
|
|
||||||
switch(handle->sockaddr.ss_family) {
|
switch(handle->sockaddr.ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
sockaddr_in = (struct sockaddr_in*)&(handle->sockaddr);
|
sockaddr_in = (struct sockaddr_in*)&(handle->sockaddr);
|
||||||
|
@ -1005,7 +1007,6 @@ ESL_DECLARE(esl_status_t) esl_connect_timeout(esl_handle_t *handle, const char *
|
||||||
strncpy(handle->err, "Host resolves to unsupported address family", sizeof(handle->err));
|
strncpy(handle->err, "Host resolves to unsupported address family", sizeof(handle->err));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
freeaddrinfo(result);
|
|
||||||
|
|
||||||
handle->sock = socket(handle->sockaddr.ss_family, SOCK_STREAM, IPPROTO_TCP);
|
handle->sock = socket(handle->sockaddr.ss_family, SOCK_STREAM, IPPROTO_TCP);
|
||||||
|
|
||||||
|
|
|
@ -1169,6 +1169,31 @@ cc_status_t cc_agent_update(const char *key, const char *value, const char *agen
|
||||||
switch_safe_free(sql);
|
switch_safe_free(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (!strcasecmp(key, "state_if_reserved")) {
|
||||||
|
if (cc_agent_str2state(value) == CC_AGENT_STATE_UNKNOWN) {
|
||||||
|
result = CC_STATUS_AGENT_INVALID_STATE;
|
||||||
|
goto done;
|
||||||
|
} else {
|
||||||
|
sql = switch_mprintf("UPDATE agents SET state = '%q' WHERE name = '%q' AND state = '%q' AND status IN ('%q', '%q')",
|
||||||
|
value, agent,
|
||||||
|
cc_agent_state2str(CC_AGENT_STATE_RESERVED),
|
||||||
|
cc_agent_status2str(CC_AGENT_STATUS_AVAILABLE),
|
||||||
|
cc_agent_status2str(CC_AGENT_STATUS_AVAILABLE_ON_DEMAND));
|
||||||
|
|
||||||
|
if (cc_execute_sql_affected_rows(sql) > 0) {
|
||||||
|
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-change");
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-State", value);
|
||||||
|
switch_event_fire(&event);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result = CC_STATUS_AGENT_NOT_FOUND;
|
||||||
|
}
|
||||||
|
switch_safe_free(sql);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
result = CC_STATUS_INVALID_KEY;
|
result = CC_STATUS_INVALID_KEY;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -2391,6 +2416,8 @@ static int agents_callback(void *pArg, int argc, char **argv, char **columnNames
|
||||||
|
|
||||||
switch (atoi(res)) {
|
switch (atoi(res)) {
|
||||||
case 0: /* Ok, someone else took it, or user hanged up already */
|
case 0: /* Ok, someone else took it, or user hanged up already */
|
||||||
|
/* However, if we had reserved this agent, we should release them */
|
||||||
|
cc_agent_update("state_if_reserved", cc_agent_state2str(CC_AGENT_STATE_WAITING), agent_name);
|
||||||
return 1;
|
return 1;
|
||||||
/* We default to default even if more entry is returned... Should never happen anyway */
|
/* We default to default even if more entry is returned... Should never happen anyway */
|
||||||
default: /* Go ahead, start thread to try to bridge these 2 caller */
|
default: /* Go ahead, start thread to try to bridge these 2 caller */
|
||||||
|
|
Loading…
Reference in New Issue