reSIProcate/DialogUsageManager  9694
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | Friends
resip::DialogUsageManager Class Reference

#include <DialogUsageManager.hxx>

Inheritance diagram for resip::DialogUsageManager:
Inheritance graph
[legend]
Collaboration diagram for resip::DialogUsageManager:
Collaboration graph
[legend]

List of all members.

Classes

class  Exception
class  IncomingTarget
class  OutgoingTarget
class  SendCommand

Public Types

enum  EncryptionLevel { None = 0, Sign, Encrypt, SignAndEncrypt }

Public Member Functions

 DialogUsageManager (SipStack &stack, bool createDefaultFeatures=false)
virtual ~DialogUsageManager ()
void shutdown (DumShutdownHandler *)
void forceShutdown (DumShutdownHandler *)
void addTransport (TransportType protocol, int port=0, IpVersion version=V4, const Data &ipInterface=Data::Empty, const Data &sipDomainname=Data::Empty, const Data &privateKeyPassPhrase=Data::Empty, SecurityTypes::SSLType sslType=SecurityTypes::TLSv1, unsigned transportFlags=0)
SipStackgetSipStack ()
const SipStackgetSipStack () const
SecuritygetSecurity ()
Data getHostAddress ()
void setAppDialogSetFactory (std::auto_ptr< AppDialogSetFactory >)
void setMasterProfile (const SharedPtr< MasterProfile > &masterProfile)
SharedPtr< MasterProfile > & getMasterProfile ()
SharedPtr< UserProfile > & getMasterUserProfile ()
void setDialogSetHandler (DialogSetHandler *handler)
void setKeepAliveManager (std::auto_ptr< KeepAliveManager > keepAlive)
void setRedirectManager (std::auto_ptr< RedirectManager > redirect)
void setRedirectHandler (RedirectHandler *handler)
RedirectHandlergetRedirectHandler ()
void setClientAuthManager (std::auto_ptr< ClientAuthManager > client)
 If there is no ClientAuthManager, when the client receives a 401/407, pass it up through the normal BaseUsageHandler.
void setServerAuthManager (resip::SharedPtr< ServerAuthManager > server)
 If there is no ServerAuthManager, the server does not authenticate requests.
void setInviteSessionHandler (InviteSessionHandler *)
 If there is no such handler, calling makeInviteSession will throw and receiving an INVITE as a UAS will respond with 405 Method Not Allowed.
void setClientRegistrationHandler (ClientRegistrationHandler *)
 If there is no such handler, calling makeRegistration will throw.
void setServerRegistrationHandler (ServerRegistrationHandler *)
 If no such handler, UAS will respond to REGISTER with 405 Method Not Allowed.
void addClientSubscriptionHandler (const Data &eventType, ClientSubscriptionHandler *)
 If there is no such handler, calling makeSubscription will throw.
void addClientPublicationHandler (const Data &eventType, ClientPublicationHandler *)
 If there is no such handler, calling makePublication will throw.
void addServerSubscriptionHandler (const Data &eventType, ServerSubscriptionHandler *)
void addServerPublicationHandler (const Data &eventType, ServerPublicationHandler *)
void addOutOfDialogHandler (MethodTypes, OutOfDialogHandler *)
void setRequestValidationHandler (RequestValidationHandler *)
void setClientPagerMessageHandler (ClientPagerMessageHandler *)
void setServerPagerMessageHandler (ServerPagerMessageHandler *)
void addExternalMessageHandler (ExternalMessageHandler *handler)
 Add/Remove External Message Handler do following op when processing thread in not running.
void removeExternalMessageHandler (ExternalMessageHandler *handler)
void clearExternalMessageHandler ()
void setRegistrationPersistenceManager (RegistrationPersistenceManager *)
 Sets a manager to handle storage of registration state.
void setRemoteCertStore (std::auto_ptr< RemoteCertStore > store)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const Contents *initialOffer, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, const Contents *initialOffer, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const Contents *initialOffer, EncryptionLevel level, const Contents *alternative=0, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, const Contents *initialOffer, EncryptionLevel level, const Contents *alternative=0, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, InviteSessionHandle sessionToReplace, const SharedPtr< UserProfile > &userProfile, const Contents *initialOffer, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, InviteSessionHandle sessionToReplace, const SharedPtr< UserProfile > &userProfile, const Contents *initialOffer, EncryptionLevel level=None, const Contents *alternative=0, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSession (const NameAddr &target, InviteSessionHandle sessionToReplace, const Contents *initialOffer, EncryptionLevel level=None, const Contents *alternative=0, AppDialogSet *ads=0)
SharedPtr< SipMessagemakeInviteSessionFromRefer (const SipMessage &refer, ServerSubscriptionHandle, const Contents *initialOffer, AppDialogSet *=0)
SharedPtr< SipMessagemakeInviteSessionFromRefer (const SipMessage &refer, const SharedPtr< UserProfile > &userProfile, const Contents *initialOffer, AppDialogSet *appDs=0)
SharedPtr< SipMessagemakeInviteSessionFromRefer (const SipMessage &refer, ServerSubscriptionHandle, const Contents *initialOffer, EncryptionLevel level=None, const Contents *alternative=0, AppDialogSet *=0)
SharedPtr< SipMessagemakeInviteSessionFromRefer (const SipMessage &refer, const SharedPtr< UserProfile > &userProfile, ServerSubscriptionHandle, const Contents *initialOffer, EncryptionLevel level=None, const Contents *alternative=0, AppDialogSet *=0)
SharedPtr< SipMessagemakeSubscription (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const Data &eventType, AppDialogSet *=0)
SharedPtr< SipMessagemakeSubscription (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const Data &eventType, UInt32 subscriptionTime, AppDialogSet *=0)
SharedPtr< SipMessagemakeSubscription (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const Data &eventType, UInt32 subscriptionTime, int refreshInterval, AppDialogSet *=0)
SharedPtr< SipMessagemakeSubscription (const NameAddr &target, const Data &eventType, AppDialogSet *=0)
SharedPtr< SipMessagemakeSubscription (const NameAddr &target, const Data &eventType, UInt32 subscriptionTime, AppDialogSet *=0)
SharedPtr< SipMessagemakeSubscription (const NameAddr &target, const Data &eventType, UInt32 subscriptionTime, int refreshInterval, AppDialogSet *=0)
SharedPtr< SipMessagemakeRefer (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const H_ReferTo::Type &referTo, AppDialogSet *=0)
SharedPtr< SipMessagemakeRefer (const NameAddr &target, const H_ReferTo::Type &referTo, AppDialogSet *=0)
SharedPtr< SipMessagemakePublication (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const Contents &body, const Data &eventType, UInt32 expiresSeconds, AppDialogSet *=0)
SharedPtr< SipMessagemakePublication (const NameAddr &target, const Contents &body, const Data &eventType, UInt32 expiresSeconds, AppDialogSet *=0)
SharedPtr< SipMessagemakeRegistration (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, AppDialogSet *=0)
SharedPtr< SipMessagemakeRegistration (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, UInt32 registrationTime, AppDialogSet *=0)
SharedPtr< SipMessagemakeRegistration (const NameAddr &target, AppDialogSet *=0)
SharedPtr< SipMessagemakeRegistration (const NameAddr &target, UInt32 registrationTime, AppDialogSet *=0)
SharedPtr< SipMessagemakeOutOfDialogRequest (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, const MethodTypes meth, AppDialogSet *=0)
SharedPtr< SipMessagemakeOutOfDialogRequest (const NameAddr &target, const MethodTypes meth, AppDialogSet *=0)
ClientPagerMessageHandle makePagerMessage (const NameAddr &target, const SharedPtr< UserProfile > &userProfile, AppDialogSet *=0)
ClientPagerMessageHandle makePagerMessage (const NameAddr &target, AppDialogSet *=0)
void end (DialogSetId invSessionId)
void send (SharedPtr< SipMessage > request)
void sendCommand (SharedPtr< SipMessage > request)
bool hasEvents () const
bool process (Lockable *mutex=NULL)
bool process (int timeoutMs, Lockable *mutex=NULL)
AppDialogHandle findAppDialog (const DialogId &id)
AppDialogSetHandle findAppDialogSet (const DialogSetId &id)
InviteSessionHandle findInviteSession (DialogId id)
std::pair< InviteSessionHandle,
int > 
findInviteSession (CallId replaces)
ClientPublicationHandlergetClientPublicationHandler (const Data &eventType)
ServerPublicationHandlergetServerPublicationHandler (const Data &eventType)
ClientSubscriptionHandlergetClientSubscriptionHandler (const Data &eventType)
ServerSubscriptionHandlergetServerSubscriptionHandler (const Data &eventType)
template<typename UnaryFunction >
UnaryFunction applyToServerSubscriptions (const Data &aor, const Data &eventType, UnaryFunction applyFn)
void addIncomingFeature (resip::SharedPtr< DumFeature > feat)
void addOutgoingFeature (resip::SharedPtr< DumFeature > feat)
void setOutgoingMessageInterceptor (resip::SharedPtr< DumFeature > feat)
TargetCommand::TargetdumIncomingTarget ()
TargetCommand::TargetdumOutgoingTarget ()
MessagegetNext (int ms)
void internalProcess (std::auto_ptr< Message > msg)
bool messageAvailable (void)
void applyToAllClientSubscriptions (ClientSubscriptionFunctor *)
void applyToAllServerSubscriptions (ServerSubscriptionFunctor *)
void registerForConnectionTermination (Postable *)
 Note: Implementations of Postable must delete the message passed via post.
void unRegisterForConnectionTermination (Postable *)
DialogEventStateManagercreateDialogEventStateManager (DialogEventHandler *handler)

Protected Types

typedef std::map< Data,
DumFeatureChain * > 
FeatureChainMap

Protected Member Functions

virtual void onAllHandlesDestroyed ()
virtual const Dataname () const

Protected Attributes

DumFeatureChain::FeatureList mIncomingFeatureList
DumFeatureChain::FeatureList mOutgoingFeatureList
SharedPtr< DumFeaturemOutgoingMessageInterceptor
FeatureChainMap mIncomingFeatureChainMap
FeatureChainMap mOutgoingFeatureChainMap

Private Types

enum  ShutdownState {
  Running, ShutdownRequested, RemovingTransactionUser, Shutdown,
  Destroying
}
typedef std::set
< MergedRequestKey
MergedRequests
typedef std::map< Data,
DialogSet * > 
CancelMap
typedef HashMap< DialogSetId,
DialogSet * > 
DialogSetMap
typedef std::map< Data,
ServerPublication * > 
ServerPublications
typedef std::map< Data,
SipMessage * > 
RequiresCerts
typedef std::multimap< Data,
ServerSubscription * > 
ServerSubscriptions

Private Member Functions

DialogSetmakeUacDialogSet (BaseCreator *creator, AppDialogSet *appDs)
SharedPtr< SipMessagemakeNewSession (BaseCreator *creator, AppDialogSet *appDs)
void makeResponse (SipMessage &response, const SipMessage &request, int responseCode, const Data &reason=Data::Empty) const
void sendResponse (const SipMessage &response)
void sendUsingOutboundIfAppropriate (UserProfile &userProfile, std::auto_ptr< SipMessage > msg)
void addTimer (DumTimeout::Type type, unsigned long durationSeconds, BaseUsageHandle target, unsigned int seq, unsigned int altseq=0)
void addTimerMs (DumTimeout::Type type, unsigned long duration, BaseUsageHandle target, unsigned int seq, unsigned int altseq=0, const Data &transactionId=Data::Empty)
DialogfindOrCreateDialog (const SipMessage *msg)
DialogfindDialog (const DialogId &id)
DialogSetfindDialogSet (const DialogSetId &id)
BaseCreatorfindCreator (const DialogId &id)
void processRequest (const SipMessage &request)
void processResponse (const SipMessage &response)
bool validateRequestURI (const SipMessage &request)
bool validateRequiredOptions (const SipMessage &request)
bool validateContent (const SipMessage &request)
bool validateAccept (const SipMessage &request)
bool validateTo (const SipMessage &request)
bool validate100RelSuport (const SipMessage &request)
bool mergeRequest (const SipMessage &request)
void processPublish (const SipMessage &publish)
void removeDialogSet (const DialogSetId &)
bool checkEventPackage (const SipMessage &request)
bool queueForIdentityCheck (SipMessage *msg)
void processIdentityCheckResponse (const HttpGetMessage &msg)
void incomingProcess (std::auto_ptr< Message > msg)
void outgoingProcess (std::auto_ptr< Message > msg)
void processExternalMessage (ExternalMessageBase *externalMessage)
void destroy (const BaseUsage *usage)
void destroy (DialogSet *)
void destroy (Dialog *)
void requestMergedRequestRemoval (const MergedRequestKey &)
void removeMergedRequest (const MergedRequestKey &)
OutOfDialogHandlergetOutOfDialogHandler (const MethodTypes type)

Private Attributes

MergedRequests mMergedRequests
CancelMap mCancelMap
DialogSetMap mDialogSetMap
SharedPtr< MasterProfilemMasterProfile
SharedPtr< UserProfilemMasterUserProfile
std::auto_ptr< RedirectManagermRedirectManager
std::auto_ptr< ClientAuthManagermClientAuthManager
InviteSessionHandlermInviteSessionHandler
ClientRegistrationHandlermClientRegistrationHandler
ServerRegistrationHandlermServerRegistrationHandler
RedirectHandlermRedirectHandler
DialogSetHandlermDialogSetHandler
RequestValidationHandlermRequestValidationHandler
RegistrationPersistenceManagermRegistrationPersistenceManager
std::map< Data,
ClientSubscriptionHandler * > 
mClientSubscriptionHandlers
std::map< Data,
ServerSubscriptionHandler * > 
mServerSubscriptionHandlers
std::map< Data,
ClientPublicationHandler * > 
mClientPublicationHandlers
std::map< Data,
ServerPublicationHandler * > 
mServerPublicationHandlers
std::map< MethodTypes,
OutOfDialogHandler * > 
mOutOfDialogHandlers
std::auto_ptr< KeepAliveManagermKeepAliveManager
bool mIsDefaultServerReferHandler
ClientPagerMessageHandlermClientPagerMessageHandler
ServerPagerMessageHandlermServerPagerMessageHandler
std::vector
< ExternalMessageHandler * > 
mExternalMessageHandlers
DialogEventStateManagermDialogEventStateManager
std::auto_ptr
< AppDialogSetFactory
mAppDialogSetFactory
SipStackmStack
DumShutdownHandlermDumShutdownHandler
ShutdownState mShutdownState
ServerPublications mServerPublications
RequiresCerts mRequiresCerts
ServerSubscriptions mServerSubscriptions
IncomingTargetmIncomingTarget
OutgoingTargetmOutgoingTarget
ThreadIf::TlsKey mThreadDebugKey
ThreadIf::TlsKey mHiddenThreadDebugKey
EventDispatcher
< ConnectionTerminated
mConnectionTerminatedEventDispatcher

Friends

class DumThread
class Dialog
class DialogSet
class ClientInviteSession
class ClientOutOfDialogReq
class ClientPublication
class ClientRegistration
class ClientSubscription
class InviteSession
class ServerInviteSession
class ServerOutOfDialogReq
class ServerPublication
class ServerRegistration
class ServerSubscription
class BaseUsage
class ClientPagerMessage
class ServerPagerMessage
class KeepAliveAssociation
class NetworkAssociation
class MergedRequestRemovalCommand
class TargetCommand::Target

