bearermanagement/S60MCPR/src/s60mcprerrorrecoveryactivity.cpp
changeset 1 40cb640ef159
parent 0 5a93021fdf25
child 41 bbb64eb3bdee
--- a/bearermanagement/S60MCPR/src/s60mcprerrorrecoveryactivity.cpp	Thu Dec 17 08:55:21 2009 +0200
+++ b/bearermanagement/S60MCPR/src/s60mcprerrorrecoveryactivity.cpp	Thu Jan 07 12:56:54 2010 +0200
@@ -360,6 +360,38 @@
         activity.ReplyToOriginators( err );
         }
 
+    // -----------------------------------------------------------------------------
+    // CS60ConnectionRecoveryActivity::TSendPropagateRecoveryErrContextResponse::DoL
+    // -----------------------------------------------------------------------------
+    //
+    DEFINE_SMELEMENT( CS60ConnectionRecoveryActivity::TSendPropagateRecoveryErrContextResponse, 
+                      NetStateMachine::MStateTransition, 
+                      CS60ConnectionRecoveryActivity::TContext )
+    void CS60ConnectionRecoveryActivity::TSendPropagateRecoveryErrContextResponse::DoL()  // codescanner::leave
+        {
+        __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KS60MCprPanic, KPanicNoActivity));
+                
+        CS60ConnectionRecoveryActivity& activity = 
+            static_cast<CS60ConnectionRecoveryActivity&>(*iContext.iNodeActivity);
+
+        TInt error = activity.iOriginalErrContext.iStateChange.iError;
+        
+        if ( error == KErrNone )
+            {
+            error = KErrDisconnected;
+            S60MCPRLOGSTRING2("S60MCPR<%x>::TSendPropagateRecoveryErrContextResponse::DoL() overriding error code %d",(TInt*)&iContext.Node(), error);
+            }
+
+        // Override original error with activity error.
+        TEErrorRecovery::TErrorRecoveryResponse err( TErrResponse( TErrResponse::EPropagate,
+                                                                   error,
+                                                                   activity.iOriginalErrContext.iMessageId ) );
+        S60MCPRLOGSTRING2("S60MCPR<%x>::TSendPropagateRecoveryErrContextResponse::DoL() %d",(TInt*)&iContext.Node(), error);
+        // We must clear out the activity error to prevent last automatic error message from the node.
+        iContext.iNodeActivity->SetError( KErrNone );
+        activity.ReplyToOriginators( err );
+        }
+
     } // namespace S60MCprErrorRecoveryActivity
 
 //  End of File