sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h
changeset 12 e978f818f9bd
parent 0 4e1aa6a622a0
--- a/sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h	Tue Feb 02 00:53:00 2010 +0200
+++ b/sysstatemgmt/systemstatemgr/sus/inc/susemergencycallrfadaptation.h	Fri Mar 19 09:58:42 2010 +0200
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 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"
@@ -37,12 +37,11 @@
 
 @internalComponent
 */
-
-
+class CEmergencyAdaptationMessage;
 class CEmergencyCallRfAdaptation : public CActive
 {
 public:
-	static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation& aAdaptation);
+	static CEmergencyCallRfAdaptation* NewL(MEmergencyCallRfAdaptation* aAdaptation);
 	~CEmergencyCallRfAdaptation();
 
 	void Release();
@@ -52,38 +51,71 @@
 	void SetPriorityClientSession(CSsmAdaptationSession* aPriorityClientSession);
 	void RemovePriorityClientSession();
 	void ReserveMemoryL();
+	void DeleteAdaptationMessage();
+	void NotifyAndRemoveAll();
+	void Dequeue(CEmergencyAdaptationMessage *&aCurrentMessage);
 protected:
 	void RunL();
 	TInt RunError( TInt aError );
 	void DoCancel();
+	void ConstructL(MEmergencyCallRfAdaptation* aAdaptation);
 
 private:
 
-	CEmergencyCallRfAdaptation(MEmergencyCallRfAdaptation& aAdaptation);
+	CEmergencyCallRfAdaptation();
 	void SubmitOrQueueL(const RMessage2 &aMessage);
-	void Submit(CAdaptationMessage*& aMessage);
+	void Submit(CEmergencyAdaptationMessage*& aMessage);
 	
 private:
-	CAdaptationMessage *iCurrentMessage;
-	RSsmAdaptationRequestQueue iPendingRequestsQueue;
+	CEmergencyAdaptationMessage *iCurrentMessage;	
+	RPointerArray<CEmergencyAdaptationMessage>iPendingEmergencyRequestsQueue;
 	
-	MEmergencyCallRfAdaptation& iEmergencyCallRfAdaptation;
-	//Reserving Heap to create CAdaptationMessage in OOM condition for priority clients
-	RHeap* iReservedHeap;
+	MEmergencyCallRfAdaptation* iEmergencyCallRfAdaptation;
 	//For storing PriorityClientsession
     CSsmAdaptationSession* iPriorityClientSession;
+    
+    //Count of unused reserved pointers.  
+    TInt iReserveMsgCount;
+    //Pointer Array to store reserved adaptation message pointers
+    RPointerArray<CEmergencyAdaptationMessage> iAdaptationReservedMessageArray; 
     };
 
+enum TMessageStatus
+    {
+    EMsgStatusNULL = 0, //Default status of Message is 0
+    EMsgReserved   = 1, //Flag to indicate the message is using Reserved memory.
+    EMsgInUse      = 2  //Flag to indicate the Reserved message is Used.
+    };
 /**
- * Used for pushing the CAdaptationMessage object in to cleanup stack. This is needed as
- * the message is created using the reserved heap should be freed back to reserved heap
- * instead of deleting.
- * @internalComponent
+ * Class to hold CAdaptationMessage pointer and the value to know whether the current message is from reserved pool
+ * or normal message.
  */
-struct TStoreAdaptationMessage 
+class CEmergencyAdaptationMessage : public CBase
     {
+public:    
+    static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage);
+    static CEmergencyAdaptationMessage* NewL(const RMessage2& aMessage, const TInt8 aMessageStatus);    
+    
+    ~CEmergencyAdaptationMessage();
+    
+    inline void UnsetMessageStatus(const TInt8 aMessageStatus);
+    inline void SetMessageStatus(const TInt8 aMessageStatus);
+    inline TBool IsMessageReserved() const;
+    inline TBool IsMessageInuse() const;    
+    void SetMessage(const RMessage2& aMessage);
+    TInt Function() const;
+    CSession2 *Session() const;
+    void Complete(TInt aReason);
+    
+protected:
+    void ConstructL(const RMessage2& aMessage);
+    
+private:
+    CEmergencyAdaptationMessage(const TInt8 aMessageStatus);
+    
+private:
     CAdaptationMessage* iAdaptationMessage;
-    RHeap* iReservedHeap;
+    // To know the Adaptation Message status.
+    TInt8 iMessageStatus;
     };
-
 #endif // __SUSEMERGENCYCALLRFADAPTATION_H__