Detailed Description

Definition at line 77 of file DialogUsageManager.hxx.


Member Typedef Documentation

typedef std::map<Data, DialogSet*> resip::DialogUsageManager::CancelMap [private]

Definition at line 490 of file DialogUsageManager.hxx.

Definition at line 493 of file DialogUsageManager.hxx.

Definition at line 368 of file DialogUsageManager.hxx.

Definition at line 487 of file DialogUsageManager.hxx.

Definition at line 546 of file DialogUsageManager.hxx.

Definition at line 544 of file DialogUsageManager.hxx.

Definition at line 550 of file DialogUsageManager.hxx.


Member Enumeration Documentation

Enumerator:
None 
Sign 
Encrypt 
SignAndEncrypt 

Definition at line 92 of file DialogUsageManager.hxx.

Enumerator:
Running 
ShutdownRequested 
RemovingTransactionUser 
Shutdown 
Destroying 

Definition at line 533 of file DialogUsageManager.hxx.

      {
         Running,
         ShutdownRequested, // while ending usages
         RemovingTransactionUser, // while removing TU from stack
         Shutdown,  // after TU has been removed from stack
         Destroying // while calling destructor
      } ShutdownState;

Constructor & Destructor Documentation

DialogUsageManager::DialogUsageManager ( SipStack stack,
bool  createDefaultFeatures = false 
)

Definition at line 94 of file DialogUsageManager.cxx.

References addIncomingFeature(), addOutgoingFeature(), addServerSubscriptionHandler(), resip::TransactionUser::mFifo, mIncomingTarget, mOutgoingTarget, mStack, resip::SipStack::registerTransactionUser(), and resip::FifoStatsInterface::setDescription().

                                                                                  :
   TransactionUser(TransactionUser::DoNotRegisterForTransactionTermination, 
                   TransactionUser::RegisterForConnectionTermination,
                   TransactionUser::RegisterForKeepAlivePongs),
   mRedirectManager(new RedirectManager()),
   mInviteSessionHandler(0),
   mClientRegistrationHandler(0),
   mServerRegistrationHandler(0),
   mRedirectHandler(0),
   mDialogSetHandler(0),
   mRequestValidationHandler(0),
   mRegistrationPersistenceManager(0),
   mIsDefaultServerReferHandler(true),
   mClientPagerMessageHandler(0),
   mServerPagerMessageHandler(0),
   mDialogEventStateManager(0),
   mAppDialogSetFactory(new AppDialogSetFactory()),
   mStack(stack),
   mDumShutdownHandler(0),
   mShutdownState(Running),
   mThreadDebugKey(0),
   mHiddenThreadDebugKey(0)
{
   //TODO -- create default features
   mStack.registerTransactionUser(*this);
   addServerSubscriptionHandler("refer", new DefaultServerReferHandler());

   mFifo.setDescription("DialogUsageManager::mFifo");

   mIncomingTarget = new IncomingTarget(*this);
   mOutgoingTarget = new OutgoingTarget(*this);

   if (createDefaultFeatures)
   {
      SharedPtr<IdentityHandler> identity = SharedPtr<IdentityHandler>(new IdentityHandler(*this, *mIncomingTarget));

#if defined (USE_SSL)
      SharedPtr<EncryptionManager> encryptionIncoming = SharedPtr<EncryptionManager>(new EncryptionManager(*this, *mIncomingTarget));
      SharedPtr<EncryptionManager> encryptionOutgoing = SharedPtr<EncryptionManager>(new EncryptionManager(*this, *mOutgoingTarget));
#endif

      // default incoming features.
      addIncomingFeature(identity);
#if defined (USE_SSL)
      addIncomingFeature(encryptionIncoming);
#endif

      // default outgoing features.
#if defined (USE_SSL)
      addOutgoingFeature(encryptionOutgoing);
#endif

   }

}

Here is the call graph for this function:

DialogUsageManager::~DialogUsageManager ( ) [virtual]

Definition at line 150 of file DialogUsageManager.cxx.

References DebugLog, Destroying, mDialogSetMap, mIncomingTarget, mIsDefaultServerReferHandler, mOutgoingTarget, mServerSubscriptionHandlers, and mShutdownState.

{
   mShutdownState = Destroying;
   //InfoLog ( << "~DialogUsageManager" );

#if(0)
   // !kh!
   DialogSetMap::iterator dialogSet = mDialogSetMap.begin();
   for (; dialogSet != mDialogSetMap.end(); ++dialogSet)
   {
      delete dialogSet->second;
   }
#endif
   if(!mDialogSetMap.empty())
   {
      DebugLog(<< "DialogUsageManager::mDialogSetMap has " << mDialogSetMap.size() << " DialogSets");
      DialogSetMap::const_iterator ds = mDialogSetMap.begin();
      for(; ds != mDialogSetMap.end(); ++ds)
      {
         DebugLog(<< "DialgSetId:" << ds->first);
         DialogSet::DialogMap::const_iterator   d = ds->second->mDialogs.begin();
         for(; d != ds->second->mDialogs.end(); ++d)
         {
            //const Dialog* p = &(d->second);
            DebugLog(<<"DialogId:" << d->first << ", " << *d->second);
         }
      }
   }

   while(!mDialogSetMap.empty())
   {
      DialogSet*  ds = mDialogSetMap.begin()->second;
      delete ds;
   }

   if(mIsDefaultServerReferHandler)
   {
       delete mServerSubscriptionHandlers["refer"];
   }

   delete mIncomingTarget;
   delete mOutgoingTarget;

   //InfoLog ( << "~DialogUsageManager done" );
}

Member Function Documentation

void DialogUsageManager::addClientPublicationHandler ( const Data eventType,
ClientPublicationHandler handler 
)

If there is no such handler, calling makePublication will throw.

Definition at line 441 of file DialogUsageManager.cxx.

References mClientPublicationHandlers.

Referenced by main(), and resip::UserAgent::UserAgent().

{
   assert(handler);
   assert(mClientPublicationHandlers.count(eventType) == 0);
   mClientPublicationHandlers[eventType] = handler;
}
void DialogUsageManager::addClientSubscriptionHandler ( const Data eventType,
ClientSubscriptionHandler handler 
)

If there is no such handler, calling makeSubscription will throw.

Definition at line 418 of file DialogUsageManager.cxx.

References mClientSubscriptionHandlers.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), RegEventClient::RegEventClient(), and resip::UserAgent::UserAgent().

{
   assert(handler);
   assert(mClientSubscriptionHandlers.count(eventType) == 0);
   mClientSubscriptionHandlers[eventType] = handler;
}
void DialogUsageManager::addExternalMessageHandler ( ExternalMessageHandler handler)

Add/Remove External Message Handler do following op when processing thread in not running.

Definition at line 477 of file DialogUsageManager.cxx.

References mExternalMessageHandlers.

{
   std::vector<ExternalMessageHandler*>::iterator found = std::find(mExternalMessageHandlers.begin(), mExternalMessageHandlers.end(), handler);
   if (found == mExternalMessageHandlers.end())
   {
      mExternalMessageHandlers.push_back(handler);
   }
}
void DialogUsageManager::addIncomingFeature ( resip::SharedPtr< DumFeature feat)

Definition at line 2375 of file DialogUsageManager.cxx.

References mIncomingFeatureList.

Referenced by DialogUsageManager().

{
   mIncomingFeatureList.push_back(feat);
}
void DialogUsageManager::addOutgoingFeature ( resip::SharedPtr< DumFeature feat)

Definition at line 2381 of file DialogUsageManager.cxx.

References mOutgoingFeatureList.

Referenced by DialogUsageManager().

{
   // make sure EncryptionManager is the last feature in the list.
   mOutgoingFeatureList.insert(mOutgoingFeatureList.begin(), feat);
}
void DialogUsageManager::addOutOfDialogHandler ( MethodTypes  type,
OutOfDialogHandler handler 
)

Definition at line 457 of file DialogUsageManager.cxx.

References mOutOfDialogHandlers.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), main(), and resip::UserAgent::UserAgent().

{
   assert(handler);
   assert(mOutOfDialogHandlers.count(type) == 0);
   mOutOfDialogHandlers[type] = handler;
}
void DialogUsageManager::addServerPublicationHandler ( const Data eventType,
ServerPublicationHandler handler 
)

Definition at line 449 of file DialogUsageManager.cxx.

References mServerPublicationHandlers.

{
   assert(handler);
   assert(mServerPublicationHandlers.count(eventType) == 0);
   mServerPublicationHandlers[eventType] = handler;
}
void DialogUsageManager::addServerSubscriptionHandler ( const Data eventType,
ServerSubscriptionHandler handler 
)

Definition at line 426 of file DialogUsageManager.cxx.

References mIsDefaultServerReferHandler, and mServerSubscriptionHandlers.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), DialogUsageManager(), and main().

{
   assert(handler);
   //default do-nothing server side refer handler can be replaced
   if (eventType == "refer" && mServerSubscriptionHandlers.count(eventType))
   {
      delete mServerSubscriptionHandlers[eventType];
      mIsDefaultServerReferHandler = false;
      //mServerSubscriptionHandlers.erase(eventType);
   }

   mServerSubscriptionHandlers[eventType] = handler;
}
void DialogUsageManager::addTimer ( DumTimeout::Type  type,
unsigned long  durationSeconds,
BaseUsageHandle  target,
unsigned int  seq,
unsigned int  altseq = 0 
) [private]
void DialogUsageManager::addTimerMs ( DumTimeout::Type  type,
unsigned long  duration,
BaseUsageHandle  target,
unsigned int  seq,
unsigned int  altseq = 0,
const Data transactionId = Data::Empty 
) [private]
void DialogUsageManager::addTransport ( TransportType  protocol,
int  port = 0,
IpVersion  version = V4,
const Data ipInterface = Data::Empty,
const Data sipDomainname = Data::Empty,
const Data privateKeyPassPhrase = Data::Empty,
SecurityTypes::SSLType  sslType = SecurityTypes::TLSv1,
unsigned  transportFlags = 0 
)

Definition at line 204 of file DialogUsageManager.cxx.

References resip::SipStack::addTransport(), mStack, and resip::StunDisabled.

Referenced by resip::UserAgent::addTransport(), main(), and RegEventClient::RegEventClient().

{
   mStack.addTransport(protocol, port, version, StunDisabled, ipInterface,
                       sipDomainname, privateKeyPassPhrase, sslType,
                       transportFlags);
}

Here is the call graph for this function:

void DialogUsageManager::applyToAllClientSubscriptions ( ClientSubscriptionFunctor functor)

Definition at line 2411 of file DialogUsageManager.cxx.

References resip::ClientSubscriptionFunctor::apply(), and mDialogSetMap.

{
   assert(functor);
   for (DialogSetMap::iterator it = mDialogSetMap.begin(); it != mDialogSetMap.end(); ++it)
   {
      for (DialogSet::DialogMap::iterator i = it->second->mDialogs.begin(); i != it->second->mDialogs.end(); ++i)
      {
         std::vector<ClientSubscriptionHandle> clientSubs = i->second->getClientSubscriptions();
         for (std::vector<ClientSubscriptionHandle>::iterator ics = clientSubs.begin(); ics != clientSubs.end(); ++ics)
         {
            functor->apply(*ics);
         }
      }
   }
}

Here is the call graph for this function:

void DialogUsageManager::applyToAllServerSubscriptions ( ServerSubscriptionFunctor functor)

Definition at line 2394 of file DialogUsageManager.cxx.

References resip::ServerSubscriptionFunctor::apply(), and mDialogSetMap.

{
   assert(functor);
   for (DialogSetMap::iterator it = mDialogSetMap.begin(); it != mDialogSetMap.end(); ++it)
   {
      for (DialogSet::DialogMap::iterator i = it->second->mDialogs.begin(); i != it->second->mDialogs.end(); ++i)
      {
         std::vector<ServerSubscriptionHandle> serverSubs = i->second->getServerSubscriptions();
         for (std::vector<ServerSubscriptionHandle>::iterator iss = serverSubs.begin(); iss != serverSubs.end(); ++iss)
         {
            functor->apply(*iss);
         }
      }
   }
}

Here is the call graph for this function:

template<typename UnaryFunction >
UnaryFunction resip::DialogUsageManager::applyToServerSubscriptions ( const Data aor,
const Data eventType,
UnaryFunction  applyFn 
) [inline]

Definition at line 309 of file DialogUsageManager.hxx.

References mServerSubscriptions.

      {
         Data key = eventType + aor;
         std::pair<ServerSubscriptions::iterator,ServerSubscriptions::iterator> 
            range = mServerSubscriptions.equal_range(key);
         
         for (ServerSubscriptions::iterator i=range.first; i!=range.second; ++i)
         {
            ServerSubscriptionHandle h = i->second->getHandle();
            applyFn(h);
         }
         return applyFn;         
      }
bool DialogUsageManager::checkEventPackage ( const SipMessage request) [private]

Definition at line 2197 of file DialogUsageManager.cxx.

References resip::SipMessage::exists(), getClientSubscriptionHandler(), getServerPublicationHandler(), getServerSubscriptionHandler(), h_RequestLine, resip::SipMessage::header(), InfoLog, makeResponse(), resip::RequestLine::method(), send(), and resip::RequestLine::unknownMethodName().

Referenced by resip::Dialog::dispatch(), processPublish(), and processRequest().

{
   int failureCode = 0;
   MethodTypes method = request.header(h_RequestLine).method();

//       || (method == NOTIFY && !request.exists(h_SubscriptionState)))

   if (!request.exists(h_Event))
   {
      InfoLog (<< "No Event header in " << request.header(h_RequestLine).unknownMethodName());
      failureCode = 400;
   }
   else
   {
      switch(method)
      {
         case SUBSCRIBE:
            if (!getServerSubscriptionHandler(request.header(h_Event).value()))
            {
               InfoLog (<< "No handler for event package for SUBSCRIBE: " 
                        << request.header(h_Event).value());
               failureCode = 489;
            }
            break;
         case NOTIFY:
            if (!getClientSubscriptionHandler(request.header(h_Event).value()))
            {
               InfoLog (<< "No handler for event package for NOTIFY: " 
                        << request.header(h_Event).value());
               failureCode = 489;
            }
            break;
         case PUBLISH:
            if (!getServerPublicationHandler(request.header(h_Event).value()))
            {
               InfoLog (<< "No handler for event package for PUBLISH: " 
                        << request.header(h_Event).value());
               failureCode = 489;
            }
            break;
         default:
            assert(0);
      }
   }

   if (failureCode > 0)
   {
      SharedPtr<SipMessage> response(new SipMessage);
      makeResponse(*response, request, failureCode);
      send(response);
      return false;
   }
   return true;
}

Here is the call graph for this function:

void DialogUsageManager::clearExternalMessageHandler ( )

Definition at line 497 of file DialogUsageManager.cxx.

References empty, and mExternalMessageHandlers.

{
   std::vector<ExternalMessageHandler*> empty;
   empty.swap(mExternalMessageHandlers);
}
DialogEventStateManager * DialogUsageManager::createDialogEventStateManager ( DialogEventHandler handler)
void DialogUsageManager::destroy ( const BaseUsage usage) [private]

Definition at line 1172 of file DialogUsageManager.cxx.

