diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/servermtm/src/TextRecipientSend.cpp --- a/messagingappbase/smsmtm/servermtm/src/TextRecipientSend.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,200 +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 -#include -#include -#include "SMSRecipientSend.h" - -#include -#include -#include -#include -#include "SmssSimUtils.h" -#include -#include - -#ifndef _MSG_NO_LOGGING -_LIT(KTextRecipientSendLogFile, "TextSend.txt"); -#endif - -CTextRecipientSend* CTextRecipientSend::NewL(TSmsProgress& aProgress, RFs& aFs, CMsvServerEntry& aServerEntry) - { - CTextRecipientSend* self = new (ELeave) CTextRecipientSend(aProgress, aFs, aServerEntry); - CleanupStack::PushL(self); - - self->ConstructL(); - - CleanupStack::Pop(); - return self; - } - -TBool CTextRecipientSend::AcceptMessage(const TMsvEntry& aEntry, const CSmsHeader& aHeader) const - { - TBool retVal = (aHeader.BioMsgIdType() == EBioMsgIdNbs); - - if (retVal && aEntry.iBioType) - { - TInt err = AcceptBioType(aEntry.iBioType, aHeader.BioMsgIdType()); - retVal = (err == KErrNone); - } - - return retVal; - } - -TBool CTextRecipientSend::AcceptBioMsgId(const TBioMsgId& aBioMsgId) const - { - return aBioMsgId.iType == EBioMsgIdNbs && aBioMsgId.iPort <= 0 && aBioMsgId.iText.Length(); - } - -CTextRecipientSend::CTextRecipientSend(TSmsProgress& aProgress, RFs& aFs, CMsvServerEntry& aServerEntry) -: CSmsRecipientSend(aProgress, aFs, aServerEntry) - { - } - -CTextRecipientSend::~CTextRecipientSend() - { - Cancel(); - } - -void CTextRecipientSend::StartL() - { - if (iRecipient->LogId() == KLogNullId) - AddLogEvent(); - else - GetLogEvent(); - } - -void CTextRecipientSend::PrependNbsStringL(const TMsvEntry& aEntry, CSmsMessage& arMessage, HBufC*& rOldMessage) - { - rOldMessage = NULL; - - const CSmsEmailFields& fields = iHeader->EmailFields(); - - if (aEntry.iBioType) - { - if( fields.HasAddress() ) - { - // This is a BIO message that has email fields - not supported. - User::Leave(KErrNotSupported); - } - - CSmsBufferBase& buffer = arMessage.Buffer(); - TInt length = buffer.Length(); - HBufC* oldMessage = HBufC::NewLC(length); - TPtr oldPtr(oldMessage->Des()); - buffer.Extract(oldPtr, 0, length); - - TBioMsgId bioMsgId; - GetDefaultSendBearerL(aEntry.iBioType, EBioMsgIdNbs, bioMsgId); //will leave with KErrNotFound if a bioIdType is not found - - //Only prepend the nbs string if it doesn't exist already - if (oldMessage->FindF(bioMsgId.iText) != 0) //case insensitve - { - length += bioMsgId.iText.Length(); - length += 1; //for the line feed - - HBufC* newMessage = HBufC::NewLC(length); - TPtr newPtr(newMessage->Des()); - - newPtr.Append(bioMsgId.iText); - newPtr.Append(_L("\n")); //according to the Smart Messaging Spec - newPtr.Append(*oldMessage); - - //Pre-pend the string to the CSmsMessage - buffer.Reset(); - buffer.InsertL(0, newPtr); - - CleanupStack::PopAndDestroy(newMessage); - CleanupStack::Pop(oldMessage); - rOldMessage = oldMessage; - } - else - { - CleanupStack::PopAndDestroy(oldMessage); - } - } - else - { - // Check if this is an email message - just check the email fields have - // a length greater than zero. The PID will have been set for email. - if( fields.HasAddress() ) - { - __ASSERT_DEBUG( arMessage.SmsPDU().TelematicDeviceType() == TSmsProtocolIdentifier::ESmsInternetElectronicMail, User::Invariant() ); - - // Create the email header. - HBufC* buf = fields.ComposeLC(); - - // Need to append the email fields to the start of the message body. - CSmsBufferBase& body = arMessage.Buffer(); - body.InsertL(0, *buf); - CleanupStack::PopAndDestroy(buf); - } - } - } - -void CTextRecipientSend::RevertBackToOldMessageL(const TDesC& aOldMessage, CSmsMessage& arMessage) - { - CSmsBufferBase& buffer = arMessage.Buffer(); - buffer.Reset(); - buffer.InsertL(0, aOldMessage); - } - -void CTextRecipientSend::SendMessageL() - { - SMSSLOG(FLogFormat(_L8("CTextRecipientSend::SendMessageL() for msg %d"), iEntry.Id())); - //Store the header to preserve the log ID - const TMsvId oldId = iServerEntry.Entry().Id(); - User::LeaveIfError(iServerEntry.SetEntry(iEntry.Id())); - StoreHeaderL(*iHeader); - iServerEntry.SetEntry(oldId); //ignore error - - CSmsMessage& message = iHeader->Message(); - - HBufC* oldMessage = NULL; - - PrependNbsStringL(iEntry, message, oldMessage); - - if (oldMessage) - { - CleanupStack::PushL(oldMessage); - } - - SMSSLOG(FLogMessage(iEntry, message, iHeader->BioMsgIdType(), KTextRecipientSendLogFile)); - - CSmsSimUtils::ConnectL(iSession, iSocket, ESmsAddrSendOnly); - - RSmsSocketWriteStream writestream(iSocket); - writestream << message; - - if (oldMessage) - { - RevertBackToOldMessageL(*oldMessage, message); - CleanupStack::PopAndDestroy(); //oldMessage - } - - writestream.CommitL(); - - iSocket.Ioctl(KIoctlSendSmsMessage, iStatus,&iSendBuffer, KSolSmsProv); - - iState = ESmsRecipientSendSendingMessage; - SetActive(); - } - -void CTextRecipientSend::DoCancelSendingMessage() - { - SMSSLOG(FLogFormat(_L8("CTextRecipientSend::DoCancelSendingMessage() while sending msg %d"), iEntry.Id())); - iSocket.CancelIoctl(); - }