本文整理汇总了C++中SipMessage::getDialogHandle方法的典型用法代码示例。如果您正苦于以下问题:C++ SipMessage::getDialogHandle方法的具体用法?C++ SipMessage::getDialogHandle怎么用?C++ SipMessage::getDialogHandle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SipMessage
的用法示例。
在下文中一共展示了SipMessage::getDialogHandle方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createDialog
UtlBoolean SipDialogMgr::createDialog(const SipMessage& message,
UtlBoolean messageIsFromLocalSide,
const char* dialogHandle)
{
UtlBoolean createdDialog = FALSE;
UtlString handle(dialogHandle ? dialogHandle : "");
// If the dialog handle was not set, get it from the message
if(handle.isNull())
{
message.getDialogHandle(handle);
}
// Check to see if the dialog exists
if(dialogExists(handle) ||
earlyDialogExistsFor(handle))
{
// Should not try to create a dialog for one that
// already exists
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipDialogMgr::createDialog called with handle: %s for existing dialog",
handle.data());
}
// Dialog needs to be created
else
{
createdDialog = TRUE;
SipDialog* dialog = new SipDialog(&message, messageIsFromLocalSide);
lock();
mDialogs.insert(dialog);
unlock();
}
return(createdDialog);
}
示例2: isLastLocalTransaction
UtlBoolean SipDialogMgr::isLastLocalTransaction(const SipMessage& message,
const char* dialogHandle)
{
UtlBoolean matchesTransaction = FALSE;
UtlString handle(dialogHandle ? dialogHandle : "");
// If the dialog handle was not set, get it from the message
if(handle.isNull())
{
message.getDialogHandle(handle);
}
UtlString callId;
UtlString fromTag;
UtlString toTag;
SipDialog::parseHandle(handle, callId, fromTag, toTag);
lock();
// Looking for any dialog that matches this handle
SipDialog* dialog = findDialog(handle,
TRUE, // if established, match early dialog
TRUE); // if early, match established dialog
if(dialog &&
dialog->isTransactionLocallyInitiated(callId, fromTag, toTag) &&
dialog->isSameLocalCseq(message))
{
matchesTransaction = TRUE;
}
unlock();
return(matchesTransaction);
}
示例3: setNextLocalTransactionInfo
UtlBoolean SipDialogMgr::setNextLocalTransactionInfo(SipMessage& request,
const char* method,
const char* dialogHandle)
{
UtlBoolean requestSet = FALSE;
UtlString dialogHandleString(dialogHandle ? dialogHandle : "");
if(dialogHandleString.isNull())
{
request.getDialogHandle(dialogHandleString);
}
lock();
SipDialog* dialog = findDialog(dialogHandleString,
FALSE, // If established only want exact match dialogs
TRUE); // If message is from a prior transaction
// when the dialog was in an early state
// allow it to match an established
// dialog
if(dialog)
{
dialog->setRequestData(request, method);
requestSet = TRUE;
#ifdef TEST_PRINT
UtlString dialogDump;
dialog->toString(dialogDump);
OsSysLog::add(FAC_SIP, PRI_DEBUG, "SipDialogMgr::setNextLocalTransactionInfo dialog: '%s'",
dialogDump.data());
#endif
}
else
{
OsSysLog::add(FAC_SIP, PRI_ERR, "SipDialogMgr::setNextLocalTransactionInfo dialog not found for handle '%s'",
dialogHandle);
if (OsSysLog::willLog(FAC_SIP, PRI_DEBUG))
{
SipDialog* dialog;
UtlHashBagIterator iterator(mDialogs);
while ((dialog = (SipDialog*) iterator()))
{
UtlString callId, localTag, remoteTag;
dialog->getCallId(callId);
dialog->getLocalTag(localTag);
dialog->getRemoteTag(remoteTag);
OsSysLog::add(FAC_SIP, PRI_DEBUG, "SipDialogMgr::setNextLocalTransactionInfo dialog call-id = '%s', local tag = '%s', remote tag = '%s'",
callId.data(), localTag.data(), remoteTag.data());
}
}
}
unlock();
return(requestSet);
}
示例4: handleNotifyResponse
UtlBoolean SipSubscribeServer::handleNotifyResponse(const SipMessage& notifyResponse)
{
UtlBoolean handledNotifyResponse = FALSE;
int responseCode = notifyResponse.getResponseStatusCode();
// Ignore provisional responses or success cases
if(responseCode >= SIP_3XX_CLASS_CODE)
{
UtlString dialogHandle;
notifyResponse.getDialogHandle(dialogHandle);
// Not modifying the SubscribeServerEventData, just reading it
lockForRead();
// Get the event specific handler and information
SubscribeServerEventData* eventPackageInfo = NULL;
UtlHashMapIterator iterator(mEventDefinitions);
while((eventPackageInfo = (SubscribeServerEventData*) iterator()))
{
// End this subscription as we got an error response from
// the NOTIFY request.
// Returns TRUE if the SipSubscriptionMgr has this dialog
handledNotifyResponse =
eventPackageInfo->mpEventSpecificSubscriptionMgr->endSubscription(
dialogHandle);
if(handledNotifyResponse)
{
break;
}
}
unlockForRead();
// Should not happen, first of all we should never get a
// response which does not correspond to a request sent from
// the SipUserAgent. Secondly, we should not get a response to
// and event type that we do not support
if(!handledNotifyResponse)
{
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipSubscribeServer::handleNotifyResponse NOTIFY response with no dialog. Handle: %s",
dialogHandle.data());
}
}
// Provisional or 2XX class responses
else
{
handledNotifyResponse = TRUE;
}
return(handledNotifyResponse);
}
示例5: isEarlyDialogFor
UtlBoolean SipDialog::isEarlyDialogFor(const SipMessage& message) const
{
UtlString handle;
message.getDialogHandle(handle);
UtlString callId;
UtlString localTag;
UtlString remoteTag;
parseHandle(handle, callId, localTag, remoteTag);
return(isEarlyDialogFor(callId, localTag, remoteTag));
}
示例6: lock
enum SipDialogMgr::transactionSequence
SipDialogMgr::isNewRemoteTransaction(const SipMessage& message)
{
enum transactionSequence ordering;
UtlString handle;
message.getDialogHandle(handle);
UtlString callId;
UtlString fromTag;
UtlString toTag;
SipDialog::parseHandle(handle, callId, fromTag, toTag);
lock();
// Looking for any dialog that matches this handle
SipDialog* dialog = findDialog(handle,
TRUE, // if established, match early dialog
TRUE); // if early, match established dialog
if (dialog &&
dialog->isTransactionRemotelyInitiated(callId, fromTag, toTag))
{
int messageCSeq;
message.getCSeqField(&messageCSeq, NULL);
int lastRemoteCSeq = dialog->getLastRemoteCseq();
ordering =
messageCSeq < lastRemoteCSeq ? OUT_OF_ORDER :
/** If this message was an exact duplicate of a previous message
* (with the same CSeq and branch parameter), it would have been
* absorbed earlier in processing. So we know the branch parameter
* is different without having to remember the previous value.
*/
messageCSeq == lastRemoteCSeq ? LOOPED :
IN_ORDER;
}
else
{
ordering = NO_DIALOG;
}
unlock();
return ordering;
}
示例7: updateDialog
UtlBoolean SipDialogMgr::updateDialog(const SipMessage& message,
const char* dialogHandle)
{
UtlString handle(dialogHandle ? dialogHandle : "");
// If the dialog handle was not set, get it from the message
if(handle.isNull())
{
message.getDialogHandle(handle);
}
lock();
SipDialog* dialog = findDialog(handle,
TRUE, // if established handle, find early dialog
FALSE); // do not want established dialogs for early handle
if(dialog)
{
#ifdef TEST_PRINT
UtlString dialogDump;
dialog->toString(dialogDump);
printf("SipDialogMgr::updateDialog dialog before:\n%s\n",
dialogDump.data());
#endif
dialog->updateDialogData(message);
#ifdef TEST_PRINT
dialog->toString(dialogDump);
printf("SipDialogMgr::updateDialog dialog after:\n%s\n",
dialogDump.data());
#endif
}
unlock();
return(dialog != NULL);
}
示例8: notifySubscribers
//.........这里部分代码省略.........
acceptHeaderValuesArray,
notifyArray);
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"SipSubscribeServer::notifySubscribers numSubscriptions for '%s' = %d",
resourceId, numSubscriptions);
// Free the temporary UtlString, if necessary.
if (formatp)
{
delete formatp;
}
}
// For each NOTIFY, add the subscription-related information and then
// send it.
for (int notifyIndex = 0;
notifyIndex < numSubscriptions;
notifyIndex++)
{
SipMessage* notify = notifyArray[notifyIndex];
// Check to see if the dialog information could be added.
// (The subscription might have been destroyed between when
// it was decided to respond to it, and when the dialog information
// was retrieved.)
UtlString callId;
notify->getCallIdField(&callId);
if (!callId.isNull())
{
if (change != SipSubscriptionMgr::subscriptionTerminatedSilently)
{
// Fill in the NOTIFY request body/content
eventData->mpEventSpecificHandler->
getNotifyContent(resourceId,
eventTypeKey,
eventType,
*(eventData->mpEventSpecificContentMgr),
*(acceptHeaderValuesArray[notifyIndex]),
*notify,
eventData->mEventSpecificFullState,
NULL);
// Call the application callback to edit the NOTIFY
// content if that is required for this event type.
// Also gets 'version' (if relevant) and 'savedEventTypeKey'.
int version;
UtlString savedEventTypeKey;
eventData->mpEventSpecificSubscriptionMgr->
updateNotifyVersion(eventData->mpEventSpecificContentVersionCallback,
*notify,
version,
savedEventTypeKey);
// Update the saved record of the NOTIFY CSeq and the
// XML version number for the specified savedEventTypeKey,
// as needed by the subscription manager.
// In practice, this is only used by SipPersistentSubscriptionMgr
// to write the NOTIFY Cseq and XML version into the IMDB.
eventData->mpEventSpecificSubscriptionMgr->
updateVersion(*notify, version, savedEventTypeKey);
// Set the Contact header.
setContact(notify);
// Send the NOTIFY request.
eventData->mpEventSpecificUserAgent->send(*notify);
}
if (change != SipSubscriptionMgr::subscriptionContinues)
{
// Remove the record of the subscription.
UtlString dialogHandle;
notify->getDialogHandle(dialogHandle);
eventData->mpEventSpecificSubscriptionMgr->
endSubscription(dialogHandle, change);
}
}
}
// Free the NOTIFY requests and accept header field values.
eventData->mpEventSpecificSubscriptionMgr->
freeNotifies(numSubscriptions,
acceptHeaderValuesArray,
notifyArray);
}
// event type not enabled
else
{
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipSubscribeServer::notifySubscribers "
"event type: %s not enabled - "
"Why are we seeing a callback for this?",
eventName.data());
}
unlockForRead();
return notifiedSubscribers;
}
示例9: shutdown
//.........这里部分代码省略.........
createNotifiesDialogInfoEvent(static_cast <const UtlString&> (*eventData),
format,
numSubscriptions,
acceptHeaderValuesArray,
notifyArray,
resourceIdArray,
eventTypeKeyArray);
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"SipSubscribeServer::shutdown eventType = '%s', numSubscriptions = %d",
eventData->data(), numSubscriptions);
// For each NOTIFY, add the subscription-related information and then
// send it.
for (int notifyIndex = 0;
notifyIndex < numSubscriptions;
notifyIndex++)
{
SipMessage* notify = notifyArray[notifyIndex];
// Check to see if the dialog information could be added.
// (The subscription might have been destroyed between when
// it was decided to respond to it, and when the dialog information
// was retrieved.)
UtlString callId;
notify->getCallIdField(&callId);
if (!callId.isNull())
{
if (change != SipSubscriptionMgr::subscriptionTerminatedSilently)
{
// Fill in the NOTIFY request body/content
eventData->mpEventSpecificHandler->
getNotifyContent(*(resourceIdArray[notifyIndex]),
*(eventTypeKeyArray[notifyIndex]),
*eventData,
*(eventData->mpEventSpecificContentMgr),
*(acceptHeaderValuesArray[notifyIndex]),
*notify,
eventData->mEventSpecificFullState,
NULL);
// Call the application callback to edit the NOTIFY
// content if that is required for this event type.
// Also gets 'version' (if relevant) and 'savedEventTypeKey'.
int version;
UtlString savedEventTypeKey;
eventData->mpEventSpecificSubscriptionMgr->
updateNotifyVersion(eventData->mpEventSpecificContentVersionCallback,
*notify,
version,
savedEventTypeKey);
// Set the Contact header.
setContact(notify);
// Send the NOTIFY request.
eventData->mpEventSpecificUserAgent->send(*notify);
}
// Remove the record of the subscription.
UtlString dialogHandle;
notify->getDialogHandle(dialogHandle);
eventData->mpEventSpecificSubscriptionMgr->
endSubscription(dialogHandle, change);
}
}
// Free the NOTIFY requests and accept header field values.
SipSubscriptionMgr::freeNotifies(numSubscriptions,
acceptHeaderValuesArray,
notifyArray);
// Free the resource and event type arrays.
for (int index = 0;
index < numSubscriptions;
index++)
{
delete resourceIdArray[index];
delete eventTypeKeyArray[index];
}
delete[] resourceIdArray;
delete[] eventTypeKeyArray;
// Remove eventData from mEventDefinitions.
mEventDefinitions.removeReference(eventData);
delete eventData;
}
unlockForRead();
// Free the temporary UtlString, if necessary.
if (formatp)
{
delete formatp;
}
lockForWrite();
mEventDefinitions.destroyAll();
unlockForWrite();
}
示例10: initiateRefresh
UtlBoolean SipRefreshManager::initiateRefresh(SipMessage& subscribeOrRegisterRequest,
void* applicationData,
const RefreshStateCallback refreshStateCallback,
UtlString& earlyDialogHandle)
{
UtlBoolean intitialRequestSent = FALSE;
// Make sure we do not have an existing dialog or refresh session state
// going for the given message
UtlString messageDialogHandle;
subscribeOrRegisterRequest.getDialogHandle(messageDialogHandle);
UtlBoolean existingRefreshState = FALSE;
UtlBoolean existingDialogState = FALSE;
if(!SipDialog::isEarlyDialog(messageDialogHandle))
{
existingDialogState = TRUE;
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipRefreshManager::initiateRefresh called with established dialog handle: %s",
messageDialogHandle.data());
}
else
{
OsLock localLock(mRefreshMgrMutex);
// See if there is an early or established dialog for this message
if(getAnyDialog(messageDialogHandle))
{
existingRefreshState = TRUE;
intitialRequestSent = FALSE;
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipRefreshManager::initiateRefresh called with pre-existing refresh state: %s",
messageDialogHandle.data());
}
// The dialog should not exist either
else if(mpDialogMgr->dialogExists(messageDialogHandle) ||
mpDialogMgr->earlyDialogExistsFor(messageDialogHandle))
{
existingDialogState = TRUE;
OsSysLog::add(FAC_SIP, PRI_ERR,
"SipRefreshManager::initiateRefresh called with pre-existing dialog: %s",
messageDialogHandle.data());
}
}
// Should not be any existing refresh or dialog states
// for this message
if(!existingRefreshState && !existingDialogState)
{
// Make sure we are registered to receive responses
// for the message we are about to send
UtlString method;
subscribeOrRegisterRequest.getRequestMethod(&method);
if(method.compareTo(SIP_REGISTER_METHOD) == 0)
{
lock();
if(!mReceivingRegisterResponses)
{
mReceivingRegisterResponses = TRUE;
// receive REGISTER responses
mpUserAgent->addMessageObserver(*(getMessageQueue()),
SIP_REGISTER_METHOD,
FALSE, // yes requests
TRUE, // no responses
TRUE, // incoming,
FALSE, // outgoing
NULL);
}
unlock();
}
else if(method.compareTo(SIP_SUBSCRIBE_METHOD) == 0)
{
UtlString eventType;
subscribeOrRegisterRequest.getEventField(&eventType, NULL);
// Check to see if we have already registered to
// receive the event type
lock();
if(mEventTypes.find(&eventType) == NULL)
{
mEventTypes.insert(new UtlString(eventType));
// receive SUBSCRIBE responses for this event type
mpUserAgent->addMessageObserver(*(getMessageQueue()),
SIP_SUBSCRIBE_METHOD,
FALSE, // no requests
TRUE, // yes responses
TRUE, // incoming,
FALSE, // outgoing
eventType);
}
unlock();
}
// Create a new refresh state
int requestedExpiration = 0; // returned from following call
RefreshDialogState* state = createNewRefreshState(subscribeOrRegisterRequest,
messageDialogHandle,
applicationData,
refreshStateCallback,
//.........这里部分代码省略.........
示例11: insertDialogInfo
UtlBoolean SipSubscriptionMgr::insertDialogInfo(const SipMessage& subscribeRequest,
const UtlString& resourceId,
const UtlString& eventTypeKey,
UtlString& subscribeDialogHandle,
UtlBoolean& isNew,
UtlBoolean& isSubscriptionExpired,
SipMessage& subscribeResponse)
{
isNew = FALSE;
UtlBoolean subscriptionSucceeded = FALSE;
UtlString dialogHandle;
subscribeRequest.getDialogHandle(dialogHandle);
SubscriptionServerState* state = NULL;
int expiration = -1;
isSubscriptionExpired = TRUE;
// If this is an early dialog we need to make it an established dialog.
if(SipDialog::isEarlyDialog(dialogHandle))
{
UtlString establishedDialogHandle;
if(mDialogMgr.getEstablishedDialogHandleFor(dialogHandle, establishedDialogHandle))
{
OsSysLog::add(FAC_SIP, PRI_WARNING,
"Incoming early SUBSCRIBE dialog: %s matches established dialog: %s",
dialogHandle.data(), establishedDialogHandle.data());
}
// make up a To tag and set it
UtlString toTag;
CallId::getNewTag(dialogHandle.data(), toTag);
// Get and validate the expires period
// This potentially should be delegated to the event handler specifics
if(!subscribeRequest.getExpiresField(&expiration))
{
expiration = mDefaultExpiration;
}
else if(expiration > mMaxExpiration)
{
expiration = mMaxExpiration;
}
// Acceptable expiration, create a subscription and dialog
if(expiration >= mMinExpiration ||
expiration == 0 ||
// :WORKAROUND: Also allow expiration == 1, to support the
// 1-second subscriptions the pick-up agent makes because
// current Snom phones do not respond to 0-second subscriptions.
// See XPB-399 and ENG-319.
expiration == 1)
{
// Create a dialog and subscription state even if
// the expiration is zero as we need the dialog info
// to route the one-time NOTIFY. The immediately
// expired dialog will be garbage collected.
SipMessage* subscribeCopy = new SipMessage(subscribeRequest);
subscribeCopy->setToFieldTag(toTag);
// Re-get the dialog handle now that the To tag is set
subscribeCopy->getDialogHandle(dialogHandle);
// Create the dialog
mDialogMgr.createDialog(*subscribeCopy, FALSE, dialogHandle);
isNew = TRUE;
// Create a subscription state
state = new SubscriptionServerState();
*((UtlString*) state) = dialogHandle;
state->mEventTypeKey = eventTypeKey;
state->mpLastSubscribeRequest = subscribeCopy;
state->mResourceId = resourceId;
subscribeCopy->getAcceptField(state->mAcceptHeaderValue);
long now = OsDateTime::getSecsSinceEpoch();
state->mExpirationDate = now + expiration;
// TODO: currently the SipSubsribeServer does not handle timeout
// events to send notifications that the subscription has ended.
// So we do not set a timer at the end of the subscription
state->mpExpirationTimer = NULL;
// Create the index by resourceId and eventTypeKey key
SubscriptionServerStateIndex* stateKey = new SubscriptionServerStateIndex;
*((UtlString*) stateKey) = resourceId;
stateKey->append(eventTypeKey);
stateKey->mpState = state;
subscribeResponse.setResponseData(subscribeCopy,
SIP_ACCEPTED_CODE,
SIP_ACCEPTED_TEXT,
NULL);
subscribeResponse.setExpiresField(expiration);
subscribeCopy->getDialogHandle(subscribeDialogHandle);
lock();
mSubscriptionStatesByDialogHandle.insert(state);
mSubscriptionStateResourceIndex.insert(stateKey);
if (OsSysLog::willLog(FAC_SIP, PRI_DEBUG))
//.........这里部分代码省略.........
示例12: updateDialogInfo
UtlBoolean SipSubscriptionMgr::updateDialogInfo(const SipMessage& subscribeRequest,
UtlString& resourceId,
UtlString& eventTypeKey,
UtlString& eventType,
UtlString& subscribeDialogHandle,
UtlBoolean& isNew,
UtlBoolean& isSubscriptionExpired,
SipMessage& subscribeResponse,
SipSubscribeServerEventHandler& handler)
{
isNew = FALSE;
UtlBoolean subscriptionSucceeded = FALSE;
UtlString dialogHandle;
subscribeRequest.getDialogHandle(dialogHandle);
SubscriptionServerState* state = NULL;
int expiration = -1;
isSubscriptionExpired = TRUE;
// Double check the sanity of the class attributes
if(mMaxExpiration < mMinExpiration)
{
// This is an error case. Switch the values so that we do not
// run into any negative expiration times.
int tmp = mMaxExpiration;
mMaxExpiration = mMinExpiration;
mMinExpiration = tmp;
OsSysLog::add(FAC_SIP, PRI_WARNING,
"Swapping values as mMinExpiration => %d is greater than mMaxExpiration => %d",
mMinExpiration, mMaxExpiration);
}
if(mMaxExpiration < mDefaultExpiration)
{
// This is an error case. Switch the values so that we do not
// run into any negative expiration times.
int tmp = mMaxExpiration;
mMaxExpiration = mDefaultExpiration;
mDefaultExpiration = tmp;
OsSysLog::add(FAC_SIP, PRI_WARNING,
"Swapping values as mDefaultExpiration => %d is greater than mMaxExpiration => %d",
mDefaultExpiration, mMaxExpiration);
}
// Set the expires period randomly
int spreadFloor = mMinExpiration*2;
if(!subscribeRequest.getExpiresField(&expiration))
{
// no expires field
// spread it between the default expiration and max allowed expiration
expiration = ( (rand() % (mMaxExpiration - mDefaultExpiration))
+ mDefaultExpiration);
}
else if ( expiration >= mMaxExpiration )
{
if (mMaxExpiration > spreadFloor)
{
// - spread it between the spreadFloor and the max allowed expiration
expiration = ( (rand() % (mMaxExpiration - spreadFloor))
+ spreadFloor);
}
else
{
// Max Expiration is smaller than the spreadFloor, hence
// spread it between the min and the max allowed expiration
expiration = ( (rand() % (mMaxExpiration - mMinExpiration))
+ mMinExpiration);
}
}
else if ( expiration > spreadFloor )
{
// a normal (long) expiration
// - spread it between the spreadFloor and the longest they asked for
expiration = ( (rand() % (expiration - spreadFloor))
+ spreadFloor);
}
else if ( expiration > mMinExpiration )
{
// a short but greater than minimum expiration
// - spread it between the min and the longest they asked for
expiration = ( (rand() % (expiration - mMinExpiration))
+ mMinExpiration);
}
// Cases where the expiration is less than the min value is handled below.
// If this is an early dialog we need to make it an established dialog.
if(SipDialog::isEarlyDialog(dialogHandle))
{
UtlString establishedDialogHandle;
if(mDialogMgr.getEstablishedDialogHandleFor(dialogHandle, establishedDialogHandle))
{
OsSysLog::add(FAC_SIP, PRI_WARNING,
"Incoming early SUBSCRIBE dialog: %s matches established dialog: %s",
dialogHandle.data(), establishedDialogHandle.data());
}
// make up a To tag and set it
UtlString toTag;
//.........这里部分代码省略.........