本文整理汇总了C++中pj_strcmp函数的典型用法代码示例。如果您正苦于以下问题:C++ pj_strcmp函数的具体用法?C++ pj_strcmp怎么用?C++ pj_strcmp使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pj_strcmp函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PJ_DEF
/* Compare media descriptor */
PJ_DEF(pj_status_t) pjmedia_sdp_media_cmp( const pjmedia_sdp_media *sd1,
const pjmedia_sdp_media *sd2,
unsigned option)
{
unsigned i;
pj_status_t status;
PJ_ASSERT_RETURN(sd1 && sd2 && option==0, PJ_EINVAL);
PJ_UNUSED_ARG(option);
/* Compare media type. */
if (pj_strcmp(&sd1->desc.media, &sd2->desc.media) != 0)
return PJMEDIA_SDP_EMEDIANOTEQUAL;
/* Compare port number. */
if (sd1->desc.port != sd2->desc.port)
return PJMEDIA_SDP_EPORTNOTEQUAL;
/* Compare port count. */
if (sd1->desc.port_count != sd2->desc.port_count)
return PJMEDIA_SDP_EPORTNOTEQUAL;
/* Compare transports. */
if (pj_strcmp(&sd1->desc.transport, &sd2->desc.transport) != 0)
return PJMEDIA_SDP_ETPORTNOTEQUAL;
/* For zeroed port media, stop comparing here */
if (sd1->desc.port == 0)
return PJ_SUCCESS;
/* Compare number of formats. */
if (sd1->desc.fmt_count != sd2->desc.fmt_count)
return PJMEDIA_SDP_EFORMATNOTEQUAL;
/* Compare formats, in order. */
for (i=0; i<sd1->desc.fmt_count; ++i) {
if (pj_strcmp(&sd1->desc.fmt[i], &sd2->desc.fmt[i]) != 0)
return PJMEDIA_SDP_EFORMATNOTEQUAL;
}
/* Compare connection line, if they exist. */
if (sd1->conn) {
if (!sd2->conn)
return PJMEDIA_SDP_EMEDIANOTEQUAL;
status = compare_conn(sd1->conn, sd2->conn);
} else {
if (sd2->conn)
return PJMEDIA_SDP_EMEDIANOTEQUAL;
}
/* Compare attributes. */
status = compare_attr(sd1->attr_count, sd1->attr,
sd2->attr_count, sd2->attr);
if (status != PJ_SUCCESS)
return status;
/* Looks equal */
return PJ_SUCCESS;
}
示例2: get_vox_error_info
/**
* VoX Mobile :: negative SIP response handler
*/
int get_vox_error_info(pjsip_event *e)
{
int cause = 0;
const pj_str_t HDR = { "Error-Info", 10 };
const pj_str_t BLOCKED_PSTN = { "PSTN not allowed", 16 };
const pj_str_t BLOCKED_DESTINATION = { "Blocked destination", 19 };
if (e->body.tsx_state.type == PJSIP_EVENT_RX_MSG) {
pjsip_generic_string_hdr *hdr = (pjsip_generic_string_hdr*)pjsip_msg_find_hdr_by_name(
e->body.tsx_state.src.rdata->msg_info.msg,
&HDR,
NULL);
if (hdr) {
if (pj_strcmp(&hdr->hvalue, &BLOCKED_PSTN) == 0)
cause = 403;
else if (pj_strcmp(&hdr->hvalue, &BLOCKED_DESTINATION) == 0)
cause = 580;
else {
cause = (int)pj_strtoul(&hdr->hvalue);
}
}
}
return cause;
}
示例3: 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;
}
示例4: pjsip_name_addr_compare
static int pjsip_name_addr_compare( pjsip_uri_context_e context,
const pjsip_name_addr *naddr1,
const pjsip_name_addr *naddr2)
{
int d;
/* Check that naddr2 is also a name_addr */
if (naddr1->vptr != naddr2->vptr)
return -1;
/* I'm not sure whether display name is included in the comparison. */
if (pj_strcmp(&naddr1->display, &naddr2->display) != 0) {
return -1;
}
pj_assert( naddr1->uri != NULL );
pj_assert( naddr2->uri != NULL );
/* Compare name-addr as URL */
d = pjsip_uri_cmp( context, naddr1->uri, naddr2->uri);
if (d)
return d;
return 0;
}
示例5: PJ_DEF
PJ_DEF(unsigned) pjmedia_sdp_attr_remove_all(unsigned *count,
pjmedia_sdp_attr *attr_array[],
const char *name)
{
unsigned i, removed = 0;
pj_str_t attr_name;
PJ_ASSERT_RETURN(count && attr_array && name, PJ_EINVAL);
attr_name.ptr = (char*)name;
attr_name.slen = pj_ansi_strlen(name);
for (i=0; i<*count; ) {
if (pj_strcmp(&attr_array[i]->name, &attr_name)==0) {
pj_array_erase(attr_array, sizeof(pjmedia_sdp_attr*),
*count, i);
--(*count);
++removed;
} else {
++i;
}
}
return removed;
}
示例6: udp_set_pub_name
/* Set the published address of the transport */
static void udp_set_pub_name(struct udp_transport *tp,
const pjsip_host_port *a_name)
{
enum { INFO_LEN = 80 };
char local_addr[PJ_INET6_ADDRSTRLEN+10];
char pub_addr[PJ_INET6_ADDRSTRLEN+10];
pj_assert(a_name->host.slen != 0);
if (pj_strcmp(&tp->base.local_name.host, &a_name->host) == 0 &&
tp->base.local_name.port == a_name->port)
{
return;
}
pj_strdup_with_null(tp->base.pool, &tp->base.local_name.host,
&a_name->host);
tp->base.local_name.port = a_name->port;
/* Update transport info. */
if (tp->base.info == NULL) {
tp->base.info = (char*) pj_pool_alloc(tp->base.pool, INFO_LEN);
}
pj_sockaddr_print(&tp->base.local_addr, local_addr, sizeof(local_addr), 3);
pj_addr_str_print(&tp->base.local_name.host,
tp->base.local_name.port,
pub_addr, sizeof(pub_addr), 1),
pj_ansi_snprintf( tp->base.info, INFO_LEN, "udp %s [published as %s]",
local_addr, pub_addr);
}
示例7: ast_sorcery_retrieve_by_fields
/*! \brief Helper function which returns a UDP transport bound to the given address and port */
static pjsip_transport *multihomed_get_udp_transport(pj_str_t *address, int port)
{
struct ao2_container *transports = ast_sorcery_retrieve_by_fields(ast_sip_get_sorcery(), "transport",
AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
struct ast_sip_transport *transport;
struct ao2_iterator iter;
pjsip_transport *sip_transport = NULL;
if (!transports) {
return NULL;
}
for (iter = ao2_iterator_init(transports, 0); (transport = ao2_iterator_next(&iter)); ao2_ref(transport, -1)) {
if ((transport->type != AST_TRANSPORT_UDP) ||
(pj_strcmp(&transport->state->transport->local_name.host, address)) ||
(transport->state->transport->local_name.port != port)) {
continue;
}
sip_transport = transport->state->transport;
ao2_ref(transport, -1);
break;
}
ao2_iterator_destroy(&iter);
ao2_ref(transports, -1);
return sip_transport;
}
示例8: pjmedia_sdp_attr_find
pjmedia_sdp_attr_find (unsigned count,
pjmedia_sdp_attr *const attr_array[],
const pj_str_t *name,
const pj_str_t *c_fmt)
{
unsigned i;
unsigned c_pt = 0xFFFF;
if (c_fmt)
c_pt = pj_strtoul(c_fmt);
for (i=0; i<count; ++i) {
if (pj_strcmp(&attr_array[i]->name, name) == 0) {
const pjmedia_sdp_attr *a = attr_array[i];
if (c_fmt) {
unsigned pt = (unsigned) pj_strtoul2(&a->value, NULL, 10);
if (pt == c_pt) {
return (pjmedia_sdp_attr*)a;
}
} else
return (pjmedia_sdp_attr*)a;
}
}
return NULL;
}
示例9: compare_conn
/* Compare connection line. */
static pj_status_t compare_conn(const pjmedia_sdp_conn *c1,
const pjmedia_sdp_conn *c2)
{
/* Compare network type. */
if (pj_strcmp(&c1->net_type, &c2->net_type) != 0)
return PJMEDIA_SDP_ECONNNOTEQUAL;
/* Compare address type. */
if (pj_strcmp(&c1->addr_type, &c2->addr_type) != 0)
return PJMEDIA_SDP_ECONNNOTEQUAL;
/* Compare address. */
if (pj_strcmp(&c1->addr, &c2->addr) != 0)
return PJMEDIA_SDP_ECONNNOTEQUAL;
return PJ_SUCCESS;
}
示例10: PJ_DEF
PJ_DEF(int) pjsip_cred_info_cmp(const pjsip_cred_info *cred1,
const pjsip_cred_info *cred2)
{
int result;
result = pj_strcmp(&cred1->realm, &cred2->realm);
if (result) goto on_return;
result = pj_strcmp(&cred1->scheme, &cred2->scheme);
if (result) goto on_return;
result = pj_strcmp(&cred1->username, &cred2->username);
if (result) goto on_return;
result = pj_strcmp(&cred1->data, &cred2->data);
if (result) goto on_return;
result = (cred1->data_type != cred2->data_type);
if (result) goto on_return;
if ((cred1->data_type & EXT_MASK) == PJSIP_CRED_DATA_EXT_AKA) {
result = pj_strcmp(&cred1->ext.aka.k, &cred2->ext.aka.k);
if (result) goto on_return;
result = pj_strcmp(&cred1->ext.aka.op, &cred2->ext.aka.op);
if (result) goto on_return;
result = pj_strcmp(&cred1->ext.aka.amf, &cred2->ext.aka.amf);
if (result) goto on_return;
}
on_return:
return result;
}
示例11: PJ_DEF
/*
* Find a dialog.
*/
PJ_DEF(pjsip_dialog*) pjsip_ua_find_dialog(const pj_str_t *call_id,
const pj_str_t *local_tag,
const pj_str_t *remote_tag,
pj_bool_t lock_dialog)
{
struct dlg_set *dlg_set;
pjsip_dialog *dlg;
PJ_ASSERT_RETURN(call_id && local_tag && remote_tag, NULL);
/* Lock user agent. */
pj_mutex_lock(mod_ua.mutex);
/* Lookup the dialog set. */
dlg_set = (struct dlg_set*)
pj_hash_get(mod_ua.dlg_table, local_tag->ptr, local_tag->slen,
NULL);
if (dlg_set == NULL) {
/* Not found */
pj_mutex_unlock(mod_ua.mutex);
return NULL;
}
/* Dialog set is found, now find the matching dialog based on the
* remote tag.
*/
dlg = dlg_set->dlg_list.next;
while (dlg != (pjsip_dialog*)&dlg_set->dlg_list) {
if (pj_strcmp(&dlg->remote.info->tag, remote_tag) == 0)
break;
dlg = dlg->next;
}
if (dlg == (pjsip_dialog*)&dlg_set->dlg_list) {
/* Not found */
pj_mutex_unlock(mod_ua.mutex);
return NULL;
}
/* Dialog has been found. It SHOULD have the right Call-ID!! */
PJ_ASSERT_ON_FAIL(pj_strcmp(&dlg->call_id->id, call_id)==0,
{pj_mutex_unlock(mod_ua.mutex); return NULL;});
示例12: pjsip_auth_verify
/* Verify incoming Authorization/Proxy-Authorization header against the
* specified credential.
*/
static pj_status_t pjsip_auth_verify( const pjsip_authorization_hdr *hdr,
const pj_str_t *method,
const pjsip_cred_info *cred_info )
{
if (pj_stricmp(&hdr->scheme, &pjsip_DIGEST_STR) == 0) {
char digest_buf[PJSIP_MD5STRLEN];
pj_str_t digest;
const pjsip_digest_credential *dig = &hdr->credential.digest;
/* Check that username and realm match.
* These checks should have been performed before entering this
* function.
*/
PJ_ASSERT_RETURN(pj_strcmp(&dig->username, &cred_info->username) == 0,
PJ_EINVALIDOP);
PJ_ASSERT_RETURN(pj_strcmp(&dig->realm, &cred_info->realm) == 0,
PJ_EINVALIDOP);
/* Prepare for our digest calculation. */
digest.ptr = digest_buf;
digest.slen = PJSIP_MD5STRLEN;
/* Create digest for comparison. */
pjsip_auth_create_digest(&digest,
&hdr->credential.digest.nonce,
&hdr->credential.digest.nc,
&hdr->credential.digest.cnonce,
&hdr->credential.digest.qop,
&hdr->credential.digest.uri,
&cred_info->realm,
cred_info,
method );
/* Compare digest. */
return (pj_stricmp(&digest, &hdr->credential.digest.response) == 0) ?
PJ_SUCCESS : PJSIP_EAUTHINVALIDDIGEST;
} else {
pj_assert(!"Unsupported authentication scheme");
return PJSIP_EINVALIDAUTHSCHEME;
}
}
示例13: find_transport_in_use
static int find_transport_in_use(void *obj, void *arg, int flags)
{
struct ast_sip_transport *transport = obj;
pjsip_rx_data *rdata = arg;
if ((transport->state->transport == rdata->tp_info.transport) ||
(transport->state->factory && !pj_strcmp(&transport->state->factory->addr_name.host, &rdata->tp_info.transport->local_name.host) &&
transport->state->factory->addr_name.port == rdata->tp_info.transport->local_name.port)) {
return CMP_MATCH | CMP_STOP;
}
return 0;
}
示例14: PJ_DEF
/* Verify incoming Authorization/Proxy-Authorization header against existing
* credentials. Will return TRUE if the authorization request matches any of
* the credential.
*/
PJ_DEF(pj_bool_t) pjsip_auth_verify(const pjsip_authorization_hdr *hdr,
const pj_str_t *method,
const pjsip_cred_info *cred_info )
{
if (pj_stricmp(&hdr->scheme, &pjsip_DIGEST_STR) == 0) {
char digest_buf[MD5STRLEN];
pj_str_t digest;
const pjsip_digest_credential *dig = &hdr->credential.digest;
/* Check that username match. */
if (pj_strcmp(&dig->username, &cred_info->username) != 0)
return PJ_FALSE;
/* Check that realm match. */
if (pj_strcmp(&dig->realm, &cred_info->realm) != 0)
return PJ_FALSE;
/* Prepare for our digest calculation. */
digest.ptr = digest_buf;
digest.slen = MD5STRLEN;
/* Create digest for comparison. */
create_digest( &digest,
&hdr->credential.digest.nonce,
&hdr->credential.digest.nc,
&hdr->credential.digest.cnonce,
&hdr->credential.digest.qop,
&hdr->credential.digest.uri,
cred_info,
method );
return pj_stricmp(&digest, &hdr->credential.digest.response) == 0;
} else {
pj_assert(0);
return PJ_FALSE;
}
}
示例15: apply_media_direction
/*
* Apply direction attribute in session to all media.
*/
static void apply_media_direction(pjmedia_sdp_session *sdp)
{
pjmedia_sdp_attr *dir_attr = NULL;
unsigned i;
const pj_str_t inactive = { "inactive", 8 };
const pj_str_t sendonly = { "sendonly", 8 };
const pj_str_t recvonly = { "recvonly", 8 };
const pj_str_t sendrecv = { "sendrecv", 8 };
/* Find direction attribute in session, don't need to find default
* direction "sendrecv".
*/
for (i = 0; i < sdp->attr_count && !dir_attr; ++i) {
if (!pj_strcmp(&sdp->attr[i]->name, &sendonly) ||
!pj_strcmp(&sdp->attr[i]->name, &recvonly) ||
!pj_strcmp(&sdp->attr[i]->name, &inactive))
{
dir_attr = sdp->attr[i];
}
}
/* Found the direction attribute */
if (dir_attr) {
/* Remove the direction attribute in session */
pjmedia_sdp_attr_remove(&sdp->attr_count, sdp->attr, dir_attr);
/* Apply the direction attribute to all media, but not overriding it
* if media already has direction attribute.
*/
for (i = 0; i < sdp->media_count; ++i) {
pjmedia_sdp_media *m;
unsigned j;
/* Find direction attribute in this media */
m = sdp->media[i];
for (j = 0; j < m->attr_count; ++j) {
if (!pj_strcmp(&m->attr[j]->name, &sendrecv) ||
!pj_strcmp(&m->attr[j]->name, &sendonly) ||
!pj_strcmp(&m->attr[j]->name, &recvonly) ||
!pj_strcmp(&m->attr[j]->name, &inactive))
{
break;
}
}
/* Not found, apply direction attribute from session */
if (j == m->attr_count)
pjmedia_sdp_media_add_attr(m, dir_attr);
}
}
}