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; }
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; }