telephonyserverplugins/multimodetsy/Multimode/sms/sms_rx_queue.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/multimodetsy/Multimode/sms/sms_rx_queue.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/multimodetsy/Multimode/sms/sms_rx_queue.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,221 +1,221 @@
-// Copyright (c) 1997-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:
-// Class defintition for CReceiveSmsQueue
-// 
-//
-
-/**
- @file
-*/
-
-#include <etelmm.h>				// for RMobileSmsMessaging...
-#include <et_phone.h>           // for TSY_HANDLE_INIT_VALUE
-#include "mSMSMESS.H"			// for CMobileSmsMessaging...
-#include "sms_rx_queue.h"		// header for this cpp file
-#include "mSLOGGER.H"			// for LOGTEXT2...
-#include "sms_rx_queue_pduread.h"		// for CATSmsReadPDU
-
-// Macros
-#ifdef __LOGDEB__
-_LIT8(KLogEntry,"CReceiveSmsQueue::%S\t%S");
-#define LOCAL_LOGTEXT(function,text) {_LIT8(F,function);_LIT8(T,text);LOGTEXT3(KLogEntry,&F,&T);}
-#else
-#define LOCAL_LOGTEXT(function,text)
-#endif
-
-
-CReceiveSmsQueue* CReceiveSmsQueue::NewL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aGlobals,CMobileSmsMessaging& aMobileSmsMessaging)
-/** First stage constructor
- */
- 	{
-	CReceiveSmsQueue* self=new(ELeave) CReceiveSmsQueue(aMobileSmsMessaging,*aGlobals);
-	CleanupStack::PushL(self);	
-	self->ConstructL(aIo,aTelObject,aInit,aGlobals);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CReceiveSmsQueue::CReceiveSmsQueue(CMobileSmsMessaging& aMobileSmsMessaging,CPhoneGlobals& aGlobals)
-	: iGlobals(aGlobals), iMobileSmsMessaging(aMobileSmsMessaging)
- /** C++ constructor
-  */
-	{}
-
-void CReceiveSmsQueue::ConstructL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aGlobals)
-/** Second stage constructor
- */
-	{
-	// Create the AT command object which we will use to read PDUs from the 
-	// phones memory
-	iATReadPDU=CATSmsReadPDU::NewL(aIo,aTelObject,aInit,aGlobals,*this);
-	}
-
-CReceiveSmsQueue::~CReceiveSmsQueue()
-/** C++ destructor
- */
-	{
-	delete iATReadPDU;
-	}
-
-
-
-void CReceiveSmsQueue::Push(const RMobileSmsMessaging::TMobileSmsGsmTpdu& aPdu, 
-			      		    const RMobileSmsMessaging::TMobileSmsReceiveAttributesV1& aAttr)
-	{
-	LOCAL_LOGTEXT("Push","Pushing item to queue");
-	LOGTEXT3(_L8("iQueueFront=%d  iQueueBack=%d"),iQueueFront,iQueueBack);
-		
-	if(QueueFull())
-		{
-		LOCAL_LOGTEXT("Push","Queue overflow!");
-		// Allow message to drop of front of queue
-		iQueueFront=(iQueueFront+1)%KReceiveSmsQueueSize;
-		}
-
-	// Copy item into queue
-	(iQueue[iQueueBack]).iPdu=aPdu;
-	(iQueue[iQueueBack]).iAttr=aAttr;
-
-	// Update pointer
-	iQueueBack=(iQueueBack+1)%KReceiveSmsQueueSize;
-
-	// Try to complete client request in case one was outstanding
-	CompleteClientReqIfPossible();
-	}
-
-
-void CReceiveSmsQueue::PopAndCompleteClientWhenPossible(const TTsyReqHandle aReqHandle,
-                                                        RMobileSmsMessaging::TMobileSmsGsmTpdu* aPdu, 
-									                    RMobileSmsMessaging::TMobileSmsReceiveAttributesV1* aAttr)
-	{
-	__ASSERT_DEBUG(iClientReqOutstanding==EFalse,Panic(EReceiveSmsQueueRequestOutstanding));
-
-	//
-	// Store clients request details
-	iClientReqOutstanding=ETrue;
-	iClientReq=aReqHandle;
-	iClientReqPdu=aPdu;
-	iClientReqAttr=aAttr;
-
-	// Try to complete client request
-	CompleteClientReqIfPossible();
-	}											
-
-void CReceiveSmsQueue::PopAndCompleteClientWhenPossibleCancel()
-	{
-	LOCAL_LOGTEXT("PopAndCompleteClientWhenPossibleCancel","Enter function");
-	LOGTEXT3(_L8("iQueueFront=%d  iQueueBack=%d"),iQueueFront,iQueueBack);
-	
-	if(iClientReqOutstanding)
-		{
-		// Complete client request with KErrCancel
-		iMobileSmsMessaging.ReqCompleted(iClientReq,KErrCancel);
-		iClientReqOutstanding=EFalse;
-		}
-	}
-
-void CReceiveSmsQueue::ReadPDUFromPhone()
-/**
- * ReadPDUFromPhone should be called by CATCommands::Complete at which time the 
- * TSY base classes guarantee that there is not another AT command which is running.
- * ReadPDUFromPhone starts the reading of the PDU of the message at the front of
- * the queue if we do not already store it's PDU.
- */
-	{
-	LOCAL_LOGTEXT("ReadPDUFromPhone","Enter function");
-
-	//
-	// Check if we need to read PDU from phone
-	if(QueueEmpty())
-		{
-		LOCAL_LOGTEXT("ReadPDUFromPhone","Queue is empty, will not read PDU");
-		return;
-		}
-
-	if((iQueue[iQueueFront]).iPdu.Length()!=0)
-		{
-		LOCAL_LOGTEXT("ReadPDUFromPhone","Already have PDU, will not read PDU");
-		return;
-		}
-
-	LOCAL_LOGTEXT("ReadPDUFromPhone","Need to read a PDU from the phone...");
-
-	//
-	// Read PDU from phone
-	// (We can call ExecuteCommand with a 0 TSY handle as we are guaranteed, by 
-	// the CATBase base class that another AT command is not running, and therefore 
-	// the CATBase will not try to complete this request with KErrInUse 
-	// due to iEventSignalActive==ETrue)
-	iATReadPDU->ExecuteCommand(0,&(iQueue[iQueueFront]));
-	}
-
-
-void CReceiveSmsQueue::CompleteClientReqIfPossible()
-/**
- * If there is an oustanding client request then this function
- * will check to see if the client request can be completed.
- * If a client request can be completed then this function will 
- * complete the client request by popping an item from the queue, 
- * passing the item data to the client and then calling ReqCompleted
- */	
-	{
-	LOCAL_LOGTEXT("CompleteClientReqIfPossible","Enter function");
-	
-	//
-	// We can only complete a client request if...
-	//   The client has made a request
-	//   Our Queue is not empty
-	//   We have the PDU for the message at the front of the queue
-	if(iClientReqOutstanding && !QueueEmpty() && (iQueue[iQueueFront]).iPdu.Length()!=0)
-		{
-		LOCAL_LOGTEXT("CompleteClientReqIfPossible","Popping item from queue");
-
-		// Copy item from queue
-		*iClientReqPdu=(iQueue[iQueueFront]).iPdu;
-		*iClientReqAttr=(iQueue[iQueueFront]).iAttr;
-		
-		// Update pointer
-		iQueueFront=(iQueueFront+1)%KReceiveSmsQueueSize;
-
-		// Complete client request
-		iMobileSmsMessaging.ReqCompleted(iClientReq,KErrNone);
-		iClientReqOutstanding=EFalse;
-		}
-	}
-
-TBool CReceiveSmsQueue::QueueEmpty()
-/** Class Private Utility function
- */
-	{
-	return iQueueFront==iQueueBack;
-	}
-
-TBool CReceiveSmsQueue::QueueFull()
-/** Class Private Utility function
- */
-	{
-	return ((iQueueBack+1)%KReceiveSmsQueueSize)==iQueueFront;
-	}
-
-void CReceiveSmsQueue::CompleteClientReqWithError(TInt aError)
-/** Inform client that there is a problem waiting for messages
- */
-	{
-	if(iClientReqOutstanding)
-		{
-		LOGTEXT2(_L8("CReceiveSmsQueue::CompleteClientReqWithError - Error %d"),aError);
-		iMobileSmsMessaging.ReqCompleted(iClientReq,aError);
-		iClientReqOutstanding=EFalse;
-		}
-	}
+// Copyright (c) 1997-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:
+// Class defintition for CReceiveSmsQueue
+// 
+//
+
+/**
+ @file
+*/
+
+#include <etelmm.h>				// for RMobileSmsMessaging...
+#include <et_phone.h>           // for TSY_HANDLE_INIT_VALUE
+#include "mSMSMESS.H"			// for CMobileSmsMessaging...
+#include "sms_rx_queue.h"		// header for this cpp file
+#include "mSLOGGER.H"			// for LOGTEXT2...
+#include "sms_rx_queue_pduread.h"		// for CATSmsReadPDU
+
+// Macros
+#ifdef __LOGDEB__
+_LIT8(KLogEntry,"CReceiveSmsQueue::%S\t%S");
+#define LOCAL_LOGTEXT(function,text) {_LIT8(F,function);_LIT8(T,text);LOGTEXT3(KLogEntry,&F,&T);}
+#else
+#define LOCAL_LOGTEXT(function,text)
+#endif
+
+
+CReceiveSmsQueue* CReceiveSmsQueue::NewL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aGlobals,CMobileSmsMessaging& aMobileSmsMessaging)
+/** First stage constructor
+ */
+ 	{
+	CReceiveSmsQueue* self=new(ELeave) CReceiveSmsQueue(aMobileSmsMessaging,*aGlobals);
+	CleanupStack::PushL(self);	
+	self->ConstructL(aIo,aTelObject,aInit,aGlobals);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CReceiveSmsQueue::CReceiveSmsQueue(CMobileSmsMessaging& aMobileSmsMessaging,CPhoneGlobals& aGlobals)
+	: iGlobals(aGlobals), iMobileSmsMessaging(aMobileSmsMessaging)
+ /** C++ constructor
+  */
+	{}
+
+void CReceiveSmsQueue::ConstructL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aGlobals)
+/** Second stage constructor
+ */
+	{
+	// Create the AT command object which we will use to read PDUs from the 
+	// phones memory
+	iATReadPDU=CATSmsReadPDU::NewL(aIo,aTelObject,aInit,aGlobals,*this);
+	}
+
+CReceiveSmsQueue::~CReceiveSmsQueue()
+/** C++ destructor
+ */
+	{
+	delete iATReadPDU;
+	}
+
+
+
+void CReceiveSmsQueue::Push(const RMobileSmsMessaging::TMobileSmsGsmTpdu& aPdu, 
+			      		    const RMobileSmsMessaging::TMobileSmsReceiveAttributesV1& aAttr)
+	{
+	LOCAL_LOGTEXT("Push","Pushing item to queue");
+	LOGTEXT3(_L8("iQueueFront=%d  iQueueBack=%d"),iQueueFront,iQueueBack);
+		
+	if(QueueFull())
+		{
+		LOCAL_LOGTEXT("Push","Queue overflow!");
+		// Allow message to drop of front of queue
+		iQueueFront=(iQueueFront+1)%KReceiveSmsQueueSize;
+		}
+
+	// Copy item into queue
+	(iQueue[iQueueBack]).iPdu=aPdu;
+	(iQueue[iQueueBack]).iAttr=aAttr;
+
+	// Update pointer
+	iQueueBack=(iQueueBack+1)%KReceiveSmsQueueSize;
+
+	// Try to complete client request in case one was outstanding
+	CompleteClientReqIfPossible();
+	}
+
+
+void CReceiveSmsQueue::PopAndCompleteClientWhenPossible(const TTsyReqHandle aReqHandle,
+                                                        RMobileSmsMessaging::TMobileSmsGsmTpdu* aPdu, 
+									                    RMobileSmsMessaging::TMobileSmsReceiveAttributesV1* aAttr)
+	{
+	__ASSERT_DEBUG(iClientReqOutstanding==EFalse,Panic(EReceiveSmsQueueRequestOutstanding));
+
+	//
+	// Store clients request details
+	iClientReqOutstanding=ETrue;
+	iClientReq=aReqHandle;
+	iClientReqPdu=aPdu;
+	iClientReqAttr=aAttr;
+
+	// Try to complete client request
+	CompleteClientReqIfPossible();
+	}											
+
+void CReceiveSmsQueue::PopAndCompleteClientWhenPossibleCancel()
+	{
+	LOCAL_LOGTEXT("PopAndCompleteClientWhenPossibleCancel","Enter function");
+	LOGTEXT3(_L8("iQueueFront=%d  iQueueBack=%d"),iQueueFront,iQueueBack);
+	
+	if(iClientReqOutstanding)
+		{
+		// Complete client request with KErrCancel
+		iMobileSmsMessaging.ReqCompleted(iClientReq,KErrCancel);
+		iClientReqOutstanding=EFalse;
+		}
+	}
+
+void CReceiveSmsQueue::ReadPDUFromPhone()
+/**
+ * ReadPDUFromPhone should be called by CATCommands::Complete at which time the 
+ * TSY base classes guarantee that there is not another AT command which is running.
+ * ReadPDUFromPhone starts the reading of the PDU of the message at the front of
+ * the queue if we do not already store it's PDU.
+ */
+	{
+	LOCAL_LOGTEXT("ReadPDUFromPhone","Enter function");
+
+	//
+	// Check if we need to read PDU from phone
+	if(QueueEmpty())
+		{
+		LOCAL_LOGTEXT("ReadPDUFromPhone","Queue is empty, will not read PDU");
+		return;
+		}
+
+	if((iQueue[iQueueFront]).iPdu.Length()!=0)
+		{
+		LOCAL_LOGTEXT("ReadPDUFromPhone","Already have PDU, will not read PDU");
+		return;
+		}
+
+	LOCAL_LOGTEXT("ReadPDUFromPhone","Need to read a PDU from the phone...");
+
+	//
+	// Read PDU from phone
+	// (We can call ExecuteCommand with a 0 TSY handle as we are guaranteed, by 
+	// the CATBase base class that another AT command is not running, and therefore 
+	// the CATBase will not try to complete this request with KErrInUse 
+	// due to iEventSignalActive==ETrue)
+	iATReadPDU->ExecuteCommand(0,&(iQueue[iQueueFront]));
+	}
+
+
+void CReceiveSmsQueue::CompleteClientReqIfPossible()
+/**
+ * If there is an oustanding client request then this function
+ * will check to see if the client request can be completed.
+ * If a client request can be completed then this function will 
+ * complete the client request by popping an item from the queue, 
+ * passing the item data to the client and then calling ReqCompleted
+ */	
+	{
+	LOCAL_LOGTEXT("CompleteClientReqIfPossible","Enter function");
+	
+	//
+	// We can only complete a client request if...
+	//   The client has made a request
+	//   Our Queue is not empty
+	//   We have the PDU for the message at the front of the queue
+	if(iClientReqOutstanding && !QueueEmpty() && (iQueue[iQueueFront]).iPdu.Length()!=0)
+		{
+		LOCAL_LOGTEXT("CompleteClientReqIfPossible","Popping item from queue");
+
+		// Copy item from queue
+		*iClientReqPdu=(iQueue[iQueueFront]).iPdu;
+		*iClientReqAttr=(iQueue[iQueueFront]).iAttr;
+		
+		// Update pointer
+		iQueueFront=(iQueueFront+1)%KReceiveSmsQueueSize;
+
+		// Complete client request
+		iMobileSmsMessaging.ReqCompleted(iClientReq,KErrNone);
+		iClientReqOutstanding=EFalse;
+		}
+	}
+
+TBool CReceiveSmsQueue::QueueEmpty()
+/** Class Private Utility function
+ */
+	{
+	return iQueueFront==iQueueBack;
+	}
+
+TBool CReceiveSmsQueue::QueueFull()
+/** Class Private Utility function
+ */
+	{
+	return ((iQueueBack+1)%KReceiveSmsQueueSize)==iQueueFront;
+	}
+
+void CReceiveSmsQueue::CompleteClientReqWithError(TInt aError)
+/** Inform client that there is a problem waiting for messages
+ */
+	{
+	if(iClientReqOutstanding)
+		{
+		LOGTEXT2(_L8("CReceiveSmsQueue::CompleteClientReqWithError - Error %d"),aError);
+		iMobileSmsMessaging.ReqCompleted(iClientReq,aError);
+		iClientReqOutstanding=EFalse;
+		}
+	}