本文整理汇总了C++中usrloc_api_t::delete_pcontact方法的典型用法代码示例。如果您正苦于以下问题:C++ usrloc_api_t::delete_pcontact方法的具体用法?C++ usrloc_api_t::delete_pcontact怎么用?C++ usrloc_api_t::delete_pcontact使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类usrloc_api_t
的用法示例。
在下文中一共展示了usrloc_api_t::delete_pcontact方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: process_contact
//.........这里部分代码省略.........
}
/*check for alias - NAT */
rest = uri.sip_params.s;
rest_len = uri.sip_params.len;
while (rest_len >= ALIAS_LEN) {
if (strncmp(rest, ALIAS, ALIAS_LEN) == 0) {
has_alias = 1;
break;
}
sep = memchr(rest, 59 /* ; */, rest_len);
if (sep == NULL) {
LM_DBG("no alias param\n");
break;
} else {
rest_len = rest_len - (sep - rest + 1);
rest = sep + 1;
}
}
if (has_alias) {
val = rest + ALIAS_LEN;
val_len = rest_len - ALIAS_LEN;
port = memchr(val, 126 /* ~ */, val_len);
if (port == NULL) {
LM_ERR("no '~' in alias param value\n");
return RESULT_ERROR;
}
port++;
// received_port = atoi(port);
trans = memchr(port, 126 /* ~ */, val_len - (port - val));
if (trans == NULL) {
LM_ERR("no second '~' in alias param value\n");
return RESULT_ERROR;
}
received_port_len = trans - port;
trans = trans + 1;
received_proto = *trans - 48 /* char 0 */;
memcpy(bufport, port, received_port_len);
bufport[received_port_len]=0;
ci.received_host.s = val;
ci.received_host.len = port - val - 1;
LM_DBG("Setting received host in search to [%.*s]\n", ci.received_host.len, ci.received_host.s);
ci.received_port = atoi(bufport);
LM_DBG("Setting received port in search to %d\n", ci.received_port);
ci.received_proto = received_proto;
LM_DBG("Setting received proto in search to %d\n", ci.received_proto);
ci.searchflag = SEARCH_RECEIVED;
} else {
LM_DBG("Contact in NOTIFY does not have an alias....\n");
}
if (ul.get_pcontact(_d, &ci, &pcontact) != 0) { //contact does not exist
if (contact_state == STATE_TERMINATED) {
LM_DBG("This contact: <%.*s> is in state terminated and is not in usrloc, ignore\n", contact_uri.len, contact_uri.s);
ret = RESULT_CONTACTS_FOUND;
goto done;
}
LM_WARN("This contact: <%.*s> is in state active and is not in usrloc - must be another contact on a different P so going to ignore\n", contact_uri.len, contact_uri.s);
// LM_DBG("This contact: <%.*s> is in state active and is not in usrloc so adding it to usrloc, expires: %d which is in %d seconds\n", contact_uri.len, contact_uri.s, expires, expires-local_time_now);
// if (ul.insert_pcontact(_d, &contact_uri, &ci, &pcontact) != 0) {
// LM_ERR("Failed inserting new pcontact\n");
// ret = RESULT_ERROR;
// goto done;
// } else {
// //register for callbacks on this contact so we can send PUBLISH to SCSCF should status change
// LM_DBG("registering for UL callback\n");
// ul.register_ulcb(pcontact, PCSCF_CONTACT_DELETE | PCSCF_CONTACT_EXPIRE, callback_pcscf_contact_cb, NULL);
// }
} else {//contact exists
if (contact_state == STATE_TERMINATED) {
//delete contact
LM_DBG("This contact <%.*s> is in state terminated and is in usrloc so removing it from usrloc\n", contact_uri.len, contact_uri.s);
if (ul.delete_pcontact(_d, pcontact) != 0) {
LM_DBG("failed to delete pcscf contact <%.*s> - not a problem this may have been removed by de registration", contact_uri.len, contact_uri.s);
}
/*TODO_LATEST - put this back */
} else {//state is active
//update this contact
LM_DBG("This contact: <%.*s> is in state active and is in usrloc so just updating - old expires: %li, new expires: %i which is in %i seconds\n", contact_uri.len, contact_uri.s,
pcontact->expires,
expires,
expires - local_time_now);
if (ul.update_pcontact(_d, &ci, pcontact) != 0) {
LM_ERR("failed to update pcscf contact\n");
ret = RESULT_ERROR;
goto done;
}
pcontact->expires = expires;
}
}
done:
ul.unlock_udomain(_d, &puri.host, puri.port_no, puri.proto);
return ret;
}
示例2: sizeof
//.........这里部分代码省略.........
int_str val;
pcscf_act_time();
local_time_now = time_now;
if (is_star) {
/* first of all, we shouldn't get here...
* then, we will update on NOTIFY */
return 0;
}
// Set the structure to "0", to make sure it's properly initialized
memset(&ci, 0, sizeof(struct pcontact_info));
for (h = rpl->contact; h; h = h->next) {
if (h->type == HDR_CONTACT_T && h->parsed)
for (c = ((contact_body_t*) h->parsed)->contacts; c; c = c->next) {
expires = calc_contact_expires(c, expires_hdr, local_time_now);
if (parse_uri(c->uri.s, c->uri.len, &puri) < 0) {
LM_DBG("Error parsing Contact URI <%.*s>\n", c->uri.len, c->uri.s);
continue;
}
//build contact info
ci.expires = expires;
ci.public_ids = public_id;
ci.num_public_ids = public_id_cnt;
ci.service_routes = service_route;
ci.num_service_routes = service_route_cnt;
ci.reg_state = PCONTACT_REGISTERED;
ci.received_host.len = 0;
ci.received_host.s = 0;
ci.received_port = 0;
ci.received_proto = 0;
// Received Info: First try AVP, otherwise simply take the source of the request:
memset(&val, 0, sizeof(int_str));
if (rcv_avp_name.n!=0 && search_first_avp(rcv_avp_type, rcv_avp_name, &val, 0) && val.s.len > 0) {
if (val.s.len>RECEIVED_MAX_SIZE) {
LM_ERR("received too long\n");
goto error;
}
if (parse_uri(val.s.s, val.s.len, &parsed_received) < 0) {
LM_DBG("Error parsing Received URI <%.*s>\n", val.s.len, val.s.s);
continue;
}
ci.received_host = parsed_received.host;
ci.received_port = parsed_received.port_no;
ci.received_proto = parsed_received.proto;
} else {
ci.received_host.len = ip_addr2sbuf(&req->rcv.src_ip, srcip, sizeof(srcip));
ci.received_host.s = srcip;
ci.received_port = req->rcv.src_port;
ci.received_proto = req->rcv.proto;
}
// Set to default, if not set:
if (ci.received_port == 0) ci.received_port = 5060;
ul.lock_udomain(_d, &c->uri);
if (ul.get_pcontact(_d, &c->uri, &pcontact) != 0) { //need to insert new contact
if ((expires-local_time_now)<=0) { //remove contact - de-register
LM_DBG("This is a de-registration for contact <%.*s> but contact is not in usrloc - ignore\n", c->uri.len, c->uri.s);
goto next_contact;
}
LM_DBG("Adding pcontact: <%.*s>, expires: %d which is in %d seconds\n", c->uri.len, c->uri.s, expires, expires-local_time_now);
if (ul.insert_pcontact(_d, &c->uri, &ci, &pcontact) != 0) {
LM_ERR("Failed inserting new pcontact\n");
} else {
//register for callbacks on this contact so we can send PUBLISH to SCSCF should status change
LM_DBG("registering for UL callback\n");
ul.register_ulcb(pcontact, PCSCF_CONTACT_DELETE | PCSCF_CONTACT_EXPIRE, callback_pcscf_contact_cb, NULL);
//we also need to subscribe to reg event of this contact at SCSCF
}
} else { //contact already exists - update
LM_DBG("contact already exists and is in state (%d) : [%s]\n",pcontact->reg_state, reg_state_to_string(pcontact->reg_state));
if ((expires-local_time_now)<=0) { //remove contact - de-register
LM_DBG("This is a de-registration for contact <%.*s>\n", c->uri.len, c->uri.s);
if (ul.delete_pcontact(_d, &c->uri, pcontact) != 0) {
LM_ERR("failed to delete pcscf contact <%.*s>\n", c->uri.len, c->uri.s);
}
} else { //update contact
LM_DBG("Updating contact: <%.*s>, old expires: %li, new expires: %i which is in %i seconds\n", c->uri.len, c->uri.s,
pcontact->expires-local_time_now,
expires,
expires-local_time_now);
if (ul.update_pcontact(_d, &ci, pcontact) != 0) {
LM_ERR("failed to update pcscf contact\n");
}
pcontact->expires = expires;
}
}
next_contact:
ul.unlock_udomain(_d, &c->uri);
}
}
return 1;
error:
return 0;
}
示例3: sizeof
//.........这里部分代码省略.........
expires = calc_contact_expires(c, expires_hdr, local_time_now);
if (parse_uri(c->uri.s, c->uri.len, &puri) < 0) {
LM_DBG("Error parsing Contact URI <%.*s>\n", c->uri.len, c->uri.s);
continue;
}
//build contact info
ci.aor = c->uri;
ci.expires = expires;
ci.public_ids = public_id;
ci.num_public_ids = public_id_cnt;
ci.service_routes = service_route;
ci.num_service_routes = service_route_cnt;
ci.reg_state = PCONTACT_REGISTERED|PCONTACT_REG_PENDING|PCONTACT_REG_PENDING_AAR; //we don't want to add contacts that did not come through us (pcscf)
ci.received_host.len = 0;
ci.received_host.s = 0;
ci.received_port = 0;
ci.received_proto = 0;
port = puri.port_no ? puri.port_no : 5060;
ci.via_host = puri.host;
ci.via_port = port;
ci.via_prot = puri.proto;
ci.searchflag = SEARCH_NORMAL; /* this must be reset for each contact iteration */
if (puri.params.len > 6 && (alias_start = _strnistr(puri.params.s, "alias=", puri.params.len)) != NULL) {
LM_DBG("contact has an alias [%.*s] - we can use that as the received\n", puri.params.len, puri.params.s);
alias_s.len = puri.params.len - (alias_start - puri.params.s) - 6;
alias_s.s = alias_start + 6;
LM_DBG("alias [%.*s]\n", alias_s.len, alias_s.s);
p = _strnistr(alias_s.s, "~", alias_s.len);
if (p!=NULL) {
ci.received_host.s = alias_s.s;
ci.received_host.len = p - alias_s.s;
LM_DBG("alias(host) [%.*s]\n", ci.received_host.len, ci.received_host.s);
port_s = p+1;
p = _strnistr(port_s, "~", alias_s.len - ci.received_host.len);
if (p!=NULL) {
LM_DBG("alias(port) [%.*s]\n", (int)(p - port_s) , port_s);
memset(portbuf, 0, 5);
memcpy(portbuf, port_s, (p-port_s));
port = atoi(portbuf);
LM_DBG("alias(port) [%d]\n", port);
proto_s = p + 1;
memset(portbuf, 0, 5);
memcpy(portbuf, proto_s, 1);
proto = atoi(portbuf);
LM_DBG("alias(proto) [%d]\n", proto);
ci.received_port = port;
ci.received_proto = proto;
ci.searchflag = SEARCH_RECEIVED;
}
}
}
ul.lock_udomain(_d, &puri.host, port, puri.proto);
if (ul.get_pcontact(_d, &ci, &pcontact) != 0) { //need to insert new contact
if ((expires-local_time_now)<=0) { //remove contact - de-register
LM_DBG("This is a de-registration for contact <%.*s> but contact is not in usrloc - ignore\n", c->uri.len, c->uri.s);
goto next_contact;
}
LM_DBG("We don't add contact from the 200OK that did not go through us (ie, not present in explicit REGISTER that went through us\n");
// LM_DBG("Adding pcontact: <%.*s>, expires: %d which is in %d seconds\n", c->uri.len, c->uri.s, expires, expires-local_time_now);
// ci.reg_state = PCONTACT_REGISTERED;
// if (ul.insert_pcontact(_d, &c->uri, &ci, &pcontact) != 0) {
// LM_ERR("Failed inserting new pcontact\n");
// } else {
// //register for callbacks on this contact so we can send PUBLISH to SCSCF should status change
// LM_DBG("registering for UL callback\n");
// ul.register_ulcb(pcontact, PCSCF_CONTACT_DELETE | PCSCF_CONTACT_EXPIRE, callback_pcscf_contact_cb, NULL);
// //we also need to subscribe to reg event of this contact at SCSCF
// }
} else { //contact already exists - update
LM_DBG("contact already exists and is in state (%d) : [%s]\n",pcontact->reg_state, reg_state_to_string(pcontact->reg_state));
if ((expires-local_time_now)<=0) { //remove contact - de-register
LM_DBG("This is a de-registration for contact <%.*s>\n", c->uri.len, c->uri.s);
if (ul.delete_pcontact(_d, pcontact) != 0) {
LM_ERR("failed to delete pcscf contact <%.*s>\n", c->uri.len, c->uri.s);
}
//TODO_LATEST replace above
} else { //update contact
LM_DBG("Updating contact: <%.*s>, old expires: %li, new expires: %i which is in %i seconds\n", c->uri.len, c->uri.s,
pcontact->expires-local_time_now,
expires,
expires-local_time_now);
ci.reg_state = PCONTACT_REGISTERED;
if (ul.update_pcontact(_d, &ci, pcontact) != 0) {
LM_ERR("failed to update pcscf contact\n");
}
pcontact->expires = expires;
}
}
next_contact:
ul.unlock_udomain(_d, &puri.host, port, puri.proto);
}
}
}
return 1;
}
示例4: process_contact
int process_contact(udomain_t * _d, int expires, str contact_uri, int contact_state) {
pcontact_t* pcontact;
struct pcontact_info ci;
int local_time_now;
int ret = RESULT_CONTACTS_FOUND;
pcscf_act_time();
local_time_now = time_now;
//get contact
//if does not exist then add it
//if it does exist check if state it terminated - if so delete it, if not update it
memset(&ci, 0, sizeof(struct pcontact_info));
ci.num_public_ids=0;
ci.num_service_routes=0;
expires = local_time_now + expires; //turn expires into correct time since epoch format
LM_DBG("Changed expires to format time since the epoch: %d", expires);
ci.expires=expires;
ci.reg_state = PCONTACT_REGISTERED;
ul.lock_udomain(_d, &contact_uri);
if (ul.get_pcontact(_d, &contact_uri, &pcontact) != 0) { //contact does not exist
if (contact_state == STATE_TERMINATED) {
LM_DBG("This contact: <%.*s> is in state terminated and is not in usrloc, ignore\n", contact_uri.len, contact_uri.s);
ret = RESULT_CONTACTS_FOUND;
goto done;
}
LM_DBG("This contact: <%.*s> is in state active and is not in usrloc so adding it to usrloc, expires: %d which is in %d seconds\n", contact_uri.len, contact_uri.s, expires, expires-local_time_now);
if (ul.insert_pcontact(_d, &contact_uri, &ci, &pcontact) != 0) {
LM_ERR("Failed inserting new pcontact\n");
ret = RESULT_ERROR;
goto done;
} else {
//register for callbacks on this contact so we can send PUBLISH to SCSCF should status change
LM_DBG("registering for UL callback\n");
ul.register_ulcb(pcontact, PCSCF_CONTACT_DELETE | PCSCF_CONTACT_EXPIRE, callback_pcscf_contact_cb, NULL);
}
} else {//contact exists
if (contact_state == STATE_TERMINATED) {
//delete contact
LM_DBG("This contact <%.*s> is in state terminated and is in usrloc so removing it from usrloc\n", contact_uri.len, contact_uri.s);
if (ul.delete_pcontact(_d, &contact_uri, pcontact) != 0) {
LM_DBG("failed to delete pcscf contact <%.*s> - not a problem this may have been removed by de registration", contact_uri.len, contact_uri.s);
}
} else {//state is active
//update this contact
LM_DBG("This contact: <%.*s> is in state active and is in usrloc so just updating - old expires: %li, new expires: %i which is in %i seconds\n", contact_uri.len, contact_uri.s,
pcontact->expires,
expires,
expires-local_time_now);
if (ul.update_pcontact(_d, &ci, pcontact) != 0) {
LM_ERR("failed to update pcscf contact\n");
ret = RESULT_ERROR;
goto done;
}
pcontact->expires = expires;
}
}
done:
ul.unlock_udomain(_d, &contact_uri);
return ret;
}