diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/servermtm/src/smssactive.cpp --- a/messagingappbase/smsmtm/servermtm/src/smssactive.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,448 +0,0 @@ -// 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: -// - -#ifdef _DEBUG -#undef _MSG_NO_LOGGING -#endif - -#include "smssactive.h" - -#include -#include -#include -#include -#include - -#include "SMSSPAN.H" - - -#ifndef _MSG_NO_LOGGING - #include - _LIT(KSmssLogFile, "Smss.txt"); - _LIT(KSmssLogDir, "Sms"); - const TInt KSmssLogMaxLength = KLogBufferSize - 22; - /** - Names for Multimode ETel sub-sessions - */ - _LIT(KETelMeSmsStore,"S13"); - _LIT(KETelIccSmsStore,"S14"); - _LIT(KETelCombinedSmsStore,"S15"); -#endif - - - -CSmssActive::CSmssActive(RFs& aFs, CMsvServerEntry& aServerEntry, TInt aPriority) -: CActive(aPriority), iFs(aFs), iServerEntry(aServerEntry) - { - } - -CSmssActive::~CSmssActive() - { -#ifndef _MSG_NO_LOGGING - delete iLastLogFile; - - if (iFlogger.LogValid()) - iFlogger.CloseLog(); - - iFlogger.Close(); -#endif - } - -void CSmssActive::RequestComplete(TRequestStatus* aStatus, TInt aError, TBool aSetActive) - { - User::RequestComplete(aStatus, aError); - - if (aSetActive) - { - SetActive(); - } - } - -void CSmssActive::Queue(TRequestStatus& aStatus) -// -// call this last when an asynch operation has been requested -// - { - __ASSERT_DEBUG(iReport==NULL, Panic(KSmssPanicAlreadyActive)); - - aStatus=KRequestPending; - iReport=&aStatus; - } - -void CSmssActive::DoCancel() -// -// must be called at end of derived classes DoCancel() -// - { - DoSmssCancel(); - TInt result=KErrCancel; - Complete(result); // can be done safely as asynch reporting - } - -TInt CSmssActive::RunError(TInt aError) - { - Complete(aError); - return KErrNone; - } - -void CSmssActive::RunL() - { - User::LeaveIfError(iStatus.Int()); //This will be traped by RunError(). - - DoRunL(); - - if (!IsActive()) - Complete(iStatus.Int()); - } - -TInt CSmssActive::Complete(TInt aStatus) - { - if (iReport) - { - const TBool isCancelling = (aStatus == KErrCancel); - - DoComplete(aStatus); - - if (!IsActive() || isCancelling) - { - User::RequestComplete(iReport, aStatus); - iReport = NULL; - } - } - - return aStatus; - } - -TBool CSmssActive::CanSendMessage(const TMsvEntry& aEntry) const - { - TBool retVal = ETrue; - switch (aEntry.SendingState()) - { - case KMsvSendStateSuspended: - case KMsvSendStateSent: - case KMsvSendStateNotApplicable: - retVal = EFalse; - break; - default: - break; - } - - return retVal; - } - -TBool CSmssActive::CanSendMessageToRecipient(const TMsvEntry& aEntry, const CSmsNumber& aRcpt) const - { - return (aRcpt.Status() != CMsvRecipient::ESentSuccessfully) && CanSendMessage(aEntry); - } - -#ifndef _MSG_NO_LOGGING -TInt CSmssActive::FLogMessage(const TMsvEntry& aEntry, const CSmsMessage& aSmsMessage, TBioMsgIdType aBearer, const TDesC& aFile) - { - TRAPD(err, DoFLogMessageL(aEntry, aSmsMessage, aBearer, aFile)); - return err; - } - -void CSmssActive::DoFLogMessageL(const TMsvEntry& aEntry, const CSmsMessage& aSmsMessage, TBioMsgIdType aBearer, const TDesC& aFile) - { - if (!IsLogging(aFile)) - return; - - TBuf8<32> temp; - TBuf16<32> temp1; - TPtrC temp2; - - switch (aSmsMessage.Type()) - { - case CSmsPDU::ESmsSubmit: - temp = _L8("[Submit%d]"); - break; - case CSmsPDU::ESmsDeliver: - temp = _L8("[Deliver%d]"); - break; - default: - temp = _L8("[Message%d]"); - break; - } - - FLogFormat(aFile, temp, aEntry.Id()); - - TInt length = aSmsMessage.Buffer().Length(); - HBufC* hBuf = HBufC::NewLC(32 + length); - TPtr buf(hBuf->Des()); - aSmsMessage.Buffer().Extract(buf, 0, length); - buf.Insert(0, _L("Message= ")); - FLog(aFile, buf, EFalse); - CleanupStack::PopAndDestroy(hBuf); - hBuf = NULL; - - temp2.Set(aSmsMessage.ToFromAddress()); - FLogFormat(aFile, _L("Recipients= %S"), &temp2); - - temp2.Set(aSmsMessage.ServiceCenterAddress()); - FLogFormat(aFile, _L("SC= %S"), &temp2); - - FLogFormat(aFile, _L("BioUid= %d"), aEntry.iBioType); - - const CSmsPDU& pdu = aSmsMessage.SmsPDU(); - - if (pdu.DataCodingSchemePresent()) - { - temp.Zero(); - temp.Append(_L8("Encoding= ")); - - switch (pdu.Alphabet()) - { - case TSmsDataCodingScheme::ESmsAlphabet7Bit: - temp.Append(_L8("7")); - break; - case TSmsDataCodingScheme::ESmsAlphabet8Bit: - temp.Append(_L8("8")); - break; - case TSmsDataCodingScheme::ESmsAlphabetUCS2: - temp.Append(_L8("16")); - break; - default: - temp.Append(_L8("Unsupported")); - break; - } - - FLogFormat(aFile, temp); - } - - if (aSmsMessage.Type() == CSmsPDU::ESmsSubmit) - { - temp.Zero(); - temp.Append(_L8("DeliveryReport= ")); - - const CSmsSubmit& submit = (CSmsSubmit&) pdu; - if (submit.StatusReportRequest()) - { - temp.Append(_L8("YES")); - } - else - { - temp.Append(_L8("NO")); - } - - FLogFormat(aFile, temp); - } - - temp.Zero(); - temp.Append(_L("Bearer= ")); - - switch (aBearer) - { - case EBioMsgIdNbs: - temp.Append(_L("NBS")); - break; - case EBioMsgIdWap: - temp.Append(_L("WAP")); - break; - case EBioMsgIdWapSecure: - temp.Append(_L("WAPSE")); - break; - default: - temp.Append(_L("UnSup")); - break; - } - - FLogFormat(aFile, temp); - - temp1.Zero(); - temp1.Append(_L("Storage= ")); - - switch (aSmsMessage.Storage()) - { - case CSmsMessage::ESmsSIMStorage: - temp1.Append(KETelIccSmsStore); - break; - case CSmsMessage::ESmsPhoneStorage: - temp1.Append(KETelMeSmsStore); - break; - case CSmsMessage::ESmsCombinedStorage: - temp1.Append(KETelCombinedSmsStore); - break; - case CSmsMessage::ESmsNoStorage: - default: - temp1.Append(_L("NONE")); - }; - - FLogFormat(aFile, temp1); - FLogFormat(aFile, KNullDesC); - } - -void CSmssActive::FLog(const TDesC& aFile, const TDesC& aInputLine, TBool aIgnoreLineBreaks) - { - if (!IsLogging(aFile)) - return; - - TPtrC str(aInputLine); - TInt length = str.Length(); - - if (aIgnoreLineBreaks) - { - //Ignore trailing spaces - while (length--) - { - const TChar ch(str[length]); - if (!ch.IsSpace()) - { - break; - } - } - - length++; - str.Set(aInputLine.Left(length)); - - //Break the message up and print only 255 chars at a time - TInt start = 0; - - while (start < length) - { - TPtrC buf(str.Mid(start, Min(KSmssLogMaxLength, length - start))); - iFlogger.Write(buf); - start += KSmssLogMaxLength; - } - } - else - { - //Log each line in aInputLine individually - while (length > 0) - { - TInt find = str.Locate('\n'); - - if (find == KErrNotFound) - { - FLog(aFile, str, ETrue); - break; - } - else - { - if (find == 0) - FLog(aFile, KNullDesC, ETrue); - else - FLog(aFile, str.Left(find), ETrue); - - if (find < length - 1) - str.Set(str.Mid(find + 1)); - else - break; - } - - length = str.Length(); - } - } - } - -void CSmssActive::FLog(const TDesC& aInputLine, TBool aIgnoreLineBreaks) - { - FLog(KSmssLogFile, aInputLine, aIgnoreLineBreaks); - } - -void CSmssActive::FLogFormat(const TDesC& aFile, TRefByValue aFormat, ...) - { - VA_LIST list; - VA_START(list, aFormat); - FLogFormat(aFile, aFormat, list); - } - -void CSmssActive::FLogFormat(const TDesC& aFile, TRefByValue aFormat, VA_LIST& aList) - { - if (!IsLogging(aFile)) - return; - - iFlogger.WriteFormat(aFormat, aList); - } - - -void CSmssActive::FLogFormat(TRefByValue aFormat, ...) - { - VA_LIST list; - VA_START(list, aFormat); - FLogFormat(KSmssLogFile, aFormat, list); - } - -void CSmssActive::FLogFormat(const TDesC& aFile, TRefByValue aFormat, ...) - { - VA_LIST list; - VA_START(list, aFormat); - FLogFormat(aFile, aFormat, list); - } - -void CSmssActive::FLogFormat(const TDesC& aFile, TRefByValue aFormat, VA_LIST& aList) - { - if (!IsLogging(aFile)) - return; - - iFlogger.WriteFormat(aFormat, aList); - } - - -void CSmssActive::FLogFormat(TRefByValue aFormat, ...) - { - VA_LIST list; - VA_START(list, aFormat); - FLogFormat(KSmssLogFile, aFormat, list); - } - -TBool CSmssActive::IsLogging(const TDesC& aFile) - { - return (ConstructFlogger(aFile) == KErrNone); - } - -TInt CSmssActive::ConstructFlogger(const TDesC& aFile) - { - TRAPD(err, DoConstructFloggerL(aFile)); - return err; - } - -void CSmssActive::DoConstructFloggerL(const TDesC& aFile) - { - if (iFlogger.Handle() == NULL) - User::LeaveIfError(iFlogger.Connect()); - - if (iLastLogFile == NULL || *iLastLogFile != aFile) - { - if (iFlogger.LogValid()) - iFlogger.CloseLog(); - - delete iLastLogFile; - iLastLogFile = NULL; - iLastLogFile = aFile.AllocL(); - iFlogger.CreateLog(KSmssLogDir, aFile, EFileLoggingModeAppend); - } - - if (!iFlogger.LogValid()) - User::Leave(KErrNotFound); - } -#endif - - -void CSmssActive::ChangeEntryL(const TMsvEntry& aNewEntry) - { - __ASSERT_DEBUG(iServerEntry.Entry().Id() == aNewEntry.Id(), Panic(ESmssEntryNotSet)); - - if (!(aNewEntry == iServerEntry.Entry())) - User::LeaveIfError(iServerEntry.ChangeEntry(aNewEntry)); - } - -void CSmssActive::StoreHeaderL(const CSmsHeader& aNewHeader) - { - CMsvStore* msvStore = iServerEntry.EditStoreL(); - CleanupStack::PushL(msvStore); - aNewHeader.StoreL(*msvStore); - msvStore->CommitL(); - CleanupStack::PopAndDestroy(msvStore); - }