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

#include <RedirectManager.hxx>

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

List of all members.

Classes

class  Ordering
class  TargetSet

Public Member Functions

virtual ~RedirectManager ()
virtual bool handle (DialogSet &dSet, SipMessage &origRequest, const SipMessage &response)
void setOrdering (const Ordering &order)
void removeDialogSet (DialogSetId id)

Protected Types

typedef HashMap< DialogSetId,
TargetSet * > 
RedirectedRequestMap

Protected Attributes

RedirectedRequestMap mRedirectedRequestMap
Ordering mOrdering

Detailed Description

Definition at line 24 of file RedirectManager.hxx.


Member Typedef Documentation

Definition at line 71 of file RedirectManager.hxx.


Constructor & Destructor Documentation

virtual resip::RedirectManager::~RedirectManager ( ) [inline, virtual]

Definition at line 33 of file RedirectManager.hxx.

{}

Member Function Documentation

bool RedirectManager::handle ( DialogSet dSet,
SipMessage origRequest,
const SipMessage response 
) [virtual]

dcm! -- accept all if no handler--should a handler be required?

Definition at line 15 of file RedirectManager.cxx.

References resip::RedirectManager::TargetSet::addTargets(), DebugLog, resip::AppDialogSet::getHandle(), resip::DialogUsageManager::getRedirectHandler(), h_StatusLine, resip::SipMessage::header(), resip::SipMessage::isRequest(), resip::SipMessage::isResponse(), resip::RedirectManager::TargetSet::makeNextRequest(), resip::DialogSet::mAppDialogSet, resip::DialogSet::mDum, mOrdering, mRedirectedRequestMap, resip::RedirectHandler::onRedirectReceived(), and resip::RedirectHandler::onTryingNextTarget().

{
   assert( response.isResponse() );
   assert( origRequest.isRequest() );

   //380, 305 fall through to the application
   int code = response.header(h_StatusLine).statusCode();
   if (code < 300 || code == 380 || code == 305)
   {
      return false;
   }
   else if (code >= 300 && code < 400)
   {
      RedirectHandler* handler = dSet.mDum.getRedirectHandler();   
      DialogSetId id(origRequest);   
      RedirectedRequestMap::iterator it = mRedirectedRequestMap.find(id);

      if (it == mRedirectedRequestMap.end())
      {
         DebugLog( << "RedirectManager::handle: new TargetSet: " << id);         
         mRedirectedRequestMap[id] = new TargetSet(origRequest, mOrdering);
         it = mRedirectedRequestMap.find(id);         
      }
      if (handler)
      {
         handler->onRedirectReceived(dSet.mAppDialogSet->getHandle(), response);
      }
      TargetSet& tSet = *it->second;      
      tSet.addTargets(response);

      while(tSet.makeNextRequest(origRequest))
      {
         if (handler)
         {
            if (handler->onTryingNextTarget(dSet.mAppDialogSet->getHandle(), origRequest))
            {
               return true;
            }
         }
         else 
         {
            return true;
         }
      }
      delete it->second;         
      mRedirectedRequestMap.erase(it);
      return false;
   }
   //5xx, 6xx different?
   return false;   
}

Here is the call graph for this function:

void RedirectManager::removeDialogSet ( DialogSetId  id)

Definition at line 147 of file RedirectManager.cxx.

References mRedirectedRequestMap.

{
   RedirectedRequestMap::iterator it = mRedirectedRequestMap.find(id);
   
   if (it != mRedirectedRequestMap.end())
   {
      delete it->second;         
      mRedirectedRequestMap.erase(it);
   }
}
void RedirectManager::setOrdering ( const Ordering order)

Definition at line 68 of file RedirectManager.cxx.

References mOrdering.

{
   mOrdering = order;   
}

Member Data Documentation

Definition at line 73 of file RedirectManager.hxx.

Referenced by handle(), and setOrdering().

Definition at line 72 of file RedirectManager.hxx.

Referenced by handle(), and removeDialogSet().


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