[svn-commits] eliel: trunk r198217 - in /trunk: channels/ configs/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri May 29 20:05:05 CDT 2009


Author: eliel
Date: Fri May 29 20:04:57 2009
New Revision: 198217

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=198217
Log:
Remove not used code in the Agent channel.

This code was there because of the AgentCallbackLogin() application.
->loginchan[] member was only used by AgentCallbackLogin().
Agent where dumped to astdb if they where logged in using AgentCallbacklogin()
so they are not being dumper anymore.

Review: https://reviewboard.asterisk.org/r/267/


Modified:
    trunk/channels/chan_agent.c
    trunk/configs/agents.conf.sample

Modified: trunk/channels/chan_agent.c
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/channels/chan_agent.c?view=diff&rev=198217&r1=198216&r2=198217
==============================================================================
--- trunk/channels/chan_agent.c (original)
+++ trunk/channels/chan_agent.c Fri May 29 20:04:57 2009
@@ -212,9 +212,6 @@
 static const char pa_family[] = "Agents";          /*!< Persistent Agents astdb family */
 #define PA_MAX_LEN 2048                             /*!< The maximum length of each persistent member agent database entry */
 
-static int persistent_agents = 0;                   /*!< queues.conf [general] option */
-static void dump_agents(void);
-
 #define DEFAULT_ACCEPTDTMF '#'
 #define DEFAULT_ENDDTMF '*'
 
@@ -275,7 +272,6 @@
 	ast_cond_t app_complete_cond;
 	volatile int app_sleep_cond;   /**< Sleep condition for the login app */
 	struct ast_channel *owner;     /**< Agent */
-	char loginchan[80];            /**< channel they logged in from */
 	char logincallerid[80];        /**< Caller ID they had when they logged in */
 	struct ast_channel *chan;      /**< Channel we use */
 	unsigned int flags;            /**< Flags show if settings were applied with channel vars */
@@ -319,7 +315,6 @@
 /*--- Forward declarations */
 static struct ast_channel *agent_request(const char *type, int format, void *data, int *cause);
 static int agent_devicestate(void *data);
-static void agent_logoff_maintenance(struct agent_pvt *p, char *loginchan, long logintime, const char *uniqueid, char *logcommand);
 static int agent_digit_begin(struct ast_channel *ast, char digit);
 static int agent_digit_end(struct ast_channel *ast, char digit, unsigned int duration);
 static int agent_call(struct ast_channel *ast, char *dest, int timeout);
@@ -332,7 +327,6 @@
 static int agent_indicate(struct ast_channel *ast, int condition, const void *data, size_t datalen);
 static int agent_fixup(struct ast_channel *oldchan, struct ast_channel *newchan);
 static struct ast_channel *agent_bridgedchannel(struct ast_channel *chan, struct ast_channel *bridge);
-static void set_agentbycallerid(const char *callerid, const char *agent);
 static char *complete_agent_logoff_cmd(const char *line, const char *word, int pos, int state);
 static struct ast_channel* agent_get_base_channel(struct ast_channel *chan);
 static int agent_set_base_channel(struct ast_channel *chan, struct ast_channel *base);
@@ -539,7 +533,6 @@
 	struct agent_pvt *p = ast->tech_pvt;
 	struct ast_frame *f = NULL;
 	static struct ast_frame answer_frame = { AST_FRAME_CONTROL, AST_CONTROL_ANSWER };
-	const char *status;
 	int cur_time = time(NULL);
 	ast_mutex_lock(&p->lock);
 	CHECK_FORMATS(ast, p);
