本文整理汇总了C++中LM_CRIT函数的典型用法代码示例。如果您正苦于以下问题:C++ LM_CRIT函数的具体用法?C++ LM_CRIT怎么用?C++ LM_CRIT使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LM_CRIT函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dbrow2info
/*!
* \brief Convert database values into ucontact_info
*
* Convert database values into ucontact_info,
* expects 12 rows (contact, expirs, q, callid, cseq, flags,
* ua, received, path, socket, methods, last_modified)
* \param vals database values
* \param contact contact
* \return pointer to the ucontact_info on success, 0 on failure
*/
static inline ucontact_info_t* dbrow2info( db_val_t *vals, str *contact)
{
static ucontact_info_t ci;
static str callid, ua, received, host, path;
int port, proto;
char *p;
memset( &ci, 0, sizeof(ucontact_info_t));
contact->s = (char*)VAL_STRING(vals);
if (VAL_NULL(vals) || contact->s==0 || contact->s[0]==0) {
LM_CRIT("bad contact\n");
return 0;
}
contact->len = strlen(contact->s);
if (VAL_NULL(vals+1)) {
LM_CRIT("empty expire\n");
return 0;
}
ci.expires = VAL_TIME(vals+1);
if (VAL_NULL(vals+2)) {
LM_CRIT("empty q\n");
return 0;
}
ci.q = double2q(VAL_DOUBLE(vals+2));
if (VAL_NULL(vals+4)) {
LM_CRIT("empty cseq_nr\n");
return 0;
}
ci.cseq = VAL_INT(vals+4);
callid.s = (char*)VAL_STRING(vals+3);
if (VAL_NULL(vals+3) || !callid.s || !callid.s[0]) {
LM_CRIT("bad callid\n");
return 0;
}
callid.len = strlen(callid.s);
ci.callid = &callid;
if (VAL_NULL(vals+5)) {
LM_CRIT("empty flag\n");
return 0;
}
ci.flags = VAL_BITMAP(vals+5);
if (VAL_NULL(vals+6)) {
LM_CRIT("empty cflag\n");
return 0;
}
ci.cflags = VAL_BITMAP(vals+6);
ua.s = (char*)VAL_STRING(vals+7);
if (VAL_NULL(vals+7) || !ua.s || !ua.s[0]) {
ua.s = 0;
ua.len = 0;
} else {
ua.len = strlen(ua.s);
}
ci.user_agent = &ua;
received.s = (char*)VAL_STRING(vals+8);
if (VAL_NULL(vals+8) || !received.s || !received.s[0]) {
received.len = 0;
received.s = 0;
} else {
received.len = strlen(received.s);
}
ci.received = received;
path.s = (char*)VAL_STRING(vals+9);
if (VAL_NULL(vals+9) || !path.s || !path.s[0]) {
path.len = 0;
path.s = 0;
} else {
path.len = strlen(path.s);
}
ci.path= &path;
/* socket name */
p = (char*)VAL_STRING(vals+10);
if (VAL_NULL(vals+10) || p==0 || p[0]==0){
ci.sock = 0;
} else {
if (parse_phostport( p, &host.s, &host.len,
&port, &proto)!=0){
LM_ERR("bad socket <%s>\n", p);
return 0;
//.........这里部分代码省略.........
示例2: parse_uri
//.........这里部分代码省略.........
}
}
break;
case TEL_URI_T:
case TELS_URI_T:
/* fix tel uris, move the number in uri and empty the host */
uri->user=uri->host;
uri->host.s="";
uri->host.len=0;
break;
case URN_SERVICE_URI_T:
/* leave the actual service name in the URI domain part */
break;
case ERROR_URI_T:
LM_ERR("unexpected error (BUG?)\n");
goto error_bad_uri;
break; /* do nothing, avoids a compilation warning */
}
#ifdef EXTRA_DEBUG
/* do stuff */
LM_DBG("parsed uri:\n type=%d user=<%.*s>(%d)\n passwd=<%.*s>(%d)\n"
" host=<%.*s>(%d)\n port=<%.*s>(%d): %d\n params=<%.*s>(%d)\n"
" headers=<%.*s>(%d)\n",
uri->type,
uri->user.len, ZSW(uri->user.s), uri->user.len,
uri->passwd.len, ZSW(uri->passwd.s), uri->passwd.len,
uri->host.len, ZSW(uri->host.s), uri->host.len,
uri->port.len, ZSW(uri->port.s), uri->port.len, uri->port_no,
uri->params.len, ZSW(uri->params.s), uri->params.len,
uri->headers.len, ZSW(uri->headers.s), uri->headers.len
);
LM_DBG(" uri params:\n transport=<%.*s>, val=<%.*s>, proto=%d\n",
uri->transport.len, ZSW(uri->transport.s), uri->transport_val.len,
ZSW(uri->transport_val.s), uri->proto);
LM_DBG(" user-param=<%.*s>, val=<%.*s>\n",
uri->user_param.len, ZSW(uri->user_param.s),
uri->user_param_val.len, ZSW(uri->user_param_val.s));
LM_DBG(" method=<%.*s>, val=<%.*s>\n",
uri->method.len, ZSW(uri->method.s),
uri->method_val.len, ZSW(uri->method_val.s));
LM_DBG(" ttl=<%.*s>, val=<%.*s>\n",
uri->ttl.len, ZSW(uri->ttl.s),
uri->ttl_val.len, ZSW(uri->ttl_val.s));
LM_DBG(" maddr=<%.*s>, val=<%.*s>\n",
uri->maddr.len, ZSW(uri->maddr.s),
uri->maddr_val.len, ZSW(uri->maddr_val.s));
LM_DBG(" lr=<%.*s>, val=<%.*s>\n", uri->lr.len, ZSW(uri->lr.s),
uri->lr_val.len, ZSW(uri->lr_val.s));
LM_DBG(" r2=<%.*s>, val=<%.*s>\n", uri->r2.len, ZSW(uri->r2.s),
uri->r2_val.len, ZSW(uri->r2_val.s));
for(i=0; i<URI_MAX_U_PARAMS && uri->u_name[i].s; i++)
LM_DBG("uname=[%p]-><%.*s> uval=[%p]-><%.*s>\n",
uri->u_name[i].s, uri->u_name[i].len, uri->u_name[i].s,
uri->u_val[i].s, uri->u_val[i].len, uri->u_val[i].s);
if (i!=uri->u_params_no)
LM_ERR("inconsisten # of u_name:[%d]!=[%d]\n", i, uri->u_params_no);
#endif
return 0;
error_too_short:
LM_ERR("uri too short: <%.*s> (%d)\n",
len, ZSW(buf), len);
goto error_exit;
error_bad_char:
LM_ERR("bad char '%c' in state %d"
" parsed: <%.*s> (%d) / <%.*s> (%d)\n",
*p, state, (int)(p-buf), ZSW(buf), (int)(p-buf),
len, ZSW(buf), len);
goto error_exit;
error_bad_host:
LM_ERR("bad host in uri (error at char %c in"
" state %d) parsed: <%.*s>(%d) /<%.*s> (%d)\n",
*p, state, (int)(p-buf), ZSW(buf), (int)(p-buf),
len, ZSW(buf), len);
goto error_exit;
error_bad_port:
LM_ERR("bad port in uri (error at char %c in"
" state %d) parsed: <%.*s>(%d) /<%.*s> (%d)\n",
*p, state, (int)(p-buf), ZSW(buf), (int)(p-buf),
len, ZSW(buf), len);
goto error_exit;
error_bad_uri:
LM_ERR("bad uri, state %d parsed: <%.*s> (%d) / <%.*s> (%d)\n",
state, (int)(p-buf), ZSW(buf), (int)(p-buf), len,
ZSW(buf), len);
goto error_exit;
error_headers:
LM_ERR("bad uri headers: <%.*s>(%d) / <%.*s>(%d)\n",
uri->headers.len, ZSW(uri->headers.s), uri->headers.len,
len, ZSW(buf), len);
goto error_exit;
error_bug:
LM_CRIT("bad state %d parsed: <%.*s> (%d) / <%.*s> (%d)\n",
state, (int)(p-buf), ZSW(buf), (int)(p-buf), len, ZSW(buf), len);
error_exit:
ser_error=E_BAD_URI;
uri->type=ERROR_URI_T;
update_stat(bad_URIs, 1);
return E_BAD_URI;
}
示例3: init_sigio
/*!
* \brief sigio specific init
* \param h IO handle
* \param rsig real time signal
* \return returns -1 on error, 0 on success
*/
static int init_sigio(io_wait_h* h, int rsig)
{
int r;
int n;
int signo;
int start_sig;
sigset_t oldset;
if (!_sigio_init){
_sigio_init=1;
_sigio_crt_rtsig=SIGRTMIN;
sigemptyset(&_sigio_rtsig_used);
}
h->signo=0;
if (rsig==0){
start_sig=_sigio_crt_rtsig;
n=SIGRTMAX-SIGRTMIN;
}else{
if ((rsig < SIGRTMIN) || (rsig >SIGRTMAX)){
LM_CRIT("real time signal %d out of"
" range [%d, %d]\n", rsig, SIGRTMIN, SIGRTMAX);
goto error;
}
start_sig=rsig;
n=0;
}
sigemptyset(&h->sset);
sigemptyset(&oldset);
retry1:
/* get current block mask */
if (sigprocmask(SIG_BLOCK, &h->sset, &oldset )==-1){
if (errno==EINTR) goto retry1;
LM_ERR("1st sigprocmask failed: %s [%d]\n",
strerror(errno), errno);
/* try to continue */
}
for (r=start_sig; r<=(n+start_sig); r++){
signo=(r>SIGRTMAX)?r-SIGRTMAX+SIGRTMIN:r;
if (! sigismember(&_sigio_rtsig_used, signo) &&
! sigismember(&oldset, signo)){
sigaddset(&_sigio_rtsig_used, signo);
h->signo=signo;
_sigio_crt_rtsig=(signo<SIGRTMAX)?signo+1:SIGRTMIN;
break;
}
}
if (h->signo==0){
LM_CRIT("init_sigio: %s\n",
rsig?"could not assign requested real-time signal":
"out of real-time signals");
goto error;
}
LM_DBG("trying signal %d... \n", h->signo);
if (sigaddset(&h->sset, h->signo)==-1){
LM_ERR("sigaddset failed for %d: %s [%d]\n",
h->signo, strerror(errno), errno);
goto error;
}
if (sigaddset(&h->sset, SIGIO)==-1){
LM_ERR("sigaddset failed for %d: %s [%d]\n",
SIGIO, strerror(errno), errno);
goto error;
}
retry:
if (sigprocmask(SIG_BLOCK, &h->sset, 0)==-1){
if (errno==EINTR) goto retry;
LM_ERR("sigprocmask failed: %s [%d]\n",
strerror(errno), errno);
goto error;
}
return 0;
error:
h->signo=0;
sigemptyset(&h->sset);
return -1;
}
示例4: uac_auth
int uac_auth(sip_msg_t *msg)
{
static struct authenticate_body auth;
struct uac_credential *crd;
int code, branch;
struct sip_msg *rpl;
struct cell *t;
struct hdr_field *hdr;
HASHHEX response;
str *new_hdr;
sr_cfgenv_t *cenv = NULL;
/* get transaction */
t = uac_tmb.t_gett();
if (t==T_UNDEFINED || t==T_NULL_CELL)
{
LM_CRIT("no current transaction found\n");
goto error;
}
/* get the selected branch */
branch = uac_tmb.t_get_picked_branch();
if (branch<0) {
LM_CRIT("no picked branch (%d)\n",branch);
goto error;
}
rpl = t->uac[branch].reply;
code = t->uac[branch].last_received;
LM_DBG("picked reply is %p, code %d\n",rpl,code);
if (rpl==0)
{
LM_CRIT("empty reply on picked branch\n");
goto error;
}
if (rpl==FAKED_REPLY)
{
LM_ERR("cannot process a FAKED reply\n");
goto error;
}
hdr = get_autenticate_hdr( rpl, code);
if (hdr==0)
{
LM_ERR("failed to extract authenticate hdr\n");
goto error;
}
LM_DBG("header found; body=<%.*s>\n",
hdr->body.len, hdr->body.s);
if (parse_authenticate_body( &hdr->body, &auth)<0)
{
LM_ERR("failed to parse auth hdr body\n");
goto error;
}
/* can we authenticate this realm? */
crd = 0;
/* first look into AVP, if set */
if ( auth_realm_spec.type!=PVT_NONE )
crd = get_avp_credential( msg, &auth.realm );
/* if not found, look into predefined credentials */
if (crd==0)
crd = lookup_realm( &auth.realm );
/* found? */
if (crd==0)
{
LM_DBG("no credential for realm \"%.*s\"\n",
auth.realm.len, auth.realm.s);
goto error;
}
/* do authentication */
do_uac_auth( &msg->first_line.u.request.method,
&t->uac[branch].uri, crd, &auth, response);
/* build the authorization header */
new_hdr = build_authorization_hdr( code, &t->uac[branch].uri,
crd, &auth, response);
if (new_hdr==0)
{
LM_ERR("failed to build authorization hdr\n");
goto error;
}
/* so far, so good -> add the header and set the proper RURI */
if ( apply_urihdr_changes( msg, &t->uac[branch].uri, new_hdr)<0 )
{
LM_ERR("failed to apply changes\n");
goto error;
}
/* mark request in T with uac auth for increase of cseq via dialog
* - this function is executed in failure route, msg_flags will be
* reset afterwards by tm fake env */
if(t->uas.request) {
t->uas.request->msg_flags |= FL_UAC_AUTH;
cenv = sr_cfgenv_get();
//.........这里部分代码省略.........
示例5: next_state_dlg
/*!
* \brief Update a dialog state according a event and the old state
*
* This functions implement the main state machine that update a dialog
* state according a processed event and the current state. If necessary
* it will delete the processed dialog. The old and new state are also
* saved for reference.
* \param dlg updated dialog
* \param event current event
* \param old_state old dialog state
* \param new_state new dialog state
* \param unref set to 1 when the dialog was deleted, 0 otherwise
*/
void next_state_dlg(dlg_cell_t *dlg, int event,
int *old_state, int *new_state, int *unref)
{
dlg_entry_t *d_entry;
d_entry = &(d_table->entries[dlg->h_entry]);
*unref = 0;
dlg_lock( d_table, d_entry);
*old_state = dlg->state;
switch (event) {
case DLG_EVENT_TDEL:
switch (dlg->state) {
case DLG_STATE_UNCONFIRMED:
case DLG_STATE_EARLY:
dlg->state = DLG_STATE_DELETED;
unref_dlg_unsafe(dlg,1,d_entry);
*unref = 1;
break;
case DLG_STATE_CONFIRMED_NA:
case DLG_STATE_CONFIRMED:
unref_dlg_unsafe(dlg,1,d_entry);
break;
case DLG_STATE_DELETED:
*unref = 1;
break;
default:
log_next_state_dlg(event, dlg);
}
break;
case DLG_EVENT_RPL1xx:
switch (dlg->state) {
case DLG_STATE_UNCONFIRMED:
case DLG_STATE_EARLY:
dlg->state = DLG_STATE_EARLY;
break;
default:
log_next_state_dlg(event, dlg);
}
break;
case DLG_EVENT_RPL3xx:
switch (dlg->state) {
case DLG_STATE_UNCONFIRMED:
case DLG_STATE_EARLY:
dlg->state = DLG_STATE_DELETED;
*unref = 1;
break;
default:
log_next_state_dlg(event, dlg);
}
break;
case DLG_EVENT_RPL2xx:
switch (dlg->state) {
case DLG_STATE_DELETED:
if (dlg->dflags&DLG_FLAG_HASBYE) {
LM_CRIT("bogus event %d in state %d (with BYE) "
"for dlg %p [%u:%u] with clid '%.*s' and tags '%.*s' '%.*s'\n",
event, dlg->state, dlg, dlg->h_entry, dlg->h_id,
dlg->callid.len, dlg->callid.s,
dlg->tag[DLG_CALLER_LEG].len, dlg->tag[DLG_CALLER_LEG].s,
dlg->tag[DLG_CALLEE_LEG].len, dlg->tag[DLG_CALLEE_LEG].s);
break;
}
ref_dlg_unsafe(dlg,1);
case DLG_STATE_UNCONFIRMED:
case DLG_STATE_EARLY:
dlg->state = DLG_STATE_CONFIRMED_NA;
break;
case DLG_STATE_CONFIRMED_NA:
case DLG_STATE_CONFIRMED:
break;
default:
log_next_state_dlg(event, dlg);
}
break;
case DLG_EVENT_REQACK:
switch (dlg->state) {
case DLG_STATE_CONFIRMED_NA:
dlg->state = DLG_STATE_CONFIRMED;
break;
case DLG_STATE_CONFIRMED:
break;
case DLG_STATE_DELETED:
break;
//.........这里部分代码省略.........
示例6: init_addresses
/*
* Initialize data structures
*/
int init_addresses(void)
{
if (!db_url.s) {
LM_INFO("db_url parameter of permissions module not set, "
"disabling allow_address\n");
return 0;
} else {
if (db_bind_mod(&db_url, &perm_dbf) < 0) {
LM_ERR("load a database support module\n");
return -1;
}
if (!DB_CAPABILITY(perm_dbf, DB_CAP_QUERY)) {
LM_ERR("database module does not implement 'query' function\n");
return -1;
}
}
addr_hash_table_1 = addr_hash_table_2 = 0;
addr_hash_table = 0;
db_handle = perm_dbf.init(&db_url);
if (!db_handle) {
LM_ERR("unable to connect database\n");
return -1;
}
if(db_check_table_version(&perm_dbf, db_handle, &address_table, TABLE_VERSION) < 0) {
LM_ERR("error during table version check.\n");
perm_dbf.close(db_handle);
return -1;
}
addr_hash_table_1 = new_addr_hash_table();
if (!addr_hash_table_1) return -1;
addr_hash_table_2 = new_addr_hash_table();
if (!addr_hash_table_2) goto error;
addr_hash_table = (struct addr_list ***)shm_malloc
(sizeof(struct addr_list **));
if (!addr_hash_table) {
LM_ERR("no more shm memory for addr_hash_table\n");
goto error;
}
*addr_hash_table = addr_hash_table_1;
subnet_table_1 = new_subnet_table();
if (!subnet_table_1) goto error;
subnet_table_2 = new_subnet_table();
if (!subnet_table_2) goto error;
subnet_table = (struct subnet **)shm_malloc(sizeof(struct subnet *));
if (!subnet_table) {
LM_ERR("no more shm memory for subnet_table\n");
goto error;
}
*subnet_table = subnet_table_1;
domain_list_table_1 = new_domain_name_table();
if (!domain_list_table_1) goto error;
domain_list_table_2 = new_domain_name_table();
if (!domain_list_table_2) goto error;
domain_list_table = (struct domain_name_list ***)shm_malloc(sizeof(struct domain_name_list **));
if (!domain_list_table) {
LM_ERR("no more shm memory for domain name table\n");
goto error;
}
*domain_list_table = domain_list_table_1;
if (reload_address_table() == -1) {
LM_CRIT("reload of address table failed\n");
goto error;
}
perm_dbf.close(db_handle);
db_handle = 0;
return 0;
error:
if (addr_hash_table_1) {
free_addr_hash_table(addr_hash_table_1);
addr_hash_table_1 = 0;
}
if (addr_hash_table_2) {
free_addr_hash_table(addr_hash_table_2);
addr_hash_table_2 = 0;
}
if (addr_hash_table) {
//.........这里部分代码省略.........
示例7: mod_init
/**
* init module function
*/
static int mod_init(void)
{
m_tree_t *pt = NULL;
if(mtree_init_rpc()!=0)
{
LM_ERR("failed to register RPC commands\n");
return -1;
}
if(pv_parse_spec(&value_param, &pv_value)<00
|| !(pv_is_w(&pv_value)))
{
LM_ERR("cannot parse value pv or is read only\n");
return -1;
}
if (pv_parse_spec(&values_param, &pv_values) <0
|| pv_values.type != PVT_AVP) {
LM_ERR("cannot parse values avp\n");
return -1;
}
if(pv_parse_spec(&dstid_param, &pv_dstid)<0
|| pv_dstid.type!=PVT_AVP)
{
LM_ERR("cannot parse dstid avp\n");
return -1;
}
if(pv_parse_spec(&weight_param, &pv_weight)<0
|| pv_weight.type!=PVT_AVP)
{
LM_ERR("cannot parse dstid avp\n");
return -1;
}
if(pv_parse_spec(&count_param, &pv_count)<0
|| !(pv_is_w(&pv_weight)))
{
LM_ERR("cannot parse count pv or is read-only\n");
return -1;
}
if(mt_fetch_rows<=0)
mt_fetch_rows = 1000;
if(mt_char_list.len<=0)
{
LM_ERR("invalid prefix char list\n");
return -1;
}
LM_DBG("mt_char_list=%s \n", mt_char_list.s);
mt_char_table_init();
/* binding to mysql module */
if(db_bind_mod(&db_url, &mt_dbf))
{
LM_ERR("database module not found\n");
return -1;
}
if (!DB_CAPABILITY(mt_dbf, DB_CAP_ALL))
{
LM_ERR("database module does not "
"implement all functions needed by the module\n");
return -1;
}
/* open a connection with the database */
db_con = mt_dbf.init(&db_url);
if(db_con==NULL)
{
LM_ERR("failed to connect to the database\n");
return -1;
}
LM_DBG("database connection opened successfully\n");
if ( (mt_lock=lock_alloc())==0) {
LM_CRIT("failed to alloc lock\n");
goto error1;
}
if (lock_init(mt_lock)==0 ) {
LM_CRIT("failed to init lock\n");
goto error1;
}
if(mt_defined_trees())
{
LM_DBG("static trees defined\n");
pt = mt_get_first_tree();
while(pt!=NULL)
{
LM_DBG("loading from tree <%.*s>\n",
//.........这里部分代码省略.........
示例8: mod_init
/**
* init module function
*/
static int mod_init(void)
{
LM_INFO("initializing...\n");
init_db_url( db_url , 0 /*cannot be null*/);
db_table.len = strlen(db_table.s);
sdomain_column.len = strlen(sdomain_column.s);
prefix_column.len = strlen(prefix_column.s);
domain_column.len = strlen(domain_column.s);
prefix.len = strlen(prefix.s);
pdt_char_list.len = strlen(pdt_char_list.s);
if(pdt_char_list.len<=0)
{
LM_ERR("invalid pdt char list\n");
return -1;
}
LM_INFO("pdt_char_list=%s \n",pdt_char_list.s);
/* binding to mysql module */
if(db_bind_mod(&db_url, &pdt_dbf))
{
LM_ERR("database module not found\n");
return -1;
}
if (!DB_CAPABILITY(pdt_dbf, DB_CAP_ALL))
{
LM_ERR("database module does not "
"implement all functions needed by the module\n");
return -1;
}
/* open a connection with the database */
db_con = pdt_dbf.init(&db_url);
if(db_con==NULL)
{
LM_ERR("failed to connect to the database\n");
return -1;
}
if (pdt_dbf.use_table(db_con, &db_table) < 0)
{
LM_ERR("failed to use_table\n");
goto error1;
}
LM_DBG("database connection opened successfully\n");
/* create & init lock */
if ((pdt_lock = lock_init_rw()) == NULL) {
LM_CRIT("failed to init lock\n");
goto error1;
}
/* tree pointer in shm */
_ptree = (pdt_tree_t**)shm_malloc( sizeof(pdt_tree_t*) );
if (_ptree==0) {
LM_ERR("out of shm mem for pdtree\n");
goto error1;
}
*_ptree=0;
/* loading all information from database */
if(pdt_load_db()!=0)
{
LM_ERR("cannot load info from database\n");
goto error1;
}
pdt_dbf.close(db_con);
db_con = 0;
#if 0
pdt_print_tree(*_ptree);
#endif
/* success code */
return 0;
error1:
if (pdt_lock)
{
lock_destroy_rw( pdt_lock );
pdt_lock = 0;
}
if(_ptree!=0)
shm_free(_ptree);
if(db_con!=NULL)
{
pdt_dbf.close(db_con);
db_con = 0;
}
return -1;
}
示例9: child_init
/**
* Initialize children
*/
static int child_init(int rank)
{
if (rank==PROC_INIT || rank==PROC_TCP_MAIN)
return 0;
if (rank==PROC_MAIN && dbmode == RLS_DB_ONLY)
{
int i;
for (i = 0; i < rls_notifier_processes; i++)
{
char tmp[16];
snprintf(tmp, 16, "RLS NOTIFIER %d", i);
rls_notifier_id[i] = i;
if (fork_basic_utimer(PROC_TIMER, tmp, 1,
timer_send_notify,
&rls_notifier_id[i],
1000000/rls_notifier_poll_rate) < 0)
{
LM_ERR("Failed to start RLS NOTIFIER %d\n", i);
return -1;
}
}
return 0;
}
LM_DBG("child [%d] pid [%d]\n", rank, getpid());
if (rls_dbf.init==0)
{
LM_CRIT("database not bound\n");
return -1;
}
/* In DB only mode do not pool the connections where possible. */
if (dbmode == RLS_DB_ONLY && rls_dbf.init2)
rls_db = rls_dbf.init2(&db_url, DB_POOLING_NONE);
else
rls_db = rls_dbf.init(&db_url);
if (!rls_db)
{
LM_ERR("child %d: Error while connecting database\n",
rank);
return -1;
}
else
{
if (rls_dbf.use_table(rls_db, &rlsubs_table) < 0)
{
LM_ERR("child %d: Error in use_table rlsubs_table\n", rank);
return -1;
}
LM_DBG("child %d: Database connection opened successfully\n", rank);
}
if (rlpres_dbf.init==0)
{
LM_CRIT("database not bound\n");
return -1;
}
/* In DB only mode do not pool the connections where possible. */
if (dbmode == RLS_DB_ONLY && rlpres_dbf.init2)
rlpres_db = rlpres_dbf.init2(&db_url, DB_POOLING_NONE);
else
rlpres_db = rlpres_dbf.init(&db_url);
if (!rlpres_db)
{
LM_ERR("child %d: Error while connecting database\n",
rank);
return -1;
}
else
{
if (rlpres_dbf.use_table(rlpres_db, &rlpres_table) < 0)
{
LM_ERR("child %d: Error in use_table rlpres_table\n", rank);
return -1;
}
LM_DBG("child %d: Database connection opened successfully\n", rank);
}
if (rls_xcap_dbf.init==0)
{
LM_CRIT("database not bound\n");
return -1;
}
rls_xcap_db = rls_xcap_dbf.init(&xcap_db_url);
if (!rls_xcap_db)
{
LM_ERR("child %d: Error while connecting database\n", rank);
return -1;
}
else
{
//.........这里部分代码省略.........
示例10: pv_set_tm_branch_avp
int pv_set_tm_branch_avp(struct sip_msg *msg, pv_param_t *param, int op,
pv_value_t *val)
{
int avp_name;
int_str avp_val;
int flags, res=0;
unsigned short name_type;
int idx, idxf;
struct usr_avp **old_list=NULL;
struct usr_avp **avp_list=NULL;
if (!msg || !val)
goto error;
avp_list = get_bavp_list();
if (!avp_list) {
pv_get_null(msg, param, val);
goto success;
}
if (!param) {
LM_ERR("bad parameters\n");
goto error;
}
if (pv_get_avp_name(msg, param, &avp_name, &name_type)) {
LM_ALERT("BUG in getting bavp name\n");
goto error;
}
/* get the index */
if(pv_get_spec_index(msg, param, &idx, &idxf)!=0) {
LM_ERR("invalid index\n");
goto error;
}
/* setting the avp head */
old_list = set_avp_list(avp_list);
if (!old_list) {
LM_CRIT("no bavp head list found\n");
goto error;
}
if(val == NULL) {
if(op == COLONEQ_T || idxf == PV_IDX_ALL)
destroy_avps(name_type, avp_name, 1);
else {
if(idx < 0) {
LM_ERR("index with negative value\n");
goto error;
}
destroy_index_avp(name_type, avp_name, idx);
}
/* restoring head */
goto success;
}
if(op == COLONEQ_T || idxf == PV_IDX_ALL)
destroy_avps(name_type, avp_name, 1);
flags = name_type;
if(val->flags&PV_TYPE_INT) {
avp_val.n = val->ri;
} else {
avp_val.s = val->rs;
flags |= AVP_VAL_STR;
}
if(idxf == PV_IDX_INT || idxf == PV_IDX_PVAR) {
if(replace_avp(flags, avp_name, avp_val, idx)< 0) {
LM_ERR("failed to replace bavp\n");
goto error;
}
} else {
if (add_avp(flags, avp_name, avp_val)<0) {
LM_ERR("error - cannot add bavp\n");
goto error;
}
}
goto success;
error:
res = -1;
success:
if (old_list)
set_avp_list(old_list);
return res;
}
示例11: mod_init
static int mod_init(void)
{
unsigned int timer_sets,set;
unsigned int roundto_init;
LM_INFO("TM - initializing...\n");
/* checking if we have sufficient bitmap capacity for given
maximum number of branches */
if (MAX_BRANCHES+1>31) {
LM_CRIT("Too many max UACs for UAC branch_bm_t bitmap: %d\n",
MAX_BRANCHES );
return -1;
}
fix_flag_name(minor_branch_flag_str, minor_branch_flag);
minor_branch_flag =
get_flag_id_by_name(FLAG_TYPE_BRANCH, minor_branch_flag_str);
if (minor_branch_flag!=-1) {
if (minor_branch_flag > (8*sizeof(int)-1)) {
LM_CRIT("invalid minor branch flag\n");
return -1;
}
minor_branch_flag = 1<<minor_branch_flag;
} else {
minor_branch_flag = 0;
}
/* if statistics are disabled, prevent their registration to core */
if (tm_enable_stats==0)
#ifdef STATIC_TM
tm_exports.stats = 0;
#else
exports.stats = 0;
#endif
if (init_callid() < 0) {
LM_CRIT("Error while initializing Call-ID generator\n");
return -1;
}
/* how many timer sets do we need to create? */
timer_sets = (timer_partitions<=1)?1:timer_partitions ;
/* try first allocating all the structures needed for syncing */
if (lock_initialize( timer_sets )==-1)
return -1;
/* building the hash table*/
if (!init_hash_table( timer_sets )) {
LM_ERR("initializing hash_table failed\n");
return -1;
}
/* init static hidden values */
init_t();
if (!tm_init_timers( timer_sets ) ) {
LM_ERR("timer init failed\n");
return -1;
}
/* the ROUNDTO macro taken from the locking interface */
#ifdef ROUNDTO
roundto_init = ROUNDTO;
#else
roundto_init = sizeof(void *);
#endif
while (roundto_init != 1) {
tm_timer_shift++;
roundto_init >>= 1;
}
LM_DBG("timer set shift is %d\n", tm_timer_shift);
/* register the timer functions */
for ( set=0 ; set<timer_sets ; set++ ) {
if (register_timer( "tm-timer", timer_routine,
(void*)(long)set, 1, TIMER_FLAG_DELAY_ON_DELAY) < 0 ) {
LM_ERR("failed to register timer for set %d\n",set);
return -1;
}
if (register_utimer( "tm-utimer", utimer_routine,
(void*)(long)set, 100*1000, TIMER_FLAG_DELAY_ON_DELAY)<0) {
LM_ERR("failed to register utimer for set %d\n",set);
return -1;
}
}
if (uac_init()==-1) {
LM_ERR("uac_init failed\n");
return -1;
}
if (init_tmcb_lists()!=1) {
LM_CRIT("failed to init tmcb lists\n");
return -1;
//.........这里部分代码省略.........
示例12: pv_get_tm_branch_avp
int pv_get_tm_branch_avp(struct sip_msg *msg, pv_param_t *param,
pv_value_t *val)
{
int avp_name;
int_str avp_value;
unsigned short name_type;
int idx, idxf, res=0;
struct usr_avp **old_list=NULL;
struct usr_avp **avp_list=NULL;
struct usr_avp *avp;
int_str avp_value0;
struct usr_avp *avp0;
int n=0;
char *p;
if (!msg || !val)
goto error;
avp_list = get_bavp_list();
if (!avp_list) {
pv_get_null(msg, param, val);
goto success;
}
if (!param) {
LM_ERR("bad parameters\n");
goto error;
}
if (pv_get_avp_name(msg, param, &avp_name, &name_type)) {
LM_ALERT("BUG in getting bavp name\n");
goto error;
}
/* get the index */
if(pv_get_spec_index(msg, param, &idx, &idxf)!=0) {
LM_ERR("invalid index\n");
goto error;
}
/* setting the avp head */
old_list = set_avp_list(avp_list);
if (!old_list) {
LM_CRIT("no bavp head list found\n");
goto error;
}
if ((avp=search_first_avp(name_type, avp_name, &avp_value, 0))==0) {
pv_get_null(msg, param, val);
goto success;
}
val->flags = PV_VAL_STR;
if ( (idxf==0 || idxf==PV_IDX_INT) && idx==0) {
if(avp->flags & AVP_VAL_STR) {
val->rs = avp_value.s;
} else {
val->rs.s = sint2str(avp_value.n, &val->rs.len);
val->ri = avp_value.n;
val->flags |= PV_VAL_INT|PV_TYPE_INT;
}
goto success;
}
if(idxf==PV_IDX_ALL) {
p = pv_local_buf;
do {
if(avp->flags & AVP_VAL_STR) {
val->rs = avp_value.s;
} else {
val->rs.s = sint2str(avp_value.n, &val->rs.len);
}
if(p-pv_local_buf+val->rs.len+1>PV_LOCAL_BUF_SIZE) {
LM_ERR("local buffer length exceeded!\n");
pv_get_null(msg, param, val);
goto success;
}
memcpy(p, val->rs.s, val->rs.len);
p += val->rs.len;
if(p-pv_local_buf+PV_FIELD_DELIM_LEN+1>PV_LOCAL_BUF_SIZE) {
LM_ERR("local buffer length exceeded\n");
pv_get_null(msg, param, val);
goto success;
}
memcpy(p, PV_FIELD_DELIM, PV_FIELD_DELIM_LEN);
p += PV_FIELD_DELIM_LEN;
} while ((avp=search_first_avp(name_type, avp_name,
&avp_value, avp))!=0);
*p = 0;
val->rs.s = pv_local_buf;
val->rs.len = p - pv_local_buf;
goto success;
}
/* we have a numeric index */
if(idx<0) {
n = 1;
avp0 = avp;
while ((avp0=search_first_avp(name_type, avp_name,
&avp_value0, avp0))!=0) n++;
idx = -idx;
//.........这里部分代码省略.........
示例13: dp_can_connect_str
int dp_can_connect_str(str *domain, int rec_level) {
struct rdata* head;
struct rdata* l;
struct naptr_rdata* naptr;
struct naptr_rdata* next_naptr;
int ret;
str newdomain;
char uri[MAX_URI_SIZE];
struct avp_stack stack;
int last_order = -1;
int failed = 0;
int found_anything = 0;
str pattern, replacement, result;
stack_reset(&stack);
/* If we're in a recursive call, set the domain-replacement */
if ( rec_level > 0 ) {
stack_push(&stack, domain_replacement_avp.s, domain->s);
stack.succeeded = 0;
}
if (rec_level > MAX_DDDS_RECURSIONS) {
LM_ERR("too many indirect NAPTRs. Aborting at %.*s.\n", domain->len,
ZSW(domain->s));
return(DP_DDDS_RET_DNSERROR);
}
LM_INFO("looking up Domain itself: %.*s\n",domain->len, ZSW(domain->s));
ret = check_rule(domain,"D2P+sip:dom", 11, &stack);
if (ret == 1) {
LM_INFO("found a match on domain itself\n");
stack_to_avp(&stack);
return(DP_DDDS_RET_POSITIVE);
} else if (ret == 0) {
LM_INFO("no match on domain itself.\n");
stack_reset(&stack);
/* If we're in a recursive call, set the domain-replacement */
if ( rec_level > 0 ) {
stack_push(&stack, domain_replacement_avp.s, (char *) domain->s);
stack.succeeded = 0;
}
} else {
return(DP_DDDS_RET_DNSERROR); /* actually: DB error */
}
LM_INFO("doing DDDS with %.*s\n",domain->len, ZSW(domain->s));
head = get_record(domain->s, T_NAPTR);
if (head == 0) {
LM_NOTICE("no NAPTR record found for %.*s.\n",
domain->len, ZSW(domain->s));
return(DP_DDDS_RET_NOTFOUND);
}
LM_DBG("found the following NAPTRs: \n");
for (l = head; l; l = l->next) {
if (l->type != T_NAPTR) {
LM_DBG("found non-NAPTR record.\n");
continue; /*should never happen*/
}
naptr = (struct naptr_rdata*)l->rdata;
if (naptr == 0) {
LM_CRIT("null rdata\n");
continue;
}
LM_DBG("order %u, pref %u, flen %u, flags '%.*s', slen %u, "
"services '%.*s', rlen %u, regexp '%.*s', repl '%s'\n",
naptr->order, naptr->pref,
naptr->flags_len, (int)(naptr->flags_len), ZSW(naptr->flags),
naptr->services_len,
(int)(naptr->services_len), ZSW(naptr->services), naptr->regexp_len,
(int)(naptr->regexp_len), ZSW(naptr->regexp),
ZSW(naptr->repl)
);
}
LM_DBG("sorting...\n");
naptr_sort(&head);
for (l = head; l; l = l->next) {
if (l->type != T_NAPTR) continue; /*should never happen*/
naptr = (struct naptr_rdata*)l->rdata;
if (naptr == 0) {
LM_CRIT("null rdata\n");
continue;
}
LM_DBG("considering order %u, pref %u, flen %u, flags '%.*s', slen %u, "
"services '%.*s', rlen %u, regexp '%.*s', repl '%s'\n",
naptr->order, naptr->pref,
naptr->flags_len, (int)(naptr->flags_len), ZSW(naptr->flags),
naptr->services_len,
(int)(naptr->services_len), ZSW(naptr->services), naptr->regexp_len,
(int)(naptr->regexp_len), ZSW(naptr->regexp),
ZSW(naptr->repl)
);
//.........这里部分代码省略.........
示例14: db_load_urecord_by_ruid
/*!
* \brief Loads from DB all contacts for a RUID
* \param _c database connection
* \param _d domain
* \param _aor address of record
* \return pointer to the record on success, 0 on errors or if nothing is found
*/
urecord_t* db_load_urecord_by_ruid(udomain_t* _d, str *_ruid)
{
ucontact_info_t *ci;
db_key_t columns[18];
db_key_t keys[1];
db_key_t order;
db_val_t vals[1];
db1_res_t* res = NULL;
db_row_t *row;
str contact;
str aor;
char aorbuf[512];
str domain;
urecord_t* r;
ucontact_t* c;
keys[0] = &ruid_col;
vals[0].type = DB1_STR;
vals[0].nul = 0;
vals[0].val.str_val = *_ruid;
columns[0] = &contact_col;
columns[1] = &expires_col;
columns[2] = &q_col;
columns[3] = &callid_col;
columns[4] = &cseq_col;
columns[5] = &flags_col;
columns[6] = &cflags_col;
columns[7] = &user_agent_col;
columns[8] = &received_col;
columns[9] = &path_col;
columns[10] = &sock_col;
columns[11] = &methods_col;
columns[12] = &last_mod_col;
columns[13] = &ruid_col;
columns[14] = &instance_col;
columns[15] = ®_id_col;
columns[16] = &user_col;
columns[17] = &domain_col;
if (desc_time_order)
order = &last_mod_col;
else
order = &q_col;
if (ul_db_layer_query(_d, &vals[0].val.str_val, &vals[1].val.str_val, keys, 0, vals, columns, 1, 18, order,
&res) < 0) {
LM_ERR("db_query failed\n");
return 0;
}
if (RES_ROW_N(res) == 0) {
LM_DBG("aor %.*s not found in table %.*s\n",_ruid->len, _ruid->s,
_d->name->len, _d->name->s);
ul_db_layer_free_result(_d, res);
return 0;
}
r = 0;
/* use first row - shouldn't be more */
row = RES_ROWS(res);
ci = dbrow2info(ROW_VALUES(RES_ROWS(res)), &contact);
if (ci==0) {
LM_ERR("skipping record for %.*s in table %s\n",
_ruid->len, _ruid->s, _d->name->s);
goto done;
}
aor.s = (char*)VAL_STRING(ROW_VALUES(row) + 15);
aor.len = strlen(aor.s);
if (use_domain) {
domain.s = (char*)VAL_STRING(ROW_VALUES(row) + 17);
if (VAL_NULL(ROW_VALUES(row)+17) || domain.s==0 || domain.s[0]==0){
LM_CRIT("empty domain record for user %.*s...skipping\n",
aor.len, aor.s);
goto done;
}
domain.len = strlen(domain.s);
if(aor.len + domain.len + 2 >= 512) {
LM_ERR("AoR is too big\n");
goto done;
}
memcpy(aorbuf, aor.s, aor.len);
aorbuf[aor.len] = '@';
memcpy(aorbuf + aor.len + 1, domain.s, domain.len);
aor.len += 1 + domain.len;
aor.s = aorbuf;
aor.s[aor.len] = '\0';
}
//.........这里部分代码省略.........
示例15: handle_sigs
//.........这里部分代码省略.........
/* we end the program in all these cases */
if (sig_flag==SIGINT)
LM_DBG("INT received, program terminates\n");
else
LM_DBG("SIGTERM received, program terminates\n");
/* first of all, kill the children also */
kill_all_children(SIGTERM);
if (signal(SIGALRM, sig_alarm_kill) == SIG_ERR ) {
LM_ERR("could not install SIGALARM handler\n");
/* continue, the process will die anyway if no
* alarm is installed which is exactly what we want */
}
alarm(shutdown_time);
while(wait(0) > 0); /* Wait for all the children to terminate */
signal(SIGALRM, sig_alarm_abort);
cleanup(1); /* cleanup & show status*/
alarm(0);
signal(SIGALRM, SIG_IGN);
dprint("Thank you for flying " NAME "\n");
exit(0);
break;
case SIGUSR1:
#ifdef PKG_MALLOC
LM_GEN1(memdump, "Memory status (pkg):\n");
pkg_status();
#endif
#ifdef SHM_MEM
LM_GEN1(memdump, "Memory status (shm):\n");
shm_status();
#endif
break;
case SIGUSR2:
#ifdef PKG_MALLOC
set_pkg_stats( get_pkg_status_holder(process_no) );
#endif
break;
case SIGCHLD:
do_exit = 0;
while ((chld=waitpid( -1, &chld_status, WNOHANG ))>0) {
/* is it a process we know about? */
for( i=0 ; i<counted_processes ; i++ )
if (pt[i].pid==chld) break;
if (i==counted_processes) {
LM_DBG("unkown child process %d ended. Ignoring\n",chld);
continue;
}
do_exit = 1;
/* process the signal */
overall_status |= chld_status;
LM_DBG("status = %d\n",overall_status);
if (WIFEXITED(chld_status))
LM_INFO("child process %d exited normally,"
" status=%d\n", chld,
WEXITSTATUS(chld_status));
else if (WIFSIGNALED(chld_status)) {
LM_INFO("child process %d exited by a signal"
" %d\n", chld, WTERMSIG(chld_status));
#ifdef WCOREDUMP
LM_INFO("core was %sgenerated\n",
WCOREDUMP(chld_status) ? "" : "not " );
#endif
}else if (WIFSTOPPED(chld_status))
LM_INFO("child process %d stopped by a"
" signal %d\n", chld,
WSTOPSIG(chld_status));
}
if (!do_exit)
break;
LM_INFO("terminating due to SIGCHLD\n");
/* exit */
kill_all_children(SIGTERM);
if (signal(SIGALRM, sig_alarm_kill) == SIG_ERR ) {
LM_ERR("could not install SIGALARM handler\n");
/* continue, the process will die anyway if no
* alarm is installed which is exactly what we want */
}
alarm(shutdown_time);
while(wait(0) > 0); /* wait for all the children to terminate*/
signal(SIGALRM, sig_alarm_abort);
cleanup(1); /* cleanup & show status*/
alarm(0);
signal(SIGALRM, SIG_IGN);
LM_DBG("terminating due to SIGCHLD\n");
exit(overall_status ? -1 : 0);
break;
case SIGHUP: /* ignoring it*/
LM_DBG("SIGHUP received, ignoring it\n");
break;
default:
LM_CRIT("unhandled signal %d\n", sig_flag);
}
sig_flag=0;
}