|
reSIProcate/DialogUsageManager
9694
|
#include <RedirectManager.hxx>


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 |
Definition at line 24 of file RedirectManager.hxx.
typedef HashMap<DialogSetId, TargetSet*> resip::RedirectManager::RedirectedRequestMap [protected] |
Definition at line 71 of file RedirectManager.hxx.
| virtual resip::RedirectManager::~RedirectManager | ( | ) | [inline, virtual] |
Definition at line 33 of file RedirectManager.hxx.
{}
| 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;
}

| 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 | ) |
Ordering resip::RedirectManager::mOrdering [protected] |
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().
1.7.5.1