--- a/messagingappbase/smsmtm/servermtm/src/SMSSendSession.cpp Fri Apr 16 14:56:15 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +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:
-//
-
-#include "SMSSendSession.h"
-
-#include <msventry.h>
-#include <smutset.h>
-#include <smuthdr.h>
-
-#include "SMSSPAN.H"
-#include "SMSSSEND.H"
-#include "SMSRecipientSend.h"
-
-const TInt KErrUnknownBioType = KErrNotSupported;
-
-CSmsSendSession* CSmsSendSession::NewL(TSmsProgress& aProgress, CMsvServerEntry& aServerEntry, RFs& aFs, CSmsHeader& aHeader, CRichText& aRichText, TMsvEntry& aEntry)
- {
- CSmsSendSession* self = new (ELeave) CSmsSendSession(aProgress, aFs, aServerEntry, aHeader);
- CleanupStack::PushL(self);
-
- self->ConstructL(aRichText, aEntry);
-
- CleanupStack::Pop();
-
- return self;
- }
-
-CSmsSendSession::CSmsSendSession(TSmsProgress& aProgress, RFs& aFs, CMsvServerEntry& aServerEntry, CSmsHeader& aHeader)
- : CSmssActive(aFs, aServerEntry, KSmsSessionPriority), iProgress(aProgress), iSmsHeader(aHeader)
- {
- CActiveScheduler::Add(this);
- }
-
-CSmsSendSession::~CSmsSendSession()
- {
- if (iSendTypes)
- iSendTypes->ResetAndDestroy();
-
- delete iSendTypes;
- delete iSmsSend;
- }
-
-void CSmsSendSession::ConstructL(CRichText& aRichText, TMsvEntry& aEntry)
- {
- iSendTypes = new (ELeave) CArrayPtrFlat<CSmsSendType>(1);
- iSmsSend = CSmsSend::NewL(iProgress, iServerEntry, iFs, iSmsHeader, aRichText, aEntry);
- }
-
-void CSmsSendSession::DivideMessagesL(CMsvEntrySelection& aSelection)
- {
- iProgress.iMsgCount = 0;
- TInt selCount = aSelection.Count();
-
- if (!selCount)
- User::Leave(KErrNotFound);
-
- CreateRecipientsL();
- const TInt typeCount = iSendTypes->Count();
- TInt divideError = KErrNone; //Used later as the error code to leave with if aSelection.Count() == 0
-
- //Order important
- while (selCount--)
- {
- TMsvId id = aSelection[selCount];
- TInt err = iServerEntry.SetEntry(id);
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DivideMessagesL() - switch to entry: %d, err: %d"), id, err ));
-
- if (!err)
- {
- TMsvEntry entry = iServerEntry.Entry();
-
- if(entry.InPreparation())
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DivideMessagesL() - entry is in preparation - deleting it from selection array...")));
- aSelection.Delete(selCount);
- }
- else
- {
- //Restore the CSmsHeader
- CMsvStore* store = NULL;
- TInt error = KErrNone;
- TRAP(error, store = iServerEntry.ReadStoreL());
- if(error == KErrAccessDenied )
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DivideMessagesL() - Error = -21 - deleting it from selection array...")));
- entry.SetSendingState(KMsvSendStateWaiting);
- iServerEntry.ChangeEntry(entry);
- aSelection.Delete(selCount);
- }
- else
- {
- User::LeaveIfError(error);
- CleanupStack::PushL(store);
- iSmsHeader.RestoreL(*store);
- CleanupStack::PopAndDestroy(); //store
-
- TBool msgAdded = EFalse;
-
- for(TInt curType = 0; curType < typeCount && !msgAdded; curType++)
- {
- CSmsSendType* smsType = iSendTypes->At(curType);
-
- if (smsType->iRecipientSend->AcceptMessage(entry, iSmsHeader))
- {
- smsType->iSelection->InsertL(0, id);
- iProgress.iMsgCount++;
- msgAdded = ETrue;
- }
- } //end for curType
-
- if (!msgAdded)
- {
- SMSSLOG(FLogFormat(_L8("\tCannot send message %d - Invalid bioType (%d) and bioIdType (%d) combination"), id, entry.iBioType, iSmsHeader.BioMsgIdType()));
-
- //Message is not going to be sent, so set failed
- entry.SetFailed(ETrue);
- entry.SetSendingState(KMsvSendStateFailed);
- entry.iError = KErrUnknownBioType;
- divideError = KErrUnknownBioType;
- iServerEntry.ChangeEntry(entry); //ignore error?
-
- aSelection.Delete(selCount);
- }
- }
- }
- }
- else //SetEntry() failed
- {
- SMSSLOG(FLogFormat(_L8("\tCannot send message %d - iServerEntry.SetEntry(%d) returned error %d"), id, id, err));
-
- if (err != KErrNotFound && err != KErrLocked)
- User::Leave(err);
-
- if (!divideError && divideError != KErrUnknownBioType)
- divideError = err;
-
- aSelection.Delete(selCount);
- }
- } //end for curMsg
-
- if (!iProgress.iMsgCount)
- {
- SMSSLOG(FLogFormat(_L8("\tNO messages to send - CSmsSendSession::DivideMessagesL() error %d"), divideError));
- User::Leave(divideError);
- }
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DivideMessagesL() - END") ));
- }
-
-void CSmsSendSession::CreateRecipientsL()
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::CreateRecipientsL() - iServerEntry id: %d"), iServerEntry.Entry().Id() ));
- //Create WAP and Text Recipients.
- //Note: The order of adding rcptWap and rcptText to iSendTypes is important
- //because rcptText->AcceptMessage() always returns ETrue, therefore rcptWap
- //must be inserted before rcptText.
-
- //Create a Wap Recipient
- CWapRecipientSend* rcptWap = CWapRecipientSend::NewL(iProgress, iFs, iServerEntry);
- CleanupStack::PushL(rcptWap);
- CSmsSendType* smsType = CSmsSendType::NewL(rcptWap);
- CleanupStack::PushL(smsType);
- iSendTypes->AppendL(smsType);
- CleanupStack::Pop(2); //rcptWap, smsType
-
- //Create a Text Recipient
- CTextRecipientSend* rcptText = CTextRecipientSend::NewL(iProgress, iFs, iServerEntry);
- CleanupStack::PushL(rcptText);
- smsType = CSmsSendType::NewL(rcptText);
- CleanupStack::PushL(smsType);
- iSendTypes->AppendL(smsType);
- CleanupStack::Pop(2); //rcptText, smsType
- }
-
-TMsvId CSmsSendSession::IncSms()
- {
- CSmsSendType* sendType = NULL;
- TInt typeCount = iSendTypes->Count();
-
- iId = 0;
-
- if (typeCount)
- {
- while (iCurrentSendType < typeCount && !iId)
- {
- sendType = iSendTypes->At(iCurrentSendType);
- CMsvEntrySelection& selection = *(sendType->iSelection);
- sendType->iCurrentMessage++;
-
- if (sendType->iCurrentMessage < selection.Count())
- {
- iId = selection[sendType->iCurrentMessage];
- }
- else
- {
- iCurrentSendType++;
- }
- }
- }
-
- return iId;
- }
-
-void CSmsSendSession::SendSms(TRequestStatus& aStatus)
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::SendSms() - START - iId: %d"), iId ));
- Queue(aStatus);
-
- if (iId)
- {
- iState = ESessionSending;
- CSmsSendType* sendType = iSendTypes->At(iCurrentSendType);
- iSmsSend->Start(iStatus, iId, sendType->iRecipientSend);
- }
- else
- {
- iState = ESessionNoMoreMessages;
- RequestComplete(&iStatus, KErrNotFound, EFalse);
- }
-
- SetActive();
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::SendSms() - END - iId: %d, iState: %d"), iId, iState ));
- }
-
-void CSmsSendSession::DoSmssCancel()
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DoSmssCancel() - iId: %d, iState: %d"), iId, iState ));
- switch (iState)
- {
- case ESessionSending:
- iSmsSend->Cancel();
- break;
- default:
- break;
- }
- }
-
-void CSmsSendSession::DoRunL()
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DoSmssCancel() - START - iId: %d, iState: %d"), iId, iState ));
- switch (iState)
- {
- case ESessionSending:
- break;
- case ESessionNoMoreMessages:
- case ESessionNoSendTypes:
- iProgress.iError = KErrNotFound;
- break;
- default:
- Panic(KSmssPanicUnexpectedState);
- }
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DoSmssCancel() - END - iId: %d, iState: %d"), iId, iState ));
- }
-
-void CSmsSendSession::DoComplete(TInt& aStatus)
- {
- SMSSLOG(FLogFormat(_L8("CSmsSendSession::DoSmssCancel() - aStatus: %d, iState: %d, iProgress.iError: %d"), aStatus, iState, iProgress.iError ));
- if (aStatus != KErrNone && iProgress.iError == KErrNone)
- {
- iProgress.iError = aStatus;
- }
-
- aStatus = KErrNone;
- }
-
-CSmsSendSession::CSmsSendType* CSmsSendSession::CSmsSendType::NewL(CSmsRecipientSend* aRecipient)
- {
- CSmsSendType* self = new (ELeave) CSmsSendType(aRecipient);
- CleanupStack::PushL(self);
-
- self->ConstructL();
-
- CleanupStack::Pop();
-
- return self;
- }
-
-CSmsSendSession::CSmsSendType::CSmsSendType(CSmsRecipientSend* aRecipient)
-: iRecipientSend(aRecipient), iCurrentMessage(-1)
- {
- }
-
-CSmsSendSession::CSmsSendType::~CSmsSendType()
- {
- delete iRecipientSend;
- delete iSelection;
- }
-
-void CSmsSendSession::CSmsSendType::ConstructL()
- {
- iSelection = new (ELeave) CMsvEntrySelection();
- }