本文整理汇总了C++中pjsip_uri_get_uri函数的典型用法代码示例。如果您正苦于以下问题:C++ pjsip_uri_get_uri函数的具体用法?C++ pjsip_uri_get_uri怎么用?C++ pjsip_uri_get_uri使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pjsip_uri_get_uri函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: update_from
/*!
* \internal
* \brief Overwrite fields in the outbound 'From' header
*
* The outbound 'From' header is created/added in ast_sip_create_request with
* default data. If available that data may be info specified in the 'from_user'
* and 'from_domain' options found on the endpoint. That information will be
* overwritten with data in the given 'from' parameter.
*
* \param tdata the outbound message data structure
* \param from info to copy into the header
*/
static void update_from(pjsip_tx_data *tdata, char *from)
{
pjsip_name_addr *name_addr = (pjsip_name_addr *)
PJSIP_MSG_FROM_HDR(tdata->msg)->uri;
pjsip_sip_uri *uri = pjsip_uri_get_uri(name_addr);
pjsip_uri *parsed;
if (ast_strlen_zero(from)) {
return;
}
if ((parsed = pjsip_parse_uri(tdata->pool, from, strlen(from),
PJSIP_PARSE_URI_AS_NAMEADDR))) {
pjsip_name_addr *parsed_name_addr = (pjsip_name_addr *)parsed;
pjsip_sip_uri *parsed_uri = pjsip_uri_get_uri(parsed_name_addr->uri);
if (pj_strlen(&parsed_name_addr->display)) {
pj_strdup(tdata->pool, &name_addr->display,
&parsed_name_addr->display);
}
pj_strdup(tdata->pool, &uri->user, &parsed_uri->user);
pj_strdup(tdata->pool, &uri->host, &parsed_uri->host);
uri->port = parsed_uri->port;
} else {
/* assume it is 'user[@domain]' format */
char *domain = strchr(from, '@');
if (domain) {
*domain++ = '\0';
pj_strdup2(tdata->pool, &uri->host, domain);
}
pj_strdup2(tdata->pool, &uri->user, from);
}
}
示例2: rewrite_route_set
static int rewrite_route_set(pjsip_rx_data *rdata, pjsip_dialog *dlg)
{
pjsip_rr_hdr *rr = NULL;
pjsip_sip_uri *uri;
if (rdata->msg_info.msg->type == PJSIP_RESPONSE_MSG) {
pjsip_hdr *iter;
for (iter = rdata->msg_info.msg->hdr.prev; iter != &rdata->msg_info.msg->hdr; iter = iter->prev) {
if (iter->type == PJSIP_H_RECORD_ROUTE) {
rr = (pjsip_rr_hdr *)iter;
break;
}
}
} else if (pjsip_method_cmp(&rdata->msg_info.msg->line.req.method, &pjsip_register_method)) {
rr = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_RECORD_ROUTE, NULL);
}
if (rr) {
uri = pjsip_uri_get_uri(&rr->name_addr);
rewrite_uri(rdata, uri);
if (dlg && !pj_list_empty(&dlg->route_set) && !dlg->route_set_frozen) {
pjsip_routing_hdr *route = dlg->route_set.next;
uri = pjsip_uri_get_uri(&route->name_addr);
rewrite_uri(rdata, uri);
}
return 0;
}
return -1;
}
示例3: pjsip_name_addr_print
static pj_ssize_t pjsip_name_addr_print(pjsip_uri_context_e context,
const pjsip_name_addr *name,
char *buf, pj_size_t size)
{
int printed;
char *startbuf = buf;
char *endbuf = buf + size;
pjsip_uri *uri;
uri = (pjsip_uri*) pjsip_uri_get_uri(name->uri);
pj_assert(uri != NULL);
if (context != PJSIP_URI_IN_REQ_URI) {
if (name->display.slen) {
if (endbuf-buf < 8) return -1;
*buf++ = '"';
copy_advance(buf, name->display);
*buf++ = '"';
*buf++ = ' ';
}
*buf++ = '<';
}
printed = pjsip_uri_print(context,uri, buf, size-(buf-startbuf));
if (printed < 1)
return -1;
buf += printed;
if (context != PJSIP_URI_IN_REQ_URI) {
*buf++ = '>';
}
*buf = '\0';
return buf-startbuf;
}
示例4: websocket_on_rx_msg
/*!
* \brief Store the transport a message came in on, so it can be used for outbound messages to that contact.
*/
static pj_bool_t websocket_on_rx_msg(pjsip_rx_data *rdata)
{
static const pj_str_t STR_WS = { "ws", 2 };
static const pj_str_t STR_WSS = { "wss", 3 };
pjsip_contact_hdr *contact;
long type = rdata->tp_info.transport->key.type;
if (type != (long)transport_type_ws && type != (long)transport_type_wss) {
return PJ_FALSE;
}
if ((contact = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_CONTACT, NULL)) && !contact->star &&
(PJSIP_URI_SCHEME_IS_SIP(contact->uri) || PJSIP_URI_SCHEME_IS_SIPS(contact->uri))) {
pjsip_sip_uri *uri = pjsip_uri_get_uri(contact->uri);
pj_cstr(&uri->host, rdata->pkt_info.src_name);
uri->port = rdata->pkt_info.src_port;
ast_debug(4, "Re-wrote Contact URI host/port to %.*s:%d\n",
(int)pj_strlen(&uri->host), pj_strbuf(&uri->host), uri->port);
pj_strdup(rdata->tp_info.pool, &uri->transport_param, (type == (long)transport_type_ws) ? &STR_WS : &STR_WSS);
}
rdata->msg_info.via->rport_param = 0;
return PJ_FALSE;
}
示例5: PJSIP_MSG_FROM_HDR
/*!
* \internal
* \brief Create an identity header for an outgoing message
* \param hdr_name The name of the header to create
* \param tdata The message to place the header on
* \param id The identification information for the new header
* \return newly-created header
*/
static pjsip_fromto_hdr *create_new_id_hdr(const pj_str_t *hdr_name, pjsip_tx_data *tdata, const struct ast_party_id *id)
{
pjsip_fromto_hdr *id_hdr;
pjsip_fromto_hdr *base;
pjsip_name_addr *id_name_addr;
pjsip_sip_uri *id_uri;
base = tdata->msg->type == PJSIP_REQUEST_MSG ? PJSIP_MSG_FROM_HDR(tdata->msg) :
PJSIP_MSG_TO_HDR(tdata->msg);
id_hdr = pjsip_from_hdr_create(tdata->pool);
id_hdr->type = PJSIP_H_OTHER;
pj_strdup(tdata->pool, &id_hdr->name, hdr_name);
id_hdr->sname.slen = 0;
id_name_addr = pjsip_uri_clone(tdata->pool, base->uri);
id_uri = pjsip_uri_get_uri(id_name_addr->uri);
if (id->name.valid) {
int name_buf_len = strlen(id->name.str) * 2 + 1;
char *name_buf = ast_alloca(name_buf_len);
ast_escape_quoted(id->name.str, name_buf, name_buf_len);
pj_strdup2(tdata->pool, &id_name_addr->display, name_buf);
}
pj_strdup2(tdata->pool, &id_uri->user, id->number.str);
id_hdr->uri = (pjsip_uri *) id_name_addr;
return id_hdr;
}
示例6: pjsip_uri_get_uri
bool
SIPCall::attendedTransfer(const std::string& to)
{
const auto toCall = Manager::instance().callFactory.getCall<SIPCall>(to);
if (!toCall)
return false;
if (not toCall->inv or not toCall->inv->dlg)
return false;
pjsip_dialog *target_dlg = toCall->inv->dlg;
pjsip_uri *uri = (pjsip_uri*) pjsip_uri_get_uri(target_dlg->remote.info->uri);
char str_dest_buf[PJSIP_MAX_URL_SIZE * 2] = { '<' };
pj_str_t dst = { str_dest_buf, 1 };
dst.slen += pjsip_uri_print(PJSIP_URI_IN_REQ_URI, uri, str_dest_buf + 1, sizeof(str_dest_buf) - 1);
dst.slen += pj_ansi_snprintf(str_dest_buf + dst.slen,
sizeof(str_dest_buf) - dst.slen,
"?"
"Replaces=%.*s"
"%%3Bto-tag%%3D%.*s"
"%%3Bfrom-tag%%3D%.*s>",
(int)target_dlg->call_id->id.slen,
target_dlg->call_id->id.ptr,
(int)target_dlg->remote.info->tag.slen,
target_dlg->remote.info->tag.ptr,
(int)target_dlg->local.info->tag.slen,
target_dlg->local.info->tag.ptr);
return transferCommon(&dst);
}
示例7: pjsua_find_buddy
/*
* Find buddy.
*/
static pjsua_buddy_id pjsua_find_buddy(const pjsip_uri *uri)
{
const pjsip_sip_uri *sip_uri;
unsigned i;
uri = (const pjsip_uri*) pjsip_uri_get_uri((pjsip_uri*)uri);
if (!PJSIP_URI_SCHEME_IS_SIP(uri) && !PJSIP_URI_SCHEME_IS_SIPS(uri))
return PJSUA_INVALID_ID;
sip_uri = (const pjsip_sip_uri*) uri;
for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.buddy); ++i) {
const pjsua_buddy *b = &pjsua_var.buddy[i];
if (!pjsua_buddy_is_valid(i))
continue;
if (pj_stricmp(&sip_uri->user, &b->name)==0 &&
pj_stricmp(&sip_uri->host, &b->host)==0 &&
(sip_uri->port==(int)b->port || (sip_uri->port==0 && b->port==5060)))
{
/* Match */
return i;
}
}
return PJSUA_INVALID_ID;
}
示例8: pjsua_pool_create
bool SipAccount::getNumber(pj_str_t* uri, std::string* pDisplay, std::string* pNumber) {
pj_pool_t* pool = pjsua_pool_create("", 128, 10);
pjsip_name_addr* n = (pjsip_name_addr*)pjsip_parse_uri(pool, uri->ptr, uri->slen, PJSIP_PARSE_URI_AS_NAMEADDR);
if (n == NULL) {
Logger::warn("pjsip_parse_uri() failed for %s", pj_strbuf(uri));
pj_pool_release(pool);
return false;
}
if (!PJSIP_URI_SCHEME_IS_SIP(n)) {
Logger::warn("pjsip_parse_uri() returned unknown schema for %s", pj_strbuf(uri));
pj_pool_release(pool);
return false;
}
*pDisplay = std::string(n->display.ptr, n->display.slen);
pjsip_sip_uri *sip = (pjsip_sip_uri*)pjsip_uri_get_uri(n);
std::string number = std::string(sip->user.ptr, sip->user.slen);
// make number international
*pNumber = Helper::makeNumberInternational(&m_settings.base, number);
pj_pool_release(pool);
return true;
}
示例9: mod_stateless_on_rx_request
static pj_bool_t mod_stateless_on_rx_request(pjsip_rx_data *rdata)
{
const pj_str_t stateless_user = { "0", 1 };
pjsip_uri *uri;
pjsip_sip_uri *sip_uri;
uri = pjsip_uri_get_uri(rdata->msg_info.msg->line.req.uri);
/* Only want to receive SIP/SIPS scheme */
if (!PJSIP_URI_SCHEME_IS_SIP(uri) && !PJSIP_URI_SCHEME_IS_SIPS(uri))
return PJ_FALSE;
sip_uri = (pjsip_sip_uri*) uri;
/* Check for matching user part */
if (pj_strcmp(&sip_uri->user, &stateless_user)!=0)
return PJ_FALSE;
/*
* Yes, this is for us.
*/
/* Ignore ACK request */
if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD)
return PJ_TRUE;
/*
* Respond statelessly with 200/OK.
*/
pjsip_endpt_respond_stateless(app.sip_endpt, rdata, 200, NULL,
NULL, NULL);
app.server.cur_state.stateless_cnt++;
return PJ_TRUE;
}
示例10: pjsip_from_hdr_create
/*!
* \internal
* \brief Create an identity header for an outgoing message
* \param hdr_name The name of the header to create
* \param tdata The message to place the header on
* \param id The identification information for the new header
* \return newly-created header
*/
static pjsip_fromto_hdr *create_new_id_hdr(const pj_str_t *hdr_name, pjsip_fromto_hdr *base, pjsip_tx_data *tdata, const struct ast_party_id *id)
{
pjsip_fromto_hdr *id_hdr;
pjsip_name_addr *id_name_addr;
pjsip_sip_uri *id_uri;
id_hdr = pjsip_from_hdr_create(tdata->pool);
id_hdr->type = PJSIP_H_OTHER;
pj_strdup(tdata->pool, &id_hdr->name, hdr_name);
id_hdr->sname.slen = 0;
id_name_addr = pjsip_uri_clone(tdata->pool, base->uri);
id_uri = pjsip_uri_get_uri(id_name_addr->uri);
if (id->name.valid) {
int name_buf_len = strlen(id->name.str) * 2 + 1;
char *name_buf = ast_alloca(name_buf_len);
ast_escape_quoted(id->name.str, name_buf, name_buf_len);
pj_strdup2(tdata->pool, &id_name_addr->display, name_buf);
} else {
/*
* We need to clear the remnants of the clone or it'll be left set.
* pj_strdup2 is safe to call with a NULL src and it resets both slen and ptr.
*/
pj_strdup2(tdata->pool, &id_name_addr->display, NULL);
}
pj_strdup2(tdata->pool, &id_uri->user, id->number.str);
id_hdr->uri = (pjsip_uri *) id_name_addr;
return id_hdr;
}
示例11: is_emergency_registration
bool PJUtils::is_emergency_registration(pjsip_contact_hdr* contact_hdr)
{
// Contact header must be a SIP URI
pjsip_sip_uri* uri = (contact_hdr->uri != NULL) ?
(pjsip_sip_uri*)pjsip_uri_get_uri(contact_hdr->uri) : NULL;
return ((uri != NULL) && (PJSIP_URI_SCHEME_IS_SIP(uri)) &&
(pjsip_param_find(&uri->other_param, &STR_SOS) != NULL));
}
示例12: PJSIP_MSG_TO_HDR
/// Apply the mangalgorithm to the To URI of req.
void MangelwurzelTsx::mangle_to(pjsip_msg* req, pj_pool_t* pool)
{
pjsip_to_hdr* to_hdr = PJSIP_MSG_TO_HDR(req);
if (to_hdr != NULL)
{
mangle_uri((pjsip_uri*)pjsip_uri_get_uri(to_hdr->uri), pool, false);
}
}
示例13: pjsip_msg_find_hdr
/*! \brief Helper function which returns the SIP URI of a Contact header */
static pjsip_sip_uri *nat_get_contact_sip_uri(pjsip_tx_data *tdata)
{
pjsip_contact_hdr *contact = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CONTACT, NULL);
if (!contact || (!PJSIP_URI_SCHEME_IS_SIP(contact->uri) && !PJSIP_URI_SCHEME_IS_SIPS(contact->uri))) {
return NULL;
}
return pjsip_uri_get_uri(contact->uri);
}
示例14: pjsip_msg_find_hdr
void PJUtils::add_integrity_protected_indication(pjsip_tx_data* tdata, Integrity integrity)
{
pjsip_authorization_hdr* auth_hdr = (pjsip_authorization_hdr*)
pjsip_msg_find_hdr(tdata->msg, PJSIP_H_AUTHORIZATION, NULL);
if (auth_hdr == NULL)
{
auth_hdr = pjsip_authorization_hdr_create(tdata->pool);
auth_hdr->scheme = pj_str("Digest");
// Construct a default private identifier from the URI in the To header.
LOG_DEBUG("Construct default private identity");
pjsip_uri* to_uri = (pjsip_uri*)pjsip_uri_get_uri(PJSIP_MSG_TO_HDR(tdata->msg)->uri);
std::string private_id = PJUtils::default_private_id_from_uri(to_uri);
pj_strdup2(tdata->pool, &auth_hdr->credential.digest.username, private_id.c_str());
pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)auth_hdr);
}
pjsip_param* new_param = (pjsip_param*) pj_pool_alloc(tdata->pool, sizeof(pjsip_param));
new_param->name = STR_INTEGRITY_PROTECTED;
switch (integrity)
{
case Integrity::YES:
new_param->value = STR_YES;
break;
case Integrity::NO:
new_param->value = STR_NO;
break;
case Integrity::TLS_YES:
new_param->value = STR_TLS_YES;
break;
case Integrity::TLS_PENDING:
new_param->value = STR_TLS_PENDING;
break;
case Integrity::IP_ASSOC_YES:
new_param->value = STR_IP_ASSOC_YES;
break;
case Integrity::IP_ASSOC_PENDING:
new_param->value = STR_IP_ASSOC_PENDING;
break;
case Integrity::AUTH_DONE:
new_param->value = STR_AUTH_DONE;
break;
default:
break;
}
LOG_INFO("Adding integrity-protected=%.*s indicator to message",
new_param->value.slen, new_param->value.ptr);
pj_list_insert_before(&auth_hdr->credential.common.other_param, new_param);
}
示例15: get_endpoint_details
static int get_endpoint_details(pjsip_rx_data *rdata, char *domain, size_t domain_size)
{
pjsip_uri *from = rdata->msg_info.from->uri;
pjsip_sip_uri *sip_from;
if (!PJSIP_URI_SCHEME_IS_SIP(from) && !PJSIP_URI_SCHEME_IS_SIPS(from)) {
return -1;
}
sip_from = (pjsip_sip_uri *) pjsip_uri_get_uri(from);
ast_copy_pj_str(domain, &sip_from->host, domain_size);
return 0;
}