Can you send me the log files?
-Kathy

On Wed, 2008-05-14 at 14:13 -0400, Arjun Nair wrote:
> Hello,
> 
> I am using the sipXcallLibs and sipXtacklibs in sipXecs (through
> sipXtapi) to implement a basic user agent. Everything is working fine
> (making calls, receiving calls, register etc.), except, there seems to
> be an issue with retransmissions of "ACK"s for duplicate "200 OK"
> responses to an "INVITE", i.e.
> 
>              INVITE
> sipxUA ----------------------> UA2
>              200 OK
> sipxUA <---------------------- UA2
>               ACK
> sipxUA ----------------------> UA2
>              200 OK
> sipxUA <---------------------- UA2
>              200 OK
> sipxUA <---------------------- UA2
>              200 OK
> sipxUA <---------------------- UA2
> 
> 
> Has anyone else come across this? Is this a known issue?
> 
> Looking through the code:
> 
> On receiving a duplicate "200 OK", SipTransaction::handleChildIncoming
> is called with the messageRelationship - MESSAGE_DUPLICATE, and the
> response code is parsed correctly as a 200 OK. At this point, the method
> checks the "mpAck" attribute of this SipTransaction object, to resend
> the ACK. However, it is found to be NULL and I get this error/warning in
> the logs - "SipTransaction::handleChildIncoming duplicate 2xx response
> received on UAC for INVITE with no ACK". I can printf and see that the
> other attributes - mpRequest, mpLastProvisionalResponse,
> mpLastFinalResponse, are set up correctly. 
> 
> Going back and looking at where the original ACK was send from, I can
> see that the SipTransactionList::findTransactionFor matches the outgoing
> ACK message as "MESSAGE_2XX_ACK_PROXY". Manually, forcing this match to
> "MESSAGE_2XX_ACK" sets up the "mpAck" correctly, hence solving the
> retransmission issues.
> 
> ** sipXtackLib/src/net/SipTransactionList.cpp **
> 
>    5135    if (mIsServerTransaction)
>    5136    {
>    5137        SET_RELATIONSHIP(MESSAGE_2XX_ACK);
>    5138    }
>    5139    else
>    5140    {
>    5141 #ifdef TEST_PRINT
>    5142        OsSysLog::add(FAC_SIP, PRI_DEBUG,
>                              "SipTransaction::whatRelation ACK PROXY is
> REQUEST");
>    5143 #endif
>    5144        SET_RELATIONSHIP(MESSAGE_2XX_ACK_PROXY);
>    5145    }
> 
> So, as far as I can tell, the "mIsServerTransaction" is being setup
> incorrectly for some reason. What is the purpose of
> "mIsServerTransaction"? When acting as a basic user agent setting up a
> call, is it correct for the "mIsServerTransaction" to be false?
> 
> 
> Or, maybe I am missing something fundamental here?
> 
> 
> Thanks,
> 
> Arjun.
> 
> _______________________________________________
> sipx-dev mailing list
> [email protected]
> List Archive: http://list.sipfoundry.org/archive/sipx-dev
> Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev

_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev
Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev

Reply via email to