telephonyserverplugins/simtsy/inc/CSimUsimR6.h
changeset 0 3553901f7fa8
--- /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_*/