diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/simtsy/src/CSimUsimR6.cpp --- a/telephonyserverplugins/simtsy/src/CSimUsimR6.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/simtsy/src/CSimUsimR6.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,2473 +1,2473 @@ -// Copyright (c) 2007-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: -// This file contains the implementation for the Simulator USIM R6 class 'CSimUsimR6' -// -// - -/** - @file -*/ - -#include -#include -#include -#include -#include "CSimPhone.h" -#include "Simlog.h" -#include "CSimPubSubChange.h" -#include "CSimTsyMode.h" -#include -#include "CSimPubSub.h" -#include "SimTsy.h" -#include "simtsyglobalproperties.h" -#include "CSimUsimR6.h" -#include - -const TInt KUsimGranularity=2; // < Granularity for USIM list array -const TInt KUsimRel6DurationTimeoutDefault=1; -const TInt KUsimRel6DurationTimeoutDefault1=2; -const TInt KUsimRel6DurationTimeoutDefault2=3; - -CSimUsimR6* CSimUsimR6::NewL(CSimPhone* aPhone) -/** - * Standard two-phase constructor. - * @param aPhone The parent phone object. - * @return CSimUsimR6 The new network status class. - */ - { - CSimUsimR6* self=new(ELeave) CSimUsimR6(aPhone); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -CSimUsimR6::CSimUsimR6(CSimPhone* aPhone) -: iPhone(aPhone) -/** -* Trivial first phase construction. -* @param aPhone The parent phone object. -*/ - { - iMailBoxNumberChangePending = EFalse; - iIccMessageWaitingPending = EFalse; - iMessageWaitingPending = EFalse; - iMailBoxNumberChangePendingV8 = EFalse; - iIccMessageWaitingPendingV8 = EFalse; - iNotifyWlanDataChangePending=EFalse; - iNotifyPreferredWlanSIDListChangePending= EFalse; - } - -void CSimUsimR6::ConstructL() -/** - * Second phase construction. Create instances of the necessary heap-based objects and read the necessary Release6 information - * from the configuration file. The config file informations simulates the information given by Network - * - * - */ - { - LOGMISC1("CSimUsimR6: Entered ConstructL()"); - iVoiceMailIds=new(ELeave) CArrayFixFlat(KUsimGranularity); - iMessageWaiting=new(ELeave) CArrayFixFlat(KUsimGranularity); - - iWlanData=new(ELeave) CArrayFixFlat(KUsimGranularity); - iWlanSid=new(ELeave) CArrayFixFlat(KUsimGranularity); - iPreferredNetworks=new(ELeave) CArrayFixFlat(KUsimGranularity); - - iGBAAuthInfoList =new(ELeave) CArrayFixFlat(KUsimGranularity); - iMBMSInfoList = new(ELeave) CArrayFixFlat(KUsimGranularity); - - iGbaNafList = CMobilePhoneGbaNafIdList::NewL(); - iMbmsMskList = CMobilePhoneMbmsMskIdList::NewL(); - - iTimer = CSimTimer::NewL(iPhone); - iWlanTimer = CSimTimer::NewL(iPhone); - iNotifyAuthTimer = CSimTimer::NewL(iPhone); - - iAuthListInfo = new(ELeave)CArrayPtrFlat(1); - iGetWlanSIDsData = new(ELeave) CArrayPtrFlat(1); - iGetPreferredNetworks = new(ELeave) CArrayPtrFlat(1); - - iCurrentNotifyMailboxIndex=0; - iCurrentIccMessageWaitingIndex=0; - iCurrentMessageWaitingIndex=0; - iGetIccMsgIdCurrentIndex=0; - iSetIccMsgIdCurrentIndex=0; - iNotifyWlanDataChangeIndex=0; - iNotifyPreferredWlanSIDListChangeIndex=0; - iNotifyPreferredNetworksChangeIndex=0; - iMailBoxIndex=0; - iIndex=0; - - TInt count; - count=CfgFile()->ItemCount(KUsimMailBoxIdInfo); - CTestConfigItem* item=NULL; - TInt ret=KErrNone; - - TInt i; - for(i=0;i(CfgFile()->Item(KUsimMailBoxIdInfo,i)); - if(!item) - { - break; - } - TInt voice,data,fax,other,video; - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,voice); - if(ret!=KErrNone) - { - LOGPARSERR("voice",ret,0,&KUsimMailBoxIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,data); - if(ret!=KErrNone) - { - LOGPARSERR("data",ret,1,&KUsimMailBoxIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,fax); - if(ret!=KErrNone) - { - LOGPARSERR("fax",ret,2,&KUsimMailBoxIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,other); - if(ret!=KErrNone) - { - LOGPARSERR("other",ret,3,&KUsimMailBoxIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,video); - if(ret!=KErrNone) - { - LOGPARSERR("video",ret,4,&KUsimMailBoxIdInfo); - continue; - } - RMobilePhone::TMobilePhoneVoicemailIdsV8 mailboxIdInfo; - mailboxIdInfo.iVoice=voice; - mailboxIdInfo.iData=data; - mailboxIdInfo.iFax=fax; - mailboxIdInfo.iOther=other; - mailboxIdInfo.iVideo=video; - iVoiceMailIds->AppendL(mailboxIdInfo); - } - count=CfgFile()->ItemCount(KUsimMessageWaitingIdInfo); - item=NULL; - for(i=0;i(CfgFile()->Item(KUsimMessageWaitingIdInfo,i)); - if(!item) - { - break; - } - TInt displayStatus,voiceMsgs,auxVoiceMsgs,dataMsgs,faxMsgs,emailMsgs,otherMsgs,videoMsgs; - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,displayStatus); - if(ret!=KErrNone) - { - LOGPARSERR("displayStatus",ret,0,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,voiceMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("voiceMsgs",ret,1,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,auxVoiceMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("auxVoiceMsgs",ret,2,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,dataMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("dataMsgs",ret,3,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,faxMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("faxMsgs",ret,4,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,emailMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("emailMsgs",ret,5,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6,otherMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("otherMsgs",ret,6,&KUsimMessageWaitingIdInfo); - continue; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7,videoMsgs); - if(ret!=KErrNone) - { - LOGPARSERR("longName",ret,7,&KUsimMessageWaitingIdInfo); - continue; - } - RMobilePhone::TMobilePhoneMessageWaitingV8 messageWaiting; - messageWaiting.iDisplayStatus = RMobilePhone::TMobilePhoneIndicatorDisplay(displayStatus); - messageWaiting.iVoiceMsgs = voiceMsgs; - messageWaiting.iAuxVoiceMsgs = auxVoiceMsgs; - messageWaiting.iDataMsgs = dataMsgs; - messageWaiting.iFaxMsgs = faxMsgs; - messageWaiting.iEmailMsgs = emailMsgs; - messageWaiting.iOtherMsgs = otherMsgs; - messageWaiting.iVideoMsgs = videoMsgs; - iMessageWaiting->AppendL(messageWaiting); - } - count=CfgFile()->ItemCount(KUsimWlanDataInfo); - item=NULL; - TUint16 digit=0; - RMobilePhone::TUsimWlanDataV8 wlanData; - for(i=0;i(CfgFile()->Item(KUsimWlanDataInfo,i)); - if(!item) - { - break; - } - TPtrC8 FieldsUsed,Pseudonym,ReauthenticationId,MasterKey,Counter; - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,FieldsUsed); - if(ret!=KErrNone) - { - LOGPARSERR("Fields Used",ret,0,&KUsimWlanDataInfo); - continue; - } - else - { - if(AsciiToNum(FieldsUsed, digit)==KErrNone) - { - wlanData.iFieldsUsed=digit; - } - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,Pseudonym); - if(ret!=KErrNone) - { - LOGPARSERR("Pseudonym",ret,1,&KUsimWlanDataInfo); - continue; - } - else - { - wlanData.iPseudonym.Copy(Pseudonym); - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,ReauthenticationId); - if(ret!=KErrNone) - { - LOGPARSERR("ReauthenticationId",ret,2,&KUsimWlanDataInfo); - continue; - } - else - { - wlanData.iReauthenticationId.Copy(ReauthenticationId); - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,MasterKey); - if(ret!=KErrNone) - { - LOGPARSERR("MasterKey",ret,3,&KUsimWlanDataInfo); - continue; - } - else - { - wlanData.iMasterKey.Copy(MasterKey); - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,Counter); - if(ret!=KErrNone) - { - LOGPARSERR("Counter",ret,4,&KUsimWlanDataInfo); - continue; - } - else - { - wlanData.iCounter.Copy(Counter); - } - iWlanData->AppendL(wlanData); - } - count=CfgFile()->ItemCount(KUsimWlanSidInfo); - item=NULL; - RMobilePhone::TWlanSIDV8 wlanSid; - for(i=0;i(CfgFile()->Item(KUsimWlanSidInfo,i)); - if(!item) - { - break; - } - TPtrC8 wlanSidBuf; - TInt userDef; - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,wlanSidBuf); - if(ret!=KErrNone) - { - LOGPARSERR("Wlan Sid Buffer",ret,0,&KUsimWlanSidInfo); - continue; - } - else - { - wlanSid.iWSID.Copy(wlanSidBuf); - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,userDef); - if(ret!=KErrNone) - { - LOGPARSERR("User Defined",ret,1,&KUsimWlanSidInfo); - continue; - } - else - { - wlanSid.iUserDefined=userDef; - } - iWlanSid->AppendL(wlanSid); - } - count=CfgFile()->ItemCount(KUsimPreferredNetworksInfo); - item=NULL; - RMobilePhone::TMobilePreferredNetworkEntryV3 networkEntry; - for(i=0;i(CfgFile()->Item(KUsimPreferredNetworksInfo,i)); - if(!item) - { - break; - } - TPtrC8 accessId,countryCode,networkId; - TInt userDef; - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,accessId); - if(ret!=KErrNone) - { - LOGPARSERR("Access Id",ret,0,&KUsimPreferredNetworksInfo); - continue; - } - else - { - if(AsciiToNum(accessId, digit)==KErrNone) - { - networkEntry.iAccess=digit; - } - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,userDef); - if(ret!=KErrNone) - { - LOGPARSERR("User Defined",ret,1,&KUsimPreferredNetworksInfo); - continue; - } - else - { - networkEntry.iUserDefined=userDef; - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,countryCode); - if(ret!=KErrNone) - { - LOGPARSERR("Country Code",ret,1,&KUsimPreferredNetworksInfo); - continue; - } - else - { - networkEntry.iCountryCode.Copy(countryCode); - } - ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,networkId); - if(ret!=KErrNone) - { - LOGPARSERR("Network Id",ret,1,&KUsimPreferredNetworksInfo); - continue; - } - else - { - networkEntry.iNetworkId.Copy(networkId); - } - - iPreferredNetworks->AppendL(networkEntry); - } - LOGPHONE1("Starting to Parse GBA Authentication Info"); - count = CfgFile()->ItemCount(KGBAAuthInfo); - TGBAAuthInfo authInfo; - - TInt index; - for(index = 0; index < count; index++) - { - item = const_cast(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; - - //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.iOtherAppBusy = OtherApplnBusy; - } - //Get the CurrentApplnActive - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 11, applnActive); - if(ret != KErrNone) - { - LOGPARSERR("applnActive",ret,11,&KGBAAuthInfo); - continue; - } - else - { - authInfo.iAppActive = 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 - LOGPHONE1("Starting to Parse GBA 2 Phase Retrieval list information"); - count = CfgFile()->ItemCount(KGBAListInfo); - RMobilePhone::TGbaNafEntryV8 entry; - for(index = 0; index < count; index++) - { - item = const_cast(CfgFile()->Item(KGBAListInfo, index)); - if(item == NULL) - { - break; - } - CleanupStack::PushL(item); - TInt ret = KErrNone; - TPtrC8 NafId, Btid; - - //Get the NafID - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, NafId); - if(ret != KErrNone) - { - LOGPARSERR("NafID",ret,0,&KGBAListInfo); - continue; - } - else - { - entry.iNafId.Copy(NafId); - } - - //Get the Btid - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, Btid); - if(ret != KErrNone) - { - LOGPARSERR("BTID",ret,1,&KGBAListInfo); - continue; - } - else - { - entry.iBtid.Copy(Btid); - } - - iGbaNafList->AddEntryL(entry); - CleanupStack::Pop(item); - } - LOGPHONE1("Starting to Parse MBMS related config information"); - count = CfgFile()->ItemCount(KMBMSInfo); - TMBMSInfo tMbmsInfo; - for(index = 0; index < count; index++) - { - item = const_cast(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 iMukid - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 6, MukId ); - if(ret != KErrNone) - { - LOGPARSERR("iMukIdTlv ",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.iAppActive = 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); - } - - LOGPHONE1("Starting to Parse MBMS 2 Phase Retrieval list information"); - count = CfgFile()->ItemCount(KMBMSListInfo); - RMobilePhone::TMskEntryV8 mskEntry; - for(index = 0; index < count; index++) - { - item = const_cast(CfgFile()->Item(KMBMSListInfo, index)); - if(item == NULL) - { - break; - } - CleanupStack::PushL(item); - TInt ret = KErrNone; - TPtrC8 MskId,KeyDomain,TimeStamp; - - //Get the MskId - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, MskId); - if(ret != KErrNone) - { - LOGPARSERR("MskId",ret,0,&KMBMSListInfo); - continue; - } - else - { - mskEntry.iMskId.Copy(MskId); - } - - //Get the KeyDomainGroup - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, KeyDomain); - if(ret != KErrNone) - { - LOGPARSERR("KeyDomain",ret,1,&KMBMSListInfo); - continue; - } - else - { - mskEntry.iKeyDomainId.Copy(KeyDomain); - } - - //Get the TimeStampCounter - - ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 2, TimeStamp); - if(ret != KErrNone) - { - LOGPARSERR("TimeStampCounter",ret,2,&KMBMSListInfo); - continue; - } - else - { - mskEntry.iTimeStampCounter.Copy(TimeStamp); - } - - iMbmsMskList->AddEntryL(mskEntry); - CleanupStack::Pop(item); - } - if((iGBAAuthInfoList->Count()!=0) || - (iMBMSInfoList->Count() !=0 ) || - (iMessageWaiting->Count()!=0)) - { - iListIndex=0; - iTimer->Start(KUsimRel6DurationTimeoutDefault2,this,ETimerIdNotifyUSimRel6Event); - } - }; - -CSimUsimR6::~CSimUsimR6() -/** -* Trivial Destructor -* Closes all CObject type objects and destroys all other objects created in the ConstructL() -* -*/ - { - LOGMISC1("CSimUsimR6: Entered destructor"); - if(iTimer) - { - delete iTimer; - } - if(iWlanTimer) - { - delete iWlanTimer; - } - if(iNotifyAuthTimer) - { - delete iNotifyAuthTimer; - } - if (iVoiceMailIds) - { - iVoiceMailIds->Delete(0,iVoiceMailIds->Count()); - delete iVoiceMailIds; - } - if (iMessageWaiting) - { - iMessageWaiting->Delete(0,iMessageWaiting->Count()); - delete iMessageWaiting; - } - if (iWlanData) - { - iWlanData->Delete(0,iWlanData->Count()); - delete iWlanData; - } - if (iWlanSid) - { - iWlanSid->Delete(0,iWlanSid->Count()); - delete iWlanSid; - } - if (iPreferredNetworks) - { - iPreferredNetworks->Delete(0,iPreferredNetworks->Count()); - delete iPreferredNetworks; - } - if(iGetWlanSIDsData) - { - iGetWlanSIDsData->ResetAndDestroy(); - } - delete iGetWlanSIDsData; - if(iGetPreferredNetworks) - { - iGetPreferredNetworks->ResetAndDestroy(); - } - delete iGetPreferredNetworks; - if(iGBAAuthInfoList) - { - iGBAAuthInfoList->Delete(0,iGBAAuthInfoList->Count()); - delete iGBAAuthInfoList; - } - if(iAuthListInfo) - { - iAuthListInfo->ResetAndDestroy(); - } - delete iAuthListInfo; - if(iMBMSInfoList) - { - iMBMSInfoList->Delete(0,iMBMSInfoList->Count()); - delete iMBMSInfoList; - } - if(iGbaNafList) - { - delete iGbaNafList; - } - if(iMbmsMskList) - { - delete iMbmsMskList; - } - LOGMISC1("CSimUsimR6: Leaving destructor"); - } - -const CTestConfigSection* CSimUsimR6::CfgFile() -/** - * Returns a pointer to the current configuration file section. - * - * @return CTestConfigSection A pointer to the current configuration file data section. - */ - { - return iPhone->CfgFile(); - } - -void CSimUsimR6::TimerCallBack(TInt /**aId*/) -/** -* Timer callback function. When the timer goes off, it will call back into this -* function for further processing. -* -* @param aId an id identifying which timer callback is being called -*/ - { - if (iMailBoxNumberChangePending) - { - iMailBoxNumberChangePending = EFalse; - RMobilePhone::TMobilePhoneVoicemailIdsV3* mailbox = reinterpret_cast(iMailBoxNumberChange); - mailbox->iVoice = iVoiceMailIds->At(0).iVoice; - mailbox->iData= iVoiceMailIds->At(0).iData; - mailbox->iFax = iVoiceMailIds->At(0).iFax; - mailbox->iOther = iVoiceMailIds->At(0).iOther; - iPhone->ReqCompleted (iMailBoxNumberChangeNotificationReqHandle,KErrNone); - iTimer->Start (KUsimRel6DurationTimeoutDefault2, this,ETimerIdNotifyUSimRel6Event); - } - - else if (iMailBoxNumberChangePendingV8) - { - iMailBoxNumberChangePendingV8 = EFalse; - RMobilePhone::TMobilePhoneVoicemailIdsV8* mailbox = reinterpret_cast(iMailBoxNumberChangeV8); - mailbox->iVoice = iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iVoice; - mailbox->iData= iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iData; - mailbox->iFax = iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iFax; - mailbox->iOther = iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iOther; - mailbox->iVideo= iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iVideo; - iPhone->ReqCompleted (iMailBoxNumberChangeNotificationReqHandleV8,KErrNone); - iCurrentNotifyMailboxIndex++; - iTimer->Start (KUsimRel6DurationTimeoutDefault2, this,ETimerIdNotifyUSimRel6Event); - } - - else if (iIccMessageWaitingPending) - { - iIccMessageWaitingPending=EFalse; - RMobilePhone::TMobilePhoneMessageWaitingV1* messageWaiting = reinterpret_cast(iIccMsgWaiting); - messageWaiting->iDisplayStatus = iMessageWaiting->At(0).iDisplayStatus; - messageWaiting->iVoiceMsgs= iMessageWaiting->At(0).iVoiceMsgs; - messageWaiting->iAuxVoiceMsgs = iMessageWaiting->At(0).iAuxVoiceMsgs; - messageWaiting->iDataMsgs = iMessageWaiting->At(0).iDataMsgs; - messageWaiting->iFaxMsgs= iMessageWaiting->At(0).iFaxMsgs; - messageWaiting->iEmailMsgs= iMessageWaiting->At(0).iEmailMsgs; - messageWaiting->iOtherMsgs= iMessageWaiting->At(0).iOtherMsgs; - iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandle,KErrNone); - iTimer->Start (KUsimRel6DurationTimeoutDefault1, this,ETimerIdNotifyUSimRel6Event); - } - - else if (iIccMessageWaitingPendingV8) - { - iIccMessageWaitingPendingV8=EFalse; - RMobilePhone::TMobilePhoneMessageWaitingV8* messageWaiting = reinterpret_cast(iIccMsgWaitingV8); - messageWaiting->iDisplayStatus = iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iDisplayStatus; - messageWaiting->iVoiceMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iVoiceMsgs; - messageWaiting->iAuxVoiceMsgs = iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iAuxVoiceMsgs; - messageWaiting->iDataMsgs = iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iDataMsgs; - messageWaiting->iFaxMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iFaxMsgs; - messageWaiting->iEmailMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iEmailMsgs; - messageWaiting->iOtherMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iOtherMsgs; - messageWaiting->iVideoMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iVideoMsgs; - iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandleV8, KErrNone); - iCurrentIccMessageWaitingIndex++; - iTimer->Start (KUsimRel6DurationTimeoutDefault1, this,ETimerIdNotifyUSimRel6Event); - } - - else if (iMessageWaitingPending) - { - iMessageWaitingPending=EFalse; - *iMsgWaitingCount=6; - iPhone->ReqCompleted (iMessageWaitingNotificationReqHandle, KErrNone); - iTimer->Start (KUsimRel6DurationTimeoutDefault, this,ETimerIdNotifyUSimRel6Event); - } - - else if (iNotifyPreferredWlanSIDListChangePending) - { - iNotifyPreferredWlanSIDListChangePending=EFalse; - iPhone->ReqCompleted (iNotifyPreferredWlanSIDListReqHandle,KErrNone); - iNotifyPreferredWlanSIDListChangeIndex++; - iTimer->Start (KUsimRel6DurationTimeoutDefault1,this, ETimerIdNotifyUSimRel6Event); - } - - else if ( iNotifyPreferredNetworksChangePending) - { - iNotifyPreferredNetworksChangePending=EFalse; - iPhone->ReqCompleted (iNotifyPreferredNetworksReqHandle,KErrNone); - iNotifyPreferredNetworksChangeIndex++; - iTimer->Start (KUsimRel6DurationTimeoutDefault1, this,ETimerIdNotifyUSimRel6Event); - } - - else if (iNotifyWlanDataChangePending) - { - iNotifyWlanDataChangePending=EFalse; - if (iNotifyWlanDataChange->iFieldsUsed == iWlanData->At(0).iFieldsUsed) - { - iNotifyWlanDataChange->iPseudonym = iWlanData->At(0).iPseudonym; - iNotifyWlanDataChange->iReauthenticationId = iWlanData->At(0).iReauthenticationId; - } - else if (iNotifyWlanDataChange->iFieldsUsed == iWlanData->At(1).iFieldsUsed) - { - iNotifyWlanDataChange->iPseudonym = iWlanData->At(1).iPseudonym; - iNotifyWlanDataChange->iReauthenticationId = iWlanData->At(1).iReauthenticationId; - iNotifyWlanDataChange->iMasterKey = iWlanData->At(1).iMasterKey; - iNotifyWlanDataChange->iCounter = iWlanData->At(1).iCounter; - } - else - { - iNotifyWlanDataChange->iFieldsUsed = iWlanData->At(1).iFieldsUsed; - iNotifyWlanDataChange->iPseudonym = iWlanData->At(1).iPseudonym; - iNotifyWlanDataChange->iReauthenticationId = iWlanData->At(1).iReauthenticationId; - iNotifyWlanDataChange->iMasterKey = iWlanData->At(1).iMasterKey; - iNotifyWlanDataChange->iCounter = iWlanData->At(1).iCounter; - } - iPhone->ReqCompleted (iNotifyWlanDataChangeReqHandle,KErrNone); - iNotifyWlanDataChangeIndex++; - } - - else if (iSetGBABootstrapParams.iNotifyPending || - iNotifyAuthDataChange.iNotifyPending || - iGetAuthParams.iNotifyPending) - { - if (iSetGBABootstrapParams.iNotifyPending) - { - RMobilePhone::TBsfDataV8 - &bsfDataV8 = *(RMobilePhone::TBsfDataV8*)iSetGBABootstrapParams.iNotifyData; - - if ((bsfDataV8.iBtid != iGBAAuthInfoList->At(iListIndex).iBtid)||(bsfDataV8.iKeyLifetime != iGBAAuthInfoList->At(iListIndex).iKeyLifeTime)) - { - iPhone->ReqCompleted ( - iSetGBABootstrapParams.iNotifyHandle, - KErrAccessDenied); - } - else - { - iPhone->ReqCompleted ( - iSetGBABootstrapParams.iNotifyHandle, - KErrNone); - } - iSetGBABootstrapParams.iNotifyPending = EFalse; - } - - if (iNotifyAuthDataChange.iNotifyPending) - { - iNotifyAuthDataChange.iNotifyPending = EFalse; - RMobilePhone::TAuthInfoV8 - &authInfoV8 = *(RMobilePhone::TAuthInfoV8*) iNotifyAuthDataChange.iNotifyData; - - authInfoV8.iAID = iGBAAuthInfoList->At(iListIndex).iAID; - - if (iGBAAuthInfoList->At(iListIndex).iAppActive) - { - authInfoV8.iData = RMobilePhone::EGbaBootstrapParams; - } - else - { - authInfoV8.iData = RMobilePhone::EGbaNafIdList; - } - iPhone->ReqCompleted (iNotifyAuthDataChange.iNotifyHandle, KErrNone); - } - if (iGetAuthParams.iNotifyPending) - { - RMobilePhone::TMultimodeType - &tMultimode = *(RMobilePhone::TMultimodeType*) iGetAuthParams.iNotifyData; - TInt ret = iGBAAuthInfoList->At(iListIndex).iAuthErr; - TInt ret1 = iMBMSInfoList->At(iListIndex).iAuthErr; - if (ret == KErrNone || ret1 == KErrNone) - { - if (tMultimode.ExtensionId ()== RMobilePhone::KETelMobileGbaBootstrapParamsV8) - { - // for GBA - RMobilePhone::TGbaBootstrapParamsV8 - &tGbaBootstrapV8 = *(RMobilePhone::TGbaBootstrapParamsV8*) iGetAuthParams.iNotifyData; - tGbaBootstrapV8.iBtid = iGBAAuthInfoList->At(iListIndex).iBtid; - tGbaBootstrapV8.iKeyLifetime = iGBAAuthInfoList->At(iListIndex).iKeyLifeTime; - tGbaBootstrapV8.iRand = iGBAAuthInfoList->At(iListIndex).iRAND; - } - else - if ( tMultimode.ExtensionId ()== RMobilePhone::KETelMobileMbmsUserKeyV8) - { - // for MBMS - RMobilePhone::TMbmsUserKeyV8 - &tMbmsUserKeyV8 = *(RMobilePhone::TMbmsUserKeyV8*) iGetAuthParams.iNotifyData; - tMbmsUserKeyV8.iMukIdi = iMBMSInfoList->At(iListIndex).iMukIdi; - tMbmsUserKeyV8.iMukIdr = iMBMSInfoList->At(iListIndex).iMukIdr; - tMbmsUserKeyV8.iTimeStampCounter = iMBMSInfoList->At(iListIndex).iMukTimestamp; - } - else - { - // handle error scenario. - (void) tMultimode; - iPhone->ReqCompleted ( - iGetAuthParams.iNotifyHandle, - KErrCorrupt); - } - iPhone->ReqCompleted (iGetAuthParams.iNotifyHandle, KErrNone); - } - else - { - if (tMultimode.ExtensionId ()== RMobilePhone::KETelMobileMbmsUserKeyV8 && ret1 != KErrNone) - { - if (!(ret1 == KErrAccessDenied)) - { - // for MBMS - RMobilePhone::TMbmsUserKeyV8 - &tMbmsUserKeyV8 = *(RMobilePhone::TMbmsUserKeyV8*) iGetAuthParams.iNotifyData; - tMbmsUserKeyV8.iMukIdi = iMBMSInfoList->At(iListIndex).iMukIdi; - tMbmsUserKeyV8.iMukIdr = iMBMSInfoList->At(iListIndex).iMukIdr; - tMbmsUserKeyV8.iTimeStampCounter = iMBMSInfoList->At(iListIndex).iMukTimestamp; - } - iPhone->ReqCompleted (iGetAuthParams.iNotifyHandle, ret1); - } - else - { - iPhone->ReqCompleted (iGetAuthParams.iNotifyHandle, ret); - } - } - iGetAuthParams.iNotifyPending = EFalse; - } - iTimer->Start (RandTime (), this); - LOGMISC1("<* paramPckg=(TPckg*)aMailBox; - RMobilePhone::TMultimodeType& paramclass=(*paramPckg)(); - if(paramclass.ExtensionId() == KETelExtMultimodeV3) - { - __ASSERT_ALWAYS(!iMailBoxNumberChangePending,SimPanic(ENotificationReqAlreadyOutstanding)); - RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg* voicemailPckg=(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*)aMailBox; - RMobilePhone::TMobilePhoneVoicemailIdsV3& voicemail=(*voicemailPckg)(); - // Check that the data structure is supported by the simulated TSY version - TInt err = iPhone->CheckSimTsyVersion(voicemail); - if(err != KErrNone) - { - iPhone->ReqCompleted(aReqHandle, err); - return KErrNone; - } - iMailBoxNumberChangePending=ETrue; - iMailBoxNumberChangeNotificationReqHandle=aReqHandle; - iMailBoxNumberChange=&voicemail; - } - if(paramclass.ExtensionId() == KEtelExtMultimodeV8) - { - __ASSERT_ALWAYS(!iMailBoxNumberChangePendingV8,SimPanic(ENotificationReqAlreadyOutstanding)); - RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg* voicemailV8Pckg=(RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg*)aMailBox; - RMobilePhone::TMobilePhoneVoicemailIdsV8& voicemailV8=(*voicemailV8Pckg)(); - // Check that the data structure is supported by the simulated TSY version - TInt err = iPhone->CheckSimTsyVersion(voicemailV8); - if(err != KErrNone) - { - iPhone->ReqCompleted(aReqHandle, err); - return KErrNone; - } - iMailBoxNumberChangePendingV8=ETrue; - iMailBoxNumberChangeNotificationReqHandleV8=aReqHandle; - iMailBoxNumberChangeV8=&voicemailV8; - } - else - { - iPhone->ReqCompleted(aReqHandle,KErrNotSupported); - return KErrNone; - } - return KErrNone; - } - -TInt CSimUsimR6::NotifyMailboxNumbersChangeCancel(const TTsyReqHandle aTsyReqHandle) -/** -* Cancel a previous request from an client to be notified of a change in mailbox numbers identifiers.. -* @param aTsyReqHandle request handle -*/ - { - if(iMailBoxNumberChangePending && iMailBoxNumberChangeNotificationReqHandle == aTsyReqHandle) - { - iMailBoxNumberChangePending=EFalse; - iPhone->ReqCompleted(iMailBoxNumberChangeNotificationReqHandle,KErrCancel); - } - else if(iMailBoxNumberChangePendingV8 && iMailBoxNumberChangeNotificationReqHandleV8 == aTsyReqHandle) - { - iMailBoxNumberChangePendingV8=EFalse; - iPhone->ReqCompleted(iMailBoxNumberChangeNotificationReqHandleV8,KErrCancel); - } - return KErrNone; - } - -TInt CSimUsimR6::NotifyMessageWaiting(TTsyReqHandle aReqHandle, TInt* aCount) -/** - * This function member allows a client to be notified when the phone receives - * a message waiting indication from the network. - * @param aReqHandle The request handle associated with this request. - * @param aCount This parameter is filled with the number of voice mail messages waiting in the network. - * @return TInt Standard error value. - */ - { - __ASSERT_ALWAYS(!iMessageWaitingPending,SimPanic(ENotificationReqAlreadyOutstanding)); - iMessageWaitingPending=ETrue; - iMessageWaitingNotificationReqHandle=aReqHandle; - iMsgWaitingCount=aCount; - return KErrNone; - }; - -TInt CSimUsimR6::NotifyMessageWaitingCancel(const TTsyReqHandle aReqHandle) - { - if(iMessageWaitingPending && iMessageWaitingNotificationReqHandle == aReqHandle) - { - iMessageWaitingPending=EFalse; - iPhone->ReqCompleted(iMessageWaitingNotificationReqHandle,KErrCancel); - } - return KErrNone; - }; - -TInt CSimUsimR6::NotifyIccMessageWaitingIndicatorsChange(TTsyReqHandle aReqHandle, TDes8* aMsgIndicators) -/** - * This function member notifies the client if the message waiting indicators - * on the current ICC change. - * @param aReqHandle The request handle associated with this request. - * @param aMsgIndicators This parameter is filled with the message waiting indicators infromation. - * @return TInt Standard error value. - */ - { - TPckg* paramPckg=(TPckg*)aMsgIndicators; - RMobilePhone::TMultimodeType& paramclass=(*paramPckg) (); - if ( paramclass.ExtensionId ()== KETelExtMultimodeV1) - { - __ASSERT_ALWAYS(!iIccMessageWaitingPending,SimPanic(ENotificationReqAlreadyOutstanding)); - RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; - RMobilePhone::TMobilePhoneMessageWaitingV1& messagewaiting=(*messagewaitingPckg) (); - // Check that the data structure is supported by the simulated TSY version - TInt err = iPhone->CheckSimTsyVersion (messagewaiting); - if ( err != KErrNone) - { - iPhone->ReqCompleted (aReqHandle, err); - return KErrNone; - } - iIccMessageWaitingPending=ETrue; - iIccMessageWaitingNotificationReqHandle=aReqHandle; - iIccMsgWaiting=&messagewaiting; - } - if (paramclass.ExtensionId ()== KEtelExtMultimodeV8) - { - __ASSERT_ALWAYS(!iIccMessageWaitingPendingV8,SimPanic(ENotificationReqAlreadyOutstanding)); - RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*)aMsgIndicators; - RMobilePhone::TMobilePhoneMessageWaitingV8& messagewaiting=(*messagewaitingPckg) (); - // Check that the data structure is supported by the simulated TSY version - TInt err = iPhone->CheckSimTsyVersion (messagewaiting); - if ( err != KErrNone) - { - iPhone->ReqCompleted (aReqHandle, err); - return KErrNone; - } - iIccMessageWaitingPendingV8=ETrue; - iIccMessageWaitingNotificationReqHandleV8=aReqHandle; - iIccMsgWaitingV8=&messagewaiting; - } - else - { - iPhone->ReqCompleted (aReqHandle, KErrNotSupported); - return KErrNone; - } - return KErrNone; - } - -TInt CSimUsimR6::NotifyIccMessageWaitingIndicatorsChangeCancel(const TTsyReqHandle aTsyReqHandle) -/** -* Cancel a previous request from an client to be notified of a change in the message waiting indicators -* on the current ICC. -* @param aTsyReqHandle request handle -*/ - { - if ( iIccMessageWaitingPending && iIccMessageWaitingNotificationReqHandle == aTsyReqHandle) - { - iIccMessageWaitingPending=EFalse; - iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandle, KErrCancel); - } - else - if ( iIccMessageWaitingPendingV8 && iIccMessageWaitingNotificationReqHandleV8 == aTsyReqHandle) - { - iIccMessageWaitingPendingV8=EFalse; - iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandleV8, KErrCancel); - } - return KErrNone; - } - -TInt CSimUsimR6::GetMailboxNumbers(TTsyReqHandle aReqHandle,TDes8* aMailBox) -/** - * Retrieves the Mailbox numbers identifier information from the EF_MBI file in the USIM. - * @param aReqHandle The request handle associated with this request. - * @param aMailBox This will be populated with the - * mailbox identifier information to be returned. - * @return TInt Standard error value. - */ - { - RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg* voicemailPckg=(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*)aMailBox; - RMobilePhone::TMultimodeType& packagetype = (*voicemailPckg)(); - - if(packagetype.ExtensionId() == KETelExtMultimodeV3 || packagetype.ExtensionId() == KEtelExtMultimodeV8) - { - RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg* voicemailPckg=(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*)aMailBox; - RMobilePhone::TMobilePhoneVoicemailIdsV3& mailbox=(*voicemailPckg)(); - mailbox.iVoice = iVoiceMailIds->At(iCurrentIndex).iVoice; - mailbox.iData = iVoiceMailIds->At(iCurrentIndex).iData; - mailbox.iFax = iVoiceMailIds->At(iCurrentIndex).iFax; - mailbox.iOther = iVoiceMailIds->At(iCurrentIndex).iOther; - } - if(packagetype.ExtensionId() == KEtelExtMultimodeV8) - { - RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg* voicemailV8Pckg=(RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg*)aMailBox; - RMobilePhone::TMobilePhoneVoicemailIdsV8& voicemailV8=(*voicemailV8Pckg)(); - voicemailV8.iVideo = iVoiceMailIds->At(iCurrentIndex).iVideo; - } - iCurrentIndex++; - iPhone->ReqCompleted(aReqHandle,KErrNone); - return KErrNone; - } - -TInt CSimUsimR6::GetIccMessageWaitingIndicators(TTsyReqHandle aReqHandle,TDes8* aMsgIndicators) -/** - * This function member retrieves the set of message waiting indicators from the - * current ICC. - * @param aReqHandle The request handle associated with this request. - * @param aMsgIndicators The first parameter package.This will be populated with the - * message waiting indicators information to be returned. - * @return TInt Standard error value. - */ - { - RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; - RMobilePhone::TMultimodeType& packagetype = (*messagewaitPckg)(); - - if(packagetype.ExtensionId() == KETelExtMultimodeV1 || packagetype.ExtensionId() == KEtelExtMultimodeV8) - { - RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; - RMobilePhone::TMobilePhoneMessageWaitingV1& messagewaiting=(*messagewaitingPckg)(); - messagewaiting.iDisplayStatus=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iDisplayStatus; - messagewaiting.iVoiceMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iVoiceMsgs; - messagewaiting.iAuxVoiceMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iAuxVoiceMsgs; - messagewaiting.iDataMsgs =iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iDataMsgs; - messagewaiting.iFaxMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iFaxMsgs; - messagewaiting.iEmailMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iEmailMsgs; - messagewaiting.iOtherMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iOtherMsgs; - } - if(packagetype.ExtensionId() == KEtelExtMultimodeV8) - { - RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* messagewaitingV8Pckg=(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*)aMsgIndicators; - RMobilePhone::TMobilePhoneMessageWaitingV8& messagewaitingV8=(*messagewaitingV8Pckg)(); - messagewaitingV8.iVideoMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iVideoMsgs; - iGetIccMsgIdCurrentIndex++; - } - else - { - iPhone->ReqCompleted(aReqHandle,KErrNotSupported); - return KErrNone; - } - iPhone->ReqCompleted(aReqHandle,KErrNone); - return KErrNone; - } - -TInt CSimUsimR6::SetIccMessageWaitingIndicators(TTsyReqHandle aReqHandle,TDes8* aMsgIndicators) -/** - * Sending information about the set of message waiting indicators from the - * current ICC. - * @param aReqHandle The request handle associated with this request. - * @param aMsgIndicators The first parameter package.This contains the - * message waiting indicators information - * @return TInt Standard error value. - */ - { - RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; - RMobilePhone::TMultimodeType& packagetype = (*messagewaitPckg)(); - - if(packagetype.ExtensionId() == KETelExtMultimodeV1) - { - RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; - RMobilePhone::TMobilePhoneMessageWaitingV1& messagewaiting=(*messagewaitingPckg)(); - - if ((messagewaiting.iVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iVoiceMsgs) || - (messagewaiting.iAuxVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iAuxVoiceMsgs) || - (messagewaiting.iDataMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iDataMsgs) || - (messagewaiting.iFaxMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iFaxMsgs) || - (messagewaiting.iEmailMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iEmailMsgs) || - (messagewaiting.iOtherMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iOtherMsgs)) - { - iPhone->ReqCompleted(aReqHandle,KErrCorrupt); //KErrCorrupt - } - else - { - iPhone->ReqCompleted(aReqHandle,KErrNone); - } - } - - if(packagetype.ExtensionId() == KEtelExtMultimodeV8) - { - RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* messagewaitingV8Pckg=(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*)aMsgIndicators; - RMobilePhone::TMobilePhoneMessageWaitingV8& messagewaitingV8=(*messagewaitingV8Pckg)(); - - if ((messagewaitingV8.iVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iVoiceMsgs) || - (messagewaitingV8.iAuxVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iAuxVoiceMsgs) || - (messagewaitingV8.iDataMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iDataMsgs) || - (messagewaitingV8.iFaxMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iFaxMsgs) || - (messagewaitingV8.iEmailMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iEmailMsgs) || - (messagewaitingV8.iOtherMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iOtherMsgs) || - (messagewaitingV8.iVideoMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iVideoMsgs)) - { - iPhone->ReqCompleted(aReqHandle,KErrCorrupt); //KErrCorrupt - } - else - { - iSetIccMsgIdCurrentIndex++; - iPhone->ReqCompleted(aReqHandle,KErrNone); - } - } - else - { - iPhone->ReqCompleted(aReqHandle,KErrNotSupported); - } - return KErrNone; - } - -// -// Wireless LAN (WLAN) -// - -TInt CSimUsimR6::NotifyWlanDataChange(const TTsyReqHandle aTsyReqHandle,TDes8* aData) -/** - * Notification request posted by the client is completed by the TSY when there is a change in - * the Wlan Data. This API upon completion returns the current Wlan Data to the client. - * @param aReqHandle The request handle associated with this request. - * @param aData This contains the current Wlan data upon completion. - * @return TInt Standard error value. - */ - { - __ASSERT_ALWAYS(!iNotifyWlanDataChangePending,SimPanic(ENotificationReqAlreadyOutstanding)); - RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = reinterpret_cast (aData); - RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)(); - iNotifyWlanDataChangeReqHandle=aTsyReqHandle; - iNotifyWlanDataChange=&WlanDataV8; - if(iIndex%2==0) - { - iNotifyWlanDataChangePending=ETrue; - iWlanTimer->Start(KUsimRel6DurationTimeoutDefault,this,ETimerIdNotifyWlanDataEvent); - } - iIndex++; - return KErrNone; - } - -TInt CSimUsimR6::NotifyWlanDataChangeCancel(TTsyReqHandle aTsyReqHandle) -/** - * This API is used by the TSY to cancel any pending NotifyWlanDataChange request. - * @param aReqHandle The request handle associated with this request. - * @return TInt Standard error value. - */ - { - if(iNotifyWlanDataChangeReqHandle==aTsyReqHandle) - { - iNotifyWlanDataChangePending=EFalse; - iPhone->ReqCompleted(iNotifyWlanDataChangeReqHandle,KErrCancel); - } - return KErrNone; - } - -TInt CSimUsimR6::SetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData) -/** - * This API is used by the TSY to receive the Wlan data sent by the client. - * @param aReqHandle The request handle associated with this request. - * @param aData This contains the Wlan Data. - * @return TInt Standard error value. - */ - { - RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = reinterpret_cast (aData); - RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)(); - - if(WlanDataV8.iPseudonym==SIMTSY_PHONE_WLAN_ACESS_DENIED) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrAccessDenied); - } - else if(WlanDataV8.iFieldsUsed == iWlanData->At(0).iFieldsUsed) - { - if((WlanDataV8.iPseudonym != iWlanData->At(0).iPseudonym) || - (WlanDataV8.iReauthenticationId != iWlanData->At(0).iReauthenticationId)) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); - } - else - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - } - else if(WlanDataV8.iFieldsUsed == iWlanData->At(1).iFieldsUsed) - { - if((WlanDataV8.iPseudonym != iWlanData->At(1).iPseudonym) || - (WlanDataV8.iReauthenticationId != iWlanData->At(1).iReauthenticationId) || - (WlanDataV8.iMasterKey != iWlanData->At(1).iMasterKey) || - (WlanDataV8.iCounter != iWlanData->At(1).iCounter)) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); - } - else - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - } - else - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - return KErrNone; - } - -TInt CSimUsimR6::GetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData) -/** - * This API is used by the TSY to send the Wlan data information requested by the client - * @param aReqHandle The request handle associated with this request. - * @param aData This contains the current Wlan data upon completion. - * @return TInt Standard error value. - */ - { - RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = reinterpret_cast (aData); - RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)(); - - if(WlanDataV8.iPseudonym==SIMTSY_PHONE_WLAN_ACESS_DENIED) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrAccessDenied); - } - else if(WlanDataV8.iCounter == iWlanData->At(2).iCounter) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNotSupported); - } - else if(WlanDataV8.iFieldsUsed ==iWlanData->At(0).iFieldsUsed ) - { - WlanDataV8.iPseudonym = iWlanData->At(0).iPseudonym; - WlanDataV8.iReauthenticationId = iWlanData->At(0).iReauthenticationId; - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - else if(WlanDataV8.iFieldsUsed ==iWlanData->At(1).iFieldsUsed ) - { - WlanDataV8.iPseudonym = iWlanData->At(1).iPseudonym; - WlanDataV8.iReauthenticationId = iWlanData->At(1).iReauthenticationId; - WlanDataV8.iMasterKey = iWlanData->At(1).iMasterKey; - WlanDataV8.iCounter = iWlanData->At(1).iCounter ; - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - else - { - WlanDataV8.iFieldsUsed =iWlanData->At(1).iFieldsUsed; - WlanDataV8.iPseudonym = iWlanData->At(1).iPseudonym; - WlanDataV8.iReauthenticationId = iWlanData->At(1).iReauthenticationId; - WlanDataV8.iMasterKey = iWlanData->At(1).iMasterKey; - WlanDataV8.iCounter = iWlanData->At(1).iCounter ; - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - return KErrNone; - } - -TInt CSimUsimR6::StorePreferredWlanSIDList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) -/** - * This API is used by the TSY to store the Preferred Wlan SID List sent by the Client. - * @param aReqHandle The request handle associated with this request. - * @param aBuffer This contains the Preferred Wlan SID List. - * @return TInt Standard error value. - */ - { - TInt ret=KErrNone; - TInt leaveCode=KErrNone; - TRAP(leaveCode, ret=ProcessStorePreferredWlanSIDListL(aTsyReqHandle, aBuffer);); - if (leaveCode != KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,leaveCode); - } - return ret; - } - -TInt CSimUsimR6::ProcessStorePreferredWlanSIDListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) -/** - * This API is used by the TSY to process the Preferred Wlan SID List sent by the Client and verify it. - * @param aReqHandle The request handle associated with this request. - * @param aBuffer This contains the Preferred Wlan SID List. - * @return TInt Standard error value. - */ - { - CMobilePhoneStoredWlanSIDList* list=CMobilePhoneStoredWlanSIDList::NewL(); - CleanupStack::PushL(list); - list->RestoreL(*aBuffer); - RMobilePhone::TWlanSIDV8 entry; - if (list->Enumerate() > SIMTSY_PHONE_WLAN_SIDLIST_COUNT) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNoMemory); - CleanupStack::PopAndDestroy(); // list - return KErrNone; - } - TInt error=KErrCorrupt; - TInt ret; - for (TInt i=0; iGetEntryL(i)); - if (ret != KErrNone) - { - break; - } - switch(i) - { - case 0: - if((entry.iWSID == iWlanSid->At(0).iWSID||entry.iWSID != iWlanSid->At(1).iWSID ||entry.iWSID != iWlanSid->At(2).iWSID) - && (entry.iUserDefined == iWlanSid->At(0).iUserDefined || entry.iUserDefined == iWlanSid->At(1).iUserDefined || - entry.iUserDefined == iWlanSid->At(2).iUserDefined)) - { - error = KErrNone; - } - break; - case 1: - if((entry.iWSID == iWlanSid->At(0).iWSID||entry.iWSID != iWlanSid->At(1).iWSID ||entry.iWSID != iWlanSid->At(2).iWSID) - && (entry.iUserDefined == iWlanSid->At(0).iUserDefined || entry.iUserDefined == iWlanSid->At(1).iUserDefined || - entry.iUserDefined == iWlanSid->At(2).iUserDefined)) - { - error = KErrNone; - } - break; - case 2: - default: - if((entry.iWSID == iWlanSid->At(0).iWSID||entry.iWSID != iWlanSid->At(1).iWSID ||entry.iWSID != iWlanSid->At(2).iWSID) - && (entry.iUserDefined == iWlanSid->At(0).iUserDefined || entry.iUserDefined == iWlanSid->At(1).iUserDefined || - entry.iUserDefined == iWlanSid->At(2).iUserDefined)) - { - error = KErrNone; - } - break; - } - } - if(error == KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - else - { - iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); - } - CleanupStack::PopAndDestroy(); - return KErrNone; - } - -TInt CSimUsimR6::NotifyPreferredWlanSIDListChange(TTsyReqHandle aTsyReqHandle) -/** - * This API is used by the TSY to complete the Preferred Wlan SID List change - * notification request posted by the client. - * - * @param aReqHandle The request handle associated with this request. - * @return TInt Standard error value. - */ - { - iNotifyPreferredWlanSIDListChangePending=ETrue; - iNotifyPreferredWlanSIDListReqHandle=aTsyReqHandle; - return KErrNone; - } - -TInt CSimUsimR6::NotifyPreferredWlanSIDListChangeCancel(TTsyReqHandle /**aTsyReqHandle*/) -/** - * This API is used by TSY to cancel any NotifyPreferredWlanSIDListChange outstanding requests - * @return TInt Standard error value. - */ - { - iNotifyPreferredWlanSIDListChangePending=EFalse; - iPhone->ReqCompleted(iNotifyPreferredWlanSIDListReqHandle,KErrCancel); - return KErrNone; - } - -TInt CSimUsimR6::GetPreferredWlanSIDsPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize) -/** - * Tsy uses this API to retrieve the Preferred Wlan SIDs of each line from phone, - * store each Preferred Wlan SID as a list entry, - * stream the list and then return size of this buffer to client. - * @param aReqHandle Handle to the request. - * @param aClient Pointer to the client. - * @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. - */ - { - TInt ret=KErrNone; - TInt leaveCode=KErrNone; - TRAP(leaveCode, ret=ProcessGetPreferredWlanSIDsPhase1L(aTsyReqHandle, aClient, aBufSize);); - if (leaveCode != KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,leaveCode); - } - return ret; - } - -TInt CSimUsimR6::ProcessGetPreferredWlanSIDsPhase1L(const TTsyReqHandle aTsyReqHandle, - RMobilePhone::TClientId* aClient, - TInt* aBufSize) -/** -* Retrieve stored Wlan specific IDs from USIM. -* Store each entry,stream the list and then return size of this buffer to client -* @param aReqHandle Handle to the request. -* @param aClient Pointer to the client. -* @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. -*/ - { - CMobilePhoneStoredWlanSIDList* list=CMobilePhoneStoredWlanSIDList::NewL(); - CleanupStack::PushL(list); - RMobilePhone::TWlanSIDV8 entry; - // fill up an example list - for (TInt index=0; index < SIMTSY_PHONE_WLAN_SIDLIST_COUNT; index++) - { - switch (index) - { - case 0: - entry.iWSID = iWlanSid->At(0).iWSID; - entry.iUserDefined = iWlanSid->At(0).iUserDefined; - break; - case 1: - entry.iWSID = iWlanSid->At(1).iWSID; - entry.iUserDefined = iWlanSid->At(1).iUserDefined; - break; - case 2: - default: - entry.iWSID = iWlanSid->At(2).iWSID ; - entry.iUserDefined = iWlanSid->At(2).iUserDefined; - break; - } - // Add the entry into the list, at the next empty location - list->AddEntryL(entry); - } - // Store the streamed list and the client ID - CListReadAllAttempt* read=CListReadAllAttempt::NewL(*aClient,aTsyReqHandle); - CleanupStack::PushL(read); - - read->iListBuf = list->StoreLC(); - CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC - - iGetWlanSIDsData->AppendL(read); - CleanupStack::Pop(); // pop the CListReadAllAttempt - - // return the CBufBase’s size to client - *aBufSize=(read->iListBuf)->Size(); - - // Complete first phase of list retrieval - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - CleanupStack::PopAndDestroy(); // pop&destroy list - return KErrNone; - } - -TInt CSimUsimR6::GetPreferredWlanSIDsPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf) -/** -* 2nd phase retrieval of the the Preferred Wlan SIDs list. -* @param aReqHandle Handle to the request. -* @param aClient Pointer to the client. -* @param aBuf Buffer Containing the Preferred Wlan SIDs list. -*/ - { - CListReadAllAttempt* read=NULL; - // Find the get preferred wlan SIDs from this client - for (TInt i=0; iCount(); ++i) - { - read = iGetWlanSIDsData->At(i); - if ((read->iClient.iSessionHandle==aClient->iSessionHandle) && - (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle)) - { - TPtr8 bufPtr((read->iListBuf)->Ptr(0)); - // Copy the streamed list to the client - aBuf->Copy(bufPtr); - delete read; - iGetWlanSIDsData->Delete(i); - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - } - // Should handle error case of not finding the matching client from read all phase 1 - return KErrNotFound; - } - -TInt CSimUsimR6::GetPreferredWlanSIDsCancel(const TTsyReqHandle aTsyReqHandle) -/** -* Cancel the request to retrieve the Preferred Wlan SIDs List. -* @param aTsyReqHandle handle to the request -*/ - { - LOGCALL1("CSimPhone::GetPreferredNetworksCancel"); - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - // Remove the read all attempt from iGetWlanSIDsData - CListReadAllAttempt* read=NULL; - for (TInt i=0; iCount(); ++i) - { - read = iGetWlanSIDsData->At(i); - if (read->iReqHandle == aTsyReqHandle) - { - delete read; - iGetWlanSIDsData->Delete(i); - break; - } - } - iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); - LOGCALL1("CSimPhone::GetPreferredWlanSIDsCancel"); - return KErrNone; - } - -TInt CSimUsimR6::GetPreferredNetworksPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize) -/** - * Tsy uses this API to retrieve the Preferred Networks of each line from phone, - * store each Preferred Networks as a list entry, - * stream the list and then return size of this buffer to client. - * @param aReqHandle Handle to the request. - * @param aClient Pointer to the client. - * @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. - */ - { - TInt ret=KErrNone; - TInt leaveCode=KErrNone; - TRAP(leaveCode, ret=ProcessGetPreferredNetworksPhase1L(aTsyReqHandle, aClient, aBufSize);); - if (leaveCode != KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,leaveCode); - } - return ret; - } - -TInt CSimUsimR6::ProcessGetPreferredNetworksPhase1L(const TTsyReqHandle aTsyReqHandle, - RMobilePhone::TClientId* aClient, - TInt* aBufSize) -/** -* Retrieve stored Preferred Networks from USIM. -* Store each entry,stream the list and then return size of this buffer to client -* @param aReqHandle Handle to the request. -* @param aClient Pointer to the client. -* @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. -*/ - { - CMobilePhoneStoredNetworkList* list=CMobilePhoneStoredNetworkList::NewL(); - CleanupStack::PushL(list); - RMobilePhone::TMobilePreferredNetworkEntryV3 entry; - // fill up an example list - for (TInt index=0; index < SIMTSY_PHONE_NTWK_LIST_ENTRIES; index++) - { - switch (index) - { - case 0: - entry.iAccess = iPreferredNetworks->At(0).iAccess; - entry.iUserDefined = iPreferredNetworks->At(0).iUserDefined; - entry.iCountryCode = iPreferredNetworks->At(0).iCountryCode; - entry.iNetworkId = iPreferredNetworks->At(0).iNetworkId; - break; - case 1: - entry.iAccess = iPreferredNetworks->At(1).iAccess; - entry.iUserDefined = iPreferredNetworks->At(1).iUserDefined; - entry.iCountryCode = iPreferredNetworks->At(1).iCountryCode; - entry.iNetworkId = iPreferredNetworks->At(1).iNetworkId; - break; - case 2: - default: - entry.iAccess = iPreferredNetworks->At(2).iAccess; - entry.iUserDefined = iPreferredNetworks->At(2).iUserDefined; - entry.iCountryCode = iPreferredNetworks->At(2).iCountryCode; - entry.iNetworkId = iPreferredNetworks->At(2).iNetworkId; - break; - case 3: - entry.iAccess = iPreferredNetworks->At(3).iAccess; - entry.iUserDefined = iPreferredNetworks->At(3).iUserDefined; - entry.iCountryCode = iPreferredNetworks->At(3).iCountryCode; - entry.iNetworkId = iPreferredNetworks->At(3).iNetworkId; - break; - } - // Add the entry into the list, at the next empty location - list->AddEntryL(entry); - } - // Store the streamed list and the client ID - CListReadAllAttempt* read=CListReadAllAttempt::NewL(*aClient,aTsyReqHandle); - CleanupStack::PushL(read); - - read->iListBuf = list->StoreLC(); - CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC - - iGetPreferredNetworks->AppendL(read); - CleanupStack::Pop(); // pop the CListReadAllAttempt - - // return the CBufBase’s size to client - *aBufSize=(read->iListBuf)->Size(); - - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - CleanupStack::PopAndDestroy(); // pop&destroy list - return KErrNone; - } - -TInt CSimUsimR6::GetPreferredNetworksPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf) -/** -* 2nd phase retrieval of the the Preferred Networks list. -* @param aReqHandle Handle to the request. -* @param aClient Pointer to the client. -* @param aBuf Buffer Containing the Preferred Networks list. -*/ - { - CListReadAllAttempt* read=NULL; - // Find the get detected network attempt from this client - for (TInt i=0; iCount(); ++i) - { - read = iGetPreferredNetworks->At(i); - if ((read->iClient.iSessionHandle==aClient->iSessionHandle) && - (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle)) - { - TPtr8 bufPtr((read->iListBuf)->Ptr(0)); - // Copy the streamed list to the client - aBuf->Copy(bufPtr); - delete read; - iGetPreferredNetworks->Delete(i); - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - return KErrNone; - } - } - // Should handle error case of not finding the matching client from read all phase 1 - return KErrNotFound; - } - -TInt CSimUsimR6::GetPreferredNetworksCancel(const TTsyReqHandle aTsyReqHandle) -/** -* Cancel the request to retrieve the Preferred Networks List. -* @param aTsyReqHandle handle to the request -*/ - { - LOGCALL1("CSimPhone::GetPreferredNetworksCancel"); - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - CListReadAllAttempt* read=NULL; - for (TInt i=0; iCount(); ++i) - { - read = iGetPreferredNetworks->At(i); - if (read->iReqHandle == aTsyReqHandle) - { - delete read; - iGetPreferredNetworks->Delete(i); - break; - } - } - iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); - LOGCALL1("CSimPhone::GetPreferredNetworksCancel"); - return KErrNone; - } - -TInt CSimUsimR6::StorePreferredNetworksList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) -/** - * This API is used by the TSY to store the Preferred Networks List sent by the Client. - * @param aReqHandle The request handle associated with this request. - * @param aBuffer This contains the Preferred Networks List. - * @return TInt Standard error value. - */ - { - TInt ret=KErrNone; - TInt leaveCode=KErrNone; - TRAP(leaveCode, ret=ProcessStorePreferredNetworksListL(aTsyReqHandle, aBuffer);); - if (leaveCode != KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,leaveCode); - } - return ret; - }; - -TInt CSimUsimR6::ProcessStorePreferredNetworksListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) -/** - * This API is used by the TSY to process the Preferred Networks List sent by the Client and verify it. - * @param aReqHandle The request handle associated with this request. - * @param aBuffer This contains the Preferred Networks List. - * @return TInt Standard error value. - */ - { - CMobilePhoneStoredNetworkList* list=CMobilePhoneStoredNetworkList::NewL(); - CleanupStack::PushL(list); - - list->RestoreL(*aBuffer); - - RMobilePhone::TMobilePreferredNetworkEntryV3 entry; - - if (list->Enumerate() > SIMTSY_PHONE_NTWK_LIST_ENTRIES) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNoMemory); - CleanupStack::PopAndDestroy(); // list - return KErrNone; - } - TInt error=KErrCorrupt; - TInt ret; - for (TInt i=0; iGetEntryL(i)); - if (ret != KErrNone) - { - break; - } - switch(i) - { - case 0: - if((entry.iAccess == iPreferredNetworks->At(0).iAccess || - entry.iAccess == iPreferredNetworks->At(1).iAccess || - entry.iAccess == iPreferredNetworks->At(2).iAccess || - entry.iAccess == iPreferredNetworks->At(3).iAccess ) && - (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && - (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && - (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) - { - error = KErrNone; - } - break; - case 1: - if((entry.iAccess == iPreferredNetworks->At(0).iAccess || - entry.iAccess == iPreferredNetworks->At(1).iAccess || - entry.iAccess == iPreferredNetworks->At(2).iAccess || - entry.iAccess == iPreferredNetworks->At(3).iAccess ) && - (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && - (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && - (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) - { - error = KErrNone; - } - break; - case 2: - if((entry.iAccess == iPreferredNetworks->At(0).iAccess || - entry.iAccess == iPreferredNetworks->At(1).iAccess || - entry.iAccess == iPreferredNetworks->At(2).iAccess || - entry.iAccess == iPreferredNetworks->At(3).iAccess ) && - (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && - (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && - (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) - { - error = KErrNone; - } - break; - case 3: - default: - if((entry.iAccess == iPreferredNetworks->At(0).iAccess || - entry.iAccess == iPreferredNetworks->At(1).iAccess || - entry.iAccess == iPreferredNetworks->At(2).iAccess || - entry.iAccess == iPreferredNetworks->At(3).iAccess ) && - (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || - entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && - (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || - entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && - (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || - entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) - { - error = KErrNone; - } - break; - } - } - if(error==KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,KErrNone); - } - else - { - iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); - } - CleanupStack::PopAndDestroy(); // list - return KErrNone; - } - -TInt CSimUsimR6::NotifyStorePreferredNetworksListChange(TTsyReqHandle aTsyReqHandle) -/** - * This API is used by the TSY to complete the Preferred Networks List change - * notification request posted by the client. - * - * @param aReqHandle The request handle associated with this request. - * @return TInt Standard error value. - */ - { - iNotifyPreferredNetworksChangePending=ETrue; - iNotifyPreferredNetworksReqHandle=aTsyReqHandle; - return KErrNone; - } - -TInt CSimUsimR6::NotifyStorePreferredNetworksListChangeCancel(TTsyReqHandle /**aTsyReqHandle*/) -/** - * This API is used by TSY to cancel any NotifyPreferredNetworksListChange outstanding requests - - * @return TInt Standard error value. - */ - { - iNotifyPreferredNetworksChangePending=EFalse; - iPhone->ReqCompleted(iNotifyPreferredNetworksReqHandle,KErrCancel); - return KErrNone; - } - -TInt CSimUsimR6::SetGbaBootstrapParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg, const RMobilePhone::TAID* aAID) - { - - RMobilePhone::TBsfDataV8Pckg *bsfDataV8Pckg = reinterpret_cast (aPckg); - RMobilePhone::TBsfDataV8 &bsfDataV8 = (*bsfDataV8Pckg) (); - if((aAID == NULL) || (*aAID == iGBAAuthInfoList->At(iListIndex).iAID)) - { - iSetGBABootstrapParams.iNotifyPending = ETrue; - iSetGBABootstrapParams.iNotifyHandle = aTsyReqHandle; - iSetGBABootstrapParams.iNotifyData = &bsfDataV8; - } - return KErrNone; - } - -TInt CSimUsimR6::SetGbaBootstrapParamsCancel(const TTsyReqHandle /**aTsyReqHandle*/) - { - if(iSetGBABootstrapParams.iNotifyPending) - { - iSetGBABootstrapParams.iNotifyPending=EFalse; - iPhone->ReqCompleted(iSetGBABootstrapParams.iNotifyHandle,KErrCancel); - } - else - { - iPhone->ReqCompleted(iSetGBABootstrapParams.iNotifyHandle,KErrNone); - } - return KErrNone; - } - - -TInt CSimUsimR6::NotifyAuthenticateDataChange(TTsyReqHandle aTsyReqHandle, TDes8* aPckg) - { - RMobilePhone::TAuthInfoV8Pckg *authInfV8Pckg = reinterpret_cast (aPckg); - RMobilePhone::TAuthInfoV8 &authInfoV8 = (*authInfV8Pckg)(); - iNotifyAuthDataChange.iNotifyPending = ETrue; - iNotifyAuthDataChange.iNotifyHandle = aTsyReqHandle; - iNotifyAuthDataChange.iNotifyData = &authInfoV8; - return KErrNone; - } - -TInt CSimUsimR6::NotifyAuthenticateDataChangeCancel(const TTsyReqHandle /**aTsyReqHandle*/) - { - if(iNotifyAuthDataChange.iNotifyPending) - { - iNotifyAuthDataChange.iNotifyPending=EFalse; - iPhone->ReqCompleted(iNotifyAuthDataChange.iNotifyHandle,KErrCancel); - } - else - { - iPhone->ReqCompleted(iNotifyAuthDataChange.iNotifyHandle,KErrNone); - } - return KErrNone; - } - -TInt CSimUsimR6::GetAuthenticationParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg, TDes8* aPckg2) - { - RMobilePhone::TAuthInfoV8Pckg *authInfoV8Pckg = reinterpret_cast (aPckg); - RMobilePhone::TAuthInfoV8 &authInfoV8 = (*authInfoV8Pckg)(); - if ( authInfoV8.iAID == iGBAAuthInfoList->At(iListIndex).iAID || - authInfoV8.iAID == iMBMSInfoList->At(iListIndex).iAID ) - { - iGetAuthParams.iNotifyPending = ETrue; - iGetAuthParams.iNotifyHandle = aTsyReqHandle; - if ( authInfoV8.iData == RMobilePhone::EGbaBootstrapParams) - { - RMobilePhone::TGbaBootstrapParamsV8Pckg - *gbaBootstrapV8Pckg = reinterpret_cast (aPckg2); - RMobilePhone::TGbaBootstrapParamsV8 &gbaBootstrapV8 = (*gbaBootstrapV8Pckg) (); - iGetAuthParams.iNotifyData = &gbaBootstrapV8; - return KErrNone; - } - if ( authInfoV8.iData == RMobilePhone::EMbmsMuk) - { - RMobilePhone::TMbmsUserKeyV8Pckg - *mbmsUserKeyV8Pckg = reinterpret_cast (aPckg2); - RMobilePhone::TMbmsUserKeyV8 &mbmsUserKeyV8 = (*mbmsUserKeyV8Pckg) (); - - iGetAuthParams.iNotifyData = &mbmsUserKeyV8; - return KErrNone; - } - iGetAuthParams.iNotifyData = NULL; - } - else - { - iGetAuthParams.iNotifyPending = ETrue; - iGetAuthParams.iNotifyHandle = aTsyReqHandle; - iGetAuthParams.iNotifyData = NULL; - } - return KErrNone; - } - -TInt CSimUsimR6::GetAuthenticationParamsCancel(const TTsyReqHandle /**aTsyReqHandle*/) - { - if(iGetAuthParams.iNotifyPending) - { - iGetAuthParams.iNotifyPending=EFalse; - iPhone->ReqCompleted(iGetAuthParams.iNotifyHandle,KErrCancel); - } - else - { - iPhone->ReqCompleted(iGetAuthParams.iNotifyHandle,KErrNone); - } - return KErrNone; - } - -TInt CSimUsimR6::GetAuthenticationListPhase1(const TTsyReqHandle aTsyReqHandle, - CRetrieveMobilePhoneAuthenticationIds::TAuthRequestData* aRequest,TInt* aBufSize) - /** - 1st phase retrieval of the the call waiting status list - @param aReqHandle Handle to the request - @param aReqData information about the request - @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase - */ - { - TInt ret=KErrNone; - TInt leaveCode=KErrNone; - if (aRequest->iAuthInfo.iData==RMobilePhone::EGbaNafIdList) - { - iAuthType = EGba; - TRAP(leaveCode, ret=ProcessGetGbaPhase1L(aTsyReqHandle,& (aRequest->iClient),aBufSize)); - } - else if(aRequest->iAuthInfo.iData==RMobilePhone::EMbmsMskIdList) - { - iAuthType = EMbms; - TRAP(leaveCode, ret=ProcessGetMbmsPhase1L(aTsyReqHandle,& (aRequest->iClient),aBufSize)); - } - else - { - leaveCode = KErrCorrupt; - } - if (leaveCode != KErrNone) - { - iPhone->ReqCompleted(aTsyReqHandle,leaveCode); - } - return ret; - }; - -TInt CSimUsimR6::ProcessGetGbaPhase1L(const TTsyReqHandle aTsyReqHandle, - RMobilePhone::TClientId* aClientId,TInt* aBufSize) -/** Retrieve call waiting status of each line from phone, - store each CB status response as a list entry, - stream the list and then return size of this buffer to client - @param aReqHandle Handle to the request - @param aReqData information about the request - @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase - */ - { - // read the list, store its content and then return size of this buffer to client - CMobilePhoneGbaNafIdList* list=CMobilePhoneGbaNafIdList::NewL(); - CleanupStack::PushL(list); - TInt maxList = iGbaNafList->Enumerate(); - if(maxList) - { - for (TInt i=0;iAddEntryL(iGbaNafList->GetEntryL(i)); - } - } - else - { - CleanupStack::PopAndDestroy(list); - *aBufSize = 10; - iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); - return KErrNotFound; - } - // Store the streamed list and the client ID - CListReadAllAttempt* read=CListReadAllAttempt::NewL(*(aClientId), aTsyReqHandle); - CleanupStack::PushL(read); - - read->iListBuf = list->StoreLC(); - CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC - - iAuthListInfo->AppendL(read); - CleanupStack::Pop(); // pop the CListReadAllAttempt - - // return the CBufFlat’s size to client - *aBufSize=(read->iListBuf)->Size(); - - CleanupStack::PopAndDestroy(list); - - iPhone->ReqCompleted(aTsyReqHandle, KErrNone); - return KErrNone; - } - -TInt CSimUsimR6::ProcessGetMbmsPhase1L(const TTsyReqHandle aTsyReqHandle, - RMobilePhone::TClientId* aClientId,TInt* aBufSize) - { - CMobilePhoneMbmsMskIdList* list=CMobilePhoneMbmsMskIdList::NewL(); - CleanupStack::PushL(list); - TInt maxList; - if(iAuthType == EGba) - { - maxList = iGbaNafList->Enumerate(); - } - else - { - maxList = iMbmsMskList->Enumerate(); - } - if(maxList) - { - for (TInt i=0;iAddEntryL(iMbmsMskList->GetEntryL(i)); - } - } - else - { - CleanupStack::PopAndDestroy(list); - *aBufSize = 10; - iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); - return KErrNotFound; - } - - // Store the streamed list and the client ID - CListReadAllAttempt* read=CListReadAllAttempt::NewL(*(aClientId), aTsyReqHandle); - CleanupStack::PushL(read); - - read->iListBuf = list->StoreLC(); - CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC - - iAuthListInfo->AppendL(read); - CleanupStack::Pop(); // pop the CListReadAllAttempt - - // return the CBufFlat’s size to client - *aBufSize=(read->iListBuf)->Size(); - - CleanupStack::PopAndDestroy(list); - - iPhone->ReqCompleted(aTsyReqHandle, KErrNone); - return KErrNone; - } - -TInt CSimUsimR6::GetAuthenticationListPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId,TDes8* aBuf) -/** - * 2nd phase retrieval of the the call waiting status list - @param aReqHandle Handle to the request - @param aClient Ponter to the client - @param aBuf Buffer containiong the call waiting status list - */ - { - CListReadAllAttempt* read=NULL; - TBool tPosScen = ETrue; - - // Find the Authentication information for the client - if ( iAuthType == EGba) - { - for (TInt i=0; iCount (); ++i) - { - read = iAuthListInfo->At (i); - if ( (read->iClient.iSessionHandle==aId->iSessionHandle)&&(read->iClient.iSubSessionHandle==aId->iSubSessionHandle)) - { - if ( tPosScen) - { - TPtr8 bufPtr((read->iListBuf)->Ptr (0)); - // Copy the streamed list to the client - aBuf->Copy (bufPtr); - } - delete read; - iAuthListInfo->Delete (i); - User::After (300000); - iPhone->ReqCompleted (aTsyReqHandle, KErrNone); - return KErrNone; - } - } - } - else // authtype = EMbms - { - for (TInt i=0; iCount (); ++i) - { - read = iAuthListInfo->At (i); - if ( (read->iClient.iSessionHandle==aId->iSessionHandle)&&(read->iClient.iSubSessionHandle==aId->iSubSessionHandle)) - { - if ( tPosScen) - { - TPtr8 bufPtr((read->iListBuf)->Ptr (0)); - // Copy the streamed list to the client - aBuf->Copy (bufPtr); - } - delete read; - iAuthListInfo->Delete (i); - User::After (300000); - iPhone->ReqCompleted (aTsyReqHandle, KErrNone); - return KErrNone; - } - } - } - // Should handle error case of not finding the matching client from read phase 1 - return KErrNotFound; - } - -TInt CSimUsimR6::GetAuthenticationListCancel(const TTsyReqHandle aTsyReqHandle) - { - // Remove the read all attempt from iAuthReadAll - - CListReadAllAttempt* read=NULL; - for (TInt i=0; iCount(); ++i) - { - read = iAuthListInfo->At(i); - if (read->iReqHandle == aTsyReqHandle) - { - delete read; - iAuthListInfo->Delete(i); - break; - } - } - iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); - return KErrNone; - } - -TInt CSimUsimR6::RandTime() -/** Function that generates time(in seconds) at random for the SimTSY - * Maximum of ten seconds; zero seconds also included just to simulate the - * synchronous call scenario - */ - { - TInt ranT= Math::Random()%10; - return(ranT); - } - - - +// Copyright (c) 2007-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: +// This file contains the implementation for the Simulator USIM R6 class 'CSimUsimR6' +// +// + +/** + @file +*/ + +#include +#include +#include +#include +#include "CSimPhone.h" +#include "Simlog.h" +#include "CSimPubSubChange.h" +#include "CSimTsyMode.h" +#include +#include "CSimPubSub.h" +#include "SimTsy.h" +#include "simtsyglobalproperties.h" +#include "CSimUsimR6.h" +#include + +const TInt KUsimGranularity=2; // < Granularity for USIM list array +const TInt KUsimRel6DurationTimeoutDefault=1; +const TInt KUsimRel6DurationTimeoutDefault1=2; +const TInt KUsimRel6DurationTimeoutDefault2=3; + +CSimUsimR6* CSimUsimR6::NewL(CSimPhone* aPhone) +/** + * Standard two-phase constructor. + * @param aPhone The parent phone object. + * @return CSimUsimR6 The new network status class. + */ + { + CSimUsimR6* self=new(ELeave) CSimUsimR6(aPhone); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CSimUsimR6::CSimUsimR6(CSimPhone* aPhone) +: iPhone(aPhone) +/** +* Trivial first phase construction. +* @param aPhone The parent phone object. +*/ + { + iMailBoxNumberChangePending = EFalse; + iIccMessageWaitingPending = EFalse; + iMessageWaitingPending = EFalse; + iMailBoxNumberChangePendingV8 = EFalse; + iIccMessageWaitingPendingV8 = EFalse; + iNotifyWlanDataChangePending=EFalse; + iNotifyPreferredWlanSIDListChangePending= EFalse; + } + +void CSimUsimR6::ConstructL() +/** + * Second phase construction. Create instances of the necessary heap-based objects and read the necessary Release6 information + * from the configuration file. The config file informations simulates the information given by Network + * + * + */ + { + LOGMISC1("CSimUsimR6: Entered ConstructL()"); + iVoiceMailIds=new(ELeave) CArrayFixFlat(KUsimGranularity); + iMessageWaiting=new(ELeave) CArrayFixFlat(KUsimGranularity); + + iWlanData=new(ELeave) CArrayFixFlat(KUsimGranularity); + iWlanSid=new(ELeave) CArrayFixFlat(KUsimGranularity); + iPreferredNetworks=new(ELeave) CArrayFixFlat(KUsimGranularity); + + iGBAAuthInfoList =new(ELeave) CArrayFixFlat(KUsimGranularity); + iMBMSInfoList = new(ELeave) CArrayFixFlat(KUsimGranularity); + + iGbaNafList = CMobilePhoneGbaNafIdList::NewL(); + iMbmsMskList = CMobilePhoneMbmsMskIdList::NewL(); + + iTimer = CSimTimer::NewL(iPhone); + iWlanTimer = CSimTimer::NewL(iPhone); + iNotifyAuthTimer = CSimTimer::NewL(iPhone); + + iAuthListInfo = new(ELeave)CArrayPtrFlat(1); + iGetWlanSIDsData = new(ELeave) CArrayPtrFlat(1); + iGetPreferredNetworks = new(ELeave) CArrayPtrFlat(1); + + iCurrentNotifyMailboxIndex=0; + iCurrentIccMessageWaitingIndex=0; + iCurrentMessageWaitingIndex=0; + iGetIccMsgIdCurrentIndex=0; + iSetIccMsgIdCurrentIndex=0; + iNotifyWlanDataChangeIndex=0; + iNotifyPreferredWlanSIDListChangeIndex=0; + iNotifyPreferredNetworksChangeIndex=0; + iMailBoxIndex=0; + iIndex=0; + + TInt count; + count=CfgFile()->ItemCount(KUsimMailBoxIdInfo); + CTestConfigItem* item=NULL; + TInt ret=KErrNone; + + TInt i; + for(i=0;i(CfgFile()->Item(KUsimMailBoxIdInfo,i)); + if(!item) + { + break; + } + TInt voice,data,fax,other,video; + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,voice); + if(ret!=KErrNone) + { + LOGPARSERR("voice",ret,0,&KUsimMailBoxIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,data); + if(ret!=KErrNone) + { + LOGPARSERR("data",ret,1,&KUsimMailBoxIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,fax); + if(ret!=KErrNone) + { + LOGPARSERR("fax",ret,2,&KUsimMailBoxIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,other); + if(ret!=KErrNone) + { + LOGPARSERR("other",ret,3,&KUsimMailBoxIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,video); + if(ret!=KErrNone) + { + LOGPARSERR("video",ret,4,&KUsimMailBoxIdInfo); + continue; + } + RMobilePhone::TMobilePhoneVoicemailIdsV8 mailboxIdInfo; + mailboxIdInfo.iVoice=voice; + mailboxIdInfo.iData=data; + mailboxIdInfo.iFax=fax; + mailboxIdInfo.iOther=other; + mailboxIdInfo.iVideo=video; + iVoiceMailIds->AppendL(mailboxIdInfo); + } + count=CfgFile()->ItemCount(KUsimMessageWaitingIdInfo); + item=NULL; + for(i=0;i(CfgFile()->Item(KUsimMessageWaitingIdInfo,i)); + if(!item) + { + break; + } + TInt displayStatus,voiceMsgs,auxVoiceMsgs,dataMsgs,faxMsgs,emailMsgs,otherMsgs,videoMsgs; + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,displayStatus); + if(ret!=KErrNone) + { + LOGPARSERR("displayStatus",ret,0,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,voiceMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("voiceMsgs",ret,1,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,auxVoiceMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("auxVoiceMsgs",ret,2,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,dataMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("dataMsgs",ret,3,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,faxMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("faxMsgs",ret,4,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,emailMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("emailMsgs",ret,5,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6,otherMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("otherMsgs",ret,6,&KUsimMessageWaitingIdInfo); + continue; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7,videoMsgs); + if(ret!=KErrNone) + { + LOGPARSERR("longName",ret,7,&KUsimMessageWaitingIdInfo); + continue; + } + RMobilePhone::TMobilePhoneMessageWaitingV8 messageWaiting; + messageWaiting.iDisplayStatus = RMobilePhone::TMobilePhoneIndicatorDisplay(displayStatus); + messageWaiting.iVoiceMsgs = voiceMsgs; + messageWaiting.iAuxVoiceMsgs = auxVoiceMsgs; + messageWaiting.iDataMsgs = dataMsgs; + messageWaiting.iFaxMsgs = faxMsgs; + messageWaiting.iEmailMsgs = emailMsgs; + messageWaiting.iOtherMsgs = otherMsgs; + messageWaiting.iVideoMsgs = videoMsgs; + iMessageWaiting->AppendL(messageWaiting); + } + count=CfgFile()->ItemCount(KUsimWlanDataInfo); + item=NULL; + TUint16 digit=0; + RMobilePhone::TUsimWlanDataV8 wlanData; + for(i=0;i(CfgFile()->Item(KUsimWlanDataInfo,i)); + if(!item) + { + break; + } + TPtrC8 FieldsUsed,Pseudonym,ReauthenticationId,MasterKey,Counter; + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,FieldsUsed); + if(ret!=KErrNone) + { + LOGPARSERR("Fields Used",ret,0,&KUsimWlanDataInfo); + continue; + } + else + { + if(AsciiToNum(FieldsUsed, digit)==KErrNone) + { + wlanData.iFieldsUsed=digit; + } + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,Pseudonym); + if(ret!=KErrNone) + { + LOGPARSERR("Pseudonym",ret,1,&KUsimWlanDataInfo); + continue; + } + else + { + wlanData.iPseudonym.Copy(Pseudonym); + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,ReauthenticationId); + if(ret!=KErrNone) + { + LOGPARSERR("ReauthenticationId",ret,2,&KUsimWlanDataInfo); + continue; + } + else + { + wlanData.iReauthenticationId.Copy(ReauthenticationId); + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,MasterKey); + if(ret!=KErrNone) + { + LOGPARSERR("MasterKey",ret,3,&KUsimWlanDataInfo); + continue; + } + else + { + wlanData.iMasterKey.Copy(MasterKey); + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,Counter); + if(ret!=KErrNone) + { + LOGPARSERR("Counter",ret,4,&KUsimWlanDataInfo); + continue; + } + else + { + wlanData.iCounter.Copy(Counter); + } + iWlanData->AppendL(wlanData); + } + count=CfgFile()->ItemCount(KUsimWlanSidInfo); + item=NULL; + RMobilePhone::TWlanSIDV8 wlanSid; + for(i=0;i(CfgFile()->Item(KUsimWlanSidInfo,i)); + if(!item) + { + break; + } + TPtrC8 wlanSidBuf; + TInt userDef; + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,wlanSidBuf); + if(ret!=KErrNone) + { + LOGPARSERR("Wlan Sid Buffer",ret,0,&KUsimWlanSidInfo); + continue; + } + else + { + wlanSid.iWSID.Copy(wlanSidBuf); + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,userDef); + if(ret!=KErrNone) + { + LOGPARSERR("User Defined",ret,1,&KUsimWlanSidInfo); + continue; + } + else + { + wlanSid.iUserDefined=userDef; + } + iWlanSid->AppendL(wlanSid); + } + count=CfgFile()->ItemCount(KUsimPreferredNetworksInfo); + item=NULL; + RMobilePhone::TMobilePreferredNetworkEntryV3 networkEntry; + for(i=0;i(CfgFile()->Item(KUsimPreferredNetworksInfo,i)); + if(!item) + { + break; + } + TPtrC8 accessId,countryCode,networkId; + TInt userDef; + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,accessId); + if(ret!=KErrNone) + { + LOGPARSERR("Access Id",ret,0,&KUsimPreferredNetworksInfo); + continue; + } + else + { + if(AsciiToNum(accessId, digit)==KErrNone) + { + networkEntry.iAccess=digit; + } + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,userDef); + if(ret!=KErrNone) + { + LOGPARSERR("User Defined",ret,1,&KUsimPreferredNetworksInfo); + continue; + } + else + { + networkEntry.iUserDefined=userDef; + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,countryCode); + if(ret!=KErrNone) + { + LOGPARSERR("Country Code",ret,1,&KUsimPreferredNetworksInfo); + continue; + } + else + { + networkEntry.iCountryCode.Copy(countryCode); + } + ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,networkId); + if(ret!=KErrNone) + { + LOGPARSERR("Network Id",ret,1,&KUsimPreferredNetworksInfo); + continue; + } + else + { + networkEntry.iNetworkId.Copy(networkId); + } + + iPreferredNetworks->AppendL(networkEntry); + } + LOGPHONE1("Starting to Parse GBA Authentication Info"); + count = CfgFile()->ItemCount(KGBAAuthInfo); + TGBAAuthInfo authInfo; + + TInt index; + for(index = 0; index < count; index++) + { + item = const_cast(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; + + //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.iOtherAppBusy = OtherApplnBusy; + } + //Get the CurrentApplnActive + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 11, applnActive); + if(ret != KErrNone) + { + LOGPARSERR("applnActive",ret,11,&KGBAAuthInfo); + continue; + } + else + { + authInfo.iAppActive = 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 + LOGPHONE1("Starting to Parse GBA 2 Phase Retrieval list information"); + count = CfgFile()->ItemCount(KGBAListInfo); + RMobilePhone::TGbaNafEntryV8 entry; + for(index = 0; index < count; index++) + { + item = const_cast(CfgFile()->Item(KGBAListInfo, index)); + if(item == NULL) + { + break; + } + CleanupStack::PushL(item); + TInt ret = KErrNone; + TPtrC8 NafId, Btid; + + //Get the NafID + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, NafId); + if(ret != KErrNone) + { + LOGPARSERR("NafID",ret,0,&KGBAListInfo); + continue; + } + else + { + entry.iNafId.Copy(NafId); + } + + //Get the Btid + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, Btid); + if(ret != KErrNone) + { + LOGPARSERR("BTID",ret,1,&KGBAListInfo); + continue; + } + else + { + entry.iBtid.Copy(Btid); + } + + iGbaNafList->AddEntryL(entry); + CleanupStack::Pop(item); + } + LOGPHONE1("Starting to Parse MBMS related config information"); + count = CfgFile()->ItemCount(KMBMSInfo); + TMBMSInfo tMbmsInfo; + for(index = 0; index < count; index++) + { + item = const_cast(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 iMukid + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 6, MukId ); + if(ret != KErrNone) + { + LOGPARSERR("iMukIdTlv ",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.iAppActive = 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); + } + + LOGPHONE1("Starting to Parse MBMS 2 Phase Retrieval list information"); + count = CfgFile()->ItemCount(KMBMSListInfo); + RMobilePhone::TMskEntryV8 mskEntry; + for(index = 0; index < count; index++) + { + item = const_cast(CfgFile()->Item(KMBMSListInfo, index)); + if(item == NULL) + { + break; + } + CleanupStack::PushL(item); + TInt ret = KErrNone; + TPtrC8 MskId,KeyDomain,TimeStamp; + + //Get the MskId + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 0, MskId); + if(ret != KErrNone) + { + LOGPARSERR("MskId",ret,0,&KMBMSListInfo); + continue; + } + else + { + mskEntry.iMskId.Copy(MskId); + } + + //Get the KeyDomainGroup + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 1, KeyDomain); + if(ret != KErrNone) + { + LOGPARSERR("KeyDomain",ret,1,&KMBMSListInfo); + continue; + } + else + { + mskEntry.iKeyDomainId.Copy(KeyDomain); + } + + //Get the TimeStampCounter + + ret = CTestConfig::GetElement(item->Value(), KStdDelimiter, 2, TimeStamp); + if(ret != KErrNone) + { + LOGPARSERR("TimeStampCounter",ret,2,&KMBMSListInfo); + continue; + } + else + { + mskEntry.iTimeStampCounter.Copy(TimeStamp); + } + + iMbmsMskList->AddEntryL(mskEntry); + CleanupStack::Pop(item); + } + if((iGBAAuthInfoList->Count()!=0) || + (iMBMSInfoList->Count() !=0 ) || + (iMessageWaiting->Count()!=0)) + { + iListIndex=0; + iTimer->Start(KUsimRel6DurationTimeoutDefault2,this,ETimerIdNotifyUSimRel6Event); + } + }; + +CSimUsimR6::~CSimUsimR6() +/** +* Trivial Destructor +* Closes all CObject type objects and destroys all other objects created in the ConstructL() +* +*/ + { + LOGMISC1("CSimUsimR6: Entered destructor"); + if(iTimer) + { + delete iTimer; + } + if(iWlanTimer) + { + delete iWlanTimer; + } + if(iNotifyAuthTimer) + { + delete iNotifyAuthTimer; + } + if (iVoiceMailIds) + { + iVoiceMailIds->Delete(0,iVoiceMailIds->Count()); + delete iVoiceMailIds; + } + if (iMessageWaiting) + { + iMessageWaiting->Delete(0,iMessageWaiting->Count()); + delete iMessageWaiting; + } + if (iWlanData) + { + iWlanData->Delete(0,iWlanData->Count()); + delete iWlanData; + } + if (iWlanSid) + { + iWlanSid->Delete(0,iWlanSid->Count()); + delete iWlanSid; + } + if (iPreferredNetworks) + { + iPreferredNetworks->Delete(0,iPreferredNetworks->Count()); + delete iPreferredNetworks; + } + if(iGetWlanSIDsData) + { + iGetWlanSIDsData->ResetAndDestroy(); + } + delete iGetWlanSIDsData; + if(iGetPreferredNetworks) + { + iGetPreferredNetworks->ResetAndDestroy(); + } + delete iGetPreferredNetworks; + if(iGBAAuthInfoList) + { + iGBAAuthInfoList->Delete(0,iGBAAuthInfoList->Count()); + delete iGBAAuthInfoList; + } + if(iAuthListInfo) + { + iAuthListInfo->ResetAndDestroy(); + } + delete iAuthListInfo; + if(iMBMSInfoList) + { + iMBMSInfoList->Delete(0,iMBMSInfoList->Count()); + delete iMBMSInfoList; + } + if(iGbaNafList) + { + delete iGbaNafList; + } + if(iMbmsMskList) + { + delete iMbmsMskList; + } + LOGMISC1("CSimUsimR6: Leaving destructor"); + } + +const CTestConfigSection* CSimUsimR6::CfgFile() +/** + * Returns a pointer to the current configuration file section. + * + * @return CTestConfigSection A pointer to the current configuration file data section. + */ + { + return iPhone->CfgFile(); + } + +void CSimUsimR6::TimerCallBack(TInt /**aId*/) +/** +* Timer callback function. When the timer goes off, it will call back into this +* function for further processing. +* +* @param aId an id identifying which timer callback is being called +*/ + { + if (iMailBoxNumberChangePending) + { + iMailBoxNumberChangePending = EFalse; + RMobilePhone::TMobilePhoneVoicemailIdsV3* mailbox = reinterpret_cast(iMailBoxNumberChange); + mailbox->iVoice = iVoiceMailIds->At(0).iVoice; + mailbox->iData= iVoiceMailIds->At(0).iData; + mailbox->iFax = iVoiceMailIds->At(0).iFax; + mailbox->iOther = iVoiceMailIds->At(0).iOther; + iPhone->ReqCompleted (iMailBoxNumberChangeNotificationReqHandle,KErrNone); + iTimer->Start (KUsimRel6DurationTimeoutDefault2, this,ETimerIdNotifyUSimRel6Event); + } + + else if (iMailBoxNumberChangePendingV8) + { + iMailBoxNumberChangePendingV8 = EFalse; + RMobilePhone::TMobilePhoneVoicemailIdsV8* mailbox = reinterpret_cast(iMailBoxNumberChangeV8); + mailbox->iVoice = iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iVoice; + mailbox->iData= iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iData; + mailbox->iFax = iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iFax; + mailbox->iOther = iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iOther; + mailbox->iVideo= iVoiceMailIds->At(iCurrentNotifyMailboxIndex).iVideo; + iPhone->ReqCompleted (iMailBoxNumberChangeNotificationReqHandleV8,KErrNone); + iCurrentNotifyMailboxIndex++; + iTimer->Start (KUsimRel6DurationTimeoutDefault2, this,ETimerIdNotifyUSimRel6Event); + } + + else if (iIccMessageWaitingPending) + { + iIccMessageWaitingPending=EFalse; + RMobilePhone::TMobilePhoneMessageWaitingV1* messageWaiting = reinterpret_cast(iIccMsgWaiting); + messageWaiting->iDisplayStatus = iMessageWaiting->At(0).iDisplayStatus; + messageWaiting->iVoiceMsgs= iMessageWaiting->At(0).iVoiceMsgs; + messageWaiting->iAuxVoiceMsgs = iMessageWaiting->At(0).iAuxVoiceMsgs; + messageWaiting->iDataMsgs = iMessageWaiting->At(0).iDataMsgs; + messageWaiting->iFaxMsgs= iMessageWaiting->At(0).iFaxMsgs; + messageWaiting->iEmailMsgs= iMessageWaiting->At(0).iEmailMsgs; + messageWaiting->iOtherMsgs= iMessageWaiting->At(0).iOtherMsgs; + iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandle,KErrNone); + iTimer->Start (KUsimRel6DurationTimeoutDefault1, this,ETimerIdNotifyUSimRel6Event); + } + + else if (iIccMessageWaitingPendingV8) + { + iIccMessageWaitingPendingV8=EFalse; + RMobilePhone::TMobilePhoneMessageWaitingV8* messageWaiting = reinterpret_cast(iIccMsgWaitingV8); + messageWaiting->iDisplayStatus = iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iDisplayStatus; + messageWaiting->iVoiceMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iVoiceMsgs; + messageWaiting->iAuxVoiceMsgs = iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iAuxVoiceMsgs; + messageWaiting->iDataMsgs = iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iDataMsgs; + messageWaiting->iFaxMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iFaxMsgs; + messageWaiting->iEmailMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iEmailMsgs; + messageWaiting->iOtherMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iOtherMsgs; + messageWaiting->iVideoMsgs= iMessageWaiting->At(iCurrentIccMessageWaitingIndex).iVideoMsgs; + iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandleV8, KErrNone); + iCurrentIccMessageWaitingIndex++; + iTimer->Start (KUsimRel6DurationTimeoutDefault1, this,ETimerIdNotifyUSimRel6Event); + } + + else if (iMessageWaitingPending) + { + iMessageWaitingPending=EFalse; + *iMsgWaitingCount=6; + iPhone->ReqCompleted (iMessageWaitingNotificationReqHandle, KErrNone); + iTimer->Start (KUsimRel6DurationTimeoutDefault, this,ETimerIdNotifyUSimRel6Event); + } + + else if (iNotifyPreferredWlanSIDListChangePending) + { + iNotifyPreferredWlanSIDListChangePending=EFalse; + iPhone->ReqCompleted (iNotifyPreferredWlanSIDListReqHandle,KErrNone); + iNotifyPreferredWlanSIDListChangeIndex++; + iTimer->Start (KUsimRel6DurationTimeoutDefault1,this, ETimerIdNotifyUSimRel6Event); + } + + else if ( iNotifyPreferredNetworksChangePending) + { + iNotifyPreferredNetworksChangePending=EFalse; + iPhone->ReqCompleted (iNotifyPreferredNetworksReqHandle,KErrNone); + iNotifyPreferredNetworksChangeIndex++; + iTimer->Start (KUsimRel6DurationTimeoutDefault1, this,ETimerIdNotifyUSimRel6Event); + } + + else if (iNotifyWlanDataChangePending) + { + iNotifyWlanDataChangePending=EFalse; + if (iNotifyWlanDataChange->iFieldsUsed == iWlanData->At(0).iFieldsUsed) + { + iNotifyWlanDataChange->iPseudonym = iWlanData->At(0).iPseudonym; + iNotifyWlanDataChange->iReauthenticationId = iWlanData->At(0).iReauthenticationId; + } + else if (iNotifyWlanDataChange->iFieldsUsed == iWlanData->At(1).iFieldsUsed) + { + iNotifyWlanDataChange->iPseudonym = iWlanData->At(1).iPseudonym; + iNotifyWlanDataChange->iReauthenticationId = iWlanData->At(1).iReauthenticationId; + iNotifyWlanDataChange->iMasterKey = iWlanData->At(1).iMasterKey; + iNotifyWlanDataChange->iCounter = iWlanData->At(1).iCounter; + } + else + { + iNotifyWlanDataChange->iFieldsUsed = iWlanData->At(1).iFieldsUsed; + iNotifyWlanDataChange->iPseudonym = iWlanData->At(1).iPseudonym; + iNotifyWlanDataChange->iReauthenticationId = iWlanData->At(1).iReauthenticationId; + iNotifyWlanDataChange->iMasterKey = iWlanData->At(1).iMasterKey; + iNotifyWlanDataChange->iCounter = iWlanData->At(1).iCounter; + } + iPhone->ReqCompleted (iNotifyWlanDataChangeReqHandle,KErrNone); + iNotifyWlanDataChangeIndex++; + } + + else if (iSetGBABootstrapParams.iNotifyPending || + iNotifyAuthDataChange.iNotifyPending || + iGetAuthParams.iNotifyPending) + { + if (iSetGBABootstrapParams.iNotifyPending) + { + RMobilePhone::TBsfDataV8 + &bsfDataV8 = *(RMobilePhone::TBsfDataV8*)iSetGBABootstrapParams.iNotifyData; + + if ((bsfDataV8.iBtid != iGBAAuthInfoList->At(iListIndex).iBtid)||(bsfDataV8.iKeyLifetime != iGBAAuthInfoList->At(iListIndex).iKeyLifeTime)) + { + iPhone->ReqCompleted ( + iSetGBABootstrapParams.iNotifyHandle, + KErrAccessDenied); + } + else + { + iPhone->ReqCompleted ( + iSetGBABootstrapParams.iNotifyHandle, + KErrNone); + } + iSetGBABootstrapParams.iNotifyPending = EFalse; + } + + if (iNotifyAuthDataChange.iNotifyPending) + { + iNotifyAuthDataChange.iNotifyPending = EFalse; + RMobilePhone::TAuthInfoV8 + &authInfoV8 = *(RMobilePhone::TAuthInfoV8*) iNotifyAuthDataChange.iNotifyData; + + authInfoV8.iAID = iGBAAuthInfoList->At(iListIndex).iAID; + + if (iGBAAuthInfoList->At(iListIndex).iAppActive) + { + authInfoV8.iData = RMobilePhone::EGbaBootstrapParams; + } + else + { + authInfoV8.iData = RMobilePhone::EGbaNafIdList; + } + iPhone->ReqCompleted (iNotifyAuthDataChange.iNotifyHandle, KErrNone); + } + if (iGetAuthParams.iNotifyPending) + { + RMobilePhone::TMultimodeType + &tMultimode = *(RMobilePhone::TMultimodeType*) iGetAuthParams.iNotifyData; + TInt ret = iGBAAuthInfoList->At(iListIndex).iAuthErr; + TInt ret1 = iMBMSInfoList->At(iListIndex).iAuthErr; + if (ret == KErrNone || ret1 == KErrNone) + { + if (tMultimode.ExtensionId ()== RMobilePhone::KETelMobileGbaBootstrapParamsV8) + { + // for GBA + RMobilePhone::TGbaBootstrapParamsV8 + &tGbaBootstrapV8 = *(RMobilePhone::TGbaBootstrapParamsV8*) iGetAuthParams.iNotifyData; + tGbaBootstrapV8.iBtid = iGBAAuthInfoList->At(iListIndex).iBtid; + tGbaBootstrapV8.iKeyLifetime = iGBAAuthInfoList->At(iListIndex).iKeyLifeTime; + tGbaBootstrapV8.iRand = iGBAAuthInfoList->At(iListIndex).iRAND; + } + else + if ( tMultimode.ExtensionId ()== RMobilePhone::KETelMobileMbmsUserKeyV8) + { + // for MBMS + RMobilePhone::TMbmsUserKeyV8 + &tMbmsUserKeyV8 = *(RMobilePhone::TMbmsUserKeyV8*) iGetAuthParams.iNotifyData; + tMbmsUserKeyV8.iMukIdi = iMBMSInfoList->At(iListIndex).iMukIdi; + tMbmsUserKeyV8.iMukIdr = iMBMSInfoList->At(iListIndex).iMukIdr; + tMbmsUserKeyV8.iTimeStampCounter = iMBMSInfoList->At(iListIndex).iMukTimestamp; + } + else + { + // handle error scenario. + (void) tMultimode; + iPhone->ReqCompleted ( + iGetAuthParams.iNotifyHandle, + KErrCorrupt); + } + iPhone->ReqCompleted (iGetAuthParams.iNotifyHandle, KErrNone); + } + else + { + if (tMultimode.ExtensionId ()== RMobilePhone::KETelMobileMbmsUserKeyV8 && ret1 != KErrNone) + { + if (!(ret1 == KErrAccessDenied)) + { + // for MBMS + RMobilePhone::TMbmsUserKeyV8 + &tMbmsUserKeyV8 = *(RMobilePhone::TMbmsUserKeyV8*) iGetAuthParams.iNotifyData; + tMbmsUserKeyV8.iMukIdi = iMBMSInfoList->At(iListIndex).iMukIdi; + tMbmsUserKeyV8.iMukIdr = iMBMSInfoList->At(iListIndex).iMukIdr; + tMbmsUserKeyV8.iTimeStampCounter = iMBMSInfoList->At(iListIndex).iMukTimestamp; + } + iPhone->ReqCompleted (iGetAuthParams.iNotifyHandle, ret1); + } + else + { + iPhone->ReqCompleted (iGetAuthParams.iNotifyHandle, ret); + } + } + iGetAuthParams.iNotifyPending = EFalse; + } + iTimer->Start (RandTime (), this); + LOGMISC1("<* paramPckg=(TPckg*)aMailBox; + RMobilePhone::TMultimodeType& paramclass=(*paramPckg)(); + if(paramclass.ExtensionId() == KETelExtMultimodeV3) + { + __ASSERT_ALWAYS(!iMailBoxNumberChangePending,SimPanic(ENotificationReqAlreadyOutstanding)); + RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg* voicemailPckg=(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*)aMailBox; + RMobilePhone::TMobilePhoneVoicemailIdsV3& voicemail=(*voicemailPckg)(); + // Check that the data structure is supported by the simulated TSY version + TInt err = iPhone->CheckSimTsyVersion(voicemail); + if(err != KErrNone) + { + iPhone->ReqCompleted(aReqHandle, err); + return KErrNone; + } + iMailBoxNumberChangePending=ETrue; + iMailBoxNumberChangeNotificationReqHandle=aReqHandle; + iMailBoxNumberChange=&voicemail; + } + if(paramclass.ExtensionId() == KEtelExtMultimodeV8) + { + __ASSERT_ALWAYS(!iMailBoxNumberChangePendingV8,SimPanic(ENotificationReqAlreadyOutstanding)); + RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg* voicemailV8Pckg=(RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg*)aMailBox; + RMobilePhone::TMobilePhoneVoicemailIdsV8& voicemailV8=(*voicemailV8Pckg)(); + // Check that the data structure is supported by the simulated TSY version + TInt err = iPhone->CheckSimTsyVersion(voicemailV8); + if(err != KErrNone) + { + iPhone->ReqCompleted(aReqHandle, err); + return KErrNone; + } + iMailBoxNumberChangePendingV8=ETrue; + iMailBoxNumberChangeNotificationReqHandleV8=aReqHandle; + iMailBoxNumberChangeV8=&voicemailV8; + } + else + { + iPhone->ReqCompleted(aReqHandle,KErrNotSupported); + return KErrNone; + } + return KErrNone; + } + +TInt CSimUsimR6::NotifyMailboxNumbersChangeCancel(const TTsyReqHandle aTsyReqHandle) +/** +* Cancel a previous request from an client to be notified of a change in mailbox numbers identifiers.. +* @param aTsyReqHandle request handle +*/ + { + if(iMailBoxNumberChangePending && iMailBoxNumberChangeNotificationReqHandle == aTsyReqHandle) + { + iMailBoxNumberChangePending=EFalse; + iPhone->ReqCompleted(iMailBoxNumberChangeNotificationReqHandle,KErrCancel); + } + else if(iMailBoxNumberChangePendingV8 && iMailBoxNumberChangeNotificationReqHandleV8 == aTsyReqHandle) + { + iMailBoxNumberChangePendingV8=EFalse; + iPhone->ReqCompleted(iMailBoxNumberChangeNotificationReqHandleV8,KErrCancel); + } + return KErrNone; + } + +TInt CSimUsimR6::NotifyMessageWaiting(TTsyReqHandle aReqHandle, TInt* aCount) +/** + * This function member allows a client to be notified when the phone receives + * a message waiting indication from the network. + * @param aReqHandle The request handle associated with this request. + * @param aCount This parameter is filled with the number of voice mail messages waiting in the network. + * @return TInt Standard error value. + */ + { + __ASSERT_ALWAYS(!iMessageWaitingPending,SimPanic(ENotificationReqAlreadyOutstanding)); + iMessageWaitingPending=ETrue; + iMessageWaitingNotificationReqHandle=aReqHandle; + iMsgWaitingCount=aCount; + return KErrNone; + }; + +TInt CSimUsimR6::NotifyMessageWaitingCancel(const TTsyReqHandle aReqHandle) + { + if(iMessageWaitingPending && iMessageWaitingNotificationReqHandle == aReqHandle) + { + iMessageWaitingPending=EFalse; + iPhone->ReqCompleted(iMessageWaitingNotificationReqHandle,KErrCancel); + } + return KErrNone; + }; + +TInt CSimUsimR6::NotifyIccMessageWaitingIndicatorsChange(TTsyReqHandle aReqHandle, TDes8* aMsgIndicators) +/** + * This function member notifies the client if the message waiting indicators + * on the current ICC change. + * @param aReqHandle The request handle associated with this request. + * @param aMsgIndicators This parameter is filled with the message waiting indicators infromation. + * @return TInt Standard error value. + */ + { + TPckg* paramPckg=(TPckg*)aMsgIndicators; + RMobilePhone::TMultimodeType& paramclass=(*paramPckg) (); + if ( paramclass.ExtensionId ()== KETelExtMultimodeV1) + { + __ASSERT_ALWAYS(!iIccMessageWaitingPending,SimPanic(ENotificationReqAlreadyOutstanding)); + RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; + RMobilePhone::TMobilePhoneMessageWaitingV1& messagewaiting=(*messagewaitingPckg) (); + // Check that the data structure is supported by the simulated TSY version + TInt err = iPhone->CheckSimTsyVersion (messagewaiting); + if ( err != KErrNone) + { + iPhone->ReqCompleted (aReqHandle, err); + return KErrNone; + } + iIccMessageWaitingPending=ETrue; + iIccMessageWaitingNotificationReqHandle=aReqHandle; + iIccMsgWaiting=&messagewaiting; + } + if (paramclass.ExtensionId ()== KEtelExtMultimodeV8) + { + __ASSERT_ALWAYS(!iIccMessageWaitingPendingV8,SimPanic(ENotificationReqAlreadyOutstanding)); + RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*)aMsgIndicators; + RMobilePhone::TMobilePhoneMessageWaitingV8& messagewaiting=(*messagewaitingPckg) (); + // Check that the data structure is supported by the simulated TSY version + TInt err = iPhone->CheckSimTsyVersion (messagewaiting); + if ( err != KErrNone) + { + iPhone->ReqCompleted (aReqHandle, err); + return KErrNone; + } + iIccMessageWaitingPendingV8=ETrue; + iIccMessageWaitingNotificationReqHandleV8=aReqHandle; + iIccMsgWaitingV8=&messagewaiting; + } + else + { + iPhone->ReqCompleted (aReqHandle, KErrNotSupported); + return KErrNone; + } + return KErrNone; + } + +TInt CSimUsimR6::NotifyIccMessageWaitingIndicatorsChangeCancel(const TTsyReqHandle aTsyReqHandle) +/** +* Cancel a previous request from an client to be notified of a change in the message waiting indicators +* on the current ICC. +* @param aTsyReqHandle request handle +*/ + { + if ( iIccMessageWaitingPending && iIccMessageWaitingNotificationReqHandle == aTsyReqHandle) + { + iIccMessageWaitingPending=EFalse; + iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandle, KErrCancel); + } + else + if ( iIccMessageWaitingPendingV8 && iIccMessageWaitingNotificationReqHandleV8 == aTsyReqHandle) + { + iIccMessageWaitingPendingV8=EFalse; + iPhone->ReqCompleted (iIccMessageWaitingNotificationReqHandleV8, KErrCancel); + } + return KErrNone; + } + +TInt CSimUsimR6::GetMailboxNumbers(TTsyReqHandle aReqHandle,TDes8* aMailBox) +/** + * Retrieves the Mailbox numbers identifier information from the EF_MBI file in the USIM. + * @param aReqHandle The request handle associated with this request. + * @param aMailBox This will be populated with the + * mailbox identifier information to be returned. + * @return TInt Standard error value. + */ + { + RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg* voicemailPckg=(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*)aMailBox; + RMobilePhone::TMultimodeType& packagetype = (*voicemailPckg)(); + + if(packagetype.ExtensionId() == KETelExtMultimodeV3 || packagetype.ExtensionId() == KEtelExtMultimodeV8) + { + RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg* voicemailPckg=(RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg*)aMailBox; + RMobilePhone::TMobilePhoneVoicemailIdsV3& mailbox=(*voicemailPckg)(); + mailbox.iVoice = iVoiceMailIds->At(iCurrentIndex).iVoice; + mailbox.iData = iVoiceMailIds->At(iCurrentIndex).iData; + mailbox.iFax = iVoiceMailIds->At(iCurrentIndex).iFax; + mailbox.iOther = iVoiceMailIds->At(iCurrentIndex).iOther; + } + if(packagetype.ExtensionId() == KEtelExtMultimodeV8) + { + RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg* voicemailV8Pckg=(RMobilePhone::TMobilePhoneVoicemailIdsV8Pckg*)aMailBox; + RMobilePhone::TMobilePhoneVoicemailIdsV8& voicemailV8=(*voicemailV8Pckg)(); + voicemailV8.iVideo = iVoiceMailIds->At(iCurrentIndex).iVideo; + } + iCurrentIndex++; + iPhone->ReqCompleted(aReqHandle,KErrNone); + return KErrNone; + } + +TInt CSimUsimR6::GetIccMessageWaitingIndicators(TTsyReqHandle aReqHandle,TDes8* aMsgIndicators) +/** + * This function member retrieves the set of message waiting indicators from the + * current ICC. + * @param aReqHandle The request handle associated with this request. + * @param aMsgIndicators The first parameter package.This will be populated with the + * message waiting indicators information to be returned. + * @return TInt Standard error value. + */ + { + RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; + RMobilePhone::TMultimodeType& packagetype = (*messagewaitPckg)(); + + if(packagetype.ExtensionId() == KETelExtMultimodeV1 || packagetype.ExtensionId() == KEtelExtMultimodeV8) + { + RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; + RMobilePhone::TMobilePhoneMessageWaitingV1& messagewaiting=(*messagewaitingPckg)(); + messagewaiting.iDisplayStatus=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iDisplayStatus; + messagewaiting.iVoiceMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iVoiceMsgs; + messagewaiting.iAuxVoiceMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iAuxVoiceMsgs; + messagewaiting.iDataMsgs =iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iDataMsgs; + messagewaiting.iFaxMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iFaxMsgs; + messagewaiting.iEmailMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iEmailMsgs; + messagewaiting.iOtherMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iOtherMsgs; + } + if(packagetype.ExtensionId() == KEtelExtMultimodeV8) + { + RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* messagewaitingV8Pckg=(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*)aMsgIndicators; + RMobilePhone::TMobilePhoneMessageWaitingV8& messagewaitingV8=(*messagewaitingV8Pckg)(); + messagewaitingV8.iVideoMsgs=iMessageWaiting->At(iGetIccMsgIdCurrentIndex).iVideoMsgs; + iGetIccMsgIdCurrentIndex++; + } + else + { + iPhone->ReqCompleted(aReqHandle,KErrNotSupported); + return KErrNone; + } + iPhone->ReqCompleted(aReqHandle,KErrNone); + return KErrNone; + } + +TInt CSimUsimR6::SetIccMessageWaitingIndicators(TTsyReqHandle aReqHandle,TDes8* aMsgIndicators) +/** + * Sending information about the set of message waiting indicators from the + * current ICC. + * @param aReqHandle The request handle associated with this request. + * @param aMsgIndicators The first parameter package.This contains the + * message waiting indicators information + * @return TInt Standard error value. + */ + { + RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; + RMobilePhone::TMultimodeType& packagetype = (*messagewaitPckg)(); + + if(packagetype.ExtensionId() == KETelExtMultimodeV1) + { + RMobilePhone::TMobilePhoneMessageWaitingV1Pckg* messagewaitingPckg=(RMobilePhone::TMobilePhoneMessageWaitingV1Pckg*)aMsgIndicators; + RMobilePhone::TMobilePhoneMessageWaitingV1& messagewaiting=(*messagewaitingPckg)(); + + if ((messagewaiting.iVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iVoiceMsgs) || + (messagewaiting.iAuxVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iAuxVoiceMsgs) || + (messagewaiting.iDataMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iDataMsgs) || + (messagewaiting.iFaxMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iFaxMsgs) || + (messagewaiting.iEmailMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iEmailMsgs) || + (messagewaiting.iOtherMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iOtherMsgs)) + { + iPhone->ReqCompleted(aReqHandle,KErrCorrupt); //KErrCorrupt + } + else + { + iPhone->ReqCompleted(aReqHandle,KErrNone); + } + } + + if(packagetype.ExtensionId() == KEtelExtMultimodeV8) + { + RMobilePhone::TMobilePhoneMessageWaitingV8Pckg* messagewaitingV8Pckg=(RMobilePhone::TMobilePhoneMessageWaitingV8Pckg*)aMsgIndicators; + RMobilePhone::TMobilePhoneMessageWaitingV8& messagewaitingV8=(*messagewaitingV8Pckg)(); + + if ((messagewaitingV8.iVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iVoiceMsgs) || + (messagewaitingV8.iAuxVoiceMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iAuxVoiceMsgs) || + (messagewaitingV8.iDataMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iDataMsgs) || + (messagewaitingV8.iFaxMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iFaxMsgs) || + (messagewaitingV8.iEmailMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iEmailMsgs) || + (messagewaitingV8.iOtherMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iOtherMsgs) || + (messagewaitingV8.iVideoMsgs != iMessageWaiting->At(iSetIccMsgIdCurrentIndex).iVideoMsgs)) + { + iPhone->ReqCompleted(aReqHandle,KErrCorrupt); //KErrCorrupt + } + else + { + iSetIccMsgIdCurrentIndex++; + iPhone->ReqCompleted(aReqHandle,KErrNone); + } + } + else + { + iPhone->ReqCompleted(aReqHandle,KErrNotSupported); + } + return KErrNone; + } + +// +// Wireless LAN (WLAN) +// + +TInt CSimUsimR6::NotifyWlanDataChange(const TTsyReqHandle aTsyReqHandle,TDes8* aData) +/** + * Notification request posted by the client is completed by the TSY when there is a change in + * the Wlan Data. This API upon completion returns the current Wlan Data to the client. + * @param aReqHandle The request handle associated with this request. + * @param aData This contains the current Wlan data upon completion. + * @return TInt Standard error value. + */ + { + __ASSERT_ALWAYS(!iNotifyWlanDataChangePending,SimPanic(ENotificationReqAlreadyOutstanding)); + RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = reinterpret_cast (aData); + RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)(); + iNotifyWlanDataChangeReqHandle=aTsyReqHandle; + iNotifyWlanDataChange=&WlanDataV8; + if(iIndex%2==0) + { + iNotifyWlanDataChangePending=ETrue; + iWlanTimer->Start(KUsimRel6DurationTimeoutDefault,this,ETimerIdNotifyWlanDataEvent); + } + iIndex++; + return KErrNone; + } + +TInt CSimUsimR6::NotifyWlanDataChangeCancel(TTsyReqHandle aTsyReqHandle) +/** + * This API is used by the TSY to cancel any pending NotifyWlanDataChange request. + * @param aReqHandle The request handle associated with this request. + * @return TInt Standard error value. + */ + { + if(iNotifyWlanDataChangeReqHandle==aTsyReqHandle) + { + iNotifyWlanDataChangePending=EFalse; + iPhone->ReqCompleted(iNotifyWlanDataChangeReqHandle,KErrCancel); + } + return KErrNone; + } + +TInt CSimUsimR6::SetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData) +/** + * This API is used by the TSY to receive the Wlan data sent by the client. + * @param aReqHandle The request handle associated with this request. + * @param aData This contains the Wlan Data. + * @return TInt Standard error value. + */ + { + RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = reinterpret_cast (aData); + RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)(); + + if(WlanDataV8.iPseudonym==SIMTSY_PHONE_WLAN_ACESS_DENIED) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrAccessDenied); + } + else if(WlanDataV8.iFieldsUsed == iWlanData->At(0).iFieldsUsed) + { + if((WlanDataV8.iPseudonym != iWlanData->At(0).iPseudonym) || + (WlanDataV8.iReauthenticationId != iWlanData->At(0).iReauthenticationId)) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); + } + else + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + } + else if(WlanDataV8.iFieldsUsed == iWlanData->At(1).iFieldsUsed) + { + if((WlanDataV8.iPseudonym != iWlanData->At(1).iPseudonym) || + (WlanDataV8.iReauthenticationId != iWlanData->At(1).iReauthenticationId) || + (WlanDataV8.iMasterKey != iWlanData->At(1).iMasterKey) || + (WlanDataV8.iCounter != iWlanData->At(1).iCounter)) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); + } + else + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + } + else + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + return KErrNone; + } + +TInt CSimUsimR6::GetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData) +/** + * This API is used by the TSY to send the Wlan data information requested by the client + * @param aReqHandle The request handle associated with this request. + * @param aData This contains the current Wlan data upon completion. + * @return TInt Standard error value. + */ + { + RMobilePhone::TUsimWlanDataV8Pckg *WlanDataV8Pckg = reinterpret_cast (aData); + RMobilePhone::TUsimWlanDataV8 &WlanDataV8 = (*WlanDataV8Pckg)(); + + if(WlanDataV8.iPseudonym==SIMTSY_PHONE_WLAN_ACESS_DENIED) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrAccessDenied); + } + else if(WlanDataV8.iCounter == iWlanData->At(2).iCounter) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNotSupported); + } + else if(WlanDataV8.iFieldsUsed ==iWlanData->At(0).iFieldsUsed ) + { + WlanDataV8.iPseudonym = iWlanData->At(0).iPseudonym; + WlanDataV8.iReauthenticationId = iWlanData->At(0).iReauthenticationId; + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + else if(WlanDataV8.iFieldsUsed ==iWlanData->At(1).iFieldsUsed ) + { + WlanDataV8.iPseudonym = iWlanData->At(1).iPseudonym; + WlanDataV8.iReauthenticationId = iWlanData->At(1).iReauthenticationId; + WlanDataV8.iMasterKey = iWlanData->At(1).iMasterKey; + WlanDataV8.iCounter = iWlanData->At(1).iCounter ; + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + else + { + WlanDataV8.iFieldsUsed =iWlanData->At(1).iFieldsUsed; + WlanDataV8.iPseudonym = iWlanData->At(1).iPseudonym; + WlanDataV8.iReauthenticationId = iWlanData->At(1).iReauthenticationId; + WlanDataV8.iMasterKey = iWlanData->At(1).iMasterKey; + WlanDataV8.iCounter = iWlanData->At(1).iCounter ; + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + return KErrNone; + } + +TInt CSimUsimR6::StorePreferredWlanSIDList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) +/** + * This API is used by the TSY to store the Preferred Wlan SID List sent by the Client. + * @param aReqHandle The request handle associated with this request. + * @param aBuffer This contains the Preferred Wlan SID List. + * @return TInt Standard error value. + */ + { + TInt ret=KErrNone; + TInt leaveCode=KErrNone; + TRAP(leaveCode, ret=ProcessStorePreferredWlanSIDListL(aTsyReqHandle, aBuffer);); + if (leaveCode != KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,leaveCode); + } + return ret; + } + +TInt CSimUsimR6::ProcessStorePreferredWlanSIDListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) +/** + * This API is used by the TSY to process the Preferred Wlan SID List sent by the Client and verify it. + * @param aReqHandle The request handle associated with this request. + * @param aBuffer This contains the Preferred Wlan SID List. + * @return TInt Standard error value. + */ + { + CMobilePhoneStoredWlanSIDList* list=CMobilePhoneStoredWlanSIDList::NewL(); + CleanupStack::PushL(list); + list->RestoreL(*aBuffer); + RMobilePhone::TWlanSIDV8 entry; + if (list->Enumerate() > SIMTSY_PHONE_WLAN_SIDLIST_COUNT) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNoMemory); + CleanupStack::PopAndDestroy(); // list + return KErrNone; + } + TInt error=KErrCorrupt; + TInt ret; + for (TInt i=0; iGetEntryL(i)); + if (ret != KErrNone) + { + break; + } + switch(i) + { + case 0: + if((entry.iWSID == iWlanSid->At(0).iWSID||entry.iWSID != iWlanSid->At(1).iWSID ||entry.iWSID != iWlanSid->At(2).iWSID) + && (entry.iUserDefined == iWlanSid->At(0).iUserDefined || entry.iUserDefined == iWlanSid->At(1).iUserDefined || + entry.iUserDefined == iWlanSid->At(2).iUserDefined)) + { + error = KErrNone; + } + break; + case 1: + if((entry.iWSID == iWlanSid->At(0).iWSID||entry.iWSID != iWlanSid->At(1).iWSID ||entry.iWSID != iWlanSid->At(2).iWSID) + && (entry.iUserDefined == iWlanSid->At(0).iUserDefined || entry.iUserDefined == iWlanSid->At(1).iUserDefined || + entry.iUserDefined == iWlanSid->At(2).iUserDefined)) + { + error = KErrNone; + } + break; + case 2: + default: + if((entry.iWSID == iWlanSid->At(0).iWSID||entry.iWSID != iWlanSid->At(1).iWSID ||entry.iWSID != iWlanSid->At(2).iWSID) + && (entry.iUserDefined == iWlanSid->At(0).iUserDefined || entry.iUserDefined == iWlanSid->At(1).iUserDefined || + entry.iUserDefined == iWlanSid->At(2).iUserDefined)) + { + error = KErrNone; + } + break; + } + } + if(error == KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + else + { + iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); + } + CleanupStack::PopAndDestroy(); + return KErrNone; + } + +TInt CSimUsimR6::NotifyPreferredWlanSIDListChange(TTsyReqHandle aTsyReqHandle) +/** + * This API is used by the TSY to complete the Preferred Wlan SID List change + * notification request posted by the client. + * + * @param aReqHandle The request handle associated with this request. + * @return TInt Standard error value. + */ + { + iNotifyPreferredWlanSIDListChangePending=ETrue; + iNotifyPreferredWlanSIDListReqHandle=aTsyReqHandle; + return KErrNone; + } + +TInt CSimUsimR6::NotifyPreferredWlanSIDListChangeCancel(TTsyReqHandle /**aTsyReqHandle*/) +/** + * This API is used by TSY to cancel any NotifyPreferredWlanSIDListChange outstanding requests + * @return TInt Standard error value. + */ + { + iNotifyPreferredWlanSIDListChangePending=EFalse; + iPhone->ReqCompleted(iNotifyPreferredWlanSIDListReqHandle,KErrCancel); + return KErrNone; + } + +TInt CSimUsimR6::GetPreferredWlanSIDsPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize) +/** + * Tsy uses this API to retrieve the Preferred Wlan SIDs of each line from phone, + * store each Preferred Wlan SID as a list entry, + * stream the list and then return size of this buffer to client. + * @param aReqHandle Handle to the request. + * @param aClient Pointer to the client. + * @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. + */ + { + TInt ret=KErrNone; + TInt leaveCode=KErrNone; + TRAP(leaveCode, ret=ProcessGetPreferredWlanSIDsPhase1L(aTsyReqHandle, aClient, aBufSize);); + if (leaveCode != KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,leaveCode); + } + return ret; + } + +TInt CSimUsimR6::ProcessGetPreferredWlanSIDsPhase1L(const TTsyReqHandle aTsyReqHandle, + RMobilePhone::TClientId* aClient, + TInt* aBufSize) +/** +* Retrieve stored Wlan specific IDs from USIM. +* Store each entry,stream the list and then return size of this buffer to client +* @param aReqHandle Handle to the request. +* @param aClient Pointer to the client. +* @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. +*/ + { + CMobilePhoneStoredWlanSIDList* list=CMobilePhoneStoredWlanSIDList::NewL(); + CleanupStack::PushL(list); + RMobilePhone::TWlanSIDV8 entry; + // fill up an example list + for (TInt index=0; index < SIMTSY_PHONE_WLAN_SIDLIST_COUNT; index++) + { + switch (index) + { + case 0: + entry.iWSID = iWlanSid->At(0).iWSID; + entry.iUserDefined = iWlanSid->At(0).iUserDefined; + break; + case 1: + entry.iWSID = iWlanSid->At(1).iWSID; + entry.iUserDefined = iWlanSid->At(1).iUserDefined; + break; + case 2: + default: + entry.iWSID = iWlanSid->At(2).iWSID ; + entry.iUserDefined = iWlanSid->At(2).iUserDefined; + break; + } + // Add the entry into the list, at the next empty location + list->AddEntryL(entry); + } + // Store the streamed list and the client ID + CListReadAllAttempt* read=CListReadAllAttempt::NewL(*aClient,aTsyReqHandle); + CleanupStack::PushL(read); + + read->iListBuf = list->StoreLC(); + CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC + + iGetWlanSIDsData->AppendL(read); + CleanupStack::Pop(); // pop the CListReadAllAttempt + + // return the CBufBase’s size to client + *aBufSize=(read->iListBuf)->Size(); + + // Complete first phase of list retrieval + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + CleanupStack::PopAndDestroy(); // pop&destroy list + return KErrNone; + } + +TInt CSimUsimR6::GetPreferredWlanSIDsPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf) +/** +* 2nd phase retrieval of the the Preferred Wlan SIDs list. +* @param aReqHandle Handle to the request. +* @param aClient Pointer to the client. +* @param aBuf Buffer Containing the Preferred Wlan SIDs list. +*/ + { + CListReadAllAttempt* read=NULL; + // Find the get preferred wlan SIDs from this client + for (TInt i=0; iCount(); ++i) + { + read = iGetWlanSIDsData->At(i); + if ((read->iClient.iSessionHandle==aClient->iSessionHandle) && + (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle)) + { + TPtr8 bufPtr((read->iListBuf)->Ptr(0)); + // Copy the streamed list to the client + aBuf->Copy(bufPtr); + delete read; + iGetWlanSIDsData->Delete(i); + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + } + // Should handle error case of not finding the matching client from read all phase 1 + return KErrNotFound; + } + +TInt CSimUsimR6::GetPreferredWlanSIDsCancel(const TTsyReqHandle aTsyReqHandle) +/** +* Cancel the request to retrieve the Preferred Wlan SIDs List. +* @param aTsyReqHandle handle to the request +*/ + { + LOGCALL1("CSimPhone::GetPreferredNetworksCancel"); + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + // Remove the read all attempt from iGetWlanSIDsData + CListReadAllAttempt* read=NULL; + for (TInt i=0; iCount(); ++i) + { + read = iGetWlanSIDsData->At(i); + if (read->iReqHandle == aTsyReqHandle) + { + delete read; + iGetWlanSIDsData->Delete(i); + break; + } + } + iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); + LOGCALL1("CSimPhone::GetPreferredWlanSIDsCancel"); + return KErrNone; + } + +TInt CSimUsimR6::GetPreferredNetworksPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize) +/** + * Tsy uses this API to retrieve the Preferred Networks of each line from phone, + * store each Preferred Networks as a list entry, + * stream the list and then return size of this buffer to client. + * @param aReqHandle Handle to the request. + * @param aClient Pointer to the client. + * @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. + */ + { + TInt ret=KErrNone; + TInt leaveCode=KErrNone; + TRAP(leaveCode, ret=ProcessGetPreferredNetworksPhase1L(aTsyReqHandle, aClient, aBufSize);); + if (leaveCode != KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,leaveCode); + } + return ret; + } + +TInt CSimUsimR6::ProcessGetPreferredNetworksPhase1L(const TTsyReqHandle aTsyReqHandle, + RMobilePhone::TClientId* aClient, + TInt* aBufSize) +/** +* Retrieve stored Preferred Networks from USIM. +* Store each entry,stream the list and then return size of this buffer to client +* @param aReqHandle Handle to the request. +* @param aClient Pointer to the client. +* @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase. +*/ + { + CMobilePhoneStoredNetworkList* list=CMobilePhoneStoredNetworkList::NewL(); + CleanupStack::PushL(list); + RMobilePhone::TMobilePreferredNetworkEntryV3 entry; + // fill up an example list + for (TInt index=0; index < SIMTSY_PHONE_NTWK_LIST_ENTRIES; index++) + { + switch (index) + { + case 0: + entry.iAccess = iPreferredNetworks->At(0).iAccess; + entry.iUserDefined = iPreferredNetworks->At(0).iUserDefined; + entry.iCountryCode = iPreferredNetworks->At(0).iCountryCode; + entry.iNetworkId = iPreferredNetworks->At(0).iNetworkId; + break; + case 1: + entry.iAccess = iPreferredNetworks->At(1).iAccess; + entry.iUserDefined = iPreferredNetworks->At(1).iUserDefined; + entry.iCountryCode = iPreferredNetworks->At(1).iCountryCode; + entry.iNetworkId = iPreferredNetworks->At(1).iNetworkId; + break; + case 2: + default: + entry.iAccess = iPreferredNetworks->At(2).iAccess; + entry.iUserDefined = iPreferredNetworks->At(2).iUserDefined; + entry.iCountryCode = iPreferredNetworks->At(2).iCountryCode; + entry.iNetworkId = iPreferredNetworks->At(2).iNetworkId; + break; + case 3: + entry.iAccess = iPreferredNetworks->At(3).iAccess; + entry.iUserDefined = iPreferredNetworks->At(3).iUserDefined; + entry.iCountryCode = iPreferredNetworks->At(3).iCountryCode; + entry.iNetworkId = iPreferredNetworks->At(3).iNetworkId; + break; + } + // Add the entry into the list, at the next empty location + list->AddEntryL(entry); + } + // Store the streamed list and the client ID + CListReadAllAttempt* read=CListReadAllAttempt::NewL(*aClient,aTsyReqHandle); + CleanupStack::PushL(read); + + read->iListBuf = list->StoreLC(); + CleanupStack::Pop(); // pop the CBufBase allocated by StoreLC + + iGetPreferredNetworks->AppendL(read); + CleanupStack::Pop(); // pop the CListReadAllAttempt + + // return the CBufBase’s size to client + *aBufSize=(read->iListBuf)->Size(); + + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + CleanupStack::PopAndDestroy(); // pop&destroy list + return KErrNone; + } + +TInt CSimUsimR6::GetPreferredNetworksPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf) +/** +* 2nd phase retrieval of the the Preferred Networks list. +* @param aReqHandle Handle to the request. +* @param aClient Pointer to the client. +* @param aBuf Buffer Containing the Preferred Networks list. +*/ + { + CListReadAllAttempt* read=NULL; + // Find the get detected network attempt from this client + for (TInt i=0; iCount(); ++i) + { + read = iGetPreferredNetworks->At(i); + if ((read->iClient.iSessionHandle==aClient->iSessionHandle) && + (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle)) + { + TPtr8 bufPtr((read->iListBuf)->Ptr(0)); + // Copy the streamed list to the client + aBuf->Copy(bufPtr); + delete read; + iGetPreferredNetworks->Delete(i); + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + return KErrNone; + } + } + // Should handle error case of not finding the matching client from read all phase 1 + return KErrNotFound; + } + +TInt CSimUsimR6::GetPreferredNetworksCancel(const TTsyReqHandle aTsyReqHandle) +/** +* Cancel the request to retrieve the Preferred Networks List. +* @param aTsyReqHandle handle to the request +*/ + { + LOGCALL1("CSimPhone::GetPreferredNetworksCancel"); + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + CListReadAllAttempt* read=NULL; + for (TInt i=0; iCount(); ++i) + { + read = iGetPreferredNetworks->At(i); + if (read->iReqHandle == aTsyReqHandle) + { + delete read; + iGetPreferredNetworks->Delete(i); + break; + } + } + iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); + LOGCALL1("CSimPhone::GetPreferredNetworksCancel"); + return KErrNone; + } + +TInt CSimUsimR6::StorePreferredNetworksList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) +/** + * This API is used by the TSY to store the Preferred Networks List sent by the Client. + * @param aReqHandle The request handle associated with this request. + * @param aBuffer This contains the Preferred Networks List. + * @return TInt Standard error value. + */ + { + TInt ret=KErrNone; + TInt leaveCode=KErrNone; + TRAP(leaveCode, ret=ProcessStorePreferredNetworksListL(aTsyReqHandle, aBuffer);); + if (leaveCode != KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,leaveCode); + } + return ret; + }; + +TInt CSimUsimR6::ProcessStorePreferredNetworksListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer) +/** + * This API is used by the TSY to process the Preferred Networks List sent by the Client and verify it. + * @param aReqHandle The request handle associated with this request. + * @param aBuffer This contains the Preferred Networks List. + * @return TInt Standard error value. + */ + { + CMobilePhoneStoredNetworkList* list=CMobilePhoneStoredNetworkList::NewL(); + CleanupStack::PushL(list); + + list->RestoreL(*aBuffer); + + RMobilePhone::TMobilePreferredNetworkEntryV3 entry; + + if (list->Enumerate() > SIMTSY_PHONE_NTWK_LIST_ENTRIES) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNoMemory); + CleanupStack::PopAndDestroy(); // list + return KErrNone; + } + TInt error=KErrCorrupt; + TInt ret; + for (TInt i=0; iGetEntryL(i)); + if (ret != KErrNone) + { + break; + } + switch(i) + { + case 0: + if((entry.iAccess == iPreferredNetworks->At(0).iAccess || + entry.iAccess == iPreferredNetworks->At(1).iAccess || + entry.iAccess == iPreferredNetworks->At(2).iAccess || + entry.iAccess == iPreferredNetworks->At(3).iAccess ) && + (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && + (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && + (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) + { + error = KErrNone; + } + break; + case 1: + if((entry.iAccess == iPreferredNetworks->At(0).iAccess || + entry.iAccess == iPreferredNetworks->At(1).iAccess || + entry.iAccess == iPreferredNetworks->At(2).iAccess || + entry.iAccess == iPreferredNetworks->At(3).iAccess ) && + (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && + (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && + (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) + { + error = KErrNone; + } + break; + case 2: + if((entry.iAccess == iPreferredNetworks->At(0).iAccess || + entry.iAccess == iPreferredNetworks->At(1).iAccess || + entry.iAccess == iPreferredNetworks->At(2).iAccess || + entry.iAccess == iPreferredNetworks->At(3).iAccess ) && + (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && + (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && + (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) + { + error = KErrNone; + } + break; + case 3: + default: + if((entry.iAccess == iPreferredNetworks->At(0).iAccess || + entry.iAccess == iPreferredNetworks->At(1).iAccess || + entry.iAccess == iPreferredNetworks->At(2).iAccess || + entry.iAccess == iPreferredNetworks->At(3).iAccess ) && + (entry.iUserDefined == iPreferredNetworks->At(0).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(1).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(2).iUserDefined || + entry.iUserDefined == iPreferredNetworks->At(3).iUserDefined) && + (entry.iCountryCode == iPreferredNetworks->At(0).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(1).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(2).iCountryCode || + entry.iCountryCode == iPreferredNetworks->At(3).iCountryCode ) && + (entry.iNetworkId == iPreferredNetworks->At(0).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(1).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(2).iNetworkId || + entry.iNetworkId == iPreferredNetworks->At(3).iNetworkId )) + { + error = KErrNone; + } + break; + } + } + if(error==KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,KErrNone); + } + else + { + iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); + } + CleanupStack::PopAndDestroy(); // list + return KErrNone; + } + +TInt CSimUsimR6::NotifyStorePreferredNetworksListChange(TTsyReqHandle aTsyReqHandle) +/** + * This API is used by the TSY to complete the Preferred Networks List change + * notification request posted by the client. + * + * @param aReqHandle The request handle associated with this request. + * @return TInt Standard error value. + */ + { + iNotifyPreferredNetworksChangePending=ETrue; + iNotifyPreferredNetworksReqHandle=aTsyReqHandle; + return KErrNone; + } + +TInt CSimUsimR6::NotifyStorePreferredNetworksListChangeCancel(TTsyReqHandle /**aTsyReqHandle*/) +/** + * This API is used by TSY to cancel any NotifyPreferredNetworksListChange outstanding requests + + * @return TInt Standard error value. + */ + { + iNotifyPreferredNetworksChangePending=EFalse; + iPhone->ReqCompleted(iNotifyPreferredNetworksReqHandle,KErrCancel); + return KErrNone; + } + +TInt CSimUsimR6::SetGbaBootstrapParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg, const RMobilePhone::TAID* aAID) + { + + RMobilePhone::TBsfDataV8Pckg *bsfDataV8Pckg = reinterpret_cast (aPckg); + RMobilePhone::TBsfDataV8 &bsfDataV8 = (*bsfDataV8Pckg) (); + if((aAID == NULL) || (*aAID == iGBAAuthInfoList->At(iListIndex).iAID)) + { + iSetGBABootstrapParams.iNotifyPending = ETrue; + iSetGBABootstrapParams.iNotifyHandle = aTsyReqHandle; + iSetGBABootstrapParams.iNotifyData = &bsfDataV8; + } + return KErrNone; + } + +TInt CSimUsimR6::SetGbaBootstrapParamsCancel(const TTsyReqHandle /**aTsyReqHandle*/) + { + if(iSetGBABootstrapParams.iNotifyPending) + { + iSetGBABootstrapParams.iNotifyPending=EFalse; + iPhone->ReqCompleted(iSetGBABootstrapParams.iNotifyHandle,KErrCancel); + } + else + { + iPhone->ReqCompleted(iSetGBABootstrapParams.iNotifyHandle,KErrNone); + } + return KErrNone; + } + + +TInt CSimUsimR6::NotifyAuthenticateDataChange(TTsyReqHandle aTsyReqHandle, TDes8* aPckg) + { + RMobilePhone::TAuthInfoV8Pckg *authInfV8Pckg = reinterpret_cast (aPckg); + RMobilePhone::TAuthInfoV8 &authInfoV8 = (*authInfV8Pckg)(); + iNotifyAuthDataChange.iNotifyPending = ETrue; + iNotifyAuthDataChange.iNotifyHandle = aTsyReqHandle; + iNotifyAuthDataChange.iNotifyData = &authInfoV8; + return KErrNone; + } + +TInt CSimUsimR6::NotifyAuthenticateDataChangeCancel(const TTsyReqHandle /**aTsyReqHandle*/) + { + if(iNotifyAuthDataChange.iNotifyPending) + { + iNotifyAuthDataChange.iNotifyPending=EFalse; + iPhone->ReqCompleted(iNotifyAuthDataChange.iNotifyHandle,KErrCancel); + } + else + { + iPhone->ReqCompleted(iNotifyAuthDataChange.iNotifyHandle,KErrNone); + } + return KErrNone; + } + +TInt CSimUsimR6::GetAuthenticationParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg, TDes8* aPckg2) + { + RMobilePhone::TAuthInfoV8Pckg *authInfoV8Pckg = reinterpret_cast (aPckg); + RMobilePhone::TAuthInfoV8 &authInfoV8 = (*authInfoV8Pckg)(); + if ( authInfoV8.iAID == iGBAAuthInfoList->At(iListIndex).iAID || + authInfoV8.iAID == iMBMSInfoList->At(iListIndex).iAID ) + { + iGetAuthParams.iNotifyPending = ETrue; + iGetAuthParams.iNotifyHandle = aTsyReqHandle; + if ( authInfoV8.iData == RMobilePhone::EGbaBootstrapParams) + { + RMobilePhone::TGbaBootstrapParamsV8Pckg + *gbaBootstrapV8Pckg = reinterpret_cast (aPckg2); + RMobilePhone::TGbaBootstrapParamsV8 &gbaBootstrapV8 = (*gbaBootstrapV8Pckg) (); + iGetAuthParams.iNotifyData = &gbaBootstrapV8; + return KErrNone; + } + if ( authInfoV8.iData == RMobilePhone::EMbmsMuk) + { + RMobilePhone::TMbmsUserKeyV8Pckg + *mbmsUserKeyV8Pckg = reinterpret_cast (aPckg2); + RMobilePhone::TMbmsUserKeyV8 &mbmsUserKeyV8 = (*mbmsUserKeyV8Pckg) (); + + iGetAuthParams.iNotifyData = &mbmsUserKeyV8; + return KErrNone; + } + iGetAuthParams.iNotifyData = NULL; + } + else + { + iGetAuthParams.iNotifyPending = ETrue; + iGetAuthParams.iNotifyHandle = aTsyReqHandle; + iGetAuthParams.iNotifyData = NULL; + } + return KErrNone; + } + +TInt CSimUsimR6::GetAuthenticationParamsCancel(const TTsyReqHandle /**aTsyReqHandle*/) + { + if(iGetAuthParams.iNotifyPending) + { + iGetAuthParams.iNotifyPending=EFalse; + iPhone->ReqCompleted(iGetAuthParams.iNotifyHandle,KErrCancel); + } + else + { + iPhone->ReqCompleted(iGetAuthParams.iNotifyHandle,KErrNone); + } + return KErrNone; + } + +TInt CSimUsimR6::GetAuthenticationListPhase1(const TTsyReqHandle aTsyReqHandle, + CRetrieveMobilePhoneAuthenticationIds::TAuthRequestData* aRequest,TInt* aBufSize) + /** + 1st phase retrieval of the the call waiting status list + @param aReqHandle Handle to the request + @param aReqData information about the request + @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase + */ + { + TInt ret=KErrNone; + TInt leaveCode=KErrNone; + if (aRequest->iAuthInfo.iData==RMobilePhone::EGbaNafIdList) + { + iAuthType = EGba; + TRAP(leaveCode, ret=ProcessGetGbaPhase1L(aTsyReqHandle,& (aRequest->iClient),aBufSize)); + } + else if(aRequest->iAuthInfo.iData==RMobilePhone::EMbmsMskIdList) + { + iAuthType = EMbms; + TRAP(leaveCode, ret=ProcessGetMbmsPhase1L(aTsyReqHandle,& (aRequest->iClient),aBufSize)); + } + else + { + leaveCode = KErrCorrupt; + } + if (leaveCode != KErrNone) + { + iPhone->ReqCompleted(aTsyReqHandle,leaveCode); + } + return ret; + }; + +TInt CSimUsimR6::ProcessGetGbaPhase1L(const TTsyReqHandle aTsyReqHandle, + RMobilePhone::TClientId* aClientId,TInt* aBufSize) +/** Retrieve call waiting status of each line from phone, + store each CB status response as a list entry, + stream the list and then return size of this buffer to client + @param aReqHandle Handle to the request + @param aReqData information about the request + @param aBufSize Size of the buffer the client has to allocate for the 2nd pahase + */ + { + // read the list, store its content and then return size of this buffer to client + CMobilePhoneGbaNafIdList* list=CMobilePhoneGbaNafIdList::NewL(); + CleanupStack::PushL(list); + TInt maxList = iGbaNafList->Enumerate(); + if(maxList) + { + for (TInt i=0;iAddEntryL(iGbaNafList->GetEntryL(i)); + } + } + else + { + CleanupStack::PopAndDestroy(list); + *aBufSize = 10; + iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); + return KErrNotFound; + } + // Store the streamed list and the client ID + CListReadAllAttempt* read=CListReadAllAttempt::NewL(*(aClientId), aTsyReqHandle); + CleanupStack::PushL(read); + + read->iListBuf = list->StoreLC(); + CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC + + iAuthListInfo->AppendL(read); + CleanupStack::Pop(); // pop the CListReadAllAttempt + + // return the CBufFlat’s size to client + *aBufSize=(read->iListBuf)->Size(); + + CleanupStack::PopAndDestroy(list); + + iPhone->ReqCompleted(aTsyReqHandle, KErrNone); + return KErrNone; + } + +TInt CSimUsimR6::ProcessGetMbmsPhase1L(const TTsyReqHandle aTsyReqHandle, + RMobilePhone::TClientId* aClientId,TInt* aBufSize) + { + CMobilePhoneMbmsMskIdList* list=CMobilePhoneMbmsMskIdList::NewL(); + CleanupStack::PushL(list); + TInt maxList; + if(iAuthType == EGba) + { + maxList = iGbaNafList->Enumerate(); + } + else + { + maxList = iMbmsMskList->Enumerate(); + } + if(maxList) + { + for (TInt i=0;iAddEntryL(iMbmsMskList->GetEntryL(i)); + } + } + else + { + CleanupStack::PopAndDestroy(list); + *aBufSize = 10; + iPhone->ReqCompleted(aTsyReqHandle,KErrCorrupt); + return KErrNotFound; + } + + // Store the streamed list and the client ID + CListReadAllAttempt* read=CListReadAllAttempt::NewL(*(aClientId), aTsyReqHandle); + CleanupStack::PushL(read); + + read->iListBuf = list->StoreLC(); + CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC + + iAuthListInfo->AppendL(read); + CleanupStack::Pop(); // pop the CListReadAllAttempt + + // return the CBufFlat’s size to client + *aBufSize=(read->iListBuf)->Size(); + + CleanupStack::PopAndDestroy(list); + + iPhone->ReqCompleted(aTsyReqHandle, KErrNone); + return KErrNone; + } + +TInt CSimUsimR6::GetAuthenticationListPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aId,TDes8* aBuf) +/** + * 2nd phase retrieval of the the call waiting status list + @param aReqHandle Handle to the request + @param aClient Ponter to the client + @param aBuf Buffer containiong the call waiting status list + */ + { + CListReadAllAttempt* read=NULL; + TBool tPosScen = ETrue; + + // Find the Authentication information for the client + if ( iAuthType == EGba) + { + for (TInt i=0; iCount (); ++i) + { + read = iAuthListInfo->At (i); + if ( (read->iClient.iSessionHandle==aId->iSessionHandle)&&(read->iClient.iSubSessionHandle==aId->iSubSessionHandle)) + { + if ( tPosScen) + { + TPtr8 bufPtr((read->iListBuf)->Ptr (0)); + // Copy the streamed list to the client + aBuf->Copy (bufPtr); + } + delete read; + iAuthListInfo->Delete (i); + User::After (300000); + iPhone->ReqCompleted (aTsyReqHandle, KErrNone); + return KErrNone; + } + } + } + else // authtype = EMbms + { + for (TInt i=0; iCount (); ++i) + { + read = iAuthListInfo->At (i); + if ( (read->iClient.iSessionHandle==aId->iSessionHandle)&&(read->iClient.iSubSessionHandle==aId->iSubSessionHandle)) + { + if ( tPosScen) + { + TPtr8 bufPtr((read->iListBuf)->Ptr (0)); + // Copy the streamed list to the client + aBuf->Copy (bufPtr); + } + delete read; + iAuthListInfo->Delete (i); + User::After (300000); + iPhone->ReqCompleted (aTsyReqHandle, KErrNone); + return KErrNone; + } + } + } + // Should handle error case of not finding the matching client from read phase 1 + return KErrNotFound; + } + +TInt CSimUsimR6::GetAuthenticationListCancel(const TTsyReqHandle aTsyReqHandle) + { + // Remove the read all attempt from iAuthReadAll + + CListReadAllAttempt* read=NULL; + for (TInt i=0; iCount(); ++i) + { + read = iAuthListInfo->At(i); + if (read->iReqHandle == aTsyReqHandle) + { + delete read; + iAuthListInfo->Delete(i); + break; + } + } + iPhone->ReqCompleted(aTsyReqHandle,KErrCancel); + return KErrNone; + } + +TInt CSimUsimR6::RandTime() +/** Function that generates time(in seconds) at random for the SimTSY + * Maximum of ten seconds; zero seconds also included just to simulate the + * synchronous call scenario + */ + { + TInt ranT= Math::Random()%10; + return(ranT); + } + + +