Final answer events take priority over any provisional ones.

git-svn-id: http://yate.null.ro/svn/yate/trunk@1147 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
paulc 2006-12-22 13:47:52 +00:00
parent ead7974941
commit 035a97f2e3
1 changed files with 4 additions and 3 deletions

View File

@ -512,6 +512,7 @@ SIPTransaction::Processed SIPTransaction::processMessage(SIPMessage* message, co
void SIPTransaction::processClientMessage(SIPMessage* message, int state)
{
bool final = message->code >= 200;
switch (state) {
case Trying:
setTimeout(m_engine->getTimer(isInvite() ? 'B' : 'F'));
@ -529,8 +530,8 @@ void SIPTransaction::processClientMessage(SIPMessage* message, int state)
// use the human interaction timeout in INVITEs
setTimeout(m_engine->getUserTimeout());
m_response = message->code;
setPendingEvent(new SIPEvent(message,this));
if (m_response >= 200) {
setPendingEvent(new SIPEvent(message,this),final);
if (final) {
setTimeout();
if (isInvite()) {
// build the ACK
@ -545,7 +546,7 @@ void SIPTransaction::processClientMessage(SIPMessage* message, int state)
}
break;
case Finish:
if (m_lastMessage && m_lastMessage->isACK() && (message->code >= 200))
if (m_lastMessage && m_lastMessage->isACK() && final)
setTransmit();
break;
}