--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simtsy/inc/CSimUsimR6.h Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,278 @@
+// 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 definitions of the Simulator TSY USIM Release6 class.
+//
+//
+
+/**
+ @file
+ @internalAll
+*/
+
+#ifndef CSIMUSIMR6_H_
+#define CSIMUSIMR6_H_
+#include <etelmm.h>
+#include <et_phone.h>
+#include "csimtimer.h"
+#include "CSimPubSubChange.h"
+
+class CSimPhone;
+class CTestConfigSection;
+
+/**
+ * Implements the RMobilePhone based functions that constitute the 3GPP Release6
+ * functionality provided by the SIM TSY.
+ */
+class CSimUsimR6 : public CBase, MTimerCallBack
+ {
+public:
+ static CSimUsimR6* NewL(CSimPhone* aPhone);
+ CSimUsimR6(CSimPhone* aPhone);
+ ~CSimUsimR6();
+
+ /** Videomail related APIS */
+ TInt GetMailboxNumbers(TTsyReqHandle aReqHandle, TDes8* aMailBox);
+ TInt GetMailboxNumbersCancel(TTsyReqHandle aReqHandle);
+
+ TInt NotifyMailboxNumbersChange(TTsyReqHandle aReqHandle, TDes8* aMailBox);
+ TInt NotifyMailboxNumbersChangeCancel(TTsyReqHandle aReqHandle);
+
+ TInt GetIccMessageWaitingIndicators(TTsyReqHandle aReqHandle, TDes8* aMsgIndicators);
+ TInt GetIccMessageWaitingIndicatorsCancel(TTsyReqHandle aReqHandle);
+
+ TInt SetIccMessageWaitingIndicators(TTsyReqHandle aReqHandle,TDes8* aMsgIndicators);
+ TInt SetIccMessageWaitingIndicatorsCancel(TTsyReqHandle aReqHandle);
+
+ TInt NotifyIccMessageWaitingIndicatorsChange(TTsyReqHandle aReqHandle, TDes8* aMsgIndicators);
+ TInt NotifyIccMessageWaitingIndicatorsChangeCancel(TTsyReqHandle aReqHandle);
+
+ TInt NotifyMessageWaiting(TTsyReqHandle aReqStatus, TInt* aCount);
+ TInt NotifyMessageWaitingCancel(TTsyReqHandle aReqHandle);
+
+ /** Preferred Networks */
+
+ TInt GetPreferredNetworksPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize);
+ TInt ProcessGetPreferredNetworksPhase1L(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize);
+ TInt GetPreferredNetworksPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf);
+ TInt GetPreferredNetworksCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt ProcessStorePreferredNetworksListL(TTsyReqHandle aTsyReqHandle, TDes8* aBuffer);
+ TInt StorePreferredNetworksList(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer);
+
+ TInt NotifyStorePreferredNetworksListChange(const TTsyReqHandle aTsyReqHandle);
+ TInt NotifyStorePreferredNetworksListChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+ /** WLAN related APIS */
+ TInt NotifyWlanDataChange(const TTsyReqHandle aTsyReqHandle, TDes8* aData);
+ TInt NotifyWlanDataChangeCancel(TTsyReqHandle aTsyReqHandle);
+
+ TInt NotifyPreferredWlanSIDListChange(TTsyReqHandle aTsyReqHandle);
+ TInt NotifyPreferredWlanSIDListChangeCancel(TTsyReqHandle aTsyReqHandle);
+
+ TInt GetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData);
+ TInt SetWlanData(const TTsyReqHandle aTsyReqHandle,TDes8* aData);
+
+ TInt GetPreferredWlanSIDsPhase1(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize);
+ TInt ProcessGetPreferredWlanSIDsPhase1L(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TInt* aBufSize);
+ TInt GetPreferredWlanSIDsPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId* aClient, TDes8* aBuf);
+ TInt GetPreferredWlanSIDsCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt StorePreferredWlanSIDList(const TTsyReqHandle aTsyReqHandle,TDes8* aBuffer);
+ TInt ProcessStorePreferredWlanSIDListL(TTsyReqHandle aTsyReqHandle,TDes8* aBuffer);
+
+ /** GBA and MBMS related APIS */
+
+ TInt SetGbaBootstrapParams(const TTsyReqHandle aTsyReqHandle,TDes8* aPckg1, const RMobilePhone::TAID* aAID);
+ TInt SetGbaBootstrapParamsCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt NotifyAuthenticateDataChange(const TTsyReqHandle aReqstatus,TDes8* aAuthPckg);
+ TInt NotifyAuthenticateDataChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt GetAuthenticationParams(const TTsyReqHandle aTsyReqHandle,TDes8* aPckg1, TDes8* aPckg2);
+ TInt GetAuthenticationParamsCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt GetAuthenticationListPhase1(const TTsyReqHandle aTsyReqHandle, CRetrieveMobilePhoneAuthenticationIds::TAuthRequestData* aRequest,TInt* aBufSize);
+ TInt ProcessGetGbaPhase1L(const TTsyReqHandle aTsyReqHandle,RMobilePhone::TClientId* aClientId,TInt* aBufSize);
+ TInt ProcessGetMbmsPhase1L(const TTsyReqHandle aTsyReqHandle,RMobilePhone::TClientId* aClientId,TInt* aBufSize);
+ TInt GetAuthenticationListPhase2(const TTsyReqHandle aTsyReqHandle, RMobilePhone::TClientId*,TDes8* aBuffer);
+ TInt GetAuthenticationListCancel(const TTsyReqHandle aTsyReqHandle);
+
+ const CTestConfigSection* CfgFile();
+
+private:
+ void ConstructL();
+ void TimerCallBack(TInt aId);
+ void TimerCallBackNotifyMailboxNumChg();
+ void TimerCallBackMessageWaitingStat();
+ void TimerCallBackIccMessageWaitingStat();
+ TInt RandTime(); // Function to generate random Time to simulate asynchronous request handling.
+
+private:
+ TInt iGetIccMsgIdCurrentIndex,iSetIccMsgIdCurrentIndex,iNotifyPreferredNetworksChangeIndex;
+ TInt iCurrentIndex,iNotifyWlanDataChangeIndex,iNotifyPreferredWlanSIDListChangeIndex,iIndex;
+
+
+ CSimPhone* iPhone; // < Pointer to the parent phone class.
+ CSimTimer* iTimer; //< Pointer to the Timer object for callback
+ CSimTimer* iWlanTimer; //< Pointer to the TimerObject for Wlan
+ CSimTimer* iNotifyAuthTimer;//< Pointer to the TimerObject for NotifyAuthenticationTimer.
+
+ TInt iMailBoxIndex; // < Current index for the MailBox entries
+ TInt iListIndex; // < Current index from the iGBAInfo array or iMBMSInfo array
+ TInt iVideoMailIndex; // < Current index from the iVideoMailInfo array
+ TInt iCurrentNotifyMailboxIndex; //< Current index for the NotifyMailBox
+ TInt iCurrentIccMessageWaitingIndex;//< Current index for the ICC MessageWaiting.
+ TInt iCurrentMessageWaitingIndex; //< Current index for the MessageWaitingIndex.
+
+ CArrayFixFlat<RMobilePhone::TMobilePhoneMessageWaitingV8>* iMessageWaiting; //< Array containing the Message Waiting Indicators
+ CArrayFixFlat<RMobilePhone::TMobilePhoneVoicemailIdsV8>* iVoiceMailIds; //< Array containing MialBox Numbers
+ CArrayFixFlat<RMobilePhone::TUsimWlanDataV8>* iWlanData; //< Array containing Wlan Data.
+ CArrayFixFlat<RMobilePhone::TWlanSIDV8>* iWlanSid; //< Array containing Wlan Sids
+ CArrayFixFlat<RMobilePhone::TMobilePreferredNetworkEntryV3>* iPreferredNetworks; //< Array containing Preferred Networks' list
+ CArrayPtrFlat<CListReadAllAttempt>* iGetWlanSIDsData;
+ CArrayPtrFlat<CListReadAllAttempt>* iGetPreferredNetworks;
+
+ TBool iMailBoxNumberChangePending; // < Current Mail Box number request outstanding for V3 parameter class
+ TTsyReqHandle iMailBoxNumberChangeNotificationReqHandle; // < Mail Box number outstanding request handle for V3 parameter class
+ RMobilePhone::TMobilePhoneVoicemailIdsV3* iMailBoxNumberChange; // < Mail Box number notification data pointer for V3 parameter class
+
+ TBool iMailBoxNumberChangePendingV8; // < Current Mail Box number request outstanding for V8 parameter class
+ TTsyReqHandle iMailBoxNumberChangeNotificationReqHandleV8; // < Mail Box number outstanding request handle for V8 parameter class
+ RMobilePhone::TMobilePhoneVoicemailIdsV8* iMailBoxNumberChangeV8; // < Mail Box number notification data pointer for V8 parameter class
+
+ TBool iMessageWaitingPending; // < Message waiting notification request outstanding for the class
+ TTsyReqHandle iMessageWaitingNotificationReqHandle; // < Message waiting outstanding request handle for the class
+ TInt* iMsgWaitingCount; // < Message waiting notification data pointer for the class
+
+
+ TBool iIccMessageWaitingPending; // < Icc Message waiting notification request outstanding for V1 parameter class
+ TTsyReqHandle iIccMessageWaitingNotificationReqHandle; // < Icc Message waiting outstanding request handle for V1 parameter class
+ RMobilePhone::TMobilePhoneMessageWaitingV1* iIccMsgWaiting; // < Icc Message waiting notification data pointer for V1 parameter class
+
+ TBool iIccMessageWaitingPendingV8; // < Icc Message waiting notification request outstanding for V8 parameter class
+ TTsyReqHandle iIccMessageWaitingNotificationReqHandleV8; // < Icc Message waiting outstanding request handle for V8 parameter class
+ RMobilePhone::TMobilePhoneMessageWaitingV1* iIccMsgWaitingV8; // < Icc Message waiting notification data pointer for V8 parameter class
+
+ TBool iNotifyWlanDataChangePending; // < WLAN Data change information for V8 parameter class
+ TTsyReqHandle iNotifyWlanDataChangeReqHandle; // < WLAN Data change information request handle for V8 parameter class
+ RMobilePhone::TUsimWlanDataV8* iNotifyWlanDataChange; // < WLAN Data change information
+
+ TBool iStorePreferredWlanSIDListPending; // < WLAN SID List information for V8 parameter class
+ TTsyReqHandle iStorePreferredWlanSIDListeReqHandle; // < WLAN SID Listinformation request handle for V8 parameter class
+
+ TBool iNotifyPreferredWlanSIDListChangePending; // < WLAN SID Listinformation for V8 parameter class
+ TTsyReqHandle iNotifyPreferredWlanSIDListReqHandle; // < WLAN SID List information request handle for V8 parameter class
+
+ TBool iNotifyPreferredNetworksChangePending; // < NotifyPreferredNetwork change information
+ TTsyReqHandle iNotifyPreferredNetworksReqHandle; // < Request Handle for NotifyPreferredNetworks.
+
+ struct TGBAAuthInfo
+ {
+ /** holds value of network challenge AUTN */
+ TBuf8<RMobilePhone::KAutnLength> iAUTN;
+ /** holds value of network challenge RAND */
+ TBuf8<RMobilePhone::KRandLength> iRAND;
+ /**
+ holds Application's ID, on which the authentication is to be
+ carried out. Note, there is no checking for this AID's
+ existence, config file must simply match client's request data.
+ */
+ TBuf8<RMobilePhone::KAIDSize> iAID;
+ /** holds result RES of AUTHENTICATE command when it's successfull */
+ TBuf8<RMobilePhone::KResLength> iRES;
+ /** holds value of Authentication Token when AUTHENTICATE fails */
+ TBuf8<RMobilePhone::KAutsLength> iAUTS;
+ /** holds value of session key NAFID */
+ TBuf8<RMobilePhone::KNafIdLength> iNAFID;
+ /** holds value of session key IMPI */
+ TBuf8<RMobilePhone::KImpiLength> iIMPI;
+ /** holds value of Ks_ext_Naf key */
+ TBuf8<RMobilePhone::KKsExtNafLength> iKsExtNaf;
+ /** holds the Btid information */
+ TBuf8<RMobilePhone::KBtidLength> iBtid;
+ /** holds the keylifetime information */
+ TBuf8<RMobilePhone::KKeyLifetimeLength> iKeyLifeTime;
+ /** holds whether the other application is busy or not */
+ TBool iOtherAppBusy;
+ /** holds whether the current application is active or not */
+ TBool iAppActive;
+ /** holds the error code that the AUTHENTICATE request should pass/fail with */
+ TInt iAuthErr;
+ };
+
+ struct TMBMSInfo
+ {
+ /** holds the input Mikey from the Network */
+ TBuf8<RMobilePhone::KMikeyLength> iInputMikey ;
+ /** holds the output Mikey containing the verification message */
+ TBuf8<RMobilePhone::KMikeyLength> iOutputMikey;
+ /**holds the output parameter MBMS traffic key */
+ TBuf8<RMobilePhone::KMtkLength> iMtk;
+ /** holds the output parameter random or pseudo random string used to
+ * protect against some offline pre computation attacks on the
+ * underlying security protocol. */
+ TBuf8<RMobilePhone::KSaltLength> iSaltkey;
+ /** MSK is identified by its Key Domain ID and MSK ID
+ * holds the Keydomain ID*/
+ TBuf8<RMobilePhone::KKeyDomainIdLength> iKeyDmn;
+ /** holds the Key group part */
+ TBuf8<RMobilePhone::KKeyGroupLength> iMskIdGrp;
+ /** holds the MUK ID TLV contains MUK IDr and MUK IDi */
+ TBuf8<RMobilePhone::KMukIdTlvLength> iMukIdTlv;
+ /** holds the IDi part of MBMS User Key */
+ TBuf8<RMobilePhone::KMukIdiLength> iMukIdi;
+ /** holds the IDr part of MBMS User Key */
+ TBuf8<RMobilePhone::KMukIdrLength> iMukIdr;
+ /** holds the timestamp for MIKEY reply protection in MSK delivery. */
+ TBuf8<RMobilePhone::KTimeStampCounterLength> iMukTimestamp;
+ /**
+ holds Application's ID, on which the authentication is to be
+ carried out. Note, there is no checking for this AID's
+ existence, config file must simply match client's request data.
+ */
+ TBuf8<RMobilePhone::KAIDSize> iAID;
+ /** holds value of Ks_Int_Naf key
+ * The length used for External NAF is being used here also*/
+ TBuf8<RMobilePhone::KKsExtNafLength> iKsIntNaf;
+ /** holds whether the current application is active or not */
+ TBool iAppActive;
+ /** holds the error code that the AUTHENTICATE request should pass/fail with */
+ TInt iAuthErr;
+ };
+
+ enum TTypeOfAuth
+ {
+ /** Indicates GBA Authentication in progress*/
+ EGba =1,
+ /** Indicates MBMS Authentication in progress*/
+ EMbms
+ };
+
+ TInt iNotifyAuthDataIndex; // Current index of the array
+ CArrayFixFlat<TGBAAuthInfo>* iGBAAuthInfoList; // < Array containing all the GBA config information needed
+ CArrayFixFlat<TMBMSInfo>* iMBMSInfoList; // < Array containing all the MBMS config information needed
+
+ TNotifyData iSetGBABootstrapParams; // data struct to be used for SetGBABootstrapParams API.
+ TNotifyData iNotifyAuthDataChange; // data struct to be used for NotifyAuthenticateChange API.
+ TNotifyData iGetAuthParams; // data struct to be used for GetAuthenticationParams API.
+
+ CArrayPtrFlat<CListReadAllAttempt>* iAuthListInfo; // array to hold the GBA information
+ CMobilePhoneGbaNafIdList* iGbaNafList; //pointer to specialised list class for GBA
+ CArrayPtrFlat<CListReadAllAttempt>* iMbmsListInfo; // array to hold the MBMS information
+ CMobilePhoneMbmsMskIdList* iMbmsMskList; //pointer to specialised list class for MBMS
+
+ TTypeOfAuth iAuthType; // type of authentication in 2 phase retrieval
+ };
+
+#endif /**CSIMUSIMR6_H_*/