diff -r 3553901f7fa8 -r 4047d69ee0e4 telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstorewrite.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/attestltsy/atcommand/sms/src/atsmsstorewrite.cpp Tue Feb 09 12:31:43 2010 +0000 @@ -0,0 +1,316 @@ +// Copyright (c) 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: +// @file atsmsstorewrite.cpp +// This contains CAtSmsStoreWrite which is used to write sms message +// + +//system include +#include + +//user include +#include "atsmsstorewrite.h" +#include "mslogger.h" +#include "atmanager.h" +#include "commengine.h" +#include "smsatutil.h" + +//constant defination +_LIT8(KCMGWResponseString,"+CMGW:"); +_LIT8(KSmsWriteLengthCommand,"AT+CMGW = %d\r"); +_LIT8(KDefaultSCA,"00"); +_LIT8(KSmsEnterPduResponse,">"); +const TInt KLtsyOnePause = 100000; //0.1s + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::CAtSmsStoreWrite +// other items were commented in a header +// --------------------------------------------------------------------------- +CAtSmsStoreWrite::CAtSmsStoreWrite(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback) + { + LOGTEXT(_L8("CAtSmsStoreWrite::CAtSmsStoreWrite called")); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::~CAtSmsStoreWrite +// other items were commented in a header +// --------------------------------------------------------------------------- +CAtSmsStoreWrite::~CAtSmsStoreWrite() + { + LOGTEXT(_L8("CAtSmsStoreWrite::~CAtSmsStoreWrite called")); + delete iCallbackTimer; + iCallbackTimer = NULL; + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::NewLC +// other items were commented in a header +// --------------------------------------------------------------------------- +CAtSmsStoreWrite* CAtSmsStoreWrite::NewLC(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + { + CAtSmsStoreWrite* self = new (ELeave)CAtSmsStoreWrite(aGloblePhone, + aCtsyDispatcherCallback); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::NewL +// other items were commented in a header +// --------------------------------------------------------------------------- +CAtSmsStoreWrite* CAtSmsStoreWrite::NewL(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + { + CAtSmsStoreWrite* self=CAtSmsStoreWrite::NewLC(aGloblePhone, + aCtsyDispatcherCallback); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::ConstructL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::ConstructL() + { + CAtCommandBase::ConstructL(); + //Create Timer + iCallbackTimer = CCallbackTimer::NewL(*this); + //set writing timeout + iWriteTimeOut = KLtsyDefaultWriteTimeOut; + AddExpectStringL(KSmsEnterPduResponse); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::SeGsmSmsEntry +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::SeGsmSmsEntry(RMobileSmsStore::TMobileGsmSmsEntryV1 aMobileGsmEntry) + { + iMobileGsmEntry = aMobileGsmEntry; + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::StartRequest +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::StartRequest() + { + ExecuteCommand(); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::ExecuteCommand +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::ExecuteCommand() + { + LOGTEXT(_L8("CAtSmsStoreWrite::ExecuteCommand callded")); + WriteMessage(); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::WriteMessage +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::WriteMessage() + { + LOGTEXT(_L8("CAtSmsStoreWrite::WriteMessage callded")); + iTxBuffer.Zero(); + + RMobilePhone::TMobileAddress msgSca = iMobileGsmEntry.iServiceCentre; + if( msgSca.iTelNumber.Length()!=0 ) + { + //Here is a SCA + TInt ret = SmsAtUtil::AppendAddressToAscii(iMsgDataAscii,msgSca); + if( ret!=KErrNone ) + { + BeginTimer(); + iCallbackVal = ret; + return; + } + } + else + { + //Here is no SCA,usign default SCA + iMsgDataAscii.Append(KDefaultSCA); + } + + const TInt msgDataAsciiLen(iMsgDataAscii.Length()); + // Convert PDU to ASCII + SmsAtUtil::AppendDataToAscii(iMsgDataAscii,iMobileGsmEntry.iMsgData); + iState = ESetPDULengthComplete; + StartWritingPduLength(); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::StartWritingPduLength +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::StartWritingPduLength() + { + LOGTEXT(_L8("CAtSmsStoreWrite::StartWritingPduLength called")); + TInt pduLen = iMobileGsmEntry.iMsgData.Length(); + iTxBuffer.Zero(); + iTxBuffer.Format(KSmsWriteLengthCommand,pduLen); + ClearBuffer(); + iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this); + iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer); + StartTimer(iWriteTimeOut); + } + + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::StartWritingPdu +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::StartWritingPdu() + { + LOGTEXT(_L8("CAtSmsStoreWrite::StartWritingPdu called")); + iTxBuffer.Zero(); + iTxBuffer.Append(iMsgDataAscii); + iTxBuffer.Append(KLtsyCtrlZChar); + ClearBuffer(); + iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this); + iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer); + StartTimer(iWriteTimeOut); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::EventSignal +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::EventSignal(TAtEventSource aEventSource, TInt aStatus) + { + LOGTEXT3(_L8("CAtSmsStoreWrite::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource); + + if(aStatus == KErrNone) + { + if((aEventSource == EWriteCompletion)) + { + LOGTEXT(_L8("CAtSmsStoreWrite::EventSignal,EWriteCompletion!")); + return; + } + else + { + if( iState == ESetPDULengthComplete ) + { + if(iError==KErrNone) + { + iState = EWritePDUComplete; + Complete(); + StartWritingPdu(); + return; + } + } + } + aStatus = iError; + } + Complete(); + iPhoneGlobals.iEventSignalActive = EFalse; + iCtsyDispatcherCallback.CallbackPhonebookSmsStoreWriteEntryComp(aStatus,iLocation,EFalse); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::ParseResponseL +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::ParseResponseL(const TDesC8& /*aResponseBuf*/) + { + LOGTEXT(_L8("CAtSmsStoreWrite::ParseResponseL called!")); + if(iState == ESetPDULengthComplete) + { + if(CurrentLine().MatchF(KSmsEnterPduResponse) != KErrNotFound) + { + iError = KErrNone; + } + else + { + iError = KErrNotFound; + } + } + else + { + iError = KErrNone; + TPtrC8 responseBuf; + responseBuf.Set(Buffer()); + TInt pos = responseBuf.FindF(KCMGWResponseString); + if (pos == KErrNotFound) + { + LOGTEXT(_L8("CAtSmsStoreWrite::ParseResponseL\tError - Cannot find '+CMGW:' string")); + iError = KErrNotFound; + return; + } + pos += KCMGWResponseString().Length(); + //skip a "space" start + while(!(TChar(responseBuf[pos]).IsDigit())) + { + ++pos; + } + // Place the message reference number into buffer + //(ie: everything after +CMGW: string) + TInt refPos = responseBuf.Length()-pos; + responseBuf.Set(responseBuf.Right(refPos)); + + + TLex8 lex(responseBuf); + TUint16 val; + TInt ret = lex.Val(val,EDecimal); + if(ret != KErrNone) + { + iError = ret; + return; + } + iLocation = val; + LOGTEXT2(_L8("CAtSmsStoreWrite::ParseResponseL write index =%d"),iLocation); + } + } + + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::BeginTimer +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::BeginTimer() + { + LOGTEXT(_L8("CAtSmsStoreWrite::BeginTimer() called")); + + if (iCallbackTimer->IsActive()) + { + iCallbackTimer->Cancel(); + } + iCallbackTimer->After(KLtsyOnePause); + } + +// --------------------------------------------------------------------------- +// CAtSmsStoreWrite::TimerRun +// other items were commented in a header +// --------------------------------------------------------------------------- +void CAtSmsStoreWrite::TimerRun(TInt aError) + { + LOGTEXT(_L8("CAtSmsStoreWrite::TimerRun() called")); + if(aError == KErrNone) + { + Complete(); + iPhoneGlobals.iEventSignalActive = EFalse; + iCtsyDispatcherCallback.CallbackPhonebookSmsStoreWriteEntryComp( + iCallbackVal,iLocation,EFalse); + + } + } + +//End of file