smsprotocols/smsstack/smsprot/Inc/smspqueue.h
changeset 0 3553901f7fa8
child 14 7ef16719d8cb
--- /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 <e32std.h>
+#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<CQueuedSmsMessage> 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<TGsmSmsSlotEntry>& aSlotArray,MSmsMessageObserver* aObserver);
+	~CQueuedPDUDelete();
+
+private:
+
+	CQueuedPDUDelete(MSmsMessageObserver* aObserver);
+	void ConstructL(const CArrayFix<TGsmSmsSlotEntry>& aSlotArray);
+
+public:
+
+	CArrayFixFlat<TGsmSmsSlotEntry> iLocationArray;
+	MSmsMessageObserver* iObserver;
+	TSglQueLink iLink;
+	};
+
+
+/**
+ *  @internalComponent
+ */
+class CSmspDeleteQueue : public CSmspProtocolQueue
+	{
+	public:
+
+		void Queue(const CArrayFix<TGsmSmsSlotEntry>& 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<TGsmSmsSlotEntry>& aSlotArray, MSmsMessageObserver* aObserver);
+
+		void DoRunL();
+		void DoCancel(); //< From CActive
+
+		void CompleteRequest(CQueuedPDUDelete* aQueuedMessage, TInt aStatus);
+
+	private:
+
+		CSmsPDUDelete* iSmsPDUDelete;
+		TSglQue<CQueuedPDUDelete> iDeleteQueue;
+	};
+
+#endif //< SMSP_QUEUE_H__