@@ -553,33 +546,9 @@
 	} else
 		f = &ast_null_frame;
 	if (!f) {
-		/* If there's a channel, hang it up (if it's on a callback) make it NULL */
+		/* If there's a channel, make it NULL */
 		if (p->chan) {
 			p->chan->_bridge = NULL;
-			/* Note that we don't hangup if it's not a callback because Asterisk will do it
-			   for us when the PBX instance that called login finishes */
-			if (!ast_strlen_zero(p->loginchan)) {
-				if (p->chan)
-					ast_debug(1, "Bridge on '%s' being cleared (2)\n", p->chan->name);
-				if (p->owner->_state != AST_STATE_UP) {
-					int howlong = cur_time - p->start;
-					if (p->autologoff && howlong >= p->autologoff) {
-						p->loginstart = 0;
-							ast_log(LOG_NOTICE, "Agent '%s' didn't answer/confirm within %d seconds (waited %d)\n", p->name, p->autologoff, howlong);
-						agent_logoff_maintenance(p, p->loginchan, (cur_time = p->loginstart), ast->uniqueid, "Autologoff");
-					}
-				}
-				status = pbx_builtin_getvar_helper(p->chan, "CHANLOCALSTATUS");
-				if (autologoffunavail && status && !strcasecmp(status, "CHANUNAVAIL")) {
-					long logintime = cur_time - p->loginstart;
-					p->loginstart = 0;
-					ast_log(LOG_NOTICE, "Agent read: '%s' is not available now, auto logoff\n", p->name);
-					agent_logoff_maintenance(p, p->loginchan, logintime, ast->uniqueid, "Chanunavail");
-				}
-				ast_hangup(p->chan);
-				if (p->wrapuptime && p->acknowledged)
-					p->lastdisc = ast_tvadd(ast_tvnow(), ast_samp2tv(p->wrapuptime, 1000));
-			}
 			p->chan = NULL;
 			ast_devstate_changed(AST_DEVICE_UNAVAILABLE, "Agent/%s", p->agent);
 			p->acknowledged = 0;
@@ -595,7 +564,6 @@
 			int howlong = cur_time - p->start;
 			if (p->autologoff && (howlong >= p->autologoff)) {
 				ast_log(LOG_NOTICE, "Agent '%s' didn't answer/confirm within %d seconds (waited %d)\n", p->name, p->autologoff, howlong);
-				agent_logoff_maintenance(p, p->loginchan, (cur_time - p->loginstart), ast->uniqueid, "Autologoff");
 				agent_logoff(p->agent, 0);
 			}
 		}
@@ -784,16 +752,6 @@
 		if (newstate)
 			ast_setstate(ast, newstate);
 		return res;
-	} else if (!ast_strlen_zero(p->loginchan)) {
-		time(&p->start);
-		/* Call on this agent */
-		ast_verb(3, "outgoing agentcall, to agent '%s', on '%s'\n", p->agent, p->chan->name);
-		ast_channel_set_connected_line(p->chan, &ast->connected);
-		ast_channel_inherit_variables(ast, p->chan);
-		res = ast_call(p->chan, p->loginchan, 0);
-		CLEANUP(ast,p);
-		ast_mutex_unlock(&p->lock);
-		return res;
 	}
 	ast_verb(3, "agent_call, call to agent '%s' call on '%s'\n", p->agent, p->chan->name);
 	ast_debug(3, "Playing beep, lang '%s'\n", p->chan->language);
@@ -822,9 +780,9 @@
 	}
 	if(!res) {
 		/* Call is immediately up, or might need ack */
-		if (p->ackcall > 1)
+		if (p->ackcall) {
 			newstate = AST_STATE_RINGING;
-		else {
+		} else {
 			newstate = AST_STATE_UP;
 			if (recordagentcalls)
 				agent_start_monitoring(ast, 0);
@@ -839,19 +797,6 @@
 	return res;
 }
 
-/*! \brief store/clear the global variable that stores agentid based on the callerid */
-static void set_agentbycallerid(const char *callerid, const char *agent)
-{
-	char buf[AST_MAX_BUF];
-
-	/* if there is no Caller ID, nothing to do */
-	if (ast_strlen_zero(callerid))
-		return;
-
-	snprintf(buf, sizeof(buf), "%s_%s", GETAGENTBYCALLERID, callerid);
-	pbx_builtin_setvar_helper(NULL, buf, agent);
-}
-
 /*! \brief return the channel or base channel if one exists.  This function assumes the channel it is called on is already locked */
 struct ast_channel* agent_get_base_channel(struct ast_channel *chan)
 {
@@ -890,7 +835,7 @@
 {
 	struct agent_pvt *p = ast->tech_pvt;
 	int howlong = 0;
-	const char *status;
+
 	ast_mutex_lock(&p->lock);
 	p->owner = NULL;
 	ast->tech_pvt = NULL;
@@ -915,37 +860,7 @@
 	if (p->chan) {
 		p->chan->_bridge = NULL;
 		/* If they're dead, go ahead and hang up on the agent now */
-		if (!ast_strlen_zero(p->loginchan)) {
-			/* Store last disconnect time */
-			if (p->wrapuptime)
-				p->lastdisc = ast_tvadd(ast_tvnow(), ast_samp2tv(p->wrapuptime, 1000));
-			else
-				p->lastdisc = ast_tv(0,0);
-			if (p->chan) {
-				status = pbx_builtin_getvar_helper(p->chan, "CHANLOCALSTATUS");
-				if (autologoffunavail && status && !strcasecmp(status, "CHANUNAVAIL")) {
-					long logintime = time(NULL) - p->loginstart;
-					p->loginstart = 0;
-					ast_log(LOG_NOTICE, "Agent hangup: '%s' is not available now, auto logoff\n", p->name);
-					agent_logoff_maintenance(p, p->loginchan, logintime, ast->uniqueid, "Chanunavail");
-				}
-				/* Recognize the hangup and pass it along immediately */
-				ast_hangup(p->chan);
-				p->chan = NULL;
-				ast_devstate_changed(AST_DEVICE_UNAVAILABLE, "Agent/%s", p->agent);
-			}
-			ast_debug(1, "Hungup, howlong is %d, autologoff is %d\n", howlong, p->autologoff);
-			if ((p->deferlogoff) || (howlong && p->autologoff && (howlong > p->autologoff))) {
-				long logintime = time(NULL) - p->loginstart;
-				p->loginstart = 0;
-				if (!p->deferlogoff)
-					ast_log(LOG_NOTICE, "Agent '%s' didn't answer/confirm within %d seconds (waited %d)\n", p->name, p->autologoff, howlong);
-				p->deferlogoff = 0;
-				agent_logoff_maintenance(p, p->loginchan, logintime, ast->uniqueid, "Autologoff");
-				if (persistent_agents)
-					dump_agents();
-			}
-		} else if (p->dead) {
+		if (p->dead) {
 			ast_channel_lock(p->chan);
 			ast_softhangup(p->chan, AST_SOFTHANGUP_EXPLICIT);
 			ast_channel_unlock(p->chan);
@@ -961,10 +876,7 @@
 
 	/* Only register a device state change if the agent is still logged in */
 	if (!p->loginstart) {
-		p->loginchan[0] = '\0';
 		p->logincallerid[0] = '\0';
-		if (persistent_agents)
-			dump_agents();
 	} else {
 		ast_devstate_changed(AST_DEVICE_NOT_INUSE, "Agent/%s", p->agent);
 	}
@@ -992,10 +904,8 @@
 			ast_mutex_unlock(&p->lock);
 		}
 		/* Release ownership of the agent to other threads (presumably running the login app). */
-		if (ast_strlen_zero(p->loginchan)) {
-			p->app_lock_flag = 0;
-			ast_cond_signal(&p->app_complete_cond);
-		}
+		p->app_lock_flag = 0;
+		ast_cond_signal(&p->app_complete_cond);
 	}
 	return 0;
 }
@@ -1132,7 +1042,7 @@
 	alreadylocked = p->app_lock_flag;
 	p->app_lock_flag = 1;
 
-	if(ast_strlen_zero(p->loginchan) && alreadylocked) {
+	if (alreadylocked) {
 		if (p->chan) {
 			ast_queue_frame(p->chan, &ast_null_frame);
 			ast_mutex_unlock(&p->lock);	/* For other thread to read the condition. */
@@ -1149,18 +1059,6 @@
 			ast_cond_signal(&p->app_complete_cond);
 			return NULL;
 		}
-	} else if (!ast_strlen_zero(p->loginchan)) {
-		if (p->chan)
-			ast_queue_frame(p->chan, &ast_null_frame);
-		if (!p->chan) {
-			ast_log(LOG_WARNING, "Agent disconnected while we were connecting the call\n");
-			p->owner = NULL;
-			tmp->tech_pvt = NULL;
-			p->app_sleep_cond = 1;
-			tmp = ast_channel_release(tmp);
-			ast_mutex_unlock(&p->lock);     /* For other thread to read the condition. */
-			return NULL;
-		}	
 	} 
 	if (p->chan)
 		ast_indicate(p->chan, AST_CONTROL_UNHOLD);
@@ -1179,7 +1077,6 @@
 	struct ast_config *ucfg;
 	struct ast_variable *v;
 	struct agent_pvt *p;
-	const char *general_val;
 	const char *catname;
 	const char *hasagent;
 	int genhasagent;
@@ -1222,8 +1119,6 @@
 	savecallsin[0] = '\0';
 
 	/* Read in [general] section for persistence */
-	if ((general_val = ast_variable_retrieve(cfg, "general", "persistentagents")))
-		persistent_agents = ast_true(general_val);
 	multiplelogin = ast_true(ast_variable_retrieve(cfg, "general", "multiplelogin"));
 
 	/* Read in the [agents] section */
@@ -1239,12 +1134,9 @@
 			if (autologoff < 0)
 				autologoff = 0;
 		} else if (!strcasecmp(v->name, "ackcall")) {
-			if (!strcasecmp(v->value, "always"))
-				ackcall = 2;
-			else if (ast_true(v->value))
+			if (ast_true(v->value) || !strcasecmp(v->value, "always")) {
 				ackcall = 1;
-			else
-				ackcall = 0;
+			}
 		} else if (!strcasecmp(v->name, "endcall")) {
 			endcall = ast_true(v->value);
 		} else if (!strcasecmp(v->name, "acceptdtmf")) {
@@ -1371,7 +1263,7 @@
 	if (needlock)
 		AST_LIST_UNLOCK(&agents);
 	if (parent && chan)  {
-		if (newlyavailable->ackcall > 1) {
+		if (newlyavailable->ackcall) {
 			/* Don't do beep here */
 			res = 0;
 		} else {
@@ -1469,8 +1361,7 @@
 	AST_LIST_LOCK(&agents);
 	AST_LIST_TRAVERSE(&agents, p, list) {
 		ast_mutex_lock(&p->lock);
-		if (!p->pending && ((groupmatch && (p->group & groupmatch)) || !strcmp(data, p->agent)) &&
-		    ast_strlen_zero(p->loginchan)) {
+		if (!p->pending && ((groupmatch && (p->group & groupmatch)) || !strcmp(data, p->agent))) {
 			if (p->chan)
 				hasagent++;
 			now = ast_tvnow();
@@ -1493,23 +1384,16 @@
 		AST_LIST_TRAVERSE(&agents, p, list) {
 			ast_mutex_lock(&p->lock);
 			if (!p->pending && ((groupmatch && (p->group & groupmatch)) || !strcmp(data, p->agent))) {
-				if (p->chan || !ast_strlen_zero(p->loginchan))
+				if (p->chan) {
 					hasagent++;
+				}
 				now = ast_tvnow();
-#if 0
-				ast_log(LOG_NOTICE, "Time now: %ld, Time of lastdisc: %ld\n", now.tv_sec, p->lastdisc.tv_sec);
-#endif
 				if (!p->lastdisc.tv_sec || (now.tv_sec >= p->lastdisc.tv_sec)) {
 					p->lastdisc = ast_tv(0, 0);
 					/* Agent must be registered, but not have any active call, and not be in a waiting state */
 					if (!p->owner && p->chan) {
 						/* Could still get a fixed agent */
 						chan = agent_new(p, AST_STATE_DOWN);
-					} else if (!p->owner && !ast_strlen_zero(p->loginchan)) {
-						/* Adjustable agent */
-						p->chan = ast_request("Local", format, p->loginchan, cause);
-						if (p->chan)
-							chan = agent_new(p, AST_STATE_DOWN);
 					}
 					if (chan) {
 						ast_mutex_unlock(&p->lock);
@@ -1562,7 +1446,6 @@
 {
 	const char *id = astman_get_header(m,"ActionID");
 	char idText[256] = "";
-	char chanbuf[256];
 	struct agent_pvt *p;
 	char *username = NULL;
 	char *loginChan = NULL;
@@ -1588,16 +1471,7 @@
 		/* Set a default status. It 'should' get changed. */
 		status = "AGENT_UNKNOWN";
 
-		if (!ast_strlen_zero(p->loginchan) && !p->chan) {
-			loginChan = p->loginchan;
-			talkingto = "n/a";
-			talkingtoChan = "n/a";
-			status = "AGENT_IDLE";
-			if (p->acknowledged) {
-				snprintf(chanbuf, sizeof(chanbuf), " %s (Confirmed)", p->loginchan);
-				loginChan = chanbuf;
-			}
-		} else if (p->chan) {
+		if (p->chan) {
 			loginChan = ast_strdupa(p->chan->name);
 			if (p->owner && p->owner->_bridge) {
 				talkingto = p->chan->cid.cid_num;
@@ -1638,49 +1512,9 @@
 	return 0;
 }
 
-static void agent_logoff_maintenance(struct agent_pvt *p, char *loginchan, long logintime, const char *uniqueid, char *logcommand)
-{
-	char *tmp = NULL;
-	char agent[AST_MAX_AGENT];
-
-	if (!ast_strlen_zero(logcommand))
-		tmp = logcommand;
-	else
-		tmp = ast_strdupa("");
-
-	snprintf(agent, sizeof(agent), "Agent/%s", p->agent);
-
-	if (!ast_strlen_zero(uniqueid)) {
-		manager_event(EVENT_FLAG_AGENT, "Agentcallbacklogoff",
-				"Agent: %s\r\n"
-				"Reason: %s\r\n"
-				"Loginchan: %s\r\n"
-				"Logintime: %ld\r\n"
-				"Uniqueid: %s\r\n", 
-				p->agent, tmp, loginchan, logintime, uniqueid);
-	} else {
-		manager_event(EVENT_FLAG_AGENT, "Agentcallbacklogoff",
-				"Agent: %s\r\n"
-				"Reason: %s\r\n"
-				"Loginchan: %s\r\n"
-				"Logintime: %ld\r\n",
-				p->agent, tmp, loginchan, logintime);
-	}
-
-	ast_queue_log("NONE", ast_strlen_zero(uniqueid) ? "NONE" : uniqueid, agent, "AGENTCALLBACKLOGOFF", "%s|%ld|%s", loginchan, logintime, tmp);
-	set_agentbycallerid(p->logincallerid, NULL);
-	p->loginchan[0] ='\0';
-	p->logincallerid[0] = '\0';
-	ast_devstate_changed(AST_DEVICE_UNAVAILABLE, "Agent/%s", p->agent);
-	if (persistent_agents)
-		dump_agents();
-
-}
-
 static int agent_logoff(const char *agent, int soft)
 {
 	struct agent_pvt *p;
-	long logintime;
 	int ret = -1; /* Return -1 if no agent if found */
 
 	AST_LIST_LOCK(&agents);
@@ -1710,10 +1544,6 @@
 					ast_mutex_unlock(&p->lock);
 				} else
 					p->deferlogoff = 1;
-			} else {
-				logintime = time(NULL) - p->loginstart;
-				p->loginstart = 0;
-				agent_logoff_maintenance(p, p->loginchan, logintime, NULL, "CommandLogoff");
 			}
 			break;
 		}
@@ -1855,15 +1685,6 @@
 				 else 
 					strcpy(talkingto, " is idle");
 				online_agents++;
-			} else if (!ast_strlen_zero(p->loginchan)) {
-				if (ast_tvdiff_ms(ast_tvnow(), p->lastdisc) > 0 || !(p->lastdisc.tv_sec)) 
-					snprintf(location, sizeof(location) - 20, "available at '%s'", p->loginchan);
-				else 
-					snprintf(location, sizeof(location) - 20, "wrapping up at '%s'", p->loginchan);
-				talkingto[0] = '\0';
-				online_agents++;
-				if (p->acknowledged)
-					strncat(location, " (Confirmed)", sizeof(location) - strlen(location) - 1);
 			} else {
 				strcpy(location, "not logged in");
 				talkingto[0] = '\0';
@@ -1929,13 +1750,6 @@
 				strcpy(talkingto, " is idle");
 			agent_status = 1;
 			online_agents++;
-		} else if (!ast_strlen_zero(p->loginchan)) {
-			snprintf(location, sizeof(location) - 20, "available at '%s'", p->loginchan);
-			talkingto[0] = '\0';
-			agent_status = 1;
-			online_agents++;
-			if (p->acknowledged)
-				strncat(location, " (Confirmed)", sizeof(location) - strlen(location) - 1);
 		}
 		if (!ast_strlen_zero(p->moh))
 			snprintf(music, sizeof(music), " (musiconhold is '%s')", p->moh);
@@ -2083,12 +1897,11 @@
 
 				/* Set Channel Specific Agent Overrides */
 				if (!ast_strlen_zero(pbx_builtin_getvar_helper(chan, "AGENTACKCALL"))) {
-					if (!strcasecmp(pbx_builtin_getvar_helper(chan, "AGENTACKCALL"), "always"))
-						p->ackcall = 2;
-					else if (ast_true(pbx_builtin_getvar_helper(chan, "AGENTACKCALL")))
+					if (ast_true(pbx_builtin_getvar_helper(chan, "AGENTACKCALL"))) {
 						p->ackcall = 1;
-					else
+					} else {
 						p->ackcall = 0;
+					}
 					tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTACKCALL");
 					ast_verb(3, "Saw variable AGENTACKCALL=%s, setting ackcall to: %d for Agent '%s'.\n", tmpoptions, p->ackcall, p->agent);
 					ast_set_flag(p, AGENT_FLAG_ACKCALL);
@@ -2134,7 +1947,6 @@
 					long logintime;
 					snprintf(agent, sizeof(agent), "Agent/%s", p->agent);
 
-					p->loginchan[0] = '\0';
 					p->logincallerid[0] = '\0';
 					p->acknowledged = 0;
 					
@@ -2177,10 +1989,11 @@
 								    ast_getformatname(chan->readformat), ast_getformatname(chan->writeformat));
 						/* Login this channel and wait for it to go away */
 						p->chan = chan;
-						if (p->ackcall > 1)
+						if (p->ackcall) {
 							check_beep(p, 0);
-						else
+						} else {
 							check_availability(p, 0);
+						}
 						ast_mutex_unlock(&p->lock);
 						AST_LIST_UNLOCK(&agents);
 						ast_devstate_changed(AST_DEVICE_NOT_INUSE, "Agent/%s", p->agent);
@@ -2205,10 +2018,11 @@
 									ast_debug(1, "Wrapup time for %s expired!\n", p->agent);
 									p->lastdisc = ast_tv(0, 0);
 									ast_devstate_changed(AST_DEVICE_NOT_INUSE, "Agent/%s", p->agent);
-									if (p->ackcall > 1)
+									if (p->ackcall) {
 										check_beep(p, 0);
-									else
+									} else {
 										check_availability(p, 0);
+									}
 								}
 							}
 							ast_mutex_unlock(&p->lock);
@@ -2221,11 +2035,12 @@
 							ast_mutex_unlock(&p->app_lock);
 							ast_mutex_lock(&p->lock);
 							ast_mutex_unlock(&p->lock);
-							if (p->ackcall > 1) 
+							if (p->ackcall) {
 								res = agent_ack_sleep(p);
-							else
+							} else {
 								res = ast_safe_sleep_conditional( chan, 1000, agent_cont_sleep, p );
-							if ((p->ackcall > 1)  && (res == 1)) {
+							}
+							if (p->ackcall && (res == 1)) {
 								AST_LIST_LOCK(&agents);
 								ast_mutex_lock(&p->lock);
 								check_availability(p, 0);
@@ -2352,84 +2167,6 @@
 	return 0;
 }
 
-/*!
- * \brief Dump AgentCallbackLogin agents to the ASTdb database for persistence
- */
-static void dump_agents(void)
-{
-	struct agent_pvt *cur_agent = NULL;
-	char buf[256];
-
-	AST_LIST_TRAVERSE(&agents, cur_agent, list) {
-		if (cur_agent->chan)
-			continue;
-
-		if (!ast_strlen_zero(cur_agent->loginchan)) {
-			snprintf(buf, sizeof(buf), "%s;%s", cur_agent->loginchan, cur_agent->logincallerid);
-			if (ast_db_put(pa_family, cur_agent->agent, buf))
-				ast_log(LOG_WARNING, "failed to create persistent entry in ASTdb for %s!\n", buf);
-			else
-				ast_debug(1, "Saved Agent: %s on %s\n", cur_agent->agent, cur_agent->loginchan);
-		} else {
-			/* Delete -  no agent or there is an error */
-			ast_db_del(pa_family, cur_agent->agent);
-		}
-	}
-}
-
-/*!
- * \brief Reload the persistent agents from astdb.
- */
-static void reload_agents(void)
-{
-	char *agent_num;
-	struct ast_db_entry *db_tree;
-	struct ast_db_entry *entry;
-	struct agent_pvt *cur_agent;
-	char agent_data[256];
-	char *parse;
-	char *agent_chan;
-	char *agent_callerid;
-
-	db_tree = ast_db_gettree(pa_family, NULL);
-
-	AST_LIST_LOCK(&agents);
-	for (entry = db_tree; entry; entry = entry->next) {
-		agent_num = entry->key + strlen(pa_family) + 2;
-		AST_LIST_TRAVERSE(&agents, cur_agent, list) {
-			ast_mutex_lock(&cur_agent->lock);
-			if (strcmp(agent_num, cur_agent->agent) == 0)
-				break;
-			ast_mutex_unlock(&cur_agent->lock);
-		}
-		if (!cur_agent) {
-			ast_db_del(pa_family, agent_num);
-			continue;
-		} else
-			ast_mutex_unlock(&cur_agent->lock);
-		if (!ast_db_get(pa_family, agent_num, agent_data, sizeof(agent_data)-1)) {
-			ast_debug(1, "Reload Agent from AstDB: %s on %s\n", cur_agent->agent, agent_data);
-			parse = agent_data;
-			agent_chan = strsep(&parse, ";");
-			agent_callerid = strsep(&parse, ";");
-			ast_copy_string(cur_agent->loginchan, agent_chan, sizeof(cur_agent->loginchan));
-			if (agent_callerid) {
-				ast_copy_string(cur_agent->logincallerid, agent_callerid, sizeof(cur_agent->logincallerid));
-				set_agentbycallerid(cur_agent->logincallerid, cur_agent->agent);
-			} else
-				cur_agent->logincallerid[0] = '\0';
-			if (cur_agent->loginstart == 0)
-				time(&cur_agent->loginstart);
-			ast_devstate_changed(AST_DEVICE_UNKNOWN, "Agent/%s", cur_agent->agent);	
-		}
-	}
-	AST_LIST_UNLOCK(&agents);
-	if (db_tree) {
-		ast_log(LOG_NOTICE, "Agents successfully reloaded from database.\n");
-		ast_db_freetree(db_tree);
-	}
-}
-
 /*! \brief Part of PBX channel interface */
 static int agent_devicestate(void *data)
 {
@@ -2458,7 +2195,7 @@
 			} else {
 				if (res == AST_DEVICE_BUSY)
 					res = AST_DEVICE_INUSE;
-				if (p->chan || !ast_strlen_zero(p->loginchan)) {
+				if (p->chan) {
 					if (res == AST_DEVICE_INVALID)
 						res = AST_DEVICE_UNKNOWN;
 				} else if (res == AST_DEVICE_INVALID)	
@@ -2523,8 +2260,9 @@
 
 	if (!strcasecmp(args.item, "status")) {
 		char *status = "LOGGEDOUT";
-		if (agent->chan || !ast_strlen_zero(agent->loginchan)) 
-			status = "LOGGEDIN";	
+		if (agent->chan) {
+			status = "LOGGEDIN";
+		}
 		ast_copy_string(buf, status, len);
 	} else if (!strcasecmp(args.item, "password")) 
 		ast_copy_string(buf, agent->password, len);
@@ -2539,8 +2277,9 @@
 			if (tmp)
 				*tmp = '\0';
 		} 
-	} else if (!strcasecmp(args.item, "exten"))
-		ast_copy_string(buf, agent->loginchan, len);	
+	} else if (!strcasecmp(args.item, "exten")) {
+		buf[0] = '\0';
+	}
 
 	AST_LIST_UNLOCK(&agents);
 
@@ -2570,8 +2309,6 @@
 	/* Read in the config */
 	if (!read_agent_config(0))
 		return AST_MODULE_LOAD_DECLINE;
-	if (persistent_agents)
-		reload_agents();
 	/* Dialplan applications */
 	ast_register_application_xml(app, login_exec);
 	ast_register_application_xml(app3, agentmonitoroutgoing_exec);
@@ -2591,11 +2328,7 @@
 
 static int reload(void)
 {
-	if (!read_agent_config(1)) {
-		if (persistent_agents)
-			reload_agents();
-	}
-	return 0;
+	return read_agent_config(1);
 }
 
 static int unload_module(void)

Modified: trunk/configs/agents.conf.sample
URL: http://svn.asterisk.org/svn-view/asterisk/trunk/configs/agents.conf.sample?view=diff&rev=198217&r1=198216&r2=198217
==============================================================================
--- trunk/configs/agents.conf.sample (original)
+++ trunk/configs/agents.conf.sample Fri May 29 20:04:57 2009
@@ -3,13 +3,6 @@
 ;
 
 [general]
-;
-; Define whether callbacklogins should be stored in astdb for
-; persistence. Persistent logins will be reloaded after
-; Asterisk restarts.
-;
-persistentagents=yes
-
 ; Enable or disable a single extension from logging in as multiple agents.
 ; The default value is "yes".
 ;multiplelogin=yes
@@ -37,11 +30,10 @@
 ;autologoffunavail=yes
 ;
 ; Define ackcall to require a DTMF acknowledgement when
-; an agent logs in using agentcallbacklogin.  Default is "no".
-; Can also be set to "always", which will also require AgentLogin
-; agents to acknowledge calls. Use the acceptdtmf option to
-; configure what DTMF key press should be used to acknowledge the
-; call. The default is '#'.
+; an agent logs in using AgentLogin.  Default is "no".
+; Use the acceptdtmf option to configure what DTMF key
+; press should be used to acknowledge the call. The
+; default is '#'.
 ;
 ;ackcall=no
 ;acceptdtmf=#




More information about the svn-commits mailing list