References Destroying, InfoLog, resip::BaseUsage::mHandle, mShutdownState, and resip::TransactionUser::post().

Referenced by resip::DialogSet::dispatch(), resip::ClientInviteSession::dispatch(), resip::ServerInviteSession::dispatchAccepted(), resip::ClientInviteSession::dispatchAnswered(), resip::ServerInviteSession::dispatchBye(), resip::InviteSession::dispatchBye(), resip::ServerInviteSession::dispatchCancel(), resip::ClientInviteSession::dispatchCancelled(), resip::ClientInviteSession::dispatchEarly(), resip::ClientInviteSession::dispatchEarlyWithAnswer(), resip::ClientInviteSession::dispatchEarlyWithOffer(), resip::ClientInviteSession::dispatchQueuedUpdate(), resip::ClientInviteSession::dispatchSentAnswer(), resip::ClientInviteSession::dispatchSentUpdateEarly(), resip::ClientInviteSession::dispatchSentUpdateEarlyGlare(), resip::ClientInviteSession::dispatchStart(), resip::InviteSession::dispatchTerminated(), resip::ServerInviteSession::dispatchUnknown(), resip::ServerInviteSession::dispatchWaitingToOffer(), resip::ServerInviteSession::dispatchWaitingToRequestOffer(), resip::ClientPagerMessage::end(), resip::ClientInviteSession::handleRedirect(), resip::DialogSet::possiblyDie(), resip::Dialog::possiblyDie(), resip::ServerInviteSession::redirect(), and resip::ServerInviteSession::reject().

{
   if (mShutdownState != Destroying)
   {
      post(new DestroyUsage(usage->mHandle));
   }
   else
   {
      InfoLog(<< "DialogUsageManager::destroy() not posting to stack");
   }
}

Here is the call graph for this function:

void DialogUsageManager::destroy ( DialogSet dset) [private]

Definition at line 1185 of file DialogUsageManager.cxx.

References Destroying, InfoLog, mShutdownState, and resip::TransactionUser::post().

{
   if (mShutdownState != Destroying)
   {
      post(new DestroyUsage(dset));
   }
   else
   {
      InfoLog(<< "DialogUsageManager::destroy() not posting to stack");
   }
}

Here is the call graph for this function:

void DialogUsageManager::destroy ( Dialog d) [private]

Definition at line 1198 of file DialogUsageManager.cxx.

References Destroying, InfoLog, mShutdownState, and resip::TransactionUser::post().

{
   if (mShutdownState != Destroying)
   {
      post(new DestroyUsage(d));
   }
   else
   {
      InfoLog(<< "DialogUsageManager::destroy() not posting to stack");
   }
}

Here is the call graph for this function:

TargetCommand::Target & DialogUsageManager::dumIncomingTarget ( )

Definition at line 2455 of file DialogUsageManager.cxx.

References mIncomingTarget.

Referenced by resip::IdentityHandler::queueForIdentityCheck().

{
   return *mIncomingTarget;
}
TargetCommand::Target & DialogUsageManager::dumOutgoingTarget ( )

Definition at line 2461 of file DialogUsageManager.cxx.

References mOutgoingTarget.

{
   return *mOutgoingTarget;
}
void DialogUsageManager::end ( DialogSetId  invSessionId)

Definition at line 1158 of file DialogUsageManager.cxx.

References resip::DialogSet::end(), and findDialogSet().

{
   DialogSet* ds = findDialogSet(setid);
   if (ds == 0)
   {
      throw Exception("Request no longer exists", __FILE__, __LINE__);
   }
   else
   {
      ds->end();
   }
}

Here is the call graph for this function:

AppDialogHandle DialogUsageManager::findAppDialog ( const DialogId id)

Definition at line 1280 of file DialogUsageManager.cxx.

References findDialog(), resip::AppDialog::getHandle(), and resip::Dialog::mAppDialog.

{
   Dialog* pDialog = findDialog(id);

   if(pDialog && pDialog->mAppDialog)
   {
      return pDialog->mAppDialog->getHandle();
   }

   // Return an invalid handle
   return AppDialogHandle();
}

Here is the call graph for this function:

AppDialogSetHandle DialogUsageManager::findAppDialogSet ( const DialogSetId id)

Definition at line 1293 of file DialogUsageManager.cxx.

References findDialogSet(), resip::AppDialogSet::getHandle(), and resip::DialogSet::mAppDialogSet.

{
   DialogSet* pDialogSet = findDialogSet(id);

   if(pDialogSet && pDialogSet->mAppDialogSet)
   {
      return pDialogSet->mAppDialogSet->getHandle();
   }

   // Return an invalid handle
   return AppDialogSetHandle();
}

Here is the call graph for this function:

BaseCreator * DialogUsageManager::findCreator ( const DialogId id) [private]

Definition at line 2278 of file DialogUsageManager.cxx.

References findDialogSet(), and resip::DialogSet::getCreator().

{
   DialogSet* ds = findDialogSet(id.getDialogSetId());
   if (ds)
   {
      return ds->getCreator();
   }
   else
   {
      return 0;
   }
}

Here is the call graph for this function:

Dialog * DialogUsageManager::findDialog ( const DialogId id) [private]

Definition at line 1212 of file DialogUsageManager.cxx.

References resip::DialogSet::findDialog(), and findDialogSet().

Referenced by findAppDialog(), findInviteSession(), and sendUsingOutboundIfAppropriate().

{
   DialogSet* ds = findDialogSet(id.getDialogSetId());
   if (ds)
   {
      return ds->findDialog(id);
   }
   else
   {
      return 0;
   }
}

Here is the call graph for this function:

DialogSet * DialogUsageManager::findDialogSet ( const DialogSetId id) [private]

Definition at line 2253 of file DialogUsageManager.cxx.

References resip::InserterP(), mDialogSetMap, StackLog, and threadCheck.

Referenced by end(), findAppDialogSet(), findCreator(), findDialog(), outgoingProcess(), processRequest(), processResponse(), and send().

{
   threadCheck();
   StackLog ( << "Looking for dialogSet: " << id << " in map:");
   StackLog ( << "DialogSetMap: " << InserterP(mDialogSetMap) );
   DialogSetMap::const_iterator it = mDialogSetMap.find(id);

   if (it == mDialogSetMap.end())
   {
      return 0;
   }
   else
   {
      if(it->second->isDestroying())
      {
         return 0;
      }
      else
      {
         return it->second;
      }
   }
}

Here is the call graph for this function:

InviteSessionHandle DialogUsageManager::findInviteSession ( DialogId  id)
pair< InviteSessionHandle, int > DialogUsageManager::findInviteSession ( CallId  replaces)

Definition at line 1239 of file DialogUsageManager.cxx.

References resip::CallID::exists(), findInviteSession(), resip::Handle< T >::isValid(), resip::Handle< InviteSession >::NotValid(), resip::ParserCategory::param(), and resip::CallID::value().

{
   //486/481/603 decision making logic where?  App may not wish to keep track of
   //invitesession state
   //Logic is here for now.
   InviteSessionHandle is = findInviteSession(DialogId(replaces.value(),
                                                       replaces.param(p_toTag),
                                                       replaces.param(p_fromTag)));
   int ErrorStatusCode = 481; // Call/Transaction Does Not Exist

   // If we matched a session - Do RFC3891 Section 3 Processing
   if(is.isValid())
   {
      // Note some missing checks are:
      // 1.  If the Replaces header field matches more than one dialog, the UA must act as
      //     if no match was found
      // 2.  Verify that the initiator of the new Invite is authorized
      if(is->isTerminated())
      {
         ErrorStatusCode = 603; // Declined
         is = InviteSessionHandle::NotValid();
      }
      else if(is->isConnected())
      {
         // Check if early-only flag is present in replaces header
         if(replaces.exists(p_earlyOnly))
         {
            ErrorStatusCode = 486; // Busy Here
            is = InviteSessionHandle::NotValid();
         }
      }      
      else if(!is->isEarly())
      {
         // replaces can't be used on early dialogs that were not initiated by this UA - ie. InviteSession::Proceeding state
         ErrorStatusCode = 481; // Call/Transaction Does Not Exist
         is = InviteSessionHandle::NotValid();
      }
   }
   return make_pair(is, ErrorStatusCode);
}

Here is the call graph for this function:

Dialog& resip::DialogUsageManager::findOrCreateDialog ( const SipMessage msg) [private]
void DialogUsageManager::forceShutdown ( DumShutdownHandler h)

Definition at line 284 of file DialogUsageManager.cxx.

References resip::HandleManager::dumpHandles(), mDumShutdownHandler, mShutdownState, onAllHandlesDestroyed(), ShutdownRequested, and WarningLog.

{
   WarningLog (<< "force shutdown ");
   dumpHandles();
   
   mDumShutdownHandler = h;
   //HandleManager::shutdown();  // clear out usages
   mShutdownState = ShutdownRequested;
   DialogUsageManager::onAllHandlesDestroyed();
}

Here is the call graph for this function:

ClientPublicationHandler * DialogUsageManager::getClientPublicationHandler ( const Data eventType)

Definition at line 2333 of file DialogUsageManager.cxx.

References mClientPublicationHandlers.

Referenced by resip::ClientPublication::dispatch().

{
   map<Data, ClientPublicationHandler*>::iterator res = mClientPublicationHandlers.find(eventType);
   if (res != mClientPublicationHandlers.end())
   {
      return res->second;
   }
   else
   {
      return 0;
   }
}
ClientSubscriptionHandler * DialogUsageManager::getClientSubscriptionHandler ( const Data eventType)
Data DialogUsageManager::getHostAddress ( )

Definition at line 237 of file DialogUsageManager.cxx.

References resip::SipStack::getHostAddress(), and mStack.

{
   return mStack.getHostAddress();
}

Here is the call graph for this function:

SharedPtr< MasterProfile > & DialogUsageManager::getMasterProfile ( )
SharedPtr< UserProfile > & DialogUsageManager::getMasterUserProfile ( )
Message* resip::DialogUsageManager::getNext ( int  ms) [inline]

Definition at line 340 of file DialogUsageManager.hxx.

References resip::TimeLimitFifo< Msg >::getNext(), and resip::TransactionUser::mFifo.

{ return mFifo.getNext(ms); }

Here is the call graph for this function:

OutOfDialogHandler * DialogUsageManager::getOutOfDialogHandler ( const MethodTypes  type) [private]

Definition at line 2361 of file DialogUsageManager.cxx.

References mOutOfDialogHandlers.

Referenced by resip::ServerOutOfDialogReq::dispatch(), and resip::ClientOutOfDialogReq::dispatch().

{
   map<MethodTypes, OutOfDialogHandler*>::iterator res = mOutOfDialogHandlers.find(type);
   if (res != mOutOfDialogHandlers.end())
   {
      return res->second;
   }
   else
   {
      return 0;
   }
}
RedirectHandler * DialogUsageManager::getRedirectHandler ( )

Definition at line 337 of file DialogUsageManager.cxx.

References mRedirectHandler.

Referenced by resip::RedirectManager::handle().

{
   return mRedirectHandler;
}
Security * DialogUsageManager::getSecurity ( )
ServerPublicationHandler * DialogUsageManager::getServerPublicationHandler ( const Data eventType)

Definition at line 2347 of file DialogUsageManager.cxx.

References mServerPublicationHandlers.

Referenced by checkEventPackage(), and resip::ServerPublication::dispatch().

{
   map<Data, ServerPublicationHandler*>::iterator res = mServerPublicationHandlers.find(eventType);
   if (res != mServerPublicationHandlers.end())
   {
      return res->second;
   }
   else
   {
      return 0;
   }
}
ServerSubscriptionHandler * DialogUsageManager::getServerSubscriptionHandler ( const Data eventType)
SipStack & DialogUsageManager::getSipStack ( )
const SipStack & DialogUsageManager::getSipStack ( ) const

Definition at line 225 of file DialogUsageManager.cxx.

References mStack.

{
   return mStack;
}
bool DialogUsageManager::hasEvents ( ) const

Definition at line 1664 of file DialogUsageManager.cxx.

References resip::AbstractFifo< T >::messageAvailable(), and resip::TransactionUser::mFifo.

{
   return mFifo.messageAvailable();
}

Here is the call graph for this function:

void DialogUsageManager::incomingProcess ( std::auto_ptr< Message msg) [private]

Definition at line 1498 of file DialogUsageManager.cxx.

References resip::Data::append(), resip::DumFeatureChain::ChainDoneBit, DebugLog, resip::Data::Empty, ErrLog, resip::DumFeatureChain::EventTakenBit, getMasterProfile(), resip::BaseException::getMessage(), resip::SipMessage::getTransactionId(), resip::DumFeatureMessage::getTransactionId(), h_CallId, h_RequestLine, resip::SipMessage::header(), InfoLog, resip::SipMessage::isRequest(), resip::LazyParser::isWellFormed(), makeResponse(), mergeRequest(), resip::SipMessage::method(), resip::RequestLine::method(), mIncomingFeatureChainMap, mIncomingFeatureList, mIncomingTarget, processRequest(), processResponse(), sendResponse(), validate100RelSuport(), validateAccept(), validateContent(), validateRequestURI(), and validateRequiredOptions().

Referenced by internalProcess(), and resip::DialogUsageManager::IncomingTarget::post().

