diff -r 000000000000 -r 3553901f7fa8 smsprotocols/smsstack/smsprot/Inc/smspqueue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/smsprotocols/smsstack/smsprot/Inc/smspqueue.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,222 @@ +// Copyright (c) 1999-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: +// TODO +// +// + +/** + @file + @internalAll +*/ + +#ifndef SMSP_QUEUE_H__ +#define SMSP_QUEUE_H__ + +#include +#include "smspmain.h" +#include "Gsmumsg.h" +#include "smsuact.h" + +class CSmsMessage; +class MSmsMessageObserver; +class MSmsComm; +class CSmsMessageWrite; +class TSmsSettings; +class CSmsSegmentationStore; +class CSmsMessageSend; +class CSmsPDUDelete; +class CSmspSetBearer; + +/** + * Used by CSmsProtocol to hold CSmsMessage objects queued for sending + * or writing to the phone. + * @internalComponent + */ +class CQueuedSmsMessage : public CBase + { +public: + CQueuedSmsMessage(CSmsMessage* aSmsMessage,MSmsMessageObserver& aObserver,TUint aOptions); + ~CQueuedSmsMessage(); +public: + + CSmsMessage* iSmsMessage; + MSmsMessageObserver& iObserver; + TUint iOptions; + TSglQueLink iLink; + }; + + +/** + * @internalComponent + */ +class CSmspProtocolQueue : public CSmsuActiveBase + { + public: + + virtual void Start()=0; + virtual void CancelObserver(MSmsMessageObserver& aObserver)=0; + virtual void CompleteFirst(TInt aStatus)=0; + + protected: + + CSmspProtocolQueue(MSmsComm& aSmsComm, TInt aPriority); + + protected: + + MSmsComm& iSmsComm; + }; + + +/** + * @internalComponent + */ +class CSmspMessageQueue : public CSmspProtocolQueue + { + public: + + void Queue(CSmsMessage* aSmsMessage, MSmsMessageObserver& aObserver, TUint aOptions); + void CancelObserver(MSmsMessageObserver& aObserver); + + protected: + + CSmspMessageQueue(MSmsComm& aSmsComm, TInt aPriority); + ~CSmspMessageQueue(); + + void DoRunL(); + void DoCancel(); + void DoQueueL(CSmsMessage* aSmsMessage, MSmsMessageObserver& aObserver, TUint aOptions); + void CompleteRequest(CQueuedSmsMessage* aQueuedMessage, TInt aStatus); + void CompleteFirst(TInt aStatus); + + virtual void CompleteObserver(MSmsMessageObserver& aObserver, TInt aStatus, const CSmsMessage* aSmsMessage = NULL)=0; + virtual void CancelRequestIfObserved(MSmsMessageObserver& aObserver)=0; + + protected: + + TSglQue iMessageQueue; //< Queue of messages + }; + + +/** + * @internalComponent + */ +class CSmspWriteQueue : public CSmspMessageQueue + { + public: + + static CSmspWriteQueue* NewL(MSmsComm& aSmsComm, const TSmsSettings& aSmsSettings, RMobilePhone& aGsmPhone, CSmsSegmentationStore& aSegmentationStore,TInt aPriority); + void Start(); //< From CSmspProtocolQueue + ~CSmspWriteQueue(); + + private: + + CSmspWriteQueue(MSmsComm& aSmsComm, TInt aPriority); + void ConstructL(const TSmsSettings& aSmsSettings, RMobilePhone& aGsmPhone, CSmsSegmentationStore& aSegmentationStore); + void CancelRequestIfObserved(MSmsMessageObserver& aObserver); + void CompleteObserver(MSmsMessageObserver& aObserver, TInt aStatus, const CSmsMessage* aSmsMessage = NULL); //< From CSmspMessageQueue + void Complete(TInt aStatus); //< From CSmsuActiveBase + + private: + + CSmsMessageWrite* iSmsMessageWrite; + }; + + +/** + * @internalComponent + */ +class CSmspSendQueue : public CSmspMessageQueue + { + public: + + static CSmspSendQueue* NewL(MSmsComm& aSmsComm, CSmsSegmentationStore& aSegmentationStore, const TSmsSettings& aSmsSettings, const RMobileSmsMessaging::TMobileSmsCapsV1& aMobileSmsCaps, RMobileSmsMessaging& aSmsMessaging, TInt aPriority, CSmspSetBearer& aSmspSetBearer); + void Start(); //< From CSmspProtocolQueue + ~CSmspSendQueue(); + + private: + + CSmspSendQueue(MSmsComm& aSmsComm, TInt aPriority); + void ConstructL(CSmsSegmentationStore& aSegmentationStore, const TSmsSettings& aSmsSettings, const RMobileSmsMessaging::TMobileSmsCapsV1& aMobileSmsCaps, RMobileSmsMessaging& aSmsMessaging, CSmspSetBearer& aSmspSetBearer); + void CancelRequestIfObserved(MSmsMessageObserver& aObserver); + void CompleteObserver(MSmsMessageObserver& aObserver, TInt aStatus, const CSmsMessage* aSmsMessage = NULL); //< From CSmspMessageQueue + void Complete(TInt aStatus); //< From CSmsuActiveBase + + private: + + CSmsMessageSend* iSmsMessageSend; + }; + + +/** + * Used by CSmsProtocol to hold CSmsMessage objects queued for deletion + * from the phone. + * @internalComponent + */ +class CQueuedPDUDelete : public CBase + { +public: + + static CQueuedPDUDelete* NewL(const CArrayFix& aSlotArray,MSmsMessageObserver* aObserver); + ~CQueuedPDUDelete(); + +private: + + CQueuedPDUDelete(MSmsMessageObserver* aObserver); + void ConstructL(const CArrayFix& aSlotArray); + +public: + + CArrayFixFlat iLocationArray; + MSmsMessageObserver* iObserver; + TSglQueLink iLink; + }; + + +/** + * @internalComponent + */ +class CSmspDeleteQueue : public CSmspProtocolQueue + { + public: + + void Queue(const CArrayFix& aSlotArray, MSmsMessageObserver* aObserver); + + static CSmspDeleteQueue* NewL(MSmsComm& aSmsComm, const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, TInt aPriority); + void Start(); //< From CSmspProtocolQueue + void CancelObserver(MSmsMessageObserver& aObserver); //< From CSmspProtocolQueue + ~CSmspDeleteQueue(); + + protected: + void RunL(); + + private: + + CSmspDeleteQueue(MSmsComm& aSmsComm, TInt aPriority); + void ConstructL(const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging); + void CompleteObserver(MSmsMessageObserver& aObserver, TInt aStatus, const CSmsMessage* aSmsMessage = NULL); //< From CSmspMessageQueue + void CompleteFirst(TInt aStatus); //< From CSmspProtocolQueue + void DoQueueL(const CArrayFix& aSlotArray, MSmsMessageObserver* aObserver); + + void DoRunL(); + void DoCancel(); //< From CActive + + void CompleteRequest(CQueuedPDUDelete* aQueuedMessage, TInt aStatus); + + private: + + CSmsPDUDelete* iSmsPDUDelete; + TSglQue iDeleteQueue; + }; + +#endif //< SMSP_QUEUE_H__