// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).// All rights reserved.// This component and the accompanying materials are made available// under the terms of "Eclipse Public License v1.0"// which accompanies this distribution, and is available// at the URL "http://www.eclipse.org/legal/epl-v10.html".//// Initial Contributors:// Nokia Corporation - initial contribution.//// Contributors://// Description:///** @file @internalAll */#ifndef __SMSPENUM_H__#define __SMSPENUM_H__#include <e32base.h>#include <etelmm.h>#include "gsmuSmsSlot.h"#include "smspcomm.h"#include "smspproc.h"#include "smsuset.h"#include <mmretrieve.h>#include "smsuact.h"#include "smspqueue.h"#include "es_ini.h"class CSmsSegmentationStore;class CFacadeSmsReassemblyStore;class CQueuedSmsMessage;/** * * Class CSmsStoreRead for reading messages from the store. Messages can be read * to the list all at once or one by one, depending on capabilities of the Tsy. * @internalComponent */class CSmsStoreRead : public CSmsuActiveBase {private: enum { KDefaultEnumerateTimeoutSeconds=255000000 //<255 sec };public: static CSmsStoreRead* NewL(MSmsComm& aSmsComm, const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, CFacadeSmsReassemblyStore& aReassemblyStore, CSmsSegmentationStore& aSegmentationStore, TInt aPriority, CSmsMonitorDiskSpace& aSmsMonitorDiskSpace); ~CSmsStoreRead(); void Start(TRequestStatus& aStatus,TInt aStoreIndex); void CloseStore();protected: void DoCancel(); void ReadConfigurableSmsSettingsL();private: CSmsStoreRead(MSmsComm& aSmsComm, const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, CFacadeSmsReassemblyStore& aReassemblyStore, CSmsSegmentationStore& aSegmentationStore, TInt aPriority, CSmsMonitorDiskSpace& aSmsMonitorDiskSpace); void ConstructL(); void DoRunL(); void Complete(TInt aStatus); void ReadNextSlotL(); void ProcessPduL();private: enum TSmsStoreReadState { ESmsStoreReadIdle, //< Idle ESmsStoreReadGettingStoreInfo, //< Getting message store info ESmsStoreReadReadingList, //< Reading message list at once ESmsStoreReadReadingSlot, //< Reading message list one message at the time ESmsStoreReadReadingSlotCancel //< Reading message list cancel };private: TSmsStoreReadState iState; //< The current state of the state machine MSmsComm& iSmsComm; const TSmsSettings& iSmsSettings; RMobileSmsMessaging& iSmsMessaging; CFacadeSmsReassemblyStore& iReassemblyStore; CSmsSegmentationStore& iSegmentationStore; CSmsMonitorDiskSpace& iSmsMonitorDiskSpace; RMobileSmsStore iSmsStorage; //< Phone side message store RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg iStoreInfoPckg; RMobilePhoneStore::TMobilePhoneStoreInfoV1 iStoreInfo; //< Capabilities of the current store CRetrieveMobilePhoneSmsList* iRetrieveMobilePhoneSmsList; //< Pointer for getting SMS list from TSY CMobilePhoneGsmSmsList* iMobilePhoneGsmSmsList; //< Pointer to a SMS list RMobileSmsStore::TMobileGsmSmsEntryV1Pckg iEntryV1Pckg; RMobileSmsStore::TMobileGsmSmsEntryV1 iSmsEntry; //< Data of a SMS entry TGsmSmsSlot iSlot; //< Data of a SMS entry including store name TInt iCurrentSlotIndex; //< Index to a slot, identifies the index of iSlot TBool iConfigAutomaticDeletionForClass2; TBool iConfigDiscardingType0Class2; TBool iConfigDiscardingType0Class0; };/** * Class CSmsPhoneEnumeration for enumerating all stores. * @internalComponent */class CSmsPhoneEnumeration : public CSmsuActiveBase {public: static CSmsPhoneEnumeration* NewL(MSmsComm& aSmsComm,const TSmsSettings& aSmsSettings, CFacadeSmsReassemblyStore& aReassemblyStore, CSmsSegmentationStore& aSegmentationStore,RMobilePhone& aGsmPhone, TInt aPriority, CSmsMonitorDiskSpace& aSmsMonitorDiskSpace); ~CSmsPhoneEnumeration(); void Start();protected: void DoRunL(); void DoCancel();private: CSmsPhoneEnumeration(MSmsComm& aSmsComm,const TSmsSettings& aSmsSettings, RMobilePhone& aGsmPhone, TInt aPriority); void ConstructL(CFacadeSmsReassemblyStore& aReassemblyStore,CSmsSegmentationStore& aSegmentationStore,CSmsMonitorDiskSpace& aSmsMonitorDiskSpace); void Complete(TInt aStatus);private: enum TSmsPhoneEnumerationState { ESmsPhoneEnumerationIdle, //< Idle ESmsPhoneEnumerationInitializing, //< Initializing mobile phone ESmsPhoneEnumerationReadingStores //< Reading all stores one at the time };private: TSmsPhoneEnumerationState iState; //< The current state of the state machine MSmsComm& iSmsComm; //< The reference to the observer const TSmsSettings& iSmsSettings; //< Global SMS Protocol settings RMobilePhone& iGsmPhone; //< Etel phone susession RMobileSmsMessaging iSmsMessaging; //< ETEL phone subsession for messaging services TInt iNumStores; //< Number of the phone side stores TInt iCurrentStore; //< Index to a store CSmsStoreRead* iSmsStoreRead; //< Pointer for reading store from the phone side };/** * Class CSmsMessageWrite for writing messages to the store. * @internalComponent */class CSmsMessageWrite : public CSmsuActiveBase { friend class CSmspWriteQueue;private: static CSmsMessageWrite* NewL(MSmsComm& aSmsComm, const TSmsSettings& aSmsSettings, RMobilePhone& aGsmPhone, CSmsSegmentationStore& aSegmentationStore ); ~CSmsMessageWrite(); void Start(CSmsMessage* aSmsMessage, TRequestStatus& aStatus);private: void DoRunL(); void DoCancel();private: CSmsMessageWrite(MSmsComm& aSmsComm, const TSmsSettings& aSmsSettings, RMobilePhone& aGsmPhone, CSmsSegmentationStore& aSegmentationStore ); void ConstructL(); void SegmentMessageL(); void WriteNextSlot(); void Complete(TInt aStatus);private: enum TSmsMessageWriteState { ESmsMessageWriteIdle, //< Idle ESmsMessageWriteInitializing, //< Initializing mobile phone ESmsMessageWriteGettingStoreInfo, //< Getting message store info ESmsMessageWriteWritingPDUs, //< Writing slot to the store };private: MSmsComm& iSmsComm; TSmsMessageWriteState iState; //< The current state of the state machine const TSmsSettings& iSmsSettings; //< Global SMS Protocol settings RMobilePhone& iGsmPhone; //< Etel phone susession RMobileSmsMessaging iSmsMessaging; //< ETEL phone subsession for messaging services RMobileSmsStore iSmsStorage; //< Phone side message store RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg iStoreInfoPckg; RMobilePhoneStore::TMobilePhoneStoreInfoV1 iStoreInfo; //< Capabilities of the current store RMobileSmsStore::TMobileGsmSmsEntryV1Pckg iWriteEntryV1Pckg; RMobileSmsStore::TMobileGsmSmsEntryV1 iEntryToWrite; //< Given entry for writing CSmsSegmentationStore& iSegmentationStore; //< Segmentation store, used to get next 8 or 16bit reference CArrayFixFlat<TGsmSms> iSmsArray; //< Array for Pdus CSmsMessage* iSmsMessage; //< The Message to write TInt iNumStores; //< Number of the phone side stores TInt iCurrentStore; //< Index to a store TGsmSmsSlot iSlot; //< a slot };#endif // !defined __SMSPENUM_H__