{
   //call or create feature chain if appropriate
   Data tid = Data::Empty;
   {
      SipMessage* sipMsg = dynamic_cast<SipMessage*>(msg.get());
      if (sipMsg)
      {
         tid = sipMsg->getTransactionId();
         bool garbage=false;
         Data reason;

         if(!sipMsg->header(h_From).isWellFormed())
         {
            garbage=true;
            reason.append("Malformed From, ",16);
         }

         if(!sipMsg->header(h_To).isWellFormed())
         {
            garbage=true;
            reason.append("Malformed To, ",14);
         }

         if(!sipMsg->header(h_CallId).isWellFormed())
         {
            garbage=true;
            reason.append("Malformed Call-Id, ",19);
         }
         
         if(garbage)
         {
            if(sipMsg->isRequest() && sipMsg->method()!=ACK)
            {
               // .bwc. Either we need to trim the last comma off, or make this 
               // a proper sentence fragment. This is more fun.
               reason.append("fix your code!",14);
               SipMessage failure;
               makeResponse(failure, *sipMsg, 400, reason);
               sendResponse(failure);
            }

            InfoLog (<< "Malformed header in message (" << reason << ") - rejecting/discarding: " << *sipMsg);
            
            // .bwc. Only forge a response when appropriate, but return in any 
            // case.
            return;
         }
      }
      
      DumFeatureMessage* featureMsg = dynamic_cast<DumFeatureMessage*>(msg.get());
      if (featureMsg)
      {
         //DebugLog(<<"Got a DumFeatureMessage" << featureMsg);
         tid = featureMsg->getTransactionId();
      }
   }
   if (tid != Data::Empty && !mIncomingFeatureList.empty())
   {
      FeatureChainMap::iterator it;     
      //efficiently find or create FeatureChain, should prob. be a utility template
      {
         FeatureChainMap::iterator lb = mIncomingFeatureChainMap.lower_bound(tid);
         if (lb != mIncomingFeatureChainMap.end() && !(mIncomingFeatureChainMap.key_comp()(tid, lb->first)))
         {
            it = lb;
         }
         else
         {
            assert(dynamic_cast<SipMessage*>(msg.get()));
            it = mIncomingFeatureChainMap.insert(lb, FeatureChainMap::value_type(tid, new DumFeatureChain(*this, mIncomingFeatureList, *mIncomingTarget)));
         }
      }
      
      DumFeatureChain::ProcessingResult res = it->second->process(msg.get());
      
      if (res & DumFeatureChain::ChainDoneBit)
      {
         delete it->second;
         mIncomingFeatureChainMap.erase(it);
         //DebugLog(<< "feature chain deleted" << endl);
      }
 
      if (res & DumFeatureChain::EventTakenBit)
      {
         msg.release();
         //DebugLog(<< "event taken");
         return;
      }
   }
   
   try
   {
      InfoLog (<< "Got: " << msg->brief());
      DumDecrypted* decryptedMsg = dynamic_cast<DumDecrypted*>(msg.get());
      SipMessage* sipMsg = 0;
      if (decryptedMsg)
      {
         sipMsg = decryptedMsg->decrypted();
      }
      else
      {
         sipMsg = dynamic_cast<SipMessage*>(msg.get());
      }

      if (sipMsg)
      {
         //DebugLog ( << "DialogUsageManager::process: " << sipMsg->brief());
         if (sipMsg->isRequest())
         {
            // Validate Request URI
            if( !validateRequestURI(*sipMsg) )
            {
               DebugLog (<< "Failed RequestURI validation " << *sipMsg);
               return;
            }

            // Continue validation on all requests, except ACK and CANCEL
            if(sipMsg->header(h_RequestLine).method() != ACK &&
               sipMsg->header(h_RequestLine).method() != CANCEL)
            {
               if( !validateRequiredOptions(*sipMsg) )
               {
                  DebugLog (<< "Failed required options validation " << *sipMsg);
                  return;
               }
               if( !validate100RelSuport(*sipMsg) )
               {
                  DebugLog (<< "Remote party does not support 100rel " << *sipMsg);
                  return;
               }
               if( getMasterProfile()->validateContentEnabled() && !validateContent(*sipMsg) )
               {
                  DebugLog (<< "Failed content validation " << *sipMsg);
                  return;
               }
               if( getMasterProfile()->validateAcceptEnabled() && !validateAccept(*sipMsg) )
               {
                  DebugLog (<< "Failed accept validation " << *sipMsg);
                  return;
               }
            }
            if (sipMsg->header(h_From).exists(p_tag))
            {
               if (mergeRequest(*sipMsg) )
               {
                  InfoLog (<< "Merged request: " << *sipMsg);
                  return;
               }
            }
            processRequest(*sipMsg);
         }
         else
         {
            processResponse(*sipMsg);
         }
      }
   }
   catch(BaseException& e)
   {
      //unparseable, bad 403 w/ 2543 trans it from FWD, etc
          ErrLog(<<"Illegal message rejected: " << e.getMessage());
   }
}

Here is the call graph for this function:

void DialogUsageManager::internalProcess ( std::auto_ptr< Message msg)

Definition at line 1307 of file DialogUsageManager.cxx.

References DebugLog, resip::DestroyUsage::destroy(), resip::EventDispatcher< E >::dispatch(), ErrLog, resip::DumCommand::executeCommand(), resip::DumTimeout::getBaseUsage(), resip::KeepAlivePong::getFlow(), resip::ConnectionTerminated::getFlow(), incomingProcess(), InfoLog, resip::Handle< T >::isValid(), mConnectionTerminatedEventDispatcher, mDialogSetMap, mDumShutdownHandler, resip::Tuple::mFlowKey, mHiddenThreadDebugKey, mKeepAliveManager, mShutdownState, mThreadDebugKey, resip::DumShutdownHandler::onDumCanBeDeleted(), processExternalMessage(), RemovingTransactionUser, Shutdown, threadCheck, resip::ThreadIf::tlsKeyCreate(), resip::ThreadIf::tlsSetValue(), resip::TransactionUserMessage::TransactionUserRemoved, and resip::TransactionUserMessage::type().

Referenced by process(), and resip::DumThread::thread().

{
#ifdef RESIP_DUM_THREAD_DEBUG
   if(!mThreadDebugKey)
   {
      // .bwc. Probably means multiple threads are trying to give DUM cycles 
      // simultaneously.
      assert(!mHiddenThreadDebugKey);
      // No d'tor needed, since we're just going to use a pointer to this.
      if(!ThreadIf::tlsKeyCreate(mThreadDebugKey, 0))
      {
         // .bwc. We really could pass anything here, but for the sake of 
         // passing a valid pointer, I have (completely arbitrarily) chosen a 
         // pointer to the DUM. All that matters is that this value is non-null
         ThreadIf::tlsSetValue(mThreadDebugKey, this);
      }
      else
      {
         ErrLog(<< "ThreadIf::tlsKeyCreate() failed!");
      }
   }
#endif

   threadCheck();

   // After a Stack ShutdownMessage has been received, don't do anything else in dum
   if (mShutdownState == Shutdown)
   {
      return;
   }

   {
      TransactionUserMessage* tuMsg = dynamic_cast<TransactionUserMessage*>(msg.get());
      if (tuMsg)
      {
         InfoLog (<< "TU unregistered ");
         assert(mShutdownState == RemovingTransactionUser);
         assert(tuMsg->type() == TransactionUserMessage::TransactionUserRemoved);
         mShutdownState = Shutdown;
         if (mDumShutdownHandler)
         {
            mDumShutdownHandler->onDumCanBeDeleted();
            mDumShutdownHandler = 0; // prevent mDumShutdownHandler getting called more than once
         }
         return;
      }
   }
   
   {
      KeepAlivePong* pong = dynamic_cast<KeepAlivePong*>(msg.get());
      if (pong)
      {
         DebugLog(<< "keepalive pong received from " << pong->getFlow());
         if (mKeepAliveManager.get())
         {
            mKeepAliveManager->receivedPong(pong->getFlow());
         }
         return;
      }
   }

   {
      DestroyUsage* destroyUsage = dynamic_cast<DestroyUsage*>(msg.get());
      if (destroyUsage)
      {
         //DebugLog(<< "Destroying usage" );
         destroyUsage->destroy();
         return;
      }
   }

   {
      DumTimeout* dumMsg = dynamic_cast<DumTimeout*>(msg.get());
      if (dumMsg)
      {
         //DebugLog(<< "Timeout Message" );
         if (!dumMsg->getBaseUsage().isValid())
         {
            return;
         }
         dumMsg->getBaseUsage()->dispatch(*dumMsg);
         return;
      }
   }

   {
      KeepAliveTimeout* keepAliveMsg = dynamic_cast<KeepAliveTimeout*>(msg.get());
      if (keepAliveMsg)
      {
         //DebugLog(<< "Keep Alive Message" );
         if (mKeepAliveManager.get())
         {
            mKeepAliveManager->process(*keepAliveMsg);
         }
         return;      
      }
   }

   {
      KeepAlivePongTimeout* keepAlivePongMsg = dynamic_cast<KeepAlivePongTimeout*>(msg.get());
      if (keepAlivePongMsg)
      {
         //DebugLog(<< "Keep Alive Pong Message" );
         if (mKeepAliveManager.get())
         {
            mKeepAliveManager->process(*keepAlivePongMsg);
         }
         return;      
      }
   }

   {
      ConnectionTerminated* terminated = dynamic_cast<ConnectionTerminated*>(msg.get());
      if (terminated)
      {
         // Notify all dialogSets, in case they need to react (ie. client outbound support)
         // First find all applicable dialogsets, since flow token in user profile will 
         // be cleared by first dialogset we notify, then notify all dialogset's
         std::list<DialogSet*> dialogSetsToNotify;
         DialogSetMap::iterator it =  mDialogSetMap.begin();
         for(; it != mDialogSetMap.end(); it++)
         {
            if(it->second->mUserProfile->clientOutboundEnabled() && 
               it->second->mUserProfile->getClientOutboundFlowTuple().mFlowKey == terminated->getFlow().mFlowKey &&  // Flow key is not part of Tuple operator=, check it first
               it->second->mUserProfile->getClientOutboundFlowTuple() == terminated->getFlow())
            {
               if(it->second->getClientRegistration().isValid())
               {
                   // ensure client registrations are notified first
                   dialogSetsToNotify.push_front(it->second);
               }
               else
               {
                  dialogSetsToNotify.push_back(it->second);
               }
            }
         }
         // Now dispatch notification to all dialogsets found above
         std::list<DialogSet*>::iterator it2 = dialogSetsToNotify.begin();
         for(; it2 != dialogSetsToNotify.end();it2++)
         {
            (*it2)->flowTerminated(terminated->getFlow());
         }

         DebugLog(<< "connection terminated message");
         if (mConnectionTerminatedEventDispatcher.dispatch(msg.get()))
         {
            msg.release();
         }
         return;
      }
   }

   {
      DumCommand* command = dynamic_cast<DumCommand*>(msg.get());
      if (command)
      {
         //DebugLog(<< "DumCommand" );
         command->executeCommand();
         return;      
      }
   }

   {
      ExternalMessageBase* externalMessage = dynamic_cast<ExternalMessageBase*>(msg.get());
      if (externalMessage)
      {
         processExternalMessage(externalMessage);
         return;
      }
   }

   incomingProcess(msg);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const Contents initialOffer,
AppDialogSet ads = 0 
)

Definition at line 554 of file DialogUsageManager.cxx.

References None.

Referenced by resip::BasicClientCall::initiateCall(), main(), makeInviteSession(), and resip::BasicClientCall::onFlowTerminated().

{
   return makeInviteSession(target, userProfile, initialOffer, None, 0, appDs);
}
SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
const Contents initialOffer,
AppDialogSet ads = 0 
)

Definition at line 560 of file DialogUsageManager.cxx.

References getMasterUserProfile(), makeInviteSession(), and None.

