50 if ( ( EMceNatHandleSIP == aEvent.NatCode() && |
50 if ( ( EMceNatHandleSIP == aEvent.NatCode() && |
51 ( EMceResponse == aEvent.Code() || |
51 ( EMceResponse == aEvent.Code() || |
52 EMceProvisionalResponse == aEvent.Code() ) && |
52 EMceProvisionalResponse == aEvent.Code() ) && |
53 MceSip::HasContent( aEvent.Session().Response() ) ) || |
53 MceSip::HasContent( aEvent.Session().Response() ) ) || |
54 EMceNatError == aEvent.NatCode() || |
54 EMceNatError == aEvent.NatCode() || |
|
55 EMceNatUpdated == aEvent.NatCode() || |
55 ( EMceAck == aEvent.Code() && |
56 ( EMceAck == aEvent.Code() && |
56 MceSip::HasContent( aEvent.Session().Request())) || |
57 MceSip::HasContent( aEvent.Session().Request())) || |
57 EMceNatICMPError == aEvent.NatCode()) |
58 EMceNatICMPError == aEvent.NatCode()) |
58 { |
59 { |
59 return ETrue; |
60 return ETrue; |
133 // ----------------------------------------------------------------------------- |
134 // ----------------------------------------------------------------------------- |
134 // |
135 // |
135 void CMceNatStateWait::ExitDefaultL( TMceNatStateTransitionEvent& aEvent ) |
136 void CMceNatStateWait::ExitDefaultL( TMceNatStateTransitionEvent& aEvent ) |
136 { |
137 { |
137 CMceSipSession& session = aEvent.Session(); |
138 CMceSipSession& session = aEvent.Session(); |
|
139 TMceStateIndex sipState = aEvent.Session().CurrentState().Id(); |
138 |
140 |
139 if ( EMceAck == aEvent.Code() && |
141 if ( EMceAck == aEvent.Code() && |
140 MceSip::HasContent( aEvent.Session().Request())) |
142 MceSip::HasContent( aEvent.Session().Request())) |
141 { |
143 { |
142 User::LeaveIfError( session.Actions().CreateSDP( session.Request() ) ); |
144 User::LeaveIfError( session.Actions().CreateSDP( session.Request() ) ); |
143 aEvent.NatActions().UpdateL(); |
145 aEvent.NatActions().UpdateL(); |
144 aEvent.NatActions().StateChangedL( aEvent, KMceNatStateDecodeAnswer ); |
146 aEvent.NatActions().StateChangedL( aEvent, KMceNatStateDecodeAnswer ); |
|
147 } |
|
148 else if( EMceNatUpdated == aEvent.NatCode() && |
|
149 KMceStateOffering == sipState ) //for prack |
|
150 { |
|
151 aEvent.NatActions().StateChangedL( aEvent, KMceNatStateCreateOffer ); |
145 } |
152 } |
146 else |
153 else |
147 { |
154 { |
148 User::LeaveIfError( session.Actions().CreateSDP( session.Response() ) ); |
155 User::LeaveIfError( session.Actions().CreateSDP( session.Response() ) ); |
149 aEvent.NatActions().StateChangedL( aEvent, KMceNatStateDecodeAnswer ); |
156 aEvent.NatActions().StateChangedL( aEvent, KMceNatStateDecodeAnswer ); |