diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/multimodetsy/Multimode/sms/cmti_stored.cpp --- a/telephonyserverplugins/multimodetsy/Multimode/sms/cmti_stored.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/multimodetsy/Multimode/sms/cmti_stored.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,173 +1,173 @@ -// 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: -// - -#include // for RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 -#include "mSLOGGER.H" // for LOGTEXT2 and other logging utilities -#include "ATIO.H" -#include "Matstd.h" -#include "cmti_stored.h" // header file for this cpp file -#include "sms_rx_queue.h" // for CReceiveSmsQueue - -#ifdef __LOGDEB__ -_LIT8(KLogEntry,"CATSmsWaitForAndHandleCMTIStored::%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 - - -CATSmsWaitForAndHandleCMTIStored* CATSmsWaitForAndHandleCMTIStored::NewL(CATIO* aIo,CTelObject* aTelObject, CPhoneGlobals* aGlobals, - CReceiveSmsQueue& aReceiveQueue) - { - CATSmsWaitForAndHandleCMTIStored* wait=new(ELeave) CATSmsWaitForAndHandleCMTIStored(aIo,aTelObject,aGlobals,aReceiveQueue); - // Currently no need for a ConstructL call - return wait; - } - -CATSmsWaitForAndHandleCMTIStored::CATSmsWaitForAndHandleCMTIStored(CATIO* aIo, CTelObject* aTelObject, - CPhoneGlobals* aGlobals, CReceiveSmsQueue& aReceiveQueue) - :CATBase(aIo,aTelObject,aGlobals) - ,iReceiveQueue(aReceiveQueue) - {} - - -CATSmsWaitForAndHandleCMTIStored::~CATSmsWaitForAndHandleCMTIStored() - { - iIo->RemoveExpectStrings(this); - // We do not need to NULL iCMTExpectString and iCDSExpectString - // as this object is about to de destroyed - } - -void CATSmsWaitForAndHandleCMTIStored::Enable() - { - LOCAL_LOGTEXT("Enable","Enabled listening for CMTI"); - - if (!iMsgArrivedExpectString) - iMsgArrivedExpectString=iIo->AddExpectString(this,KCMTIMatchString); - } - -void CATSmsWaitForAndHandleCMTIStored::Disable() - { - LOCAL_LOGTEXT("Disable","Disabled listening for CMTI"); - iIo->RemoveExpectStrings(this); - iMsgArrivedExpectString=NULL; - } - - -void CATSmsWaitForAndHandleCMTIStored::EventSignal(TEventSource aSource) -/** - * Called when a '+CMTI:' is received. - * Pushes the received messages details (store name & index) into the CReceiveSmsQueue. - */ - { - LOCAL_LOGTEXT("EventSignal","Enter function"); - - TInt ret(KErrNone); - RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 rxAttr; - - __ASSERT_ALWAYS(aSource == EReadCompletion, Panic(EATCommand_IllegalCompletionReadExpected)); - __ASSERT_ALWAYS(iPhoneGlobals, Panic(EIllegalNullPtrParameter)); - TRAP(ret, CMTIResponseL(rxAttr)); - if(ret!=KErrNone) - { - LOCAL_LOGTEXT("EventSignal","Unable to parse CMTI response"); - } - else - { - // - // Add the received SMS's details in the CReceiveSmsQueue object - LOCAL_LOGTEXT("EventSignal","Adding SMS details to iReceiveQueue"); - RMobileSmsMessaging::TMobileSmsGsmTpdu nullPdu; - nullPdu.Zero(); - iReceiveQueue.Push(nullPdu,rxAttr); - - // If no AT command is currently running then we have to prod the CReceiveSmsQueue - // to try and read PDUs from the phone. - // This is because the CReceiveSmsQueue object only attempts to read PDUs - // from the phone just after an AT command completes (see CATCommands::Complete). - // There may not be another AT command completed during the life - // of the TSY, so we have to prod CReceiveSmsQueue so that it can complete - // any outstanding ReadMessage reqeuests. - if(!iPhoneGlobals->iEventSignalActive) - { - LOCAL_LOGTEXT("EventSignal","Prodding CReceiveSmsQueue object"); - - // Allow the CReceiveSmsQueue object to read PDUs from the phones memory, if needed - if(iPhoneGlobals->iReceiveSmsQueuePtr) - iPhoneGlobals->iReceiveSmsQueuePtr->ReadPDUFromPhone(); - } - else - { - LOCAL_LOGTEXT("EventSignal","Can not prod CReceiveSmsQueue object as iEventSignalActive"); - } - - // We are done, but there is no client request to complete - // we just return and wait until we get our next CMTI command - } - } - -void CATSmsWaitForAndHandleCMTIStored::CMTIResponseL(RMobileSmsMessaging::TMobileSmsReceiveAttributesV1& aAttr) - { - // +CMTI: , - // string, number - - ParseLineLC(); - CATParamListEntry* entry; - TDblQueIter iter(iRxResults); - - // - // Validate we did actually receive the CMTI string - entry=iter++; - if (!entry || entry->iResultPtr != KCMTIResponseString) - User::Leave(KErrGeneral); - - // - // Parse and store the store name where the message is stored - entry=iter++; - if (!entry) - User::Leave(KErrGeneral); - CATSmsUtils::ConvertStoreNameToEtelMMVersion(aAttr.iStore,entry->iResultPtr); - - // - // Parse and store the index in the store where the message has been stored - entry=iter++; - if (!entry) - User::Leave(KErrGeneral); - TLex8 lex(entry->iResultPtr); - (void)User::LeaveIfError(lex.Val(aAttr.iStoreIndex)); - - { - // - // For logging purposes we need a 8 bit descriptor - TBuf8 buf; - buf.Copy(aAttr.iStore); - LOCAL_LOGTEXT("CMTIResponseL","Have parsed CMTI response string"); - LOGTEXT3(_L8("Index=%d Store=%S"),aAttr.iStoreIndex,&buf); - } - - CleanupStack::PopAndDestroy(); // PopAndDestory object pushed by ParseLineLC - } - - -void CATSmsWaitForAndHandleCMTIStored::CompleteWithIOError(TEventSource /*aSource*/,TInt aStatus) - { - LOCAL_LOGTEXT("CompleteWithIOError","Enter function"); - // CATIO removes expect strings in event of IO error so don't do it here - iMsgArrivedExpectString=NULL; - // inform client of error so that it does not continue to wait for incoming SMS - // now that this wait object has been disabled - iReceiveQueue.CompleteClientReqWithError(aStatus); - } - +// 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: +// + +#include // for RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 +#include "mSLOGGER.H" // for LOGTEXT2 and other logging utilities +#include "ATIO.H" +#include "Matstd.h" +#include "cmti_stored.h" // header file for this cpp file +#include "sms_rx_queue.h" // for CReceiveSmsQueue + +#ifdef __LOGDEB__ +_LIT8(KLogEntry,"CATSmsWaitForAndHandleCMTIStored::%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 + + +CATSmsWaitForAndHandleCMTIStored* CATSmsWaitForAndHandleCMTIStored::NewL(CATIO* aIo,CTelObject* aTelObject, CPhoneGlobals* aGlobals, + CReceiveSmsQueue& aReceiveQueue) + { + CATSmsWaitForAndHandleCMTIStored* wait=new(ELeave) CATSmsWaitForAndHandleCMTIStored(aIo,aTelObject,aGlobals,aReceiveQueue); + // Currently no need for a ConstructL call + return wait; + } + +CATSmsWaitForAndHandleCMTIStored::CATSmsWaitForAndHandleCMTIStored(CATIO* aIo, CTelObject* aTelObject, + CPhoneGlobals* aGlobals, CReceiveSmsQueue& aReceiveQueue) + :CATBase(aIo,aTelObject,aGlobals) + ,iReceiveQueue(aReceiveQueue) + {} + + +CATSmsWaitForAndHandleCMTIStored::~CATSmsWaitForAndHandleCMTIStored() + { + iIo->RemoveExpectStrings(this); + // We do not need to NULL iCMTExpectString and iCDSExpectString + // as this object is about to de destroyed + } + +void CATSmsWaitForAndHandleCMTIStored::Enable() + { + LOCAL_LOGTEXT("Enable","Enabled listening for CMTI"); + + if (!iMsgArrivedExpectString) + iMsgArrivedExpectString=iIo->AddExpectString(this,KCMTIMatchString); + } + +void CATSmsWaitForAndHandleCMTIStored::Disable() + { + LOCAL_LOGTEXT("Disable","Disabled listening for CMTI"); + iIo->RemoveExpectStrings(this); + iMsgArrivedExpectString=NULL; + } + + +void CATSmsWaitForAndHandleCMTIStored::EventSignal(TEventSource aSource) +/** + * Called when a '+CMTI:' is received. + * Pushes the received messages details (store name & index) into the CReceiveSmsQueue. + */ + { + LOCAL_LOGTEXT("EventSignal","Enter function"); + + TInt ret(KErrNone); + RMobileSmsMessaging::TMobileSmsReceiveAttributesV1 rxAttr; + + __ASSERT_ALWAYS(aSource == EReadCompletion, Panic(EATCommand_IllegalCompletionReadExpected)); + __ASSERT_ALWAYS(iPhoneGlobals, Panic(EIllegalNullPtrParameter)); + TRAP(ret, CMTIResponseL(rxAttr)); + if(ret!=KErrNone) + { + LOCAL_LOGTEXT("EventSignal","Unable to parse CMTI response"); + } + else + { + // + // Add the received SMS's details in the CReceiveSmsQueue object + LOCAL_LOGTEXT("EventSignal","Adding SMS details to iReceiveQueue"); + RMobileSmsMessaging::TMobileSmsGsmTpdu nullPdu; + nullPdu.Zero(); + iReceiveQueue.Push(nullPdu,rxAttr); + + // If no AT command is currently running then we have to prod the CReceiveSmsQueue + // to try and read PDUs from the phone. + // This is because the CReceiveSmsQueue object only attempts to read PDUs + // from the phone just after an AT command completes (see CATCommands::Complete). + // There may not be another AT command completed during the life + // of the TSY, so we have to prod CReceiveSmsQueue so that it can complete + // any outstanding ReadMessage reqeuests. + if(!iPhoneGlobals->iEventSignalActive) + { + LOCAL_LOGTEXT("EventSignal","Prodding CReceiveSmsQueue object"); + + // Allow the CReceiveSmsQueue object to read PDUs from the phones memory, if needed + if(iPhoneGlobals->iReceiveSmsQueuePtr) + iPhoneGlobals->iReceiveSmsQueuePtr->ReadPDUFromPhone(); + } + else + { + LOCAL_LOGTEXT("EventSignal","Can not prod CReceiveSmsQueue object as iEventSignalActive"); + } + + // We are done, but there is no client request to complete + // we just return and wait until we get our next CMTI command + } + } + +void CATSmsWaitForAndHandleCMTIStored::CMTIResponseL(RMobileSmsMessaging::TMobileSmsReceiveAttributesV1& aAttr) + { + // +CMTI: , + // string, number + + ParseLineLC(); + CATParamListEntry* entry; + TDblQueIter iter(iRxResults); + + // + // Validate we did actually receive the CMTI string + entry=iter++; + if (!entry || entry->iResultPtr != KCMTIResponseString) + User::Leave(KErrGeneral); + + // + // Parse and store the store name where the message is stored + entry=iter++; + if (!entry) + User::Leave(KErrGeneral); + CATSmsUtils::ConvertStoreNameToEtelMMVersion(aAttr.iStore,entry->iResultPtr); + + // + // Parse and store the index in the store where the message has been stored + entry=iter++; + if (!entry) + User::Leave(KErrGeneral); + TLex8 lex(entry->iResultPtr); + (void)User::LeaveIfError(lex.Val(aAttr.iStoreIndex)); + + { + // + // For logging purposes we need a 8 bit descriptor + TBuf8 buf; + buf.Copy(aAttr.iStore); + LOCAL_LOGTEXT("CMTIResponseL","Have parsed CMTI response string"); + LOGTEXT3(_L8("Index=%d Store=%S"),aAttr.iStoreIndex,&buf); + } + + CleanupStack::PopAndDestroy(); // PopAndDestory object pushed by ParseLineLC + } + + +void CATSmsWaitForAndHandleCMTIStored::CompleteWithIOError(TEventSource /*aSource*/,TInt aStatus) + { + LOCAL_LOGTEXT("CompleteWithIOError","Enter function"); + // CATIO removes expect strings in event of IO error so don't do it here + iMsgArrivedExpectString=NULL; + // inform client of error so that it does not continue to wait for incoming SMS + // now that this wait object has been disabled + iReceiveQueue.CompleteClientReqWithError(aStatus); + } +