{
   return makeInviteSession(target, getMasterUserProfile(), initialOffer, None, 0, appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const Contents initialOffer,
EncryptionLevel  level,
const Contents alternative = 0,
AppDialogSet ads = 0 
)

Definition at line 566 of file DialogUsageManager.cxx.

References makeNewSession(), and resip::DumHelper::setOutgoingEncryptionLevel().

{
   SharedPtr<SipMessage> inv = makeNewSession(new InviteSessionCreator(*this, target, userProfile, initialOffer, level, alternative), appDs);
   DumHelper::setOutgoingEncryptionLevel(*inv, level);
   return inv;
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
const Contents initialOffer,
EncryptionLevel  level,
const Contents alternative = 0,
AppDialogSet ads = 0 
)

Definition at line 579 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeInviteSession().

{
   return makeInviteSession(target, getMasterUserProfile(), initialOffer, level, alternative, appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
InviteSessionHandle  sessionToReplace,
const SharedPtr< UserProfile > &  userProfile,
const Contents initialOffer,
AppDialogSet ads = 0 
)

Definition at line 589 of file DialogUsageManager.cxx.

References resip::Handle< T >::isValid(), makeInviteSession(), resip::ParserCategory::param(), and resip::CallID::value().

{
   SharedPtr<SipMessage> inv = makeInviteSession(target, userProfile, initialOffer, ads);
   // add replaces header
   assert(sessionToReplace.isValid());
   if(sessionToReplace.isValid())
   {
      CallId replaces;
      DialogId id = sessionToReplace->getDialogId();
      replaces.value() = id.getCallId();
      replaces.param(p_toTag) = id.getRemoteTag();
      replaces.param(p_fromTag) = id.getLocalTag();
      inv->header(h_Replaces) = replaces;
   }
   return inv;
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
InviteSessionHandle  sessionToReplace,
const SharedPtr< UserProfile > &  userProfile,
const Contents initialOffer,
EncryptionLevel  level = None,
const Contents alternative = 0,
AppDialogSet ads = 0 
)

Definition at line 611 of file DialogUsageManager.cxx.

References resip::Handle< T >::isValid(), makeInviteSession(), resip::ParserCategory::param(), and resip::CallID::value().

{
   SharedPtr<SipMessage> inv = makeInviteSession(target, userProfile, initialOffer, level, alternative, ads);
   // add replaces header
   assert(sessionToReplace.isValid());
   if(sessionToReplace.isValid())
   {
      CallId replaces;
      DialogId id = sessionToReplace->getDialogId();
      replaces.value() = id.getCallId();
      replaces.param(p_toTag) = id.getRemoteTag();
      replaces.param(p_fromTag) = id.getLocalTag();
      inv->header(h_Replaces) = replaces;
   }
   return inv;
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSession ( const NameAddr target,
InviteSessionHandle  sessionToReplace,
const Contents initialOffer,
EncryptionLevel  level = None,
const Contents alternative = 0,
AppDialogSet ads = 0 
)

Definition at line 635 of file DialogUsageManager.cxx.

References resip::Handle< T >::isValid(), makeInviteSession(), resip::ParserCategory::param(), and resip::CallID::value().

{
   SharedPtr<SipMessage> inv = makeInviteSession(target, initialOffer, level, alternative, ads);
   // add replaces header
   assert(sessionToReplace.isValid());
   if(sessionToReplace.isValid())
   {
      CallId replaces;
      DialogId id = sessionToReplace->getDialogId();
      replaces.value() = id.getCallId();
      replaces.param(p_toTag) = id.getRemoteTag();
      replaces.param(p_fromTag) = id.getLocalTag();
      inv->header(h_Replaces) = replaces;
   }
   return inv;
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSessionFromRefer ( const SipMessage refer,
ServerSubscriptionHandle  serverSub,
const Contents initialOffer,
AppDialogSet appDs = 0 
)

Definition at line 658 of file DialogUsageManager.cxx.

References None.

Referenced by makeInviteSessionFromRefer().

{
   return makeInviteSessionFromRefer(refer, serverSub, initialOffer, None, 0, appDs);
}
SharedPtr< SipMessage > DialogUsageManager::makeInviteSessionFromRefer ( const SipMessage refer,
const SharedPtr< UserProfile > &  userProfile,
const Contents initialOffer,
AppDialogSet appDs = 0 
)

Definition at line 667 of file DialogUsageManager.cxx.

References empty, makeInviteSessionFromRefer(), and None.

{
   ServerSubscriptionHandle empty;
   return makeInviteSessionFromRefer(refer, userProfile, empty, initialOffer, None, 0, appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSessionFromRefer ( const SipMessage refer,
ServerSubscriptionHandle  serverSub,
const Contents initialOffer,
EncryptionLevel  level = None,
const Contents alternative = 0,
AppDialogSet appDs = 0 
)

Definition at line 677 of file DialogUsageManager.cxx.

References getMasterUserProfile(), resip::Handle< T >::isValid(), and makeInviteSessionFromRefer().

{
   return makeInviteSessionFromRefer(refer, serverSub.isValid() ? serverSub->mDialog.mDialogSet.getUserProfile() : getMasterUserProfile(), serverSub, initialOffer, level, alternative, appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeInviteSessionFromRefer ( const SipMessage refer,
const SharedPtr< UserProfile > &  userProfile,
ServerSubscriptionHandle  serverSub,
const Contents initialOffer,
EncryptionLevel  level = None,
const Contents alternative = 0,
AppDialogSet appDs = 0 
)

Definition at line 688 of file DialogUsageManager.cxx.

References DebugLog, resip::Uri::embedded(), resip::SipMessage::exists(), h_StatusLine, resip::Uri::hasEmbedded(), resip::SipMessage::header(), resip::Handle< T >::isValid(), makeNewSession(), resip::SipFrag::message(), resip::Uri::remove(), resip::Uri::removeEmbedded(), resip::DumHelper::setOutgoingEncryptionLevel(), resip::NameAddr::uri(), and resip::RequestLine::uri().

{
   if (serverSub.isValid())
   {
      DebugLog(<< "implicit subscription");
      //generate and send 100
      SipFrag contents;
      contents.message().header(h_StatusLine).statusCode() = 100;
      contents.message().header(h_StatusLine).reason() = "Trying";
      //will be cloned...ServerSub may not have the most efficient API possible
      serverSub->setSubscriptionState(Active);
      SharedPtr<SipMessage> notify = serverSub->update(&contents);
//   mInviteSessionHandler->onReadyToSend(InviteSessionHandle::NotValid(), notify);
      serverSub->send(notify);
   }

   //19.1.5
   NameAddr target = refer.header(h_ReferTo);
   target.uri().removeEmbedded();
   target.uri().remove(p_method);

   // !jf! this code assumes you have a UserProfile
   SharedPtr<SipMessage> inv = makeNewSession(new InviteSessionCreator(*this,
                                                                       target,
                                                                       userProfile,
                                                                       initialOffer, level, alternative, serverSub), appDs);
   DumHelper::setOutgoingEncryptionLevel(*inv, level);

   //could pass dummy target, then apply merge rules from 19.1.5...or
   //makeNewSession would use rules from 19.1.5
   if (refer.exists(h_ReferredBy))
   {
      inv->header(h_ReferredBy) = refer.header(h_ReferredBy);
   }

   const Uri& referTo = refer.header(h_ReferTo).uri();
   //19.1.5
   if (referTo.hasEmbedded() && referTo.embedded().exists(h_Replaces))
   {
      inv->header(h_Replaces) = referTo.embedded().header(h_Replaces);
   }

   return inv;
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeNewSession ( BaseCreator creator,
AppDialogSet appDs 
) [private]

Definition at line 530 of file DialogUsageManager.cxx.

References resip::BaseCreator::getLastRequest(), and makeUacDialogSet().

Referenced by makeInviteSession(), makeInviteSessionFromRefer(), makeOutOfDialogRequest(), makePublication(), makeRefer(), makeRegistration(), and makeSubscription().

{
   makeUacDialogSet(creator, appDs);
   return creator->getLastRequest();
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeOutOfDialogRequest ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const MethodTypes  meth,
AppDialogSet appDs = 0 
)

Definition at line 839 of file DialogUsageManager.cxx.

References makeNewSession().

Referenced by main().

{
   return makeNewSession(new OutOfDialogReqCreator(*this, meth, target, userProfile), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeOutOfDialogRequest ( const NameAddr target,
const MethodTypes  meth,
AppDialogSet appDs = 0 
)

Definition at line 845 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new OutOfDialogReqCreator(*this, meth, target, getMasterUserProfile()), appDs);
}

Here is the call graph for this function:

ClientPagerMessageHandle DialogUsageManager::makePagerMessage ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
AppDialogSet appDs = 0 
)

Definition at line 851 of file DialogUsageManager.cxx.

References ClientPagerMessage, resip::ClientPagerMessage::getHandle(), makeUacDialogSet(), resip::DialogSet::mClientPagerMessage, and mClientPagerMessageHandler.

Referenced by main(), and makePagerMessage().

{
   if (!mClientPagerMessageHandler)
   {
      throw DumException("Cannot send MESSAGE messages without a ClientPagerMessageHandler", __FILE__, __LINE__);
   }
   DialogSet* ds = makeUacDialogSet(new PagerMessageCreator(*this, target, userProfile), appDs);
   ClientPagerMessage* cpm = new ClientPagerMessage(*this, *ds);
   ds->mClientPagerMessage = cpm;
   return cpm->getHandle();
}

Here is the call graph for this function:

ClientPagerMessageHandle DialogUsageManager::makePagerMessage ( const NameAddr target,
AppDialogSet appDs = 0 
)

Definition at line 864 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makePagerMessage().

{
   return makePagerMessage(target, getMasterUserProfile(), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makePublication ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const Contents body,
const Data eventType,
UInt32  expiresSeconds,
AppDialogSet appDs = 0 
)

Definition at line 818 of file DialogUsageManager.cxx.

References makeNewSession().

Referenced by main().

{
   return makeNewSession(new PublicationCreator(*this, targetDocument, userProfile, body, eventType, expiresSeconds), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makePublication ( const NameAddr target,
const Contents body,
const Data eventType,
UInt32  expiresSeconds,
AppDialogSet appDs = 0 
)

Definition at line 829 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new PublicationCreator(*this, targetDocument, getMasterUserProfile(), body, eventType, expiresSeconds), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeRefer ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const H_ReferTo::Type &  referTo,
AppDialogSet appDs = 0 
)

Definition at line 740 of file DialogUsageManager.cxx.

References makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, userProfile, referTo), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeRefer ( const NameAddr target,
const H_ReferTo::Type &  referTo,
AppDialogSet appDs = 0 
)

Definition at line 746 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, getMasterUserProfile(), referTo), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeRegistration ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
AppDialogSet appDs = 0 
)

Definition at line 793 of file DialogUsageManager.cxx.

References resip::SharedPtr< T >::get(), and makeNewSession().

Referenced by main(), resip::UserAgent::startup(), and resip::BasicClientUserAgent::startup().

{
   assert(userProfile.get());
   return makeNewSession(new RegistrationCreator(*this, target, userProfile, userProfile->getDefaultRegistrationTime()), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeRegistration ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
UInt32  registrationTime,
AppDialogSet appDs = 0 
)

Definition at line 800 of file DialogUsageManager.cxx.

References makeNewSession().

{
   return makeNewSession(new RegistrationCreator(*this, target, userProfile, registrationTime), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeRegistration ( const NameAddr target,
AppDialogSet appDs = 0 
)

Definition at line 806 of file DialogUsageManager.cxx.

References getMasterProfile(), getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new RegistrationCreator(*this, target, getMasterUserProfile(), getMasterProfile()->getDefaultRegistrationTime()), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeRegistration ( const NameAddr target,
UInt32  registrationTime,
AppDialogSet appDs = 0 
)

Definition at line 812 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new RegistrationCreator(*this, target, getMasterUserProfile(), registrationTime), appDs);
}

Here is the call graph for this function:

void DialogUsageManager::makeResponse ( SipMessage response,
const SipMessage request,
int  responseCode,
const Data reason = Data::Empty 
) const [private]
SharedPtr< SipMessage > DialogUsageManager::makeSubscription ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const Data eventType,
AppDialogSet appDs = 0 
)

Definition at line 752 of file DialogUsageManager.cxx.

References resip::SharedPtr< T >::get(), and makeNewSession().

Referenced by AddAor::executeCommand(), resip::BasicClientUserAgent::onSuccess(), resip::ClientSubscription::reSubscribe(), and resip::BasicClientUserAgent::startup().

{
   assert(userProfile.get());
   return makeNewSession(new SubscriptionCreator(*this, target, userProfile, eventType, userProfile->getDefaultSubscriptionTime()), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeSubscription ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const Data eventType,
UInt32  subscriptionTime,
AppDialogSet appDs = 0 
)

Definition at line 759 of file DialogUsageManager.cxx.

References makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, userProfile, eventType, subscriptionTime), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeSubscription ( const NameAddr target,
const SharedPtr< UserProfile > &  userProfile,
const Data eventType,
UInt32  subscriptionTime,
int  refreshInterval,
AppDialogSet appDs = 0 
)

Definition at line 766 of file DialogUsageManager.cxx.

References makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, userProfile, eventType, subscriptionTime, refreshInterval), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeSubscription ( const NameAddr target,
const Data eventType,
AppDialogSet appDs = 0 
)

Definition at line 773 of file DialogUsageManager.cxx.

References getMasterProfile(), getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, getMasterUserProfile(), eventType, getMasterProfile()->getDefaultSubscriptionTime()), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeSubscription ( const NameAddr target,
const Data eventType,
UInt32  subscriptionTime,
AppDialogSet appDs = 0 
)

Definition at line 779 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, getMasterUserProfile(), eventType, subscriptionTime), appDs);
}

Here is the call graph for this function:

SharedPtr< SipMessage > DialogUsageManager::makeSubscription ( const NameAddr target,
const Data eventType,
UInt32  subscriptionTime,
int  refreshInterval,
AppDialogSet appDs = 0 
)

Definition at line 786 of file DialogUsageManager.cxx.

References getMasterUserProfile(), and makeNewSession().

{
   return makeNewSession(new SubscriptionCreator(*this, target, getMasterUserProfile(), eventType, subscriptionTime, refreshInterval), appDs);
}

Here is the call graph for this function:

DialogSet * DialogUsageManager::makeUacDialogSet ( BaseCreator creator,
AppDialogSet appDs 
) [private]

Definition at line 505 of file DialogUsageManager.cxx.

References DialogSet, resip::DialogSet::getId(), resip::InserterP(), resip::DialogSet::mAppDialogSet, resip::AppDialogSet::mDialogSet, mDialogSetMap, mDumShutdownHandler, StackLog, and threadCheck.

Referenced by makeNewSession(), and makePagerMessage().

{
   threadCheck();
   if (mDumShutdownHandler)
   {
      throw DumException("Cannot create new sessions when DUM is shutting down.", __FILE__, __LINE__);
   }

   if (appDs == 0)
   {
      appDs = new AppDialogSet(*this);
   }
   DialogSet* ds = new DialogSet(creator, *this);

   appDs->mDialogSet = ds;
   ds->mAppDialogSet = appDs;

   StackLog ( << "************* Adding DialogSet ***************: " << ds->getId());
   //StackLog ( << "Before: " << InserterP(mDialogSetMap) );
   mDialogSetMap[ds->getId()] = ds;
   StackLog ( << "DialogSetMap: " << InserterP(mDialogSetMap) );
   return ds;
}

Here is the call graph for this function:

bool DialogUsageManager::mergeRequest ( const SipMessage request) [private]

Definition at line 1924 of file DialogUsageManager.cxx.

References getMasterProfile(), resip::SipMessage::header(), resip::SipMessage::isExternal(), resip::SipMessage::isRequest(), makeResponse(), mMergedRequests, and sendResponse().

Referenced by incomingProcess().

{
   assert(request.isRequest());
   assert(request.isExternal());

   if (!request.header(h_To).exists(p_tag))
   {
      if (mMergedRequests.count(MergedRequestKey(request, getMasterProfile()->checkReqUriInMergeDetectionEnabled())))
      {
         SipMessage failure;
         makeResponse(failure, request, 482, "Merged Request");
         failure.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
         sendResponse(failure);
         return true;
      }
   }

   return false;
}

Here is the call graph for this function:

bool resip::DialogUsageManager::messageAvailable ( void  ) [inline]

Definition at line 342 of file DialogUsageManager.hxx.

References resip::AbstractFifo< T >::messageAvailable(), and resip::TransactionUser::mFifo.

{ return mFifo.messageAvailable(); }

Here is the call graph for this function:

const Data & DialogUsageManager::name ( ) const [protected, virtual]

Implements resip::TransactionUser.

Definition at line 197 of file DialogUsageManager.cxx.

{
   static Data n("DialogUsageManager");
   return n;
}
void DialogUsageManager::onAllHandlesDestroyed ( ) [protected, virtual]

Implements resip::HandleManager.

Definition at line 243 of file DialogUsageManager.cxx.

References InfoLog, mDumShutdownHandler, mShutdownState, mStack, RemovingTransactionUser, ShutdownRequested, and resip::SipStack::unregisterTransactionUser().

Referenced by forceShutdown().

{
   if (mDumShutdownHandler)
   {
      switch (mShutdownState)
      {
         case ShutdownRequested:
            InfoLog (<< "DialogUsageManager::onAllHandlesDestroyed: removing TU");
            //assert(mHandleMap.empty());
            mShutdownState = RemovingTransactionUser;
            mStack.unregisterTransactionUser(*this);
            break;
         default:
            break;
      }
   }
}

Here is the call graph for this function:

void DialogUsageManager::outgoingProcess ( std::auto_ptr< Message msg) [private]

dcm! -- unique SharedPtr to auto_ptr conversion prob. a worthwhile

Definition at line 997 of file DialogUsageManager.cxx.

References resip::DumFeatureChain::ChainDoneBit, resip::Data::Empty, resip::DumFeatureChain::EventTakenBit, findDialogSet(), resip::SharedPtr< T >::get(), getMasterUserProfile(), resip::OutgoingEvent::getTransactionId(), resip::DumFeatureMessage::getTransactionId(), resip::DialogSet::getUserProfile(), InfoLog, mOutgoingFeatureChainMap, mOutgoingFeatureList, mOutgoingMessageInterceptor, mOutgoingTarget, resip::Helper::processStrictRoute(), sendResponse(), and sendUsingOutboundIfAppropriate().

Referenced by resip::DialogUsageManager::OutgoingTarget::post(), and send().

{
   Data tid = Data::Empty;
   {
      OutgoingEvent* sipMsg = dynamic_cast<OutgoingEvent*>(message.get());
      if (sipMsg)
      {
         tid = sipMsg->getTransactionId();
      }
      
      DumFeatureMessage* featureMsg = dynamic_cast<DumFeatureMessage*>(message.get());
      if (featureMsg)
      {
         InfoLog(<<"Got a DumFeatureMessage" << featureMsg);
         tid = featureMsg->getTransactionId();
      }
   }

   if (tid == Data::Empty && mOutgoingMessageInterceptor.get())
   {
      mOutgoingMessageInterceptor->process(message.get());
      return;
   }
   else if (tid != Data::Empty && !mOutgoingFeatureList.empty())
   {
      FeatureChainMap::iterator it;
      //efficiently find or create FeatureChain, should prob. be a utility template
      {
         FeatureChainMap::iterator lb = mOutgoingFeatureChainMap.lower_bound(tid);
         if (lb != mOutgoingFeatureChainMap.end() && !(mOutgoingFeatureChainMap.key_comp()(tid, lb->first)))
         {
            it = lb;
         }
         else
         {
            it = mOutgoingFeatureChainMap.insert(lb, FeatureChainMap::value_type(tid, new DumFeatureChain(*this, mOutgoingFeatureList, *mOutgoingTarget)));
         }
      }
      
      DumFeatureChain::ProcessingResult res = it->second->process(message.get());
      
      if (res & DumFeatureChain::ChainDoneBit)
      {
         delete it->second;
         mOutgoingFeatureChainMap.erase(it);
      }

      if (res & DumFeatureChain::EventTakenBit)
      {
         message.release();
         return;
      }
   }

   OutgoingEvent* event = dynamic_cast<OutgoingEvent*>(message.get());
   //assert(event);
   //.dcm. a TID collision can cause a message to be delivered to a finished
   //chain. This is probably because pseudorandom was being used on Win32.
   if (event)
   {
      if (event->message()->isRequest())
      {
         DialogSet* ds = findDialogSet(DialogSetId(*event->message()));
         UserProfile* userProfile;
         if (ds == 0)
         {
            userProfile = getMasterUserProfile().get();
         }
         else
         {
            userProfile = ds->getUserProfile().get();
         }

         assert(userProfile);

         //optimzation here. SharedPtr would have to be changed; would
         //throw/assert if not unique.
         std::auto_ptr<SipMessage> toSend(static_cast<SipMessage*>(event->message()->clone()));

         // .bwc. Protect ourselves from garbage with an isWellFormed() check.
         // (Code in Dialog doesn't check for well-formedness in the 
         // Record-Route stack, so bad stuff there can end up here)
         if (event->message()->exists(h_Routes) &&
             !event->message()->header(h_Routes).empty() &&
             event->message()->header(h_Routes).front().isWellFormed() &&
             !event->message()->header(h_Routes).front().uri().exists(p_lr))
         {
            Helper::processStrictRoute(*toSend);
            sendUsingOutboundIfAppropriate(*userProfile, toSend);
         }
         else
         {
            sendUsingOutboundIfAppropriate(*userProfile, toSend);
         }
      }
      else
      {
         sendResponse(*event->message());
      }
   }
}

Here is the call graph for this function:

bool DialogUsageManager::process ( resip::Lockable mutex = NULL)

Definition at line 1671 of file DialogUsageManager.cxx.

References resip::TimeLimitFifo< Msg >::getNext(), internalProcess(), resip::AbstractFifo< T >::messageAvailable(), resip::TransactionUser::mFifo, mHiddenThreadDebugKey, and mThreadDebugKey.

Referenced by resip::DumProcessHandler::handleProcessNotification(), main(), resip::UserAgent::process(), and resip::BasicClientUserAgent::process().

{
   if (mFifo.messageAvailable())
   {
      resip::PtrLock lock(mutex);
#ifdef RESIP_DUM_THREAD_DEBUG
      mThreadDebugKey=mHiddenThreadDebugKey;
#endif
      internalProcess(std::auto_ptr<Message>(mFifo.getNext()));
#ifdef RESIP_DUM_THREAD_DEBUG
      // .bwc. Thread checking is disabled if mThreadDebugKey is 0; if the app 
      // is using this mutex-locked process() call, we only enable thread-
      // checking while the mutex is locked. Accesses from another thread while 
      // the mutex is not locked are probably intentional. However, if the app 
      // accesses the DUM inappropriately anyway, we'll probably detect it if 
      // it happens during the internalProcess() call.
      mHiddenThreadDebugKey=mThreadDebugKey;
      mThreadDebugKey=0;
#endif
   }
   return mFifo.messageAvailable();
}

Here is the call graph for this function:

bool DialogUsageManager::process ( int  timeoutMs,
resip::Lockable mutex = NULL 
)

Definition at line 1695 of file DialogUsageManager.cxx.

References resip::TimeLimitFifo< Msg >::getNext(), internalProcess(), resip::AbstractFifo< T >::messageAvailable(), resip::TransactionUser::mFifo, mHiddenThreadDebugKey, and mThreadDebugKey.

{
   std::auto_ptr<Message> message;

   if(timeoutMs == -1)
   {
      message.reset(mFifo.getNext());
   }
   else
   {
      message.reset(mFifo.getNext(timeoutMs));
   }
   if (message.get())
   {
      resip::PtrLock lock(mutex);
#ifdef RESIP_DUM_THREAD_DEBUG
      mThreadDebugKey=mHiddenThreadDebugKey;
#endif
      internalProcess(message);
#ifdef RESIP_DUM_THREAD_DEBUG
      // .bwc. Thread checking is disabled if mThreadDebugKey is 0; if the app 
      // is using this mutex-locked process() call, we only enable thread-
      // checking while the mutex is locked. Accesses from another thread while 
      // the mutex is not locked are probably intentional. However, if the app 
      // accesses the DUM inappropriately anyway, we'll probably detect it if 
      // it happens during the internalProcess() call.
      mHiddenThreadDebugKey=mThreadDebugKey;
      mThreadDebugKey=0;
#endif
   }
   return mFifo.messageAvailable();
}

Here is the call graph for this function:

void DialogUsageManager::processExternalMessage ( ExternalMessageBase externalMessage) [private]

Definition at line 1483 of file DialogUsageManager.cxx.

References mExternalMessageHandlers.

Referenced by internalProcess().

{
   bool handled = false;
   for(std::vector<ExternalMessageHandler*>::iterator i = mExternalMessageHandlers.begin(); 
      i != mExternalMessageHandlers.end(); ++i)
   {
      (*i)->onMessage(externalMessage, handled);
      if (handled)
      {
         break;
      }
   }
}
void resip::DialogUsageManager::processIdentityCheckResponse ( const HttpGetMessage msg) [private]
void DialogUsageManager::processPublish ( const SipMessage publish) [private]

Definition at line 2150 of file DialogUsageManager.cxx.

References resip::Message::brief(), checkEventPackage(), resip::ServerPublication::dispatch(), resip::SipMessage::exists(), resip::SipMessage::getContents(), resip::Random::getCryptoRandomHex(), resip::SipMessage::header(), InfoLog, makeResponse(), mServerPublications, send(), and ServerPublication.

Referenced by processRequest().

{
   if (!checkEventPackage(request))
   {
      InfoLog(<< "Rejecting request (unsupported package) " << request.brief());
      return;
   }

   if (request.exists(h_SIPIfMatch))
   {
      ServerPublications::iterator i = mServerPublications.find(request.header(h_SIPIfMatch).value());
      if (i != mServerPublications.end())
      {
         i->second->dispatch(request);
      }
      else
      {
         SharedPtr<SipMessage> response(new SipMessage);
         makeResponse(*response, request, 412);
         send(response);
      }
   }
   else
   {
      Data etag = Random::getCryptoRandomHex(8);
      while (mServerPublications.find(etag) != mServerPublications.end())
      {
         etag = Random::getCryptoRandomHex(8);
      }

      if (request.getContents())
      {
         ServerPublication* sp = new ServerPublication(*this, etag, request);
         mServerPublications[etag] = sp;
         sp->dispatch(request);
      }
      else
      {
         // per 3903 (sec 6.5), a PUB w/ no SIPIfMatch must have contents. .mjf.
         SharedPtr<SipMessage> response(new SipMessage);
         makeResponse(*response, request, 400);
         send(response);
      }
   }
}

Here is the call graph for this function:

void DialogUsageManager::processRequest ( const SipMessage request) [private]

Definition at line 1945 of file DialogUsageManager.cxx.

References resip::Message::brief(), checkEventPackage(), DebugLog, DialogSet, resip::DialogSet::dispatch(), findDialogSet(), resip::DialogSet::getId(), getMasterProfile(), resip::BaseException::getMessage(), resip::RequestLine::getMethod(), resip::SipMessage::getTransactionId(), h_RequestLine, resip::SipMessage::header(), InfoLog, resip::InserterP(), makeResponse(), resip::DialogSet::mAppDialogSet, mAppDialogSetFactory, MAX_METHODS, mCancelMap, mDialogSetMap, mDumShutdownHandler, resip::RequestLine::method(), mShutdownState, processPublish(), Running, sendResponse(), resip::DialogSet::setUserProfile(), ShutdownRequested, StackLog, and WarningLog.

Referenced by incomingProcess().

{
   DebugLog ( << "DialogUsageManager::processRequest: " << request.brief());

   if (mShutdownState != Running && mShutdownState != ShutdownRequested)
   {
      WarningLog (<< "Ignoring a request since we are shutting down " << request.brief());

      SipMessage failure;
      makeResponse(failure, request, 480, "UAS is shutting down");
      sendResponse(failure);
      return;
   }

   if (request.header(h_RequestLine).method() == PUBLISH)
   {
      processPublish(request);
      return;
   }

   bool toTag = request.header(h_To).exists(p_tag);
   if(request.header(h_RequestLine).getMethod() == REGISTER && toTag && getMasterProfile()->allowBadRegistrationEnabled())
   {
       toTag = false;
   }

   assert(mAppDialogSetFactory.get());
   // !jf! note, the logic was reversed during ye great merge of March of Ought 5
   if (toTag ||
       findDialogSet(DialogSetId(request)))
   {
      switch (request.header(h_RequestLine).getMethod())
      {
         case REGISTER:
         {
            SipMessage failure;
            makeResponse(failure, request, 400, "Registration requests can't have To: tags.");
            failure.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
            sendResponse(failure);
            break;
         }

         default:
         {
            DialogSet* ds = findDialogSet(DialogSetId(request));
            if (ds == 0)
            {
               if (request.header(h_RequestLine).method() != ACK)
               {
                  SipMessage failure;
                  makeResponse(failure, request, 481);
                  failure.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
                  InfoLog (<< "Rejected request (which was in a dialog) " << request.brief());
                  sendResponse(failure);
               }
               else
               {
                  InfoLog (<< "ACK doesn't match any dialog" << request.brief());
               }
            }
            else
            {
               InfoLog (<< "Handling in-dialog request: " << request.brief());
               ds->dispatch(request);
            }
         }
      }
   }
   else
   {
      switch (request.header(h_RequestLine).getMethod())
      {
         case ACK:
            DebugLog (<< "Discarding request: " << request.brief());
            break;

         case PRACK:
         case BYE:
         case UPDATE:
         case INFO: // !rm! in an ideal world
         {
            SipMessage failure;
            makeResponse(failure, request, 481);
            failure.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
            sendResponse(failure);
            break;
         }
         case CANCEL:
         {
            // find the appropropriate ServerInvSession
            CancelMap::iterator i = mCancelMap.find(request.getTransactionId());
            if (i != mCancelMap.end())
            {
               i->second->dispatch(request);
            }
            else
            {
               InfoLog (<< "Received a CANCEL on a non-existent transaction ");
               SipMessage failure;
               makeResponse(failure, request, 481);
               sendResponse(failure);
            }
            break;
         }
         case PUBLISH:
            assert(false);
            return;
         case SUBSCRIBE:
            if (!checkEventPackage(request))
            {
               InfoLog (<< "Rejecting request (unsupported package) " 
                        << request.brief());
               return;
            }
            /*FALLTHRU*/
         case NOTIFY : // handle unsolicited (illegal) NOTIFYs
         case INVITE:   // new INVITE
         case REFER:    // out-of-dialog REFER
            //case INFO :    // handle non-dialog (illegal) INFOs
         case OPTIONS : // handle non-dialog OPTIONS
         case MESSAGE :
         case REGISTER:
         {
            {
               DialogSetId id(request);
               //cryptographically dangerous
               if(mDialogSetMap.find(id) != mDialogSetMap.end()) 
               {
                  // this can only happen if someone sends us a request with the same callid and from tag as one 
                  // that is in the process of destroying - since this is bad endpoint behaviour - we will 
                  // reject the request with a 400 response
                  SipMessage badrequest;
                  makeResponse(badrequest, request, 400);
                  badrequest.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
                  sendResponse(badrequest);
                  return;
               }
            }
            if (mDumShutdownHandler)
            {
               SipMessage forbidden;
               makeResponse(forbidden, request, 480);
               forbidden.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
               sendResponse(forbidden);
               return;
            }
            try
            {
               DialogSet* dset =  new DialogSet(request, *this);

               StackLog ( << "*********** Calling AppDialogSetFactory *************: " << dset->getId());
               AppDialogSet* appDs = mAppDialogSetFactory->createAppDialogSet(*this, request);
               appDs->mDialogSet = dset;
               dset->setUserProfile(appDs->selectUASUserProfile(request));
               dset->mAppDialogSet = appDs;

               StackLog ( << "************* Adding DialogSet ***************: " << dset->getId());
               //StackLog ( << "Before: " << Inserter(mDialogSetMap) );
               mDialogSetMap[dset->getId()] = dset;
               StackLog ( << "DialogSetMap: " << InserterP(mDialogSetMap) );

               dset->dispatch(request);
            }
            catch (BaseException& e)
            {
               SipMessage failure;
               makeResponse(failure, request, 400, e.getMessage());
               failure.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
               sendResponse(failure);
            }

            break;
         }
         case RESPONSE:
         case SERVICE:
            assert(false);
            break;
         case UNKNOWN:
         case MAX_METHODS:
            assert(false);
            break;
      }
   }
}

Here is the call graph for this function:

void DialogUsageManager::processResponse ( const SipMessage response) [private]

Definition at line 2131 of file DialogUsageManager.cxx.

References resip::Message::brief(), DebugLog, resip::DialogSet::dispatch(), findDialogSet(), resip::SipMessage::header(), InfoLog, and resip::RequestLine::method().

Referenced by incomingProcess().

{
   if (response.header(h_CSeq).method() != CANCEL)
   {
      DialogSet* ds = findDialogSet(DialogSetId(response));

      if (ds)
      {
         DebugLog ( << "DialogUsageManager::processResponse: " << std::endl << std::endl << response.brief());
         ds->dispatch(response);
      }
      else
      {
                 InfoLog (<< "Throwing away stray response: " << std::endl << std::endl << response.brief());
      }
   }
}

Here is the call graph for this function:

bool resip::DialogUsageManager::queueForIdentityCheck ( SipMessage msg) [private]
void DialogUsageManager::registerForConnectionTermination ( Postable listener)

Note: Implementations of Postable must delete the message passed via post.

Definition at line 2428 of file DialogUsageManager.cxx.

References resip::EventDispatcher< E >::addListener(), and mConnectionTerminatedEventDispatcher.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent().

Here is the call graph for this function:

void DialogUsageManager::removeDialogSet ( const DialogSetId dsId) [private]

Definition at line 2292 of file DialogUsageManager.cxx.

References resip::InserterP(), mDialogSetMap, mRedirectManager, and StackLog.

Referenced by resip::DialogSet::~DialogSet().

{
   StackLog ( << "************* Removing DialogSet ***************: " << dsId);
   //StackLog ( << "Before: " << Inserter(mDialogSetMap) );
   mDialogSetMap.erase(dsId);
   StackLog ( << "DialogSetMap: " << InserterP(mDialogSetMap) );
   if (mRedirectManager.get())
   {
      mRedirectManager->removeDialogSet(dsId);
   }
}

Here is the call graph for this function:

void DialogUsageManager::removeExternalMessageHandler ( ExternalMessageHandler handler)

Definition at line 487 of file DialogUsageManager.cxx.

References mExternalMessageHandlers.

{
   std::vector<ExternalMessageHandler*>::iterator found = std::find(mExternalMessageHandlers.begin(), mExternalMessageHandlers.end(), handler);
   if (found != mExternalMessageHandlers.end())
   {
      mExternalMessageHandlers.erase(found);
   }
}
void DialogUsageManager::removeMergedRequest ( const MergedRequestKey key) [private]

Definition at line 2448 of file DialogUsageManager.cxx.

References DebugLog, and mMergedRequests.

Referenced by resip::MergedRequestRemovalCommand::executeCommand().

{
   DebugLog(<< "Merged request removed");
   mMergedRequests.erase(key);
}
void DialogUsageManager::requestMergedRequestRemoval ( const MergedRequestKey key) [private]

Definition at line 2440 of file DialogUsageManager.cxx.

References DebugLog, mStack, resip::SipStack::postMS(), and resip::Timer::TF.

Referenced by resip::DialogSet::~DialogSet().

{
   DebugLog(<< "Got merged request removal request");
   MergedRequestRemovalCommand command(*this, key);
   mStack.postMS(command, Timer::TF, this);
}

Here is the call graph for this function:

void DialogUsageManager::send ( SharedPtr< SipMessage request)

Definition at line 870 of file DialogUsageManager.cxx.

References DebugLog, resip::Data::empty(), resip::DialogSet::findDialog(), findDialogSet(), resip::SharedPtr< T >::get(), resip::Profile::getFixedTransportInterface(), resip::Profile::getFixedTransportPort(), resip::Dialog::getInviteSession(), getMasterUserProfile(), resip::Profile::getOutboundDecorator(), resip::Profile::getProxyRequires(), resip::Profile::getRportEnabled(), resip::Profile::getUserAgent(), resip::DialogSet::getUserProfile(), h_RequestLine, resip::Profile::hasProxyRequires(), resip::Profile::hasUserAgent(), resip::UserProfile::isAnonymous(), mClientAuthManager, mDialogEventStateManager, resip::DialogEventStateManager::onConfirmed(), resip::DialogEventStateManager::onTryingUac(), outgoingProcess(), and resip::SharedPtr< T >::reset().

Referenced by resip::ServerRegistration::accept(), resip::ServerRegistration::asyncProcessFinalContacts(), checkEventPackage(), resip::ServerOutOfDialogReq::dispatch(), resip::ServerPublication::dispatch(), resip::ServerPagerMessage::dispatch(), resip::ServerRegistration::dispatch(), resip::DialogSet::dispatch(), resip::DialogSet::end(), AddAor::executeCommand(), resip::DialogUsageManager::SendCommand::executeCommand(), resip::TlsPeerAuthManager::handle(), resip::ServerAuthManager::handle(), resip::DialogSet::handledByAuthOrRedirect(), resip::ServerAuthManager::handleUserAuthInfo(), resip::BasicClientCall::initiateCall(), resip::ServerAuthManager::issueChallenge(), main(), resip::BasicClientCall::onFlowTerminated(), resip::BasicClientUserAgent::onSuccess(), resip::ClientPagerMessage::pageFirstMsgQueued(), resip::ServerAuthManager::process(), processPublish(), resip::ServerRegistration::processRegistration(), resip::ServerRegistration::reject(), resip::ClientSubscription::reSubscribe(), resip::ServerOutOfDialogReq::send(), resip::ServerPagerMessage::send(), resip::ServerPublication::send(), resip::NonDialogUsage::send(), resip::ClientPublication::send(), resip::Dialog::send(), resip::UserAgent::startup(), resip::BasicClientUserAgent::startup(), and resip::ServerRegistration::testFlowRequirements().

{
   // !slg! There is probably a more efficient way to get the userProfile here (pass it in?)
   DialogSet* ds = findDialogSet(DialogSetId(*msg));
   UserProfile* userProfile;
   if (ds == 0)
   {
      userProfile = getMasterUserProfile().get();
   }
   else
   {
      userProfile = ds->getUserProfile().get();
   }

   assert(userProfile);
   if (!userProfile->isAnonymous() && userProfile->hasUserAgent())
   {
      msg->header(h_UserAgent).value() = userProfile->getUserAgent();
   }
   if (userProfile->isAnonymous())
   {
      msg->remove(h_ReplyTo);
      msg->remove(h_UserAgent);
      msg->remove(h_Organization);
      msg->remove(h_Server);
      msg->remove(h_Subject);
      msg->remove(h_InReplyTo);

      msg->remove(h_CallInfos);
      msg->remove(h_Warnings);
   }
   
   assert(userProfile);
   if (msg->isRequest() 
       && userProfile->hasProxyRequires() 
       && msg->header(h_RequestLine).method() != ACK 
       && msg->header(h_RequestLine).method() != CANCEL)
   {
      msg->header(h_ProxyRequires) = userProfile->getProxyRequires();
   }
   
   // .bwc. This is to avoid leaving extra copies of the decorator in msg,
   // when the caller of this function holds onto the reference (and this
   // happens quite often in DUM). I would prefer to refactor such that we
   // are operating on a copy in this function, but this would require a lot
   // of work on the DumFeatureChain stuff (or, require an extra copy on top 
   // of the one we're doing when we send the message to the stack, which
   // would chew up a lot of extra cycles).
   msg->clearOutboundDecorators();

   // Add outbound decorator from userprofile - note:  it is important that this is
   // done before the call to mClientAuthManager->addAuthentication, since the ClientAuthManager
   // will install outbound decorators and we want these to run after the user provided ones, in
   // case a user provided decorator modifes the message body used in auth.
   SharedPtr<MessageDecorator> outboundDecorator = userProfile->getOutboundDecorator();
   if (outboundDecorator.get())
   {
      msg->addOutboundDecorator(std::auto_ptr<MessageDecorator>(outboundDecorator->clone()));
   }

   if (msg->isRequest())
   {
      // We may not need to call reset() if makeRequest is always used.
      if (msg->header(h_RequestLine).method() != CANCEL &&
          msg->header(h_RequestLine).method() != ACK &&
          msg->exists(h_Vias))
      {
         msg->header(h_Vias).front().param(p_branch).reset();
      }

      if (msg->exists(h_Vias))
      {
         if(!userProfile->getRportEnabled())
         {
            msg->header(h_Vias).front().remove(p_rport);
         }
         int fixedTransportPort = userProfile->getFixedTransportPort();
         if(fixedTransportPort != 0)
         {
            msg->header(h_Vias).front().sentPort() = fixedTransportPort;
         }
         const Data& fixedTransportInterface = userProfile->getFixedTransportInterface();
         if(!fixedTransportInterface.empty())
         {
            msg->header(h_Vias).front().sentHost() = fixedTransportInterface;
         }
      }

      if (mClientAuthManager.get() && msg->header(h_RequestLine).method() != ACK)
      {
         mClientAuthManager->addAuthentication(*msg);
      }

      if (msg->header(h_RequestLine).method() == INVITE)
      {
         if (ds != 0)
         {
            if (mDialogEventStateManager)
            {
               Dialog* d = ds->findDialog(*msg);
               if (d != 0)
               {
                  mDialogEventStateManager->onConfirmed(*d, d->getInviteSession());
               }
               else
               {
                  mDialogEventStateManager->onTryingUac(*ds, *msg);
               }
            }
         }
      }
   }

   DebugLog (<< "SEND: " << std::endl << std::endl << *msg);

   OutgoingEvent* event = new OutgoingEvent(msg);
   outgoingProcess(auto_ptr<Message>(event));
}

Here is the call graph for this function:

void DialogUsageManager::sendCommand ( SharedPtr< SipMessage request)

Definition at line 990 of file DialogUsageManager.cxx.

References resip::TransactionUser::post().

{
   SendCommand* s=new SendCommand(request, *this);
   post(s);
}

Here is the call graph for this function:

void DialogUsageManager::sendResponse ( const SipMessage response) [private]
void DialogUsageManager::sendUsingOutboundIfAppropriate ( UserProfile userProfile,
std::auto_ptr< SipMessage msg 
) [private]

Definition at line 1101 of file DialogUsageManager.cxx.

References resip::UserProfile::clientOutboundEnabled(), DebugLog, findDialog(), resip::Profile::getExpressOutboundAsRouteSetEnabled(), resip::Profile::getForceOutboundProxyOnAllRequestsEnabled(), resip::Profile::getOutboundProxy(), resip::Profile::hasOutboundProxy(), resip::UserProfile::mClientOutboundFlowTuple, resip::Tuple::mFlowKey, mStack, resip::SipStack::send(), resip::SipStack::sendTo(), and resip::NameAddr::uri().

Referenced by outgoingProcess().

{
   //a little inefficient, branch parameter might be better
   DialogId id(*msg);
   if (userProfile.hasOutboundProxy() && 
      (!findDialog(id) || userProfile.getForceOutboundProxyOnAllRequestsEnabled()))
   {
      DebugLog ( << "Using outbound proxy: " 
                 << userProfile.getOutboundProxy().uri() 
                 << " -> " << msg->brief());

      if (userProfile.getExpressOutboundAsRouteSetEnabled())
      {
         // prepend the outbound proxy to the service route
         msg->header(h_Routes).push_front(NameAddr(userProfile.getOutboundProxy().uri()));
         if(userProfile.clientOutboundEnabled() && userProfile.mClientOutboundFlowTuple.mFlowKey != 0)
         {
            DebugLog ( << "Sending with client outbound flow tuple to express outbound" );
            DebugLog ( << "Flow Tuple: " << userProfile.mClientOutboundFlowTuple << " and key: " << userProfile.mClientOutboundFlowTuple.mFlowKey);
            mStack.sendTo(msg, userProfile.mClientOutboundFlowTuple, this);
         }
         else
         {
            DebugLog ( << "Sending to express outbound w/o flow tuple");
            mStack.send(msg, this);
         }
      }
      else
      {
         if(userProfile.clientOutboundEnabled() && userProfile.mClientOutboundFlowTuple.mFlowKey != 0)
         {
            DebugLog ( << "Sending to outbound (no express) with flow tuple");
            mStack.sendTo(msg, userProfile.mClientOutboundFlowTuple, this);
         }
         else
         {
            DebugLog ( << "Sending to outbound uri");
            mStack.sendTo(msg, userProfile.getOutboundProxy().uri(), this);
         }
      }
   }
   else
   {
      DebugLog (<< "Send: " << msg->brief());
      if(userProfile.clientOutboundEnabled() && userProfile.mClientOutboundFlowTuple.mFlowKey != 0)
      {
         mStack.sendTo(msg, userProfile.mClientOutboundFlowTuple, this);
      }
      else
      {
         mStack.send(msg, this);
      }
   }
}

Here is the call graph for this function:

void DialogUsageManager::setAppDialogSetFactory ( std::auto_ptr< AppDialogSetFactory factory)

Definition at line 295 of file DialogUsageManager.cxx.

References mAppDialogSetFactory.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), and main().

{
   mAppDialogSetFactory = factory;
}
void DialogUsageManager::setClientAuthManager ( std::auto_ptr< ClientAuthManager client)

If there is no ClientAuthManager, when the client receives a 401/407, pass it up through the normal BaseUsageHandler.

Definition at line 343 of file DialogUsageManager.cxx.

References mClientAuthManager.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), main(), RegEventClient::RegEventClient(), and resip::UserAgent::UserAgent().

