datacommsserver/esockserver/test/TE_EsockTestSteps/src/BearerMobility.TestSteps.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/src/BearerMobility.TestSteps.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,692 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file BearerMobility.TestSteps.cpp
+*/
+
+#include "Connections.TestSteps.h"
+#include "BearerMobility.TestSteps.h"
+
+
+using namespace ESock;
+
+// Accept
+//-------
+
+Cacceptcarrierrcommsmobilityapiext::Cacceptcarrierrcommsmobilityapiext(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(Kacceptcarrierrcommsmobilityapiext);
+	}
+
+TInt Cacceptcarrierrcommsmobilityapiext::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+	iConnectionName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+    }
+
+
+TVerdict Cacceptcarrierrcommsmobilityapiext::doSingleTestStep()
+	{
+	RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }
+    mob->NewCarrierAccepted();
+    
+	return EPass;
+	}
+
+// Reject
+//-------
+Crejectcarrierrcommsmobilityapiext::Crejectcarrierrcommsmobilityapiext(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(Krejectcarrierrcommsmobilityapiext);
+	}
+
+TInt Crejectcarrierrcommsmobilityapiext::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+	iConnectionName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+    }
+
+TVerdict Crejectcarrierrcommsmobilityapiext::doSingleTestStep()
+	{
+    RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }   
+   	mob->NewCarrierRejected();
+
+	return EPass;
+	}
+
+
+// Cancel notification
+//--------------------
+
+CCancelMobilityNotificationStep::CCancelMobilityNotificationStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCancelMobilityNotificationStep);
+	}
+
+TInt CCancelMobilityNotificationStep::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+    }
+
+
+TVerdict CCancelMobilityNotificationStep::doSingleTestStep()
+	{
+	SetTestStepResult(EFail);
+	RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+	if (mob==NULL)
+		{
+		INFO_PRINTF1(_L("Could not find mobility extension."));
+		}
+	else
+		{
+		mob->CancelMobilityNotification();
+		SetTestStepResult(EPass);
+		}
+
+	return TestStepResult();
+	}
+
+
+// Migrate
+//--------
+
+Cmigratercommsmobilityapiext::Cmigratercommsmobilityapiext(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(Kmigratercommsmobilityapiext);
+	}
+
+TInt Cmigratercommsmobilityapiext::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+	iConnectionName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+    }
+
+
+TVerdict Cmigratercommsmobilityapiext::doSingleTestStep()
+	{
+    RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }
+
+ 	mob->MigrateToPreferredCarrier();
+
+	return EPass;
+	}
+
+
+// Ignore
+//-------
+
+Cignorercommsmobilityapiext::Cignorercommsmobilityapiext(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(Kignorercommsmobilityapiext);
+	}
+
+TInt Cignorercommsmobilityapiext::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+    }
+
+
+TVerdict Cignorercommsmobilityapiext::doSingleTestStep()
+	{
+    RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }
+
+	mob->IgnorePreferredCarrier();
+
+	return EPass;
+	}
+
+
+// Check
+//------
+CCheckMobilityNotificationStep::CCheckMobilityNotificationStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+    {
+	SetTestStepName(KCheckMobilityNotificationStep);
+	}
+
+TInt CCheckMobilityNotificationStep::ConfigureFromIni()
+	{
+	iParams.Reset();
+	iOldAP = 0;
+	iNewAP = 0;
+	iExpectedError = KExpectedErrorNotUsed;
+	iExpectedError2 = KExpectedErrorNotUsed;
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_MobilityAPIName, iParams.iMobilityExtName) != 1)
+		|| (iParams.iMobilityExtName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+	//calculate name for the event container (it is not settable from the ini)
+	iEventName = iParams.iMobilityExtName;
+	iEventName.Append(_L("_EvContainer"));
+	iParams.iEventName.Set(iEventName);
+
+	// Get any timeout value and if we have one then we are not expecting any notification
+	if(!GetIntFromConfig(iSection, KTimeoutInMilliSeconds, iParams.iTimeoutMiliSecs))
+		{
+		// Default to 5 second timeout
+		iParams.iTimeoutMiliSecs = 7000; //Seven for luck :)) and really to be shorter than the idle timer (10)
+		}
+
+	//there may be more than one expected event kind, register all of them
+	TBool descriptionComplete = EFalse;
+
+	for (TInt idx = 0; !descriptionComplete; idx++)
+		{
+		TBuf<KMaxTestExecuteNameLength> fieldName(KTe_Expected);
+		fieldName.AppendNum(idx);
+
+		TPtrC eventName;
+		if (GetStringFromConfig(iSection,fieldName,eventName)==1)
+			{
+			TBuf<KMaxTestExecuteNameLength> fieldNameAp(fieldName);
+			fieldNameAp.Append(KTe_MobilityNotificationPreferredCarrierAvailable_NewAP);
+			if (eventName.Compare(KTe_MobilityNotificationPreferredCarrierAvailable)==0)
+				{
+				iParams.iEventMask |= ESock::EPreferredCarrierAvailable;
+				GetIntFromConfig(iSection,fieldNameAp,iNewAP);
+
+				fieldNameAp.Copy(fieldName);
+				fieldNameAp.Append(KTe_MobilityNotificationPreferredCarrierAvailable_OldAP);
+				GetIntFromConfig(iSection,fieldNameAp,iOldAP);
+				}
+			else if (eventName.Compare(KTe_MobilityNotificationNewCarrierActive)==0)
+				{
+				iParams.iEventMask |= ESock::ENewCarrierActive;
+				GetIntFromConfig(iSection,fieldNameAp,iNewAP);
+				}
+			else
+			   {
+			   INFO_PRINTF3(_L("%S: Event type (%S) not recognised."),&iParams.iMobilityExtName,&eventName);
+			   return KErrNotFound;
+			   }
+			}
+		else
+			{
+			descriptionComplete = ETrue;
+			}
+		}
+
+	// Log what events we are expecting if any
+	if(iParams.iEventMask)
+		{
+		INFO_PRINTF3(_L("%S: Events to be expected: 0x%x"),&iParams.iMobilityExtName,iParams.iEventMask);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("%S: No events specified so expecting no notifications and to timeout instead."), &iParams.iMobilityExtName);
+		}
+
+	// What error are we expecting?
+	if (!GetIntFromConfig(iSection, KExpectedError,iExpectedError))  
+		{
+		iExpectedError = KExpectedErrorNotUsed;
+		}
+	else 
+		{
+		INFO_PRINTF2(_L("Error to be expected: %d"),iExpectedError);
+		}
+
+	// What error are we expecting?
+	if (!GetIntFromConfig(iSection, KExpectedError2,iExpectedError2))
+		{
+		iExpectedError2 = KExpectedErrorNotUsed;
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CCheckMobilityNotificationStep::doSingleTestStep()
+	{
+    SetTestStepResult(EFail);
+    TDesC8* buffer = NULL;
+
+	// Wait for the outstanding mobility notifications
+    TInt error = iEsockTest->ReceiveMobilityNotification(buffer, iParams);
+
+	if ((iExpectedError != KExpectedErrorNotUsed && error == iExpectedError)
+		|| (iExpectedError2 != KExpectedErrorNotUsed && error == iExpectedError2))
+		{
+		INFO_PRINTF2(_L("Error (%d) received as expected"),error);
+		SetTestStepResult(EPass);
+		return TestStepResult();
+		}
+
+	// If we weren't expecting any mobility events and timed out waiting then we passed
+	// But if we weren't expecting any and received one then we failed
+    if (error == KErrCancel)
+    	{
+		if(iParams.iEventMask == 0)
+			{
+			INFO_PRINTF1(_L("Timed out waiting for notifications when expecting to do so."));
+			SetTestStepResult(EPass);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Timed out when expecting an event."));
+			}
+		return TestStepResult();
+		}
+
+	if((error == KErrNone) && (buffer != NULL))
+		{
+		if(iParams.iEventMask != 0)
+			{
+			CCommsApiExtRespMsg * msg = NULL;
+			TRAP(error, msg = CCommsApiExtRespMsg::NewL(*buffer));
+
+			if(error != KErrNone || msg == NULL)
+				{
+				INFO_PRINTF2(_L("Could not demarshall incoming notification. error:%d."), error);
+				}
+			else
+				{
+				//check types
+				STypeId preferredCarrierAvailableTID = STypeId::CreateSTypeId(ESock::KMobilityMessagesImplementationUid, ESock::EPreferredCarrierAvailable);
+				STypeId newCarrierActiveTID = STypeId::CreateSTypeId(ESock::KMobilityMessagesImplementationUid, ESock::ENewCarrierActive);
+
+				if (msg->IsTypeOf(preferredCarrierAvailableTID))
+					{
+					CPreferredCarrierAvailable* pca = static_cast<CPreferredCarrierAvailable*>(msg);
+					if ((iParams.iEventMask & ESock::EPreferredCarrierAvailable)
+						&& (iNewAP==0 || iNewAP==pca->NewAPInfo().AccessPoint())
+						&& (iOldAP==0 || iOldAP==pca->OldAPInfo().AccessPoint()))
+						{
+						INFO_PRINTF4(_L("%S: Received PreferredCarrierAvailable notification from AP%d to AP%d as expected."),&iParams.iMobilityExtName, pca->OldAPInfo().AccessPoint(), pca->NewAPInfo().AccessPoint());
+						SetTestStepResult(EPass);
+						}
+					else
+						{
+						INFO_PRINTF4(_L("%S: Received PreferredCarrierAvailable notification from AP%d to AP%d which was unexpected."),&iParams.iMobilityExtName, pca->OldAPInfo().AccessPoint(), pca->NewAPInfo().AccessPoint());
+						}
+					}
+
+				else if (msg->IsTypeOf(newCarrierActiveTID))
+					{
+					CNewCarrierActive* nca = static_cast<CNewCarrierActive*>(msg);
+					if ((iParams.iEventMask & ESock::ENewCarrierActive)
+						&& (iNewAP==0 || iNewAP==nca->NewAPInfo().AccessPoint()))
+						{
+						INFO_PRINTF3(_L("%S: Received NewCarrierActive notification for AP%d as expected."),&iParams.iMobilityExtName, nca->NewAPInfo().AccessPoint());
+						SetTestStepResult(EPass);
+						}
+					else
+						{
+						INFO_PRINTF3(_L("%S: Received NewCarrierActive notification for AP%d which was unexpected."),&iParams.iMobilityExtName, nca->NewAPInfo().AccessPoint());
+						}
+					}
+				}
+
+			delete msg;
+			REComSession::FinalClose(); //Different thread to the main one, need to be closed here as well
+			}
+		else
+			{
+			// We were expecting a timeout and instead received a notification so we have failed
+			INFO_PRINTF1(_L("We were not expecting a notification expecting to timeout."));
+			}
+		}
+    else if (error != KErrNone)
+        {
+        INFO_PRINTF3(_L("%S: The error code returned was %d."), &iParams.iMobilityExtName, error);
+        SetTestStepError(error);
+        }
+    else if (buffer == NULL)
+        {
+        INFO_PRINTF2(_L("%S: Did not receive any notification"),&iParams.iMobilityExtName);
+        }
+
+	return TestStepResult();
+	}
+
+
+// Close 
+//------
+
+CCloseRCommsMobilityAPIExtStep::CCloseRCommsMobilityAPIExtStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCloseRCommsMobilityAPIExtStep);
+	}
+
+TInt CCloseRCommsMobilityAPIExtStep::ConfigureFromIni()
+	{
+	iMobilityExtName.Set(KNullDesC);
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_MobilityAPIName, iMobilityExtName) != 1)
+		|| (iMobilityExtName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CCloseRCommsMobilityAPIExtStep::doSingleTestStep()
+	{
+    RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }
+    
+    mob->Close();
+	return EPass;
+	}
+
+// Open
+//-----
+
+COpenRCommsMobilityAPIExtStep::COpenRCommsMobilityAPIExtStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KOpenRCommsMobilityAPIExtStep);
+	}
+
+TInt COpenRCommsMobilityAPIExtStep::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+	iConnectionName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection, KTe_MobilityAPIName, iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    if (GetStringFromConfig(iSection,KTe_ConnectionName,iConnectionName)!=1)
+        {
+        INFO_PRINTF1(_L("Connection name missing."));
+        return KErrNotFound;
+        }
+
+    return KErrNone;
+    }
+
+TVerdict COpenRCommsMobilityAPIExtStep::doSingleTestStep()
+	{
+	SetTestStepResult(EFail);
+	RConnection* c = iEsockTest->FindConnection(iConnectionName);
+	if (c==NULL)
+		{
+		INFO_PRINTF2(_L("Could not find RConnection (%S)."),&iConnectionName);
+		return EFail;
+		}
+
+	TInt error = iEsockTest->CreateMobilityExtension(iMobilityExtName);
+	if (error!=KErrNone)
+		{
+		INFO_PRINTF2(_L("Could not create mobility extension (%d)."),error);
+		return EFail;
+		}
+
+	RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+	if (mob==NULL)
+		{
+		INFO_PRINTF1(_L("Could not find mobility extension."));
+		return EFail;
+		}
+
+	error = mob->Open(*c);
+	if (error!=KErrNone)
+		{
+		INFO_PRINTF3(_L("Could not apply %S to %S."),&iMobilityExtName,&iConnectionName);
+		INFO_PRINTF2(_L("Error returned: %d."),error);
+		SetTestStepError(error);
+		return EFail;
+		}
+
+	return EPass;
+	}
+
+
+// Register for notifications
+//---------------------------
+
+CRegisterForMobilityNotificationStep::CRegisterForMobilityNotificationStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+    {
+	SetTestStepName(KRegisterForMobilityNotificationStep);
+	}
+
+TInt CRegisterForMobilityNotificationStep::ConfigureFromIni()
+	{
+	//clean parameters from previous runs
+	iParams.Reset();
+
+    //try reading the next event container's name
+    if (GetStringFromConfig(iSection, KTe_MobilityAPIName, iParams.iMobilityExtName)!=1
+        || iParams.iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+	//calculate name for the event container (it is not settable from the ini)
+	iEventName = iParams.iMobilityExtName;
+	iEventName.Append(_L("_EvContainer"));
+	iParams.iEventName.Set(iEventName);
+
+    TPtrC eventName;
+    if (GetStringFromConfig(iSection,KTe_Register,eventName)==1)
+        {
+        //first check, maybe someone wants to register for all events?
+        if (eventName.Compare(KTe_All)==0)
+            {
+            iParams.iAllEvents = ETrue;
+            INFO_PRINTF2(_L("%S: Events to be registered: All"),&iParams.iMobilityExtName);
+            return KErrNone;
+            }
+        }
+
+    //secondly..
+    //go through the list of particular events to register.
+    //there may be more than one expected event kind, register all of them
+    TBool desciptionFound = ETrue;
+    for (TInt idx = 0; desciptionFound; idx++)
+        {
+        TBuf<KMaxTestExecuteNameLength> fieldName(KTe_Register);
+        fieldName.AppendNum(idx);
+        if (GetStringFromConfig(iSection,fieldName,eventName)==1)
+            {
+            if (eventName.Compare(KTe_MobilityNotificationPreferredCarrierAvailable)==0)
+        	    { iParams.iEventMask |= ESock::EPreferredCarrierAvailable; }
+            else if (eventName.Compare(KTe_MobilityNotificationNewCarrierActive)==0)
+        	    { iParams.iEventMask |= ESock::ENewCarrierActive; }
+            else
+               {
+               INFO_PRINTF3(_L("%S: Mobility notification type (%S) not recognised."),&iParams.iMobilityExtName,&eventName);
+               return KErrNotFound;
+               }
+            }
+        else
+            {
+            //at least one event type must be present
+            if (idx==0)
+                {
+                INFO_PRINTF2(_L("%S: Mobility notification type missing."),&iParams.iMobilityExtName);
+                return KErrNotFound;
+                }
+            else
+                {
+                desciptionFound = KErrNotFound; //break the loop
+                }
+            }
+        }
+
+    INFO_PRINTF3(_L("%S: Mobility notifications to be registered: 0x%x"),&iParams.iMobilityExtName,iParams.iEventMask);
+    return KErrNone;
+	}
+
+TVerdict CRegisterForMobilityNotificationStep::doSingleTestStep()
+	{
+   	TInt error = iEsockTest->RegisterForMobilityNotification(iParams);
+    if (error!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Could not register for mobility notifications (%S)."),&iParams.iMobilityExtName);
+        INFO_PRINTF2(_L("Error: %d"),error);
+        return EFail;
+        }
+
+	return EPass;
+	}
+	
+// Mobility notification	
+//----------------------
+Cmobilitynotifyrcommsmobilityapiext::Cmobilitynotifyrcommsmobilityapiext(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(Kmobilitynotifyrcommsmobilityapiext);
+	}
+
+
+TVerdict Cmobilitynotifyrcommsmobilityapiext::doSingleTestStep()
+	{
+    RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }
+    
+   	TRequestStatus tStatus;
+   	TBuf8<20> tResponseEventBuf;
+   	mob->RegisterForMobilityNotification(tResponseEventBuf, tStatus);
+
+	return EPass;
+	}
+	
+TInt Cmobilitynotifyrcommsmobilityapiext::ConfigureFromIni()
+	{
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+	iConnectionName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+	}
+
+// Cancel mobility notification
+//-----------------------------
+Ccancelnotifyrcommsmobilityapiext::Ccancelnotifyrcommsmobilityapiext(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(Kcancelnotifyrcommsmobilityapiext);
+	}
+
+TVerdict Ccancelnotifyrcommsmobilityapiext::doSingleTestStep()
+	{
+    RCommsMobilityApiExt* mob = iEsockTest->FindMobilityExtension(iMobilityExtName);
+    if (mob==NULL)
+        {
+        INFO_PRINTF1(_L("Could not find mobility extension."));
+        return EFail;
+        }
+
+	mob->CancelMobilityNotification();
+	
+	return EPass;
+	}
+	
+TInt Ccancelnotifyrcommsmobilityapiext::ConfigureFromIni()
+	{
+	//clean parameters from previous runs
+	iMobilityExtName.Set(KNullDesC);
+	iConnectionName.Set(KNullDesC);
+
+    //try reading the name of the subconnection bundle
+    if (GetStringFromConfig(iSection,KTe_MobilityAPIName,iMobilityExtName)!=1
+        || iMobilityExtName.Length()==0)
+            return KErrNotFound;
+
+    return KErrNone;
+	}
+