本文整理汇总了C++中SipMessage::getContactEntry方法的典型用法代码示例。如果您正苦于以下问题:C++ SipMessage::getContactEntry方法的具体用法?C++ SipMessage::getContactEntry怎么用?C++ SipMessage::getContactEntry使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SipMessage
的用法示例。
在下文中一共展示了SipMessage::getContactEntry方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getAcceptedExpiration
UtlBoolean SipRefreshManager::getAcceptedExpiration(RefreshDialogState* state,
const SipMessage& sipResponse,
int& expirationPeriod)
{
UtlString method;
UtlBoolean foundExpiration = FALSE;
int cseq;
sipResponse.getCSeqField(&cseq, &method);
if(method.compareTo(SIP_REGISTER_METHOD) == 0)
{
// Get the presumably first contact in the REGISTER request
// so that we can find the same contact in the response and
// find out what the expiration is
UtlString requestContact;
Url requestContactUri;
if(state && state->mpLastRequest &&
state->mpLastRequest->getContactEntry(0, &requestContact))
{
requestContactUri = requestContact;
}
// Register could have it in the Contact header
UtlString responseContactValue;
int contactIndex = 0;
while(sipResponse.getContactEntry(contactIndex , &responseContactValue))
{
// Get the expires parameter for the contact if it exists
Url contactUri(responseContactValue);
if(requestContactUri.isUserHostPortEqual(contactUri))
{
UtlString contactExpiresParameter;
if(contactUri.getFieldParameter(SIP_EXPIRES_FIELD,
contactExpiresParameter) &&
!contactExpiresParameter.isNull())
{
foundExpiration = TRUE;
// Convert to int
expirationPeriod = atoi(contactExpiresParameter);
}
}
contactIndex++;
}
}
if(!foundExpiration)
{
// Not sure if we care if this is a request or response
foundExpiration = sipResponse.getExpiresField(&expirationPeriod);
}
return(foundExpiration);
}
示例2: getInitialExpiration
UtlBoolean SipRefreshManager::getInitialExpiration(const SipMessage& sipRequest,
int& expirationPeriod)
{
UtlString method;
UtlBoolean foundExpiration = FALSE;
sipRequest.getRequestMethod(&method);
if(method.compareTo(SIP_REGISTER_METHOD) == 0)
{
// Register could have it in the Contact header
UtlString requestContactValue;
if(sipRequest.getContactEntry(0 , &requestContactValue))
{
// Get the expires parameter for the contact if it exists
Url contactUri(requestContactValue);
UtlString contactExpiresParameter;
if(contactUri.getFieldParameter(SIP_EXPIRES_FIELD,
contactExpiresParameter) &&
!contactExpiresParameter.isNull())
{
foundExpiration = TRUE;
// Convert to int
expirationPeriod = atoi(contactExpiresParameter);
}
}
}
if(!foundExpiration)
{
// Not sure if we care if this is a request or response
foundExpiration = sipRequest.getExpiresField(&expirationPeriod);
}
return(foundExpiration);
}
示例3: target
//.........这里部分代码省略.........
result = DENY; // we need an identity to attach to the Refer-To URI
}
}
else
{
/*
* This is a transfer to a target outside our domain, so let it go
* unchallenged. See XECS-806
*/
Os::Logger::instance().log(FAC_AUTH, PRI_DEBUG, "TransferControl[%s]::authorizeAndModify "
"allowing foriegn transfer in call '%s'",
mInstanceName.data(), callId.data()
);
// Add the References to the refer-to. Adding the callId field as a reference
// header (will be used in resulting INVITE) in the Refer-To provides us
// with enough information to be able to logically tie the calls together.
// Useful for CDR records.
UtlString refcallId(callId);
refcallId.append(";rel=refer");
target.setHeaderParameter(SIP_REFERENCES_FIELD, refcallId.data());
Os::Logger::instance().log(FAC_AUTH, PRI_DEBUG, "TransferControl[%s]::authorizeAndModify "
"adding Reference field [%s] to refer-to",
mInstanceName.data(), callId.data()
);
request.setReferToField(target.toString().data());
result = ALLOW;
}
}
else
{
UtlString contactString;
request.getContactEntry(0, &contactString);
Url contactUri( contactString );
UtlString userId;
contactUri.getUserId(contactString);
Os::Logger::instance().log(FAC_AUTH, PRI_DEBUG, "TransferControl::authorizeAndModify - Contact field is: %s ", contactString.data());
if (contactString != "callcontroller") {
// Authenticated REFER
// annotate the refer-to with the authenticated controller identity
SipXauthIdentity controllerIdentity;
controllerIdentity.setIdentity(id);
controllerIdentity.encodeUri(target);
// add the References to the refer-to.
UtlString refcallId(callId);
refcallId.append(";rel=refer");
target.setHeaderParameter(SIP_REFERENCES_FIELD, refcallId.data());
Os::Logger::instance().log(FAC_AUTH, PRI_DEBUG, "TransferControl[%s]::authorizeAndModify "
"adding Reference field [%s] to refer-to",
mInstanceName.data(), callId.data()
);
request.setReferToField(target.toString().data());
}
}
}
else
{
Os::Logger::instance().log(FAC_AUTH, PRI_WARNING, "TransferControl[%s]::authorizeAndModify "
"unrecognized refer target '%s' for call '%s'",
mInstanceName.data(), targetStr.data(), callId.data()
);
示例4: updateDialogInfo
UtlBoolean SipPersistentSubscriptionMgr::updateDialogInfo(
const SipMessage& subscribeRequest,
UtlString& resourceId,
UtlString& eventTypeKey,
UtlString& eventType,
UtlString& subscribeDialogHandle,
UtlBoolean& isNew,
UtlBoolean& isSubscriptionExpired,
SipMessage& subscribeResponse,
SipSubscribeServerEventHandler& handler)
{
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"SipPersistentSubscriptionMgr::updateDialogInfo "
"resourceId = '%s', eventTypeKey = '%s'",
resourceId.data(), eventTypeKey.data());
UtlBoolean ret;
// Call SipSubscriptionMgr to update the in-memory data.
ret = SipSubscriptionMgr::updateDialogInfo(subscribeRequest,
resourceId,
eventTypeKey,
eventType,
subscribeDialogHandle,
isNew,
isSubscriptionExpired,
subscribeResponse,
handler);
// If that succeeded, update the IMDB.
if (ret)
{
UtlString requestUri;
UtlString callId;
UtlString contactEntry;
UtlString to;
UtlString from;
UtlString route;
UtlString accept;
subscribeRequest.getRequestUri(&requestUri);
subscribeRequest.getCallIdField(&callId);
subscribeRequest.getContactEntry(0, &contactEntry);
subscribeRequest.getToField(&to);
subscribeRequest.getFromField(&from);
subscribeRequest.buildRouteField(&route);
accept.append(subscribeRequest.getHeaderValue(0, SIP_ACCEPT_FIELD));
int expires = 0;
subscribeResponse.getExpiresField(&expires);
expires += OsDateTime::getSecsSinceEpoch();
int subscribeCseq;
UtlString subscribeCseqMethod;
subscribeRequest.getCSeqField(&subscribeCseq, &subscribeCseqMethod);
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"SipPersistentSubscriptionMgr::updateDialogInfo "
"mComponent = '%s', requestUri = '%s', callId = '%s', contactEntry = '%s', expires = %d, to = '%s', from = '%s', key = '%s', route = '%s', accept = '%s'",
mComponent.data(), requestUri.data(),
callId.data(), contactEntry.data(), expires,
to.data(), from.data(), resourceId.data(), route.data(),
accept.data());
// Attempt to update an existing row.
int now = (int)OsDateTime::getSecsSinceEpoch();
ret = mSubscriptionDBInstance->updateSubscribeUnexpiredSubscription(
mComponent, to, from, callId, eventTypeKey, "",
now, expires, subscribeCseq);
if (!ret)
{
// Add a new row.
// This call assumes that eventTypeKey is OK for use as the <eventtype>,
// and that the NOTIFY CSeq's will start at 1. 0 is used as
// the initial XML version.
ret = mSubscriptionDBInstance->insertRow(
mComponent, requestUri, callId, contactEntry,
expires, subscribeCseq, eventTypeKey, "",
to, from, resourceId, route, 1, accept, 0);
if (!ret)
{
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipPersistantSubscriptionMgr::addSubscription "
"Could not update or insert record in database");
}
}
// Start the save timer.
mPersistenceTimer.oneshotAfter(sPersistInterval);
}
return ret;
}
示例5: handleMessage
UtlBoolean SipXProxyCseObserver::handleMessage(OsMsg& eventMessage)
{
int msgType = eventMessage.getMsgType();
switch (msgType)
{
case OsMsg::OS_EVENT:
switch (eventMessage.getMsgSubType())
{
case OsEventMsg::NOTIFY:
if (mpWriter)
{
mpWriter->flush();
}
break;
}
break ;
case OsMsg::PHONE_APP:
{
SipMessage* sipMsg;
if(SipMessageEvent::TRANSPORT_ERROR == ((SipMessageEvent&)eventMessage).getMessageStatus())
{
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipXProxyCseObserver::handleMessage transport error");
}
else if((sipMsg = (SipMessage*)((SipMessageEvent&)eventMessage).getMessage()))
{
UtlString method;
int rspStatus = 0;
UtlString rspText;
UtlString contact;
UtlString toTag;
enum
{
UnInteresting,
aCallRequest,
aCallSetup,
aCallFailure,
aCallEnd,
aCallTransfer
} thisMsgIs = UnInteresting;
Url toUrl;
sipMsg->getToUrl(toUrl);
// explicitly, an INVITE Request
toUrl.getFieldParameter("tag", toTag);
if (!sipMsg->isResponse())
{
// sipMsg is a Request
sipMsg->getRequestMethod(&method);
if (0==method.compareTo(SIP_INVITE_METHOD, UtlString::ignoreCase))
{
if (toTag.isNull())
{
thisMsgIs = aCallRequest;
}
}
else if (0==method.compareTo(SIP_REFER_METHOD, UtlString::ignoreCase))
{
thisMsgIs = aCallTransfer;
sipMsg->getContactEntry(0, &contact);
}
else if (0==method.compareTo(SIP_BYE_METHOD, UtlString::ignoreCase))
{
thisMsgIs = aCallEnd; // no additional information needed
}
else
{
// other request methods are not interesting
}
}
else // this is a response
{
int seq;
if (sipMsg->getCSeqField(&seq, &method)) // get the method out of cseq field
{
if (0==method.compareTo(SIP_INVITE_METHOD, UtlString::ignoreCase))
{
// Responses to INVITES are handled differently based on whether
// or not the INVITE is dialog-forming. If dialog-forming,
// any final response above 400 is considered a failure for CDR
// purposes. If not dialog-forming, then any final response above 400
// except 401 Unauthorized, 407 Proxy Authentication Required and
// 408 Request Timeout will terminate. If we're in a dialog then
// only 408 (Request Timeout) and 481 (Call/Transaction does not exist)
// will terminate the dialog.
rspStatus = sipMsg->getResponseStatusCode();
if (rspStatus >= SIP_4XX_CLASS_CODE) // any failure
{
// a failure code - this is a potential CallFailure - Call Resolver will determine.
thisMsgIs = aCallFailure;
sipMsg->getResponseStatusText(&rspText);
}
else if ( ( rspStatus >= SIP_2XX_CLASS_CODE )
//.........这里部分代码省略.........
示例6: handleMessage
UtlBoolean SipXProxyCseObserver::handleMessage(OsMsg& eventMessage)
{
int msgType = eventMessage.getMsgType();
switch (msgType)
{
case OsMsg::OS_EVENT:
switch (eventMessage.getMsgSubType())
{
case OsEventMsg::NOTIFY:
if (mpWriter)
{
mpWriter->flush();
}
break;
}
break ;
case OsMsg::PHONE_APP:
{
SipMessage* sipMsg;
if(SipMessageEvent::TRANSPORT_ERROR == ((SipMessageEvent&)eventMessage).getMessageStatus())
{
Os::Logger::instance().log(FAC_SIP, PRI_ERR,
"SipXProxyCseObserver::handleMessage transport error");
}
else if((sipMsg = (SipMessage*)((SipMessageEvent&)eventMessage).getMessage()))
{
UtlString method;
int rspStatus = 0;
UtlString rspText;
UtlString contact;
UtlString toTag;
enum
{
UnInteresting,
aCallRequest,
aCallSetup,
aCallFailure,
aCallEnd,
aCallTransfer
} thisMsgIs = UnInteresting;
Url toUrl;
sipMsg->getToUrl(toUrl);
// explicitly, an INVITE Request
toUrl.getFieldParameter("tag", toTag);
if (!sipMsg->isResponse())
{
// sipMsg is a Request
sipMsg->getRequestMethod(&method);
if (0==method.compareTo(SIP_INVITE_METHOD, UtlString::ignoreCase))
{
if (toTag.isNull())
{
sipMsg->getContactEntry(0, &contact);
thisMsgIs = aCallRequest;
}
}
else if (0==method.compareTo(SIP_REFER_METHOD, UtlString::ignoreCase))
{
thisMsgIs = aCallTransfer;
sipMsg->getContactEntry(0, &contact);
}
else if (0==method.compareTo(SIP_BYE_METHOD, UtlString::ignoreCase))
{
thisMsgIs = aCallEnd; // no additional information needed
}
else
{
// other request methods are not interesting
}
}
else // this is a response
{
int seq;
if (sipMsg->getCSeqField(&seq, &method)) // get the method out of cseq field
{
if (0==method.compareTo(SIP_INVITE_METHOD, UtlString::ignoreCase))
{
// Responses to INVITES are handled differently based on whether
// or not the INVITE is dialog-forming. If dialog-forming,
// any final response above 400 is considered a failure for CDR
// purposes. If not dialog-forming, then any final response above 400
// except 401 Unauthorized, 407 Proxy Authentication Required and
// 408 Request Timeout will terminate. If we're in a dialog then
// only 408 (Request Timeout) and 481 (Call/Transaction does not exist)
// will terminate the dialog.
rspStatus = sipMsg->getResponseStatusCode();
if (rspStatus >= SIP_4XX_CLASS_CODE) // any failure
{
// a failure code - this is a potential CallFailure - Call Resolver will determine.
thisMsgIs = aCallFailure;
//.........这里部分代码省略.........