{
   mClientAuthManager = manager;
}
void DialogUsageManager::setClientPagerMessageHandler ( ClientPagerMessageHandler handler)

Definition at line 465 of file DialogUsageManager.cxx.

References mClientPagerMessageHandler.

Referenced by main().

void DialogUsageManager::setClientRegistrationHandler ( ClientRegistrationHandler handler)

If there is no such handler, calling makeRegistration will throw.

Definition at line 355 of file DialogUsageManager.cxx.

References mClientRegistrationHandler.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), main(), RegEventClient::RegEventClient(), and resip::UserAgent::UserAgent().

void DialogUsageManager::setDialogSetHandler ( DialogSetHandler handler)

Definition at line 369 of file DialogUsageManager.cxx.

References mDialogSetHandler.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent().

{
   mDialogSetHandler = handler;
}
void DialogUsageManager::setInviteSessionHandler ( InviteSessionHandler handler)

If there is no such handler, calling makeInviteSession will throw and receiving an INVITE as a UAS will respond with 405 Method Not Allowed.

Definition at line 375 of file DialogUsageManager.cxx.

References mInviteSessionHandler.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), main(), and resip::UserAgent::UserAgent().

void DialogUsageManager::setKeepAliveManager ( std::auto_ptr< KeepAliveManager keepAlive)

Definition at line 321 of file DialogUsageManager.cxx.

References mKeepAliveManager.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), and main().

{
   mKeepAliveManager = manager;
   mKeepAliveManager->setDialogUsageManager(this);
}
void DialogUsageManager::setMasterProfile ( const SharedPtr< MasterProfile > &  masterProfile)

Definition at line 314 of file DialogUsageManager.cxx.

References resip::SharedPtr< T >::get(), mMasterProfile, and mMasterUserProfile.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent(), main(), RegEventClient::RegEventClient(), and resip::UserAgent::UserAgent().

{
   assert(!mMasterProfile.get());
   mMasterProfile = masterProfile;
   mMasterUserProfile = masterProfile; // required so that we can return a reference to SharedPtr<UserProfile> in getMasterUserProfile
}

Here is the call graph for this function:

void DialogUsageManager::setOutgoingMessageInterceptor ( resip::SharedPtr< DumFeature feat)

Definition at line 2388 of file DialogUsageManager.cxx.

References mOutgoingMessageInterceptor.

void DialogUsageManager::setRedirectHandler ( RedirectHandler handler)

Definition at line 332 of file DialogUsageManager.cxx.

References mRedirectHandler.

Referenced by resip::BasicClientUserAgent::BasicClientUserAgent().

{
   mRedirectHandler = handler;
}
void DialogUsageManager::setRedirectManager ( std::auto_ptr< RedirectManager redirect)

Definition at line 327 of file DialogUsageManager.cxx.

References mRedirectManager.

{
   mRedirectManager = manager;
}
void DialogUsageManager::setRegistrationPersistenceManager ( RegistrationPersistenceManager manager)

Sets a manager to handle storage of registration state.

Definition at line 389 of file DialogUsageManager.cxx.

References mRegistrationPersistenceManager.

void resip::DialogUsageManager::setRemoteCertStore ( std::auto_ptr< RemoteCertStore store)
void DialogUsageManager::setRequestValidationHandler ( RequestValidationHandler handler)

Definition at line 382 of file DialogUsageManager.cxx.

References mRequestValidationHandler.

Referenced by main().

void DialogUsageManager::setServerAuthManager ( resip::SharedPtr< ServerAuthManager server)

If there is no ServerAuthManager, the server does not authenticate requests.

Definition at line 349 of file DialogUsageManager.cxx.

References mIncomingFeatureList.

{
   mIncomingFeatureList.insert(mIncomingFeatureList.begin(), manager);
}
void DialogUsageManager::setServerPagerMessageHandler ( ServerPagerMessageHandler handler)

Definition at line 471 of file DialogUsageManager.cxx.

References mServerPagerMessageHandler.

Referenced by main().

void DialogUsageManager::setServerRegistrationHandler ( ServerRegistrationHandler handler)

If no such handler, UAS will respond to REGISTER with 405 Method Not Allowed.

Definition at line 362 of file DialogUsageManager.cxx.

References mServerRegistrationHandler.

void DialogUsageManager::shutdown ( DumShutdownHandler h)
void DialogUsageManager::unRegisterForConnectionTermination ( Postable listener)

Definition at line 2434 of file DialogUsageManager.cxx.

References mConnectionTerminatedEventDispatcher, and resip::EventDispatcher< E >::removeListener().

Here is the call graph for this function:

bool DialogUsageManager::validate100RelSuport ( const SipMessage request) [private]

Definition at line 1795 of file DialogUsageManager.cxx.

References resip::Symbols::C100rel, resip::SipMessage::exists(), getMasterProfile(), resip::RequestLine::getMethod(), h_RequestLine, resip::SipMessage::header(), makeResponse(), mRequestValidationHandler, resip::RequestValidationHandler::on100RelNotSupportedByRemote(), resip::MasterProfile::Required, and sendResponse().

Referenced by incomingProcess().

{
   if(request.header(h_RequestLine).getMethod() == INVITE)
   {
      if (getMasterProfile()->getUasReliableProvisionalMode() == MasterProfile::Required)
      {
         if (!((request.exists(h_Requires) && request.header(h_Requires).find(Token(Symbols::C100rel)))
               || (request.exists(h_Supporteds) && request.header(h_Supporteds).find(Token(Symbols::C100rel)))))
         {
            SipMessage failure;
            makeResponse(failure, request, 421);
            failure.header(h_Requires).push_back(Token(Symbols::C100rel));
            sendResponse(failure);
      
            if(mRequestValidationHandler)
               mRequestValidationHandler->on100RelNotSupportedByRemote(request);

            return false;
         }
      }
   }
   return true;
}

Here is the call graph for this function:

bool DialogUsageManager::validateAccept ( const SipMessage request) [private]

Definition at line 1879 of file DialogUsageManager.cxx.

References resip::Message::brief(), resip::SipMessage::exists(), getMasterProfile(), h_RequestLine, resip::SipMessage::header(), InfoLog, makeResponse(), resip::RequestLine::method(), mRequestValidationHandler, resip::RequestValidationHandler::onInvalidAccept(), and sendResponse().

Referenced by incomingProcess().

{
   MethodTypes method = request.header(h_RequestLine).method();
   // checks for Accept to comply with SFTF test case 216
   if(request.exists(h_Accepts))
   {
      for (Mimes::const_iterator i = request.header(h_Accepts).begin();
           i != request.header(h_Accepts).end(); i++)
      {
         if (getMasterProfile()->isMimeTypeSupported(method, *i))
         {
            return true;  // Accept header passes validation if we support as least one of the mime types
         }
      }
   }
   // If no Accept header then application/sdp should be assumed for certain methods
   else if(method == INVITE ||
           method == OPTIONS ||
           method == PRACK ||
           method == UPDATE)
   {
      if (getMasterProfile()->isMimeTypeSupported(request.header(h_RequestLine).method(), Mime("application", "sdp")))
      {
         return true;
      }
   }
   else
   {
      // Other method without an Accept Header
      return true;
   }

   InfoLog (<< "Received unsupported mime types in accept header: " << request.brief());
   SipMessage failure;
   makeResponse(failure, request, 406);
   failure.header(h_Accepts) = getMasterProfile()->getSupportedMimeTypes(method);
   sendResponse(failure);

   if(mRequestValidationHandler)
      mRequestValidationHandler->onInvalidAccept(request);

   return false;
}

Here is the call graph for this function:

bool DialogUsageManager::validateContent ( const SipMessage request) [private]

Definition at line 1820 of file DialogUsageManager.cxx.

References resip::Message::brief(), resip::SipMessage::exists(), getMasterProfile(), h_RequestLine, resip::SipMessage::header(), InfoLog, resip::isEqualNoCase(), resip::LazyParser::isWellFormed(), makeResponse(), resip::RequestLine::method(), mRequestValidationHandler, resip::RequestValidationHandler::onInvalidContentEncoding(), resip::RequestValidationHandler::onInvalidContentLanguage(), resip::RequestValidationHandler::onInvalidContentType(), resip::Symbols::Optional, and sendResponse().

Referenced by incomingProcess().

{
   // RFC3261 - 8.2.3
   // Don't need to validate content headers if they are specified as optional in the content-disposition
   if (!(request.exists(h_ContentDisposition) &&
         request.header(h_ContentDisposition).isWellFormed() &&
        request.header(h_ContentDisposition).exists(p_handling) &&
        isEqualNoCase(request.header(h_ContentDisposition).param(p_handling), Symbols::Optional)))
   {
     if (request.exists(h_ContentType) && !getMasterProfile()->isMimeTypeSupported(request.header(h_RequestLine).method(), request.header(h_ContentType)))
      {
         InfoLog (<< "Received an unsupported mime type: " << request.header(h_ContentType) << " for " << request.brief());

         SipMessage failure;
         makeResponse(failure, request, 415);
         failure.header(h_Accepts) = getMasterProfile()->getSupportedMimeTypes(request.header(h_RequestLine).method());
         sendResponse(failure);
            
         if(mRequestValidationHandler)
            mRequestValidationHandler->onInvalidContentType(request);

         return false;
      }

     if (request.exists(h_ContentEncoding) && !getMasterProfile()->isContentEncodingSupported(request.header(h_ContentEncoding)))
      {
         InfoLog (<< "Received an unsupported mime type: " << request.header(h_ContentEncoding) << " for " << request.brief());
         SipMessage failure;
         makeResponse(failure, request, 415);
         failure.header(h_AcceptEncodings) = getMasterProfile()->getSupportedEncodings();
         sendResponse(failure);
         
         if(mRequestValidationHandler)
            mRequestValidationHandler->onInvalidContentEncoding(request);

         return false;
      }

      if (getMasterProfile()->validateContentLanguageEnabled() &&
          request.exists(h_ContentLanguages) && !getMasterProfile()->isLanguageSupported(request.header(h_ContentLanguages)))
      {
         InfoLog (<< "Received an unsupported language: " << request.header(h_ContentLanguages).front() << " for " << request.brief());

         SipMessage failure;
         makeResponse(failure, request, 415);
         failure.header(h_AcceptLanguages) = getMasterProfile()->getSupportedLanguages();
         sendResponse(failure);
         
         if(mRequestValidationHandler)
            mRequestValidationHandler->onInvalidContentLanguage(request);

         return false;
      }
   }

   return true;
}

Here is the call graph for this function:

bool DialogUsageManager::validateRequestURI ( const SipMessage request) [private]

Definition at line 1729 of file DialogUsageManager.cxx.

References resip::Message::brief(), getMasterProfile(), resip::RequestLine::getMethod(), h_RequestLine, resip::SipMessage::header(), InfoLog, makeResponse(), mRequestValidationHandler, resip::RequestValidationHandler::onInvalidMethod(), resip::RequestValidationHandler::onInvalidScheme(), resip::Uri::scheme(), sendResponse(), and resip::RequestLine::uri().

Referenced by incomingProcess().

{
   // RFC3261 - 8.2.1
   if (!getMasterProfile()->isMethodSupported(request.header(h_RequestLine).getMethod()))
   {
      InfoLog (<< "Received an unsupported method: " << request.brief());

      SipMessage failure;
      makeResponse(failure, request, 405);
      failure.header(h_Allows) = getMasterProfile()->getAllowedMethods();
      sendResponse(failure);

      if(mRequestValidationHandler)
         mRequestValidationHandler->onInvalidMethod(request);

      return false;
   }

   // RFC3261 - 8.2.2
   if (!getMasterProfile()->isSchemeSupported(request.header(h_RequestLine).uri().scheme()))
   {
      InfoLog (<< "Received an unsupported scheme: " << request.brief());
      SipMessage failure;
      makeResponse(failure, request, 416);
      sendResponse(failure);
      
      if(mRequestValidationHandler)
         mRequestValidationHandler->onInvalidScheme(request);

      return false;
   }

   return true;
}

Here is the call graph for this function:

bool DialogUsageManager::validateRequiredOptions ( const SipMessage request) [private]

Definition at line 1766 of file DialogUsageManager.cxx.

References resip::Message::brief(), resip::ParserContainerBase::empty(), resip::SipMessage::exists(), getMasterProfile(), resip::RequestLine::getMethod(), h_RequestLine, resip::SipMessage::header(), InfoLog, makeResponse(), mRequestValidationHandler, resip::RequestValidationHandler::onInvalidRequiredOptions(), and sendResponse().

Referenced by incomingProcess().

{
   // RFC 2162 - 8.2.2
   if(request.exists(h_Requires) &&                 // Don't check requires if method is ACK or CANCEL
      (request.header(h_RequestLine).getMethod() != ACK ||
       request.header(h_RequestLine).getMethod() != CANCEL))
   {
      Tokens unsupported = getMasterProfile()->getUnsupportedOptionsTags(request.header(h_Requires));
      if (!unsupported.empty())
      {
         InfoLog (<< "Received an unsupported option tag(s): " << request.brief());

         SipMessage failure;
         makeResponse(failure, request, 420);
         failure.header(h_Unsupporteds) = unsupported;
         sendResponse(failure);
      
         if(mRequestValidationHandler)
            mRequestValidationHandler->onInvalidRequiredOptions(request);

         return false;
      }
   }

   return true;
}

Here is the call graph for this function:

bool resip::DialogUsageManager::validateTo ( const SipMessage request) [private]

Friends And Related Function Documentation

friend class BaseUsage [friend]

Definition at line 387 of file DialogUsageManager.hxx.

friend class ClientInviteSession [friend]

Definition at line 376 of file DialogUsageManager.hxx.

friend class ClientOutOfDialogReq [friend]

Definition at line 377 of file DialogUsageManager.hxx.

friend class ClientPagerMessage [friend]

Definition at line 388 of file DialogUsageManager.hxx.

Referenced by makePagerMessage().

friend class ClientPublication [friend]

Definition at line 378 of file DialogUsageManager.hxx.

friend class ClientRegistration [friend]

Definition at line 379 of file DialogUsageManager.hxx.

friend class ClientSubscription [friend]

Definition at line 380 of file DialogUsageManager.hxx.

friend class Dialog [friend]

Definition at line 373 of file DialogUsageManager.hxx.

friend class DialogSet [friend]

Definition at line 374 of file DialogUsageManager.hxx.

Referenced by makeUacDialogSet(), and processRequest().

friend class DumThread [friend]

Definition at line 361 of file DialogUsageManager.hxx.

friend class InviteSession [friend]

Definition at line 381 of file DialogUsageManager.hxx.

friend class KeepAliveAssociation [friend]

Definition at line 390 of file DialogUsageManager.hxx.

friend class MergedRequestRemovalCommand [friend]

Definition at line 393 of file DialogUsageManager.hxx.

friend class NetworkAssociation [friend]

Definition at line 391 of file DialogUsageManager.hxx.

friend class ServerInviteSession [friend]

Definition at line 382 of file DialogUsageManager.hxx.

friend class ServerOutOfDialogReq [friend]

Definition at line 383 of file DialogUsageManager.hxx.

friend class ServerPagerMessage [friend]

Definition at line 389 of file DialogUsageManager.hxx.

friend class ServerPublication [friend]

Definition at line 384 of file DialogUsageManager.hxx.

Referenced by processPublish().

friend class ServerRegistration [friend]

Definition at line 385 of file DialogUsageManager.hxx.

friend class ServerSubscription [friend]

Definition at line 386 of file DialogUsageManager.hxx.

friend class TargetCommand::Target [friend]

Definition at line 394 of file DialogUsageManager.hxx.


Member Data Documentation

Definition at line 529 of file DialogUsageManager.hxx.

Referenced by processRequest(), and setAppDialogSetFactory().

Definition at line 506 of file DialogUsageManager.hxx.

Referenced by resip::DialogSet::dispatch(), and setDialogSetHandler().

Definition at line 556 of file DialogUsageManager.hxx.

Referenced by internalProcess(), and process().

Definition at line 369 of file DialogUsageManager.hxx.

Referenced by incomingProcess().

Definition at line 502 of file DialogUsageManager.hxx.

Referenced by resip::ServerInviteSession::accept(), resip::ClientInviteSession::dispatch(), resip::Dialog::dispatch(), resip::InviteSession::dispatch(), resip::ServerInviteSession::dispatchAccepted(), resip::ServerInviteSession::dispatchAcceptedWaitingAnswer(), resip::ServerInviteSession::dispatchBye(), resip::InviteSession::dispatchBye(), resip::ServerInviteSession::dispatchCancel(), resip::InviteSession::dispatchCancel(), resip::ClientInviteSession::dispatchCancelled(), resip::InviteSession::dispatchConnected(), resip::ClientInviteSession::dispatchEarly(), resip::ClientInviteSession::dispatchEarlyWithAnswer(), resip::ClientInviteSession::dispatchEarlyWithOffer(), resip::InviteSession::dispatchGlare(), resip::InviteSession::dispatchInfo(), resip::InviteSession::dispatchMessage(), resip::InviteSession::dispatchPrack(), resip::ClientInviteSession::dispatchQueuedUpdate(), resip::InviteSession::dispatchReceivedReinviteSentOffer(), resip::InviteSession::dispatchReinviteNoOfferGlare(), resip::ClientInviteSession::dispatchSentAnswer(), resip::InviteSession::dispatchSentReinvite(), resip::InviteSession::dispatchSentReinviteNoOffer(), resip::InviteSession::dispatchSentUpdate(), resip::ClientInviteSession::dispatchSentUpdateEarly(), resip::ClientInviteSession::dispatchSentUpdateEarlyGlare(), resip::ClientInviteSession::dispatchStart(), resip::ServerInviteSession::dispatchStart(), resip::InviteSession::dispatchUnhandledInvite(), resip::ServerInviteSession::dispatchUnknown(), resip::ServerInviteSession::dispatchWaitingToHangup(), resip::InviteSession::dispatchWaitingToHangup(), resip::ServerInviteSession::dispatchWaitingToOffer(), resip::ServerInviteSession::dispatchWaitingToRequestOffer(), resip::InviteSession::dispatchWaitingToTerminate(), resip::ClientInviteSession::end(), resip::ServerInviteSession::end(), resip::InviteSession::end(), resip::InviteSession::flowTerminated(), resip::InviteSession::getLocalSdp(), resip::InviteSession::getOfferAnswer(), resip::InviteSession::getProposedRemoteSdp(), resip::InviteSession::getRemoteSdp(), resip::ClientInviteSession::handleAnswer(), resip::ClientInviteSession::handleOffer(), resip::ClientInviteSession::handleRedirect(), resip::InviteSession::hasLocalSdp(), resip::InviteSession::hasProposedRemoteSdp(), resip::InviteSession::hasRemoteSdp(), resip::InviteSession::InviteSession(), resip::ClientInviteSession::onConnectedAspect(), resip::ClientInviteSession::onFailureAspect(), resip::ClientInviteSession::onProvisionalAspect(), resip::InviteSession::onReadyToSend(), resip::ServerInviteSession::provideAnswer(), resip::ServerInviteSession::redirect(), resip::InviteSession::referNoSub(), resip::ClientInviteSession::reject(), resip::ServerInviteSession::reject(), and setInviteSessionHandler().

Definition at line 519 of file DialogUsageManager.hxx.

Referenced by addServerSubscriptionHandler(), and ~DialogUsageManager().

Definition at line 496 of file DialogUsageManager.hxx.

Referenced by getMasterProfile(), and setMasterProfile().

Definition at line 497 of file DialogUsageManager.hxx.

Referenced by getMasterUserProfile(), and setMasterProfile().

Definition at line 370 of file DialogUsageManager.hxx.

Referenced by outgoingProcess().

Definition at line 364 of file DialogUsageManager.hxx.

Referenced by addOutgoingFeature(), and outgoingProcess().

Definition at line 366 of file DialogUsageManager.hxx.

Referenced by outgoingProcess(), and setOutgoingMessageInterceptor().

Definition at line 517 of file DialogUsageManager.hxx.

Referenced by addOutOfDialogHandler(), and getOutOfDialogHandler().

Definition at line 505 of file DialogUsageManager.hxx.

Referenced by getRedirectHandler(), and setRedirectHandler().

Definition at line 547 of file DialogUsageManager.hxx.

Definition at line 555 of file DialogUsageManager.hxx.

Referenced by internalProcess(), and process().


The documentation for this class was generated from the following files: