--- a/telephonyserverplugins/simtsy/src/csimsmartcardauth.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/simtsy/src/csimsmartcardauth.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,1072 +1,1072 @@
-// 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
-*/
-
-#include <testconfigfileparser.h>
-#include "CSimPhone.h"
-#include "Simlog.h"
-#include "csimsmartcardauth.h"
-#include "utils.h"
-
-CSimSmartCardAuth* CSimSmartCardAuth::NewL(CSimPhone *aPhone)
- {
- CSimSmartCardAuth* obj = new(ELeave) CSimSmartCardAuth(aPhone);
- CleanupStack::PushL(obj);
- obj->ConstructL();
- CleanupStack::Pop(obj);
- return obj;
- }
-
-CSimSmartCardAuth::CSimSmartCardAuth(CSimPhone *aPhone)
-: iPhone(aPhone)
- {
- iGBAAuthInfoList = new (ELeave) CArrayFixFlat<TGBAAuthInfo> (1);
- iMBMSInfoList = new (ELeave) CArrayFixFlat<TMBMSInfo> (1);
- }
-
-void CSimSmartCardAuth::ConstructL()
- {
- ParseAuthInfoL();
- ParseGBAAuthInfoL();
- ParseMBMSAuthInfoL();
- LOGPHONE1("CSimSmartCardAuth created");
- }
-
-CSimSmartCardAuth::~CSimSmartCardAuth()
- {
- iAuthInfoList.Close();
- if(iGBAAuthInfoList)
- {
- iGBAAuthInfoList->Delete(0,iGBAAuthInfoList->Count());
- delete iGBAAuthInfoList;
- }
- if(iMBMSInfoList)
- {
- iMBMSInfoList->Delete(0,iMBMSInfoList->Count());
- delete iMBMSInfoList;
- }
- LOGPHONE1("CSimSmartCardAuth destroyed");
- }
-
-TInt CSimSmartCardAuth::GetScAuthenticationData(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg1, const RMobilePhone::TAID* aAID)
- {
-
- LOGPHONE1("CSimSmartCardAuth::GetScAuthenticationData called");
-
- RMobilePhone::TSmartCardAuthenticateDataV6Pckg
- * authenticateDataPckgd =reinterpret_cast<RMobilePhone::TSmartCardAuthenticateDataV6Pckg*>(aPckg1);
- RMobilePhone::TSmartCardAuthenticateDataV6& authenticateData=(*authenticateDataPckgd) ();
-
- // Check that the data structure is supported by the simulated TSY version
- TInt err = iPhone->CheckSimTsyVersion (authenticateData);
- if ( err != KErrNone)
- {
- iPhone->ReqCompleted (aTsyReqHandle, err);
- return KErrNone;
- }
-
-
- if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileGbaBootstrapAuthDataV8)
- {
- RMobilePhone::TGbaBootstrapAuthDataV8Pckg
- * tGbaBootstrapAuthDataV8Pckgd =reinterpret_cast<RMobilePhone::TGbaBootstrapAuthDataV8Pckg*> (aPckg1);
- RMobilePhone::TGbaBootstrapAuthDataV8 tGbaBootstrapAuthDataV8 = (*tGbaBootstrapAuthDataV8Pckgd) ();
-
- // This is the USIM authorisation.
- if ( ((aAID == NULL) || (*aAID == iGBAAuthInfoList->At(index).iAID))
- &&tGbaBootstrapAuthDataV8.iAUTN == iGBAAuthInfoList->At(index).iAUTN
- &&tGbaBootstrapAuthDataV8.iRAND == iGBAAuthInfoList->At(index).iRAND)
- {
- TInt ret = iGBAAuthInfoList->At(index).iAuthErr;
- if ( ret != KErrNone)
- {
- // Return the AUTS and blank everything else
- tGbaBootstrapAuthDataV8.iAUTS = iGBAAuthInfoList->At(index).iAUTS;
- tGbaBootstrapAuthDataV8.iRES = _L8("");
- tGbaBootstrapAuthDataV8.iIK = _L8("");
- tGbaBootstrapAuthDataV8.iCK = _L8("");
- if ( ret == KErrMMEtelScApplicationNotActive)
- {
- if ( !(iGBAAuthInfoList->At(index).iApplnActive == EFalse))
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
- return KErrNone;
- }
- }
- }
- else
- {
- tGbaBootstrapAuthDataV8.iRES = iGBAAuthInfoList->At(index).iRES;
- tGbaBootstrapAuthDataV8.iAUTS = _L8("");
- tGbaBootstrapAuthDataV8.iIK = _L8("");
- tGbaBootstrapAuthDataV8.iCK = _L8("");
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- //iGBAAuthInfoList->Delete(index);
- return KErrNone;
- }
- iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
- return KErrNone;
- }
- else if (authenticateData.ExtensionId ()== RMobilePhone::KETelMobileGbaNafAuthDataV8)
- {
- RMobilePhone::TGbaNafAuthDataV8Pckg *gbaNafAuthPckg =
- reinterpret_cast<RMobilePhone::TGbaNafAuthDataV8Pckg*>(aPckg1);
-
- RMobilePhone::TGbaNafAuthDataV8 &gbaNafAuthData= (*gbaNafAuthPckg)();
- // This is the USIM authorisation.
- if ( ((aAID == NULL) || (*aAID == iGBAAuthInfoList->At(index).iAID))
- &&gbaNafAuthData.iImpi == iGBAAuthInfoList->At(index).iIMPI
- &&gbaNafAuthData.iNafId == iGBAAuthInfoList->At(index).iNAFID)
- {
- TInt ret = iGBAAuthInfoList->At(index).iAuthErr;
- if ( ret != KErrNone)
- {
- // return the Ks_Ext_NAF as NULL
- gbaNafAuthData.iKsExtNaf = _L8("");
- if ( ret == KErrMMEtelAuthKeyNotFound)
- {
- if ( !(iGBAAuthInfoList->At(index).iRAND == _L8("INV_RAND")))
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
- return KErrNone;
- }
- }
- if ( ret == KErrMMEtelScApplicationNotActive)
- {
- if ( !(iGBAAuthInfoList->At(index).iApplnActive == EFalse))
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
- return KErrNone;
- }
- }
- }
- else
- {
- gbaNafAuthData.iKsExtNaf = iGBAAuthInfoList->At(index).iKsExtNaf;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- return KErrNone;
- }
- iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
- return KErrNone;
- }
- else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMskUpdateDataV8)
- {
- RMobilePhone::TMbmsMskUpdateDataV8Pckg
- *tTMbmsMskUpdateDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMskUpdateDataV8Pckg*> (aPckg1);
-
- RMobilePhone::TMbmsMskUpdateDataV8 &tTMbmsMskUpdateDataV8= (*tTMbmsMskUpdateDataV8Pckg) ();
-
- if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
- && tTMbmsMskUpdateDataV8.iInputMikey == iMBMSInfoList->At(index).iInputMikey)
- {
- TInt ret = iMBMSInfoList->At(index).iAuthErr;
- if ( ret != KErrNone)
- {
- // return the Ks_Ext_NAF as NULL
- tTMbmsMskUpdateDataV8.iOutputMikey = _L8 ("");
- if ( ret == KErrMMEtelAuthKeyNotFound)
- {
- /* Checking for the hardcoded (existing) KsIntNAF with the one in config file
- * If different, it means that the KsIntNaf has been overwritten
- */
- if ((iMBMSInfoList->At(index).iKsIntNaf == _L8("CORRECT_KS_INT")))
- {
- iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
- index++;
- return KErrNone;
- }
- if(!(iMBMSInfoList->At(index).iMukIdTlv == _L8("INVALID_MUKID")))
- {
- iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
- index++;
- return KErrNone;
- }
- }
- if ( ret == KErrMMEtelScApplicationNotActive)
- {
- if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
- {
- iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
- index++;
- return KErrNone;
- }
- }
- }
- else
- {
- tTMbmsMskUpdateDataV8.iOutputMikey = iMBMSInfoList->At(index).iOutputMikey;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- index++;
- return KErrNone;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
- index++;
- return KErrNone;
- }
- else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMtkGenerateDataV8)
- {
- RMobilePhone::TMbmsMtkGenerateDataV8Pckg
- *tTMbmsMtkGenerateDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMtkGenerateDataV8Pckg*> (aPckg1);
-
- RMobilePhone::TMbmsMtkGenerateDataV8 &tTMbmsMtkGenerateDataV8= (*tTMbmsMtkGenerateDataV8Pckg) ();
-
- if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
- && tTMbmsMtkGenerateDataV8.iMikey == iMBMSInfoList->At(index).iInputMikey)
- {
- TInt ret = iMBMSInfoList->At(index).iAuthErr;
- if ( ret != KErrNone)
- {
- // return the Ks_Ext_NAF as NULL
- tTMbmsMtkGenerateDataV8.iMtk = _L8 ("");
- tTMbmsMtkGenerateDataV8.iSaltKey = _L8 ("");
- if ( ret == KErrMMEtelScApplicationNotActive)
- {
- if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
- {
- iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
- index++;
- return KErrNone;
- }
- }
- }
- else
- {
- tTMbmsMtkGenerateDataV8.iMtk = iMBMSInfoList->At(index).iMtk;
- tTMbmsMtkGenerateDataV8.iSaltKey = iMBMSInfoList->At(index).iSaltkey;
- }
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- index++;
- return KErrNone;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
- index++;
- return KErrNone;
- }
- else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMskDeleteDataV8)
- {
- RMobilePhone::TMbmsMskDeleteDataV8Pckg
- *tTMbmsMskDeleteDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMskDeleteDataV8Pckg*> (aPckg1);
-
- RMobilePhone::TMbmsMskDeleteDataV8 &tTMbmsMskDeleteDataV8= (*tTMbmsMskDeleteDataV8Pckg) ();
-
- if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
- && tTMbmsMskDeleteDataV8.iMskIdKeyGroup == iMBMSInfoList->At(index).iMskIdGrp
- && tTMbmsMskDeleteDataV8.iKeyDomainId == iMBMSInfoList->At(index).iKeyDmn)
- {
- TInt ret = iMBMSInfoList->At(index).iAuthErr;
- if ( ret != KErrNone)
- {
- if ( ret == KErrMMEtelScApplicationNotActive)
- {
- if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
- {
- iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
- index++;
- return KErrNone;
- }
- }
- }
- else
- {
- // MSK IDs are successfully deleted from the EFs.
- }
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- index++;
- return KErrNone;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
- index++;
- return KErrNone;
- }
- else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMukDeleteDataV8)
- {
- RMobilePhone::TMbmsMukDeleteDataV8Pckg
- *tTMbmsMukDeleteDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMukDeleteDataV8Pckg*> (aPckg1);
-
- RMobilePhone::TMbmsMukDeleteDataV8 &tTMbmsMukDeleteDataV8= (*tTMbmsMukDeleteDataV8Pckg) ();
-
- if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
- && tTMbmsMukDeleteDataV8.iMukIdTlv == iMBMSInfoList->At(index).iMukIdTlv)
- {
- TInt ret = iMBMSInfoList->At(index).iAuthErr;
- if ( ret != KErrNone)
- {
- if ( ret == KErrMMEtelScApplicationNotActive)
- {
- if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
- {
- iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
- index++;
- return KErrNone;
- }
- }
- }
- else
- {
- // MUK IDs are successfully deleted from the EFs.
- }
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- index++;
- return KErrNone;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
- index++;
- return KErrNone;
- }
- else
- {
- if(authenticateData.iCK==KConfigScWlan())
- {
- if(*aAID==KWlanAid())
- {
- if(authenticateData.iAUTN == KConfigScWlanAuthAUTN() && authenticateData.iRAND == KConfigScWlanAuthRAND())
- {
- authenticateData.iRES=KConfigScWlanAuthRES();
- authenticateData.iIK=KConfigScWlanAuthIK();
- authenticateData.iCK=KConfigScWlanAuthCK();
- iPhone->ReqCompleted (aTsyReqHandle, KErrNone);
- }
- else if(authenticateData.iAUTN == KConfigScWlanAuthAUTN())
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrMMEtelSqnVerificationFailed);
- }
- else
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrMMEtelMacVerificationFailed);
- }
- }
- else
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrMMEtelScApplicationNotActive);
- }
- }
- else if(authenticateData.iCK==KConfigScWlanNotSupported())
- {
- iPhone->ReqCompleted (aTsyReqHandle, KErrNotSupported);
- }
- else if ( authenticateData.iAUTN == _L8(""))
- {
- // Authenticate if EAP-SIM is being used.
-
- // Find the iRAND value
- index = 0;
- while ( (index < iAuthInfoList.Count()) && (authenticateData.iRAND != iAuthInfoList[index].iRAND))
- {
- index++;
- }
-
- if ( index == iAuthInfoList.Count ())
- {
- // The approriate iRAND value could not be found, so return KErrCorrupt.
- iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
- index++;
- return KErrNone;
- }
- else
- {
- // Return the iRES and KC values that match the iRAND given, and blank everything else
- authenticateData.iAUTS = _L8("");
- authenticateData.iRES = iAuthInfoList[index].iRES;
- authenticateData.iIK = _L8("");
- authenticateData.iCK = _L8("");
- authenticateData.iKc = iAuthInfoList[index].iKc;
-
- iPhone->ReqCompleted (aTsyReqHandle, KErrNone);
- }
- }
- else
- {
- for (index = 0; index < iAuthInfoList.Count (); index++)
- {
- // This is the USIM authorisation.
- if ( authenticateData.iAUTN == iAuthInfoList[index].iAUTN &&authenticateData.iRAND == iAuthInfoList[index].iRAND &&((aAID == NULL) || (*aAID == iAuthInfoList[index].iAID)))
- {
- TInt ret = iAuthInfoList[index].iAuthErr;
- if ( ret != KErrNone)
- {
- // Return the AUTS and blank everything else
- authenticateData.iAUTS = iAuthInfoList[index].iAUTS;
- authenticateData.iRES = _L8("");
- authenticateData.iIK = _L8("");
- authenticateData.iCK = _L8("");
- authenticateData.iKc = _L8("");
- }
- else
- {
- authenticateData.iRES = iAuthInfoList[index].iRES;
- authenticateData.iIK = iAuthInfoList[index].iIK;
- authenticateData.iCK = iAuthInfoList[index].iCK;
- authenticateData.iKc = iAuthInfoList[index].iKc;
- }
-
- iPhone->ReqCompleted (aTsyReqHandle, ret);
- iAuthInfoList.Remove (index);
- iAuthInfoList.Compress ();
- index++;
- return KErrNone;
- }
- iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
- }
- }
- }
- index++;
- return KErrNone;
- }
-
-TInt CSimSmartCardAuth::GetScAuthenticationDataCancel(const TTsyReqHandle aTsyReqHandle)
- {
- LOGPHONE1("CSimSmartCardAuth::GetScAuthenticationDataCancel called");
- iPhone->ReqCompleted(aTsyReqHandle, KErrCancel);
- return KErrNone;
- }
-
-const CTestConfigSection* CSimSmartCardAuth::CfgFile()
- {
- return iPhone->CfgFile();
- }
-
-/**
-Parses the list of SmartCardAuthInfo tags from the config.txt file.
-*/
-void CSimSmartCardAuth::ParseAuthInfoL()
- {
- LOGPHONE1("CSimSmartCardAuth::ParseAuthInfoL called");
-
- CTestConfigItem* item = NULL;
-
- LOGPHONE1("Starting to Parse Smart Card Authentication Info");
- TInt count = CfgFile()->ItemCount(KScAuthInfo);
-
- TInt index;
- for(index = 0; index < count; index++)
- {
- item = const_cast<CTestConfigItem*>(CfgFile()->Item(KScAuthInfo, index));
- if(item == NULL)
- {
- break;
- }
- CleanupStack::PushL(item);
-
- TInt ret = KErrNone, authErr = KErrNone;
- TPtrC8 AUTN, RAND, RES, IK, CK, Kc, AUTS, appId;
- TAuthInfo authInfo;
- TInt dataFrmt;
-
- //Get the data format
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 8, appId);
- if(ret != KErrNone)
- {
- LOGPARSERR("appId",ret,8,&KScAuthInfo);
- _LIT8(emptyAID, "");
- appId.Set(emptyAID);
- }
- else
- {
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 9, dataFrmt);
- if(ret != KErrNone)
- {
- LOGPARSERR("dataFrmt",ret,9,&KScAuthInfo);
- }
- else if (dataFrmt >= EMaxConfigDataFormat)
- {
- LOGPHONE1("WARNING IN CONFIGURATION FILE PARSING - Invalid format for SC Authenticate tag");
- dataFrmt = EConfigDataFormatAscii;
- }
-
- authInfo.iAID.Copy(appId);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iAID);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the AUTN
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, AUTN);
- if(ret != KErrNone)
- {
- LOGPARSERR("AUTN",ret,0,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAUTN.Copy(AUTN);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iAUTN);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the RAND
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, RAND);
- if(ret != KErrNone)
- {
- LOGPARSERR("RAND",ret,1,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iRAND.Copy(RAND);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iRAND);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the RES
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 2, RES);
- if(ret != KErrNone)
- {
- LOGPARSERR("RES",ret,2,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iRES.Copy(RES);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iRES);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the IK
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 3, IK);
- if(ret != KErrNone)
- {
- LOGPARSERR("IK",ret,3,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iIK.Copy(IK);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iIK);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the CK
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 4, CK);
- if(ret != KErrNone)
- {
- LOGPARSERR("CK",ret,4,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iCK.Copy(CK);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iCK);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the CK
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 5, Kc);
- if(ret != KErrNone)
- {
- LOGPARSERR("Kc",ret,5,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iKc.Copy(Kc);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iKc);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get the AUTS
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 6, AUTS);
- if(ret != KErrNone)
- {
- LOGPARSERR("AUTS",ret,6,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAUTS.Copy(AUTS);
-
- switch (dataFrmt)
- {
- case EConfigDataFormatMixedBinaryAndAscii:
- ParseMixedBinaryAsciiDataL(authInfo.iAUTS);
- break;
- //case EConfigDataFormatAscii: // Do nothing
- //default:
- }
- }
-
- //Get authentication error
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 7, authErr);
- if(ret != KErrNone)
- {
- LOGPARSERR("authErr",ret,7,&KScAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAuthErr = authErr;
- }
-
- iAuthInfoList.Append(authInfo);
- CleanupStack::Pop(item);
- } // end FOR Loop
- }
-
-/**
-Parses the list of GBAAuthInfo tags from the config.txt file.
-*/
-void CSimSmartCardAuth::ParseGBAAuthInfoL()
- {
- LOGPHONE1("CSimSmartCardAuth::ParseGBAAuthInfoL called");
-
- CTestConfigItem* item = NULL;
-
- LOGPHONE1("Starting to Parse GBA Authentication Info");
- TInt count = CfgFile()->ItemCount(KGBAAuthInfo);
-
- TInt index;
- for(index = 0; index < count; index++)
- {
- item = const_cast<CTestConfigItem*>(CfgFile()->Item(KGBAAuthInfo, index));
- if(item == NULL)
- {
- break;
- }
- CleanupStack::PushL(item);
-
- TInt ret = KErrNone, authErr = KErrNone;
- TPtrC8 AUTN, RAND, appId, RES, AUTS, NAFID,IMPI, KSExtNaf, BtID, KeyLifeTime ;
- TBool OtherApplnBusy, applnActive;
- TGBAAuthInfo authInfo;
-
-
- //Get the AUTN
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, AUTN);
- if(ret != KErrNone)
- {
- LOGPARSERR("AUTN",ret,0,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAUTN.Copy(AUTN);
- }
-
- //Get the RAND
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, RAND);
- if(ret != KErrNone)
- {
- LOGPARSERR("RAND",ret,1,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iRAND.Copy(RAND);
- }
-
- //Get the APPID
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 2, appId);
- if(ret != KErrNone)
- {
- LOGPARSERR("APPID",ret,2,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAID.Copy(appId);
- }
-
- //Get the RES
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 3, RES);
- if(ret != KErrNone)
- {
- LOGPARSERR("RES",ret,3,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iRES.Copy(RES);
- }
-
- //Get the AUTS
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 4, AUTS);
- if(ret != KErrNone)
- {
- LOGPARSERR("AUTS",ret,4,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAUTS.Copy(AUTS);
- }
-
- //Get the NAFID
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 5, NAFID);
- if(ret != KErrNone)
- {
- LOGPARSERR("NAFID",ret,5,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iNAFID.Copy(NAFID);
- }
-
- //Get the IMPI
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 6, IMPI);
- if(ret != KErrNone)
- {
- LOGPARSERR("IMPI",ret,6,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iIMPI.Copy(IMPI);
- }
-
- //Get the KsExtNaf
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 7, KSExtNaf);
- if(ret != KErrNone)
- {
- LOGPARSERR("KSExtNaf",ret,7,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iKsExtNaf.Copy(KSExtNaf);
- }
-
- //Get the BtID
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 8, BtID);
- if(ret != KErrNone)
- {
- LOGPARSERR("BtID",ret,8,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iBtid.Copy(BtID);
- }
-
- //Get the KeyLifeTime
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 9, KeyLifeTime);
- if(ret != KErrNone)
- {
- LOGPARSERR("KeyLifeTime",ret,9,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iKeyLifeTime.Copy(KeyLifeTime);
- }
-
- //Get the OtherApplnBusy
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 10, OtherApplnBusy);
- if(ret != KErrNone)
- {
- LOGPARSERR("OtherApplnBusy",ret,10,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iOtherApplnBusy = OtherApplnBusy;
- }
-
- //Get the CurrentApplnActive
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 11, applnActive);
- if(ret != KErrNone)
- {
- LOGPARSERR("applnActive",ret,11,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iApplnActive = applnActive;
- }
-
- //Get authentication error
- ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 12, authErr);
- if(ret != KErrNone)
- {
- LOGPARSERR("authErr",ret,12,&KGBAAuthInfo);
- continue;
- }
- else
- {
- authInfo.iAuthErr = authErr;
- }
-
- iGBAAuthInfoList->AppendL(authInfo);
- CleanupStack::Pop(item);
- } // end FOR Loop
- }
-
-/**
- Parses the list of MBMSAuthInfo tags from the config.txt file.
-*/
-void CSimSmartCardAuth::ParseMBMSAuthInfoL()
- {
- LOGPHONE1 ("CSimSmartCardAuth::ParseMBMSAuthInfoL called");
-
- CTestConfigItem* item = NULL;
-
- LOGPHONE1 ("Starting to Parse MBMS Authentication Info");
-
- TInt count = CfgFile()->ItemCount (KMBMSInfo);
- TMBMSInfo tMbmsInfo;
-
- for (TInt index = 0; index < count; index++)
- {
- item = const_cast<CTestConfigItem*>(CfgFile()->Item(KMBMSInfo, index));
- if ( item == NULL)
- {
- break;
- }
- CleanupStack::PushL (item);
-
- TInt ret = KErrNone;
- TPtrC8 iMikey, oMikey, mtk, saltKey, keyDmn, MskIdgrp;
- TPtrC8 MukId, MukIdi, MukIdr, MukTimeStamp, appId, KSIntNaf;
- TBool applnActive;
- TInt authErr;
-
- //Get the input Mikey
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 0, iMikey);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("iMikey", ret, 0, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iInputMikey.Copy (iMikey);
- }
-
- //Get the output Mikey
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 1, oMikey);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("oMikey", ret, 1, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iOutputMikey.Copy (oMikey);
- }
-
- //Get the MTK
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 2, mtk);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("MTK", ret, 2, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iMtk.Copy (mtk);
- }
-
- //Get the SaltKey
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 3,
- saltKey);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("saltKey", ret, 3, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iSaltkey.Copy (saltKey);
- }
-
- //Get the KeyDomain
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 4, keyDmn);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("keyDmn ", ret, 4, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iKeyDmn.Copy (keyDmn);
- }
-
- //Get the MskIdgrp
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 5,
- MskIdgrp);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("MskIdgrp", ret, 5, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iMskIdGrp.Copy (MskIdgrp);
- }
-
- //Get the iMukIdTlv
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 6, MukId);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("MukId ", ret, 6, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iMukIdTlv.Copy (MukId);
- }
-
- //Get the MukIdi
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 7, MukIdi);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("MukIdi", ret, 7, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iMukIdi.Copy (MukIdi);
- }
-
- //Get the MukIdr
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 8, MukIdr);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("MukIdr ", ret, 8, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iMukIdr.Copy (MukIdr);
- }
-
- //Get the MukTimeStamp
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 9,MukTimeStamp);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("iMikey", ret, 9, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iMukTimestamp.Copy (MukTimeStamp);
- }
-
- //Get the APPID
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 10, appId);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("APPID", ret, 10, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iAID.Copy (appId);
- }
-
- //Get the KsIntNaf
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 11,KSIntNaf);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("KSIntNaf", ret, 11, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iKsIntNaf.Copy (KSIntNaf);
- }
-
- //Get the CurrentApplnActive
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 12,applnActive);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("applnActive", ret, 12, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iApplnActive = applnActive;
- }
-
- //Get authentication error
- ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 13,authErr);
- if ( ret != KErrNone)
- {
- LOGPARSERR ("authErr", ret, 13, &KMBMSInfo);
- continue;
- }
- else
- {
- tMbmsInfo.iAuthErr = authErr;
- }
-
- iMBMSInfoList->AppendL(tMbmsInfo);
- CleanupStack::Pop (item);
- }
- }
-
-
-
-
+// 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
+*/
+
+#include <testconfigfileparser.h>
+#include "CSimPhone.h"
+#include "Simlog.h"
+#include "csimsmartcardauth.h"
+#include "utils.h"
+
+CSimSmartCardAuth* CSimSmartCardAuth::NewL(CSimPhone *aPhone)
+ {
+ CSimSmartCardAuth* obj = new(ELeave) CSimSmartCardAuth(aPhone);
+ CleanupStack::PushL(obj);
+ obj->ConstructL();
+ CleanupStack::Pop(obj);
+ return obj;
+ }
+
+CSimSmartCardAuth::CSimSmartCardAuth(CSimPhone *aPhone)
+: iPhone(aPhone)
+ {
+ iGBAAuthInfoList = new (ELeave) CArrayFixFlat<TGBAAuthInfo> (1);
+ iMBMSInfoList = new (ELeave) CArrayFixFlat<TMBMSInfo> (1);
+ }
+
+void CSimSmartCardAuth::ConstructL()
+ {
+ ParseAuthInfoL();
+ ParseGBAAuthInfoL();
+ ParseMBMSAuthInfoL();
+ LOGPHONE1("CSimSmartCardAuth created");
+ }
+
+CSimSmartCardAuth::~CSimSmartCardAuth()
+ {
+ iAuthInfoList.Close();
+ if(iGBAAuthInfoList)
+ {
+ iGBAAuthInfoList->Delete(0,iGBAAuthInfoList->Count());
+ delete iGBAAuthInfoList;
+ }
+ if(iMBMSInfoList)
+ {
+ iMBMSInfoList->Delete(0,iMBMSInfoList->Count());
+ delete iMBMSInfoList;
+ }
+ LOGPHONE1("CSimSmartCardAuth destroyed");
+ }
+
+TInt CSimSmartCardAuth::GetScAuthenticationData(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg1, const RMobilePhone::TAID* aAID)
+ {
+
+ LOGPHONE1("CSimSmartCardAuth::GetScAuthenticationData called");
+
+ RMobilePhone::TSmartCardAuthenticateDataV6Pckg
+ * authenticateDataPckgd =reinterpret_cast<RMobilePhone::TSmartCardAuthenticateDataV6Pckg*>(aPckg1);
+ RMobilePhone::TSmartCardAuthenticateDataV6& authenticateData=(*authenticateDataPckgd) ();
+
+ // Check that the data structure is supported by the simulated TSY version
+ TInt err = iPhone->CheckSimTsyVersion (authenticateData);
+ if ( err != KErrNone)
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, err);
+ return KErrNone;
+ }
+
+
+ if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileGbaBootstrapAuthDataV8)
+ {
+ RMobilePhone::TGbaBootstrapAuthDataV8Pckg
+ * tGbaBootstrapAuthDataV8Pckgd =reinterpret_cast<RMobilePhone::TGbaBootstrapAuthDataV8Pckg*> (aPckg1);
+ RMobilePhone::TGbaBootstrapAuthDataV8 tGbaBootstrapAuthDataV8 = (*tGbaBootstrapAuthDataV8Pckgd) ();
+
+ // This is the USIM authorisation.
+ if ( ((aAID == NULL) || (*aAID == iGBAAuthInfoList->At(index).iAID))
+ &&tGbaBootstrapAuthDataV8.iAUTN == iGBAAuthInfoList->At(index).iAUTN
+ &&tGbaBootstrapAuthDataV8.iRAND == iGBAAuthInfoList->At(index).iRAND)
+ {
+ TInt ret = iGBAAuthInfoList->At(index).iAuthErr;
+ if ( ret != KErrNone)
+ {
+ // Return the AUTS and blank everything else
+ tGbaBootstrapAuthDataV8.iAUTS = iGBAAuthInfoList->At(index).iAUTS;
+ tGbaBootstrapAuthDataV8.iRES = _L8("");
+ tGbaBootstrapAuthDataV8.iIK = _L8("");
+ tGbaBootstrapAuthDataV8.iCK = _L8("");
+ if ( ret == KErrMMEtelScApplicationNotActive)
+ {
+ if ( !(iGBAAuthInfoList->At(index).iApplnActive == EFalse))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
+ return KErrNone;
+ }
+ }
+ }
+ else
+ {
+ tGbaBootstrapAuthDataV8.iRES = iGBAAuthInfoList->At(index).iRES;
+ tGbaBootstrapAuthDataV8.iAUTS = _L8("");
+ tGbaBootstrapAuthDataV8.iIK = _L8("");
+ tGbaBootstrapAuthDataV8.iCK = _L8("");
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ //iGBAAuthInfoList->Delete(index);
+ return KErrNone;
+ }
+ iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
+ return KErrNone;
+ }
+ else if (authenticateData.ExtensionId ()== RMobilePhone::KETelMobileGbaNafAuthDataV8)
+ {
+ RMobilePhone::TGbaNafAuthDataV8Pckg *gbaNafAuthPckg =
+ reinterpret_cast<RMobilePhone::TGbaNafAuthDataV8Pckg*>(aPckg1);
+
+ RMobilePhone::TGbaNafAuthDataV8 &gbaNafAuthData= (*gbaNafAuthPckg)();
+ // This is the USIM authorisation.
+ if ( ((aAID == NULL) || (*aAID == iGBAAuthInfoList->At(index).iAID))
+ &&gbaNafAuthData.iImpi == iGBAAuthInfoList->At(index).iIMPI
+ &&gbaNafAuthData.iNafId == iGBAAuthInfoList->At(index).iNAFID)
+ {
+ TInt ret = iGBAAuthInfoList->At(index).iAuthErr;
+ if ( ret != KErrNone)
+ {
+ // return the Ks_Ext_NAF as NULL
+ gbaNafAuthData.iKsExtNaf = _L8("");
+ if ( ret == KErrMMEtelAuthKeyNotFound)
+ {
+ if ( !(iGBAAuthInfoList->At(index).iRAND == _L8("INV_RAND")))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
+ return KErrNone;
+ }
+ }
+ if ( ret == KErrMMEtelScApplicationNotActive)
+ {
+ if ( !(iGBAAuthInfoList->At(index).iApplnActive == EFalse))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
+ return KErrNone;
+ }
+ }
+ }
+ else
+ {
+ gbaNafAuthData.iKsExtNaf = iGBAAuthInfoList->At(index).iKsExtNaf;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ return KErrNone;
+ }
+ iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
+ return KErrNone;
+ }
+ else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMskUpdateDataV8)
+ {
+ RMobilePhone::TMbmsMskUpdateDataV8Pckg
+ *tTMbmsMskUpdateDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMskUpdateDataV8Pckg*> (aPckg1);
+
+ RMobilePhone::TMbmsMskUpdateDataV8 &tTMbmsMskUpdateDataV8= (*tTMbmsMskUpdateDataV8Pckg) ();
+
+ if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
+ && tTMbmsMskUpdateDataV8.iInputMikey == iMBMSInfoList->At(index).iInputMikey)
+ {
+ TInt ret = iMBMSInfoList->At(index).iAuthErr;
+ if ( ret != KErrNone)
+ {
+ // return the Ks_Ext_NAF as NULL
+ tTMbmsMskUpdateDataV8.iOutputMikey = _L8 ("");
+ if ( ret == KErrMMEtelAuthKeyNotFound)
+ {
+ /* Checking for the hardcoded (existing) KsIntNAF with the one in config file
+ * If different, it means that the KsIntNaf has been overwritten
+ */
+ if ((iMBMSInfoList->At(index).iKsIntNaf == _L8("CORRECT_KS_INT")))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ if(!(iMBMSInfoList->At(index).iMukIdTlv == _L8("INVALID_MUKID")))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ }
+ if ( ret == KErrMMEtelScApplicationNotActive)
+ {
+ if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ }
+ }
+ else
+ {
+ tTMbmsMskUpdateDataV8.iOutputMikey = iMBMSInfoList->At(index).iOutputMikey;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ index++;
+ return KErrNone;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
+ index++;
+ return KErrNone;
+ }
+ else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMtkGenerateDataV8)
+ {
+ RMobilePhone::TMbmsMtkGenerateDataV8Pckg
+ *tTMbmsMtkGenerateDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMtkGenerateDataV8Pckg*> (aPckg1);
+
+ RMobilePhone::TMbmsMtkGenerateDataV8 &tTMbmsMtkGenerateDataV8= (*tTMbmsMtkGenerateDataV8Pckg) ();
+
+ if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
+ && tTMbmsMtkGenerateDataV8.iMikey == iMBMSInfoList->At(index).iInputMikey)
+ {
+ TInt ret = iMBMSInfoList->At(index).iAuthErr;
+ if ( ret != KErrNone)
+ {
+ // return the Ks_Ext_NAF as NULL
+ tTMbmsMtkGenerateDataV8.iMtk = _L8 ("");
+ tTMbmsMtkGenerateDataV8.iSaltKey = _L8 ("");
+ if ( ret == KErrMMEtelScApplicationNotActive)
+ {
+ if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ }
+ }
+ else
+ {
+ tTMbmsMtkGenerateDataV8.iMtk = iMBMSInfoList->At(index).iMtk;
+ tTMbmsMtkGenerateDataV8.iSaltKey = iMBMSInfoList->At(index).iSaltkey;
+ }
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ index++;
+ return KErrNone;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
+ index++;
+ return KErrNone;
+ }
+ else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMskDeleteDataV8)
+ {
+ RMobilePhone::TMbmsMskDeleteDataV8Pckg
+ *tTMbmsMskDeleteDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMskDeleteDataV8Pckg*> (aPckg1);
+
+ RMobilePhone::TMbmsMskDeleteDataV8 &tTMbmsMskDeleteDataV8= (*tTMbmsMskDeleteDataV8Pckg) ();
+
+ if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
+ && tTMbmsMskDeleteDataV8.iMskIdKeyGroup == iMBMSInfoList->At(index).iMskIdGrp
+ && tTMbmsMskDeleteDataV8.iKeyDomainId == iMBMSInfoList->At(index).iKeyDmn)
+ {
+ TInt ret = iMBMSInfoList->At(index).iAuthErr;
+ if ( ret != KErrNone)
+ {
+ if ( ret == KErrMMEtelScApplicationNotActive)
+ {
+ if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ }
+ }
+ else
+ {
+ // MSK IDs are successfully deleted from the EFs.
+ }
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ index++;
+ return KErrNone;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
+ index++;
+ return KErrNone;
+ }
+ else if ( authenticateData.ExtensionId ()== RMobilePhone::KETelMobileMbmsMukDeleteDataV8)
+ {
+ RMobilePhone::TMbmsMukDeleteDataV8Pckg
+ *tTMbmsMukDeleteDataV8Pckg =reinterpret_cast<RMobilePhone::TMbmsMukDeleteDataV8Pckg*> (aPckg1);
+
+ RMobilePhone::TMbmsMukDeleteDataV8 &tTMbmsMukDeleteDataV8= (*tTMbmsMukDeleteDataV8Pckg) ();
+
+ if ( ((aAID == NULL) || (*aAID == iMBMSInfoList->At(index).iAID))
+ && tTMbmsMukDeleteDataV8.iMukIdTlv == iMBMSInfoList->At(index).iMukIdTlv)
+ {
+ TInt ret = iMBMSInfoList->At(index).iAuthErr;
+ if ( ret != KErrNone)
+ {
+ if ( ret == KErrMMEtelScApplicationNotActive)
+ {
+ if ( !(iMBMSInfoList->At(index).iApplnActive == EFalse))
+ {
+ iPhone->ReqCompleted (aTsyReqHandle,KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ }
+ }
+ else
+ {
+ // MUK IDs are successfully deleted from the EFs.
+ }
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ index++;
+ return KErrNone;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, KErrArgument);
+ index++;
+ return KErrNone;
+ }
+ else
+ {
+ if(authenticateData.iCK==KConfigScWlan())
+ {
+ if(*aAID==KWlanAid())
+ {
+ if(authenticateData.iAUTN == KConfigScWlanAuthAUTN() && authenticateData.iRAND == KConfigScWlanAuthRAND())
+ {
+ authenticateData.iRES=KConfigScWlanAuthRES();
+ authenticateData.iIK=KConfigScWlanAuthIK();
+ authenticateData.iCK=KConfigScWlanAuthCK();
+ iPhone->ReqCompleted (aTsyReqHandle, KErrNone);
+ }
+ else if(authenticateData.iAUTN == KConfigScWlanAuthAUTN())
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrMMEtelSqnVerificationFailed);
+ }
+ else
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrMMEtelMacVerificationFailed);
+ }
+ }
+ else
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrMMEtelScApplicationNotActive);
+ }
+ }
+ else if(authenticateData.iCK==KConfigScWlanNotSupported())
+ {
+ iPhone->ReqCompleted (aTsyReqHandle, KErrNotSupported);
+ }
+ else if ( authenticateData.iAUTN == _L8(""))
+ {
+ // Authenticate if EAP-SIM is being used.
+
+ // Find the iRAND value
+ index = 0;
+ while ( (index < iAuthInfoList.Count()) && (authenticateData.iRAND != iAuthInfoList[index].iRAND))
+ {
+ index++;
+ }
+
+ if ( index == iAuthInfoList.Count ())
+ {
+ // The approriate iRAND value could not be found, so return KErrCorrupt.
+ iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
+ index++;
+ return KErrNone;
+ }
+ else
+ {
+ // Return the iRES and KC values that match the iRAND given, and blank everything else
+ authenticateData.iAUTS = _L8("");
+ authenticateData.iRES = iAuthInfoList[index].iRES;
+ authenticateData.iIK = _L8("");
+ authenticateData.iCK = _L8("");
+ authenticateData.iKc = iAuthInfoList[index].iKc;
+
+ iPhone->ReqCompleted (aTsyReqHandle, KErrNone);
+ }
+ }
+ else
+ {
+ for (index = 0; index < iAuthInfoList.Count (); index++)
+ {
+ // This is the USIM authorisation.
+ if ( authenticateData.iAUTN == iAuthInfoList[index].iAUTN &&authenticateData.iRAND == iAuthInfoList[index].iRAND &&((aAID == NULL) || (*aAID == iAuthInfoList[index].iAID)))
+ {
+ TInt ret = iAuthInfoList[index].iAuthErr;
+ if ( ret != KErrNone)
+ {
+ // Return the AUTS and blank everything else
+ authenticateData.iAUTS = iAuthInfoList[index].iAUTS;
+ authenticateData.iRES = _L8("");
+ authenticateData.iIK = _L8("");
+ authenticateData.iCK = _L8("");
+ authenticateData.iKc = _L8("");
+ }
+ else
+ {
+ authenticateData.iRES = iAuthInfoList[index].iRES;
+ authenticateData.iIK = iAuthInfoList[index].iIK;
+ authenticateData.iCK = iAuthInfoList[index].iCK;
+ authenticateData.iKc = iAuthInfoList[index].iKc;
+ }
+
+ iPhone->ReqCompleted (aTsyReqHandle, ret);
+ iAuthInfoList.Remove (index);
+ iAuthInfoList.Compress ();
+ index++;
+ return KErrNone;
+ }
+ iPhone->ReqCompleted (aTsyReqHandle, KErrCorrupt);
+ }
+ }
+ }
+ index++;
+ return KErrNone;
+ }
+
+TInt CSimSmartCardAuth::GetScAuthenticationDataCancel(const TTsyReqHandle aTsyReqHandle)
+ {
+ LOGPHONE1("CSimSmartCardAuth::GetScAuthenticationDataCancel called");
+ iPhone->ReqCompleted(aTsyReqHandle, KErrCancel);
+ return KErrNone;
+ }
+
+const CTestConfigSection* CSimSmartCardAuth::CfgFile()
+ {
+ return iPhone->CfgFile();
+ }
+
+/**
+Parses the list of SmartCardAuthInfo tags from the config.txt file.
+*/
+void CSimSmartCardAuth::ParseAuthInfoL()
+ {
+ LOGPHONE1("CSimSmartCardAuth::ParseAuthInfoL called");
+
+ CTestConfigItem* item = NULL;
+
+ LOGPHONE1("Starting to Parse Smart Card Authentication Info");
+ TInt count = CfgFile()->ItemCount(KScAuthInfo);
+
+ TInt index;
+ for(index = 0; index < count; index++)
+ {
+ item = const_cast<CTestConfigItem*>(CfgFile()->Item(KScAuthInfo, index));
+ if(item == NULL)
+ {
+ break;
+ }
+ CleanupStack::PushL(item);
+
+ TInt ret = KErrNone, authErr = KErrNone;
+ TPtrC8 AUTN, RAND, RES, IK, CK, Kc, AUTS, appId;
+ TAuthInfo authInfo;
+ TInt dataFrmt;
+
+ //Get the data format
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 8, appId);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("appId",ret,8,&KScAuthInfo);
+ _LIT8(emptyAID, "");
+ appId.Set(emptyAID);
+ }
+ else
+ {
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 9, dataFrmt);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("dataFrmt",ret,9,&KScAuthInfo);
+ }
+ else if (dataFrmt >= EMaxConfigDataFormat)
+ {
+ LOGPHONE1("WARNING IN CONFIGURATION FILE PARSING - Invalid format for SC Authenticate tag");
+ dataFrmt = EConfigDataFormatAscii;
+ }
+
+ authInfo.iAID.Copy(appId);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iAID);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the AUTN
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, AUTN);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("AUTN",ret,0,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAUTN.Copy(AUTN);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iAUTN);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the RAND
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, RAND);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("RAND",ret,1,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iRAND.Copy(RAND);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iRAND);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the RES
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 2, RES);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("RES",ret,2,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iRES.Copy(RES);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iRES);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the IK
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 3, IK);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("IK",ret,3,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iIK.Copy(IK);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iIK);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the CK
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 4, CK);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("CK",ret,4,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iCK.Copy(CK);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iCK);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the CK
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 5, Kc);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("Kc",ret,5,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iKc.Copy(Kc);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iKc);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get the AUTS
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 6, AUTS);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("AUTS",ret,6,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAUTS.Copy(AUTS);
+
+ switch (dataFrmt)
+ {
+ case EConfigDataFormatMixedBinaryAndAscii:
+ ParseMixedBinaryAsciiDataL(authInfo.iAUTS);
+ break;
+ //case EConfigDataFormatAscii: // Do nothing
+ //default:
+ }
+ }
+
+ //Get authentication error
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 7, authErr);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("authErr",ret,7,&KScAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAuthErr = authErr;
+ }
+
+ iAuthInfoList.Append(authInfo);
+ CleanupStack::Pop(item);
+ } // end FOR Loop
+ }
+
+/**
+Parses the list of GBAAuthInfo tags from the config.txt file.
+*/
+void CSimSmartCardAuth::ParseGBAAuthInfoL()
+ {
+ LOGPHONE1("CSimSmartCardAuth::ParseGBAAuthInfoL called");
+
+ CTestConfigItem* item = NULL;
+
+ LOGPHONE1("Starting to Parse GBA Authentication Info");
+ TInt count = CfgFile()->ItemCount(KGBAAuthInfo);
+
+ TInt index;
+ for(index = 0; index < count; index++)
+ {
+ item = const_cast<CTestConfigItem*>(CfgFile()->Item(KGBAAuthInfo, index));
+ if(item == NULL)
+ {
+ break;
+ }
+ CleanupStack::PushL(item);
+
+ TInt ret = KErrNone, authErr = KErrNone;
+ TPtrC8 AUTN, RAND, appId, RES, AUTS, NAFID,IMPI, KSExtNaf, BtID, KeyLifeTime ;
+ TBool OtherApplnBusy, applnActive;
+ TGBAAuthInfo authInfo;
+
+
+ //Get the AUTN
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, AUTN);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("AUTN",ret,0,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAUTN.Copy(AUTN);
+ }
+
+ //Get the RAND
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, RAND);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("RAND",ret,1,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iRAND.Copy(RAND);
+ }
+
+ //Get the APPID
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 2, appId);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("APPID",ret,2,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAID.Copy(appId);
+ }
+
+ //Get the RES
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 3, RES);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("RES",ret,3,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iRES.Copy(RES);
+ }
+
+ //Get the AUTS
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 4, AUTS);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("AUTS",ret,4,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAUTS.Copy(AUTS);
+ }
+
+ //Get the NAFID
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 5, NAFID);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("NAFID",ret,5,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iNAFID.Copy(NAFID);
+ }
+
+ //Get the IMPI
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 6, IMPI);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("IMPI",ret,6,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iIMPI.Copy(IMPI);
+ }
+
+ //Get the KsExtNaf
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 7, KSExtNaf);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("KSExtNaf",ret,7,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iKsExtNaf.Copy(KSExtNaf);
+ }
+
+ //Get the BtID
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 8, BtID);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("BtID",ret,8,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iBtid.Copy(BtID);
+ }
+
+ //Get the KeyLifeTime
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 9, KeyLifeTime);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("KeyLifeTime",ret,9,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iKeyLifeTime.Copy(KeyLifeTime);
+ }
+
+ //Get the OtherApplnBusy
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 10, OtherApplnBusy);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("OtherApplnBusy",ret,10,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iOtherApplnBusy = OtherApplnBusy;
+ }
+
+ //Get the CurrentApplnActive
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 11, applnActive);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("applnActive",ret,11,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iApplnActive = applnActive;
+ }
+
+ //Get authentication error
+ ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 12, authErr);
+ if(ret != KErrNone)
+ {
+ LOGPARSERR("authErr",ret,12,&KGBAAuthInfo);
+ continue;
+ }
+ else
+ {
+ authInfo.iAuthErr = authErr;
+ }
+
+ iGBAAuthInfoList->AppendL(authInfo);
+ CleanupStack::Pop(item);
+ } // end FOR Loop
+ }
+
+/**
+ Parses the list of MBMSAuthInfo tags from the config.txt file.
+*/
+void CSimSmartCardAuth::ParseMBMSAuthInfoL()
+ {
+ LOGPHONE1 ("CSimSmartCardAuth::ParseMBMSAuthInfoL called");
+
+ CTestConfigItem* item = NULL;
+
+ LOGPHONE1 ("Starting to Parse MBMS Authentication Info");
+
+ TInt count = CfgFile()->ItemCount (KMBMSInfo);
+ TMBMSInfo tMbmsInfo;
+
+ for (TInt index = 0; index < count; index++)
+ {
+ item = const_cast<CTestConfigItem*>(CfgFile()->Item(KMBMSInfo, index));
+ if ( item == NULL)
+ {
+ break;
+ }
+ CleanupStack::PushL (item);
+
+ TInt ret = KErrNone;
+ TPtrC8 iMikey, oMikey, mtk, saltKey, keyDmn, MskIdgrp;
+ TPtrC8 MukId, MukIdi, MukIdr, MukTimeStamp, appId, KSIntNaf;
+ TBool applnActive;
+ TInt authErr;
+
+ //Get the input Mikey
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 0, iMikey);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("iMikey", ret, 0, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iInputMikey.Copy (iMikey);
+ }
+
+ //Get the output Mikey
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 1, oMikey);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("oMikey", ret, 1, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iOutputMikey.Copy (oMikey);
+ }
+
+ //Get the MTK
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 2, mtk);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("MTK", ret, 2, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iMtk.Copy (mtk);
+ }
+
+ //Get the SaltKey
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 3,
+ saltKey);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("saltKey", ret, 3, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iSaltkey.Copy (saltKey);
+ }
+
+ //Get the KeyDomain
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 4, keyDmn);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("keyDmn ", ret, 4, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iKeyDmn.Copy (keyDmn);
+ }
+
+ //Get the MskIdgrp
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 5,
+ MskIdgrp);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("MskIdgrp", ret, 5, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iMskIdGrp.Copy (MskIdgrp);
+ }
+
+ //Get the iMukIdTlv
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 6, MukId);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("MukId ", ret, 6, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iMukIdTlv.Copy (MukId);
+ }
+
+ //Get the MukIdi
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 7, MukIdi);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("MukIdi", ret, 7, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iMukIdi.Copy (MukIdi);
+ }
+
+ //Get the MukIdr
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 8, MukIdr);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("MukIdr ", ret, 8, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iMukIdr.Copy (MukIdr);
+ }
+
+ //Get the MukTimeStamp
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 9,MukTimeStamp);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("iMikey", ret, 9, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iMukTimestamp.Copy (MukTimeStamp);
+ }
+
+ //Get the APPID
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 10, appId);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("APPID", ret, 10, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iAID.Copy (appId);
+ }
+
+ //Get the KsIntNaf
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 11,KSIntNaf);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("KSIntNaf", ret, 11, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iKsIntNaf.Copy (KSIntNaf);
+ }
+
+ //Get the CurrentApplnActive
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 12,applnActive);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("applnActive", ret, 12, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iApplnActive = applnActive;
+ }
+
+ //Get authentication error
+ ret = CTestConfig::GetElement (item->Value (), KStdDelimiter, 13,authErr);
+ if ( ret != KErrNone)
+ {
+ LOGPARSERR ("authErr", ret, 13, &KMBMSInfo);
+ continue;
+ }
+ else
+ {
+ tMbmsInfo.iAuthErr = authErr;
+ }
+
+ iMBMSInfoList->AppendL(tMbmsInfo);
+ CleanupStack::Pop (item);
+ }
+ }
+
+
+
+