示例#1
0
static inline int get_url(struct sip_msg* msg, struct db_url_container* _url_struc,
								struct db_url** parsed_url, int is_async)
{
	int id=0;
	unsigned int gp_flags;

	str sid;
	gparam_p gp;

	if (_url_struc) {
		if (_url_struc->type == GPARAM) {
			gp = _url_struc->u.gp;
			if (fixup_get_isvalue(msg, gp, &id, &sid, &gp_flags) < 0
					|| !(gp_flags&GPARAM_INT_VALUE_FLAG)) {
				LM_ERR("Failed to fetch PVAR str value!\n");
				return -1;
			}

			if (id2db_url(id,1, is_async, parsed_url)) {
				LM_ERR("faild to get db url!\n");
				return -1;
			}
		} else {
			*parsed_url = _url_struc->u.url;
		}
	} else {
		*parsed_url = default_db_url;
	}

	return 0;
}
示例#2
0
static int w_agent_login(struct sip_msg *req, char *agent_v, char *state_v)
{
	struct cc_agent *agent, *prev_agent;
	str agent_s;
	int state;
	unsigned int flags;


	/* get state */
	if (fixup_get_isvalue( req, (gparam_p)state_v, &state, &agent_s,
	&flags)!=0 || ((flags|GPARAM_INT_VALUE_FLAG)==0) ) {
		LM_ERR("unable to evaluate state spec \n");
		return -1;
	}
	/* get agent */
	if (fixup_get_svalue( req, (gparam_p)agent_v, &agent_s)!=0) {
		LM_ERR("unable to evaluate agent spec \n");
		return -2;
	}

	/* block access to data */
	lock_get( data->lock );

	/* name of the agent */
	agent = get_agent_by_name( data, &agent_s, &prev_agent);
	if (agent==NULL) {
		lock_release( data->lock );
		LM_DBG("agent <%.*s> not found\n",agent_s.len,agent_s.s);
		return -3;
	}

	if (agent->loged_in != state) {

		if(state && (agent->state==CC_AGENT_WRAPUP) &&
			(get_ticks() - agent->last_call_end > wrapup_time))
			agent->state = CC_AGENT_FREE;

		if(state && data->agents[CC_AG_ONLINE] == NULL)
			data->last_online_agent = agent;

		agent_switch_login(data, agent, prev_agent);

		if(state) {
			data->logedin_agents++;
			log_agent_to_flows( data, agent, 1);
		} else {
			data->logedin_agents--;
			log_agent_to_flows(data, agent, 0);
		}
	}

	/* release access to data */
	lock_release( data->lock );

	return 1;
}