[asterisk-commits] bweschke: branch bweschke/polycom_acd_on_1.4 r97246 - in /team/bweschke/polyc...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jan 8 15:51:21 CST 2008
Author: bweschke
Date: Tue Jan 8 15:51:21 2008
New Revision: 97246
URL: http://svn.digium.com/view/asterisk?view=rev&rev=97246
Log:
Commit progress
Modified:
team/bweschke/polycom_acd_on_1.4/channels/chan_agent.c
team/bweschke/polycom_acd_on_1.4/channels/chan_sip.c
team/bweschke/polycom_acd_on_1.4/include/asterisk/channel.h
team/bweschke/polycom_acd_on_1.4/main/channel.c
Modified: team/bweschke/polycom_acd_on_1.4/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/bweschke/polycom_acd_on_1.4/channels/chan_agent.c?view=diff&rev=97246&r1=97245&r2=97246
==============================================================================
--- team/bweschke/polycom_acd_on_1.4/channels/chan_agent.c (original)
+++ team/bweschke/polycom_acd_on_1.4/channels/chan_agent.c Tue Jan 8 15:51:21 2008
@@ -235,6 +235,8 @@
} while(0)
/*--- Forward declarations */
+static void callback_deprecated(void);
+int agent_cb_login(const char *agentid, const char *extenid, const char *context);
const char *agent_getsecret(const char *agentid);
static struct ast_channel *agent_request(const char *type, int format, void *data, int *cause);
static int agent_devicestate(void *data);
@@ -1846,15 +1848,63 @@
int agent_cb_login(const char *agentid, const char *extenid, const char *context)
{
struct agent_pvt *p;
+ int login_state = 0;
+
+ callback_deprecated();
+
+ if (ast_strlen_zero(agentid)) {
+ ast_log(LOG_ERROR, "No agent specified");
+ return 0;
+ }
+
+ if (ast_strlen_zero(extenid)) {
+ ast_log(LOG_ERROR, "No extension specified");
+ return 0;
+ }
AST_LIST_LOCK(&agents);
AST_LIST_TRAVERSE(&agents, p, list) {
- if (!strcmp(p->agent, agentid) && !p->pending) {
-
- }
+ if (strcmp(p->agent, agentid) || p->pending)
+ continue;
+ if (p->chan) {
+ login_state = 2; /* already logged in (and on the phone) */
+ break;
+ }
+ ast_mutex_lock(&p->lock);
+ login_state = 1; /* Successful login */
+
+ if (ast_strlen_zero(context))
+ ast_copy_string(p->loginchan, extenid, sizeof(p->loginchan));
+ else
+ snprintf(p->loginchan, sizeof(p->loginchan), "%s@%s", extenid, context);
+
+ if (p->loginstart == 0)
+ time(&p->loginstart);
+ ast_copy_string(p->logincallerid, extenid, sizeof(p->logincallerid));
+ set_agentbycallerid(extenid, p->agent);
+ manager_event(EVENT_FLAG_AGENT, "Agentcallbacklogin",
+ "Agent: %s\r\n"
+ "Loginchan: %s\r\n",
+ p->agent, p->loginchan);
+ ast_queue_log("NONE", "NONE", agentid, "AGENTCALLBACKLOGIN", "%s", p->loginchan);
+
+ if (option_verbose > 1)
+ ast_verbose(VERBOSE_PREFIX_2 "Callback Agent '%s' logged in on %s\n", p->agent, p->loginchan);
+ ast_device_state_changed("Agent/%s", p->agent);
+ ast_mutex_unlock(&p->lock);
+ if (persistent_agents)
+ dump_agents();
}
AST_LIST_UNLOCK(&agents);
- return 0;
+
+ if (option_debug > 2 && login_state == 1)
+ ast_log(LOG_DEBUG, "Agent '%s' logged in via API call\n", agentid);
+ else if (option_debug > 2 && login_state == 0)
+ ast_log(LOG_DEBUG, "No such agent, '%s', to login\n", agentid);
+ if (option_debug > 2 && login_state == 2)
+ ast_log(LOG_DEBUG, "Agent '%s' already logged in, and on the phone\n", agentid);
+
+ return 0;
}
/*!
@@ -2721,7 +2771,7 @@
/* Dialplan Functions */
ast_custom_function_register(&agent_function);
- ast_install_ast_agent_functions(agent_getsecret);
+ ast_install_ast_agent_functions(agent_getsecret, agent_cb_login);
return 0;
}
Modified: team/bweschke/polycom_acd_on_1.4/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/bweschke/polycom_acd_on_1.4/channels/chan_sip.c?view=diff&rev=97246&r1=97245&r2=97246
==============================================================================
--- team/bweschke/polycom_acd_on_1.4/channels/chan_sip.c (original)
+++ team/bweschke/polycom_acd_on_1.4/channels/chan_sip.c Tue Jan 8 15:51:21 2008
@@ -9537,9 +9537,10 @@
else
goto agentauthwrong;
checkauthret = check_auth(p, req, p->digestname, agentsecret, NULL, sipmethod, uri2, reliable, ast_test_flag(req, SIP_PKT_IGNORE));
- if (!checkauthret)
+ if (!checkauthret) {
ast_log(LOG_DEBUG, "auth'd correctly with %s on peer %s\n", p->digestname, peer->name);
- else {
+ ast_agent_cb_login(p->digestname, peer->name, peer->agentcbcontext);
+ } else {
agentauthwrong:
ast_log(LOG_DEBUG, "not auth'd correctly with %s on peer %s\n", p->digestname, peer->name);
}
Modified: team/bweschke/polycom_acd_on_1.4/include/asterisk/channel.h
URL: http://svn.digium.com/view/asterisk/team/bweschke/polycom_acd_on_1.4/include/asterisk/channel.h?view=diff&rev=97246&r1=97245&r2=97246
==============================================================================
--- team/bweschke/polycom_acd_on_1.4/include/asterisk/channel.h (original)
+++ team/bweschke/polycom_acd_on_1.4/include/asterisk/channel.h Tue Jan 8 15:51:21 2008
@@ -1395,9 +1395,10 @@
*/
char *ast_channel_reason2str(int reason);
-void ast_install_ast_agent_functions(const char *(*agent_getsecret_ptr)(const char *));
+void ast_install_ast_agent_functions(const char *(*agent_getsecret_ptr)(const char *), int (*agent_cb_login_ptr)(const char *, const char *, const char *));
void ast_uninstall_agent_functions(void);
const char *ast_agent_getsecret(const char *agentid);
+int ast_agent_cb_login(const char *agentid, const char *extenid, const char *context);
#if defined(__cplusplus) || defined(c_plusplus)
}
Modified: team/bweschke/polycom_acd_on_1.4/main/channel.c
URL: http://svn.digium.com/view/asterisk/team/bweschke/polycom_acd_on_1.4/main/channel.c?view=diff&rev=97246&r1=97245&r2=97246
==============================================================================
--- team/bweschke/polycom_acd_on_1.4/main/channel.c (original)
+++ team/bweschke/polycom_acd_on_1.4/main/channel.c Tue Jan 8 15:51:21 2008
@@ -4622,15 +4622,18 @@
}
static const char *(*ast_agent_getsecret_ptr)(const char *) = NULL;
-
-void ast_install_ast_agent_functions(const char *(*agent_getsecret_ptr)(const char *))
+static int (*ast_agent_cb_login_ptr)(const char *, const char *, const char *) = NULL;
+
+void ast_install_ast_agent_functions(const char *(*agent_getsecret_ptr)(const char *), int (*agent_cb_login_ptr)(const char *, const char*, const char*))
{
ast_agent_getsecret_ptr = agent_getsecret_ptr;
+ ast_agent_cb_login_ptr = agent_cb_login_ptr;
}
void ast_uninstall_agent_functions(void)
{
ast_agent_getsecret_ptr = NULL;
+ ast_agent_cb_login_ptr = NULL;
}
const char *ast_agent_getsecret(const char *agentid)
@@ -4640,6 +4643,18 @@
if (option_verbose > 2)
ast_log(LOG_WARNING, "Agent lookup requested on agent ID %s but no chan_agent is loaded\n", agentid);
+ return 0;
+
+}
+
+int ast_agent_cb_login(const char *agentid, const char *extenid, const char *context)
+{
+
+ if (ast_agent_cb_login_ptr)
+ return ast_agent_cb_login_ptr(agentid, extenid, context);
+
+ if (option_verbose > 2)
+ ast_log(LOG_WARNING, "Agent API login requested on agent ID %s but no chan_agent is loaded\n", agentid);
return 0;
}
More information about the asterisk-commits
mailing list