diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommsengine/mmcesrv/mmceserver/src/mcenatstatewait.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/src/mcenatstatewait.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcenatstatewait.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -52,6 +52,7 @@ EMceProvisionalResponse == aEvent.Code() ) && MceSip::HasContent( aEvent.Session().Response() ) ) || EMceNatError == aEvent.NatCode() || + EMceNatUpdated == aEvent.NatCode() || ( EMceAck == aEvent.Code() && MceSip::HasContent( aEvent.Session().Request())) || EMceNatICMPError == aEvent.NatCode()) @@ -135,6 +136,7 @@ void CMceNatStateWait::ExitDefaultL( TMceNatStateTransitionEvent& aEvent ) { CMceSipSession& session = aEvent.Session(); + TMceStateIndex sipState = aEvent.Session().CurrentState().Id(); if ( EMceAck == aEvent.Code() && MceSip::HasContent( aEvent.Session().Request())) @@ -143,6 +145,11 @@ aEvent.NatActions().UpdateL(); aEvent.NatActions().StateChangedL( aEvent, KMceNatStateDecodeAnswer ); } + else if( EMceNatUpdated == aEvent.NatCode() && + KMceStateOffering == sipState ) //for prack + { + aEvent.NatActions().StateChangedL( aEvent, KMceNatStateCreateOffer ); + } else { User::LeaveIfError( session.Actions().CreateSDP( session.Response() ) );