diff -r 000000000000 -r 72b543305e3a mobilemessaging/smsmtm/servermtm/src/WapRecipientSend.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/smsmtm/servermtm/src/WapRecipientSend.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,166 @@ +// Copyright (c) 2000-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 "SMSSPAN.H" +#include "SMSRecipientSend.h" +#include + +#ifndef _MSG_NO_LOGGING + _LIT(KWapRecipientSendLogFile, "WapSend.txt"); +#endif + +CWapRecipientSend* CWapRecipientSend::NewL(TSmsProgress& aProgress, RFs& aFs, CMsvServerEntry& aServerEntry) + { + CWapRecipientSend* self = new (ELeave) CWapRecipientSend(aProgress, aFs, aServerEntry); + CleanupStack::PushL(self); + + self->ConstructL(); + + CleanupStack::Pop(); + return self; + } + +TBool CWapRecipientSend::AcceptMessage(const TMsvEntry& aEntry, const CSmsHeader& aHeader) const + { + TBool retVal = (aEntry.iBioType != 0); + + const TBioMsgIdType bearer = aHeader.BioMsgIdType(); + + if (retVal) + { + retVal = (bearer == EBioMsgIdWap || bearer == EBioMsgIdWapSecure); + retVal |= (bearer == EBioMsgIdNbs && aHeader.Submit().Alphabet() == TSmsDataCodingScheme::ESmsAlphabet7Bit); + } + + if (retVal) + { + TInt err = AcceptBioType(aEntry.iBioType, bearer); + retVal = (err == KErrNone); + } + + return retVal; + } + +TBool CWapRecipientSend::AcceptBioMsgId(const TBioMsgId& aBioMsgId) const + { + TBool retVal = (aBioMsgId.iType == EBioMsgIdWap || aBioMsgId.iType == EBioMsgIdWapSecure); + + if (!retVal) + { + retVal = (aBioMsgId.iType == EBioMsgIdNbs && !aBioMsgId.iText.Length()); + } + + retVal &= (aBioMsgId.iPort > 0); + + return retVal; + } + + +CWapRecipientSend::CWapRecipientSend(TSmsProgress& aProgress, RFs& aFs, CMsvServerEntry& aServerEntry) +: CSmsRecipientSend(aProgress, aFs, aServerEntry) + { + } + +void CWapRecipientSend::StartL() + { + if (iRecipient->LogId() == KLogNullId) + { + AddLogEvent(); + } + else + { + GetLogEvent(); + } + } + +void CWapRecipientSend::SendMessageL() + { + SMSSLOG(FLogFormat(_L8("CWapRecipientSend::SendMessageL() for msg %d"), iEntry.Id())); + + __ASSERT_DEBUG(iEntry.iBioType, Panic(KSmssPanicBioTypeNotSet)); + + const CSmsMessage& message = iHeader->Message(); + + SMSSLOG(FLogMessage(iEntry, message, iHeader->BioMsgIdType(), KWapRecipientSendLogFile)); + + //Convert the telephone number to a 8-bit descriptor + HBufC8* addr = HBufC8::NewLC(message.ToFromAddress().Length()); + TPtr8 addrPtr(addr->Des()); + addrPtr.Copy(message.ToFromAddress()); + + //Extract the message from the CSmsMessage + const TInt length = message.Buffer().Length(); + HBufC* msg = HBufC::NewLC(length); + TPtr msgPtr(msg->Des()); + message.Buffer().Extract(msgPtr, 0, length); + + //Convert the message to 8-bit + delete iMessage8; + iMessage8 = NULL; + iMessage8 = HBufC8::NewL(length); + TPtr8 msg8Ptr(iMessage8->Des()); + msg8Ptr.Copy(msgPtr); + + //Get the port number from the BIO Database + TBioMsgId bioMsgId; + GetDefaultSendBearerL(iEntry.iBioType, iHeader->BioMsgIdType(), bioMsgId); + iWapAddr.SetWapAddress(*addr); + iWapAddr.SetPort(bioMsgId.iPort); + + if (!iSession.Handle()) + { + User::LeaveIfError(iSession.Connect()); + } + + if (!iSocket.SubSessionHandle()) + { + User::LeaveIfError(iSocket.Open(iSession, KWAPSMSAddrFamily, KSockDatagram, KWAPSMSDatagramProtocol)); + } + + //Set the SMS Data Encoding Scheme + switch (iHeader->Submit().Alphabet()) + { + case TSmsDataCodingScheme::ESmsAlphabet8Bit: + { + TWapSmsDataCodingScheme codingScheme = EWapSms8BitDCS; + User::LeaveIfError(iSocket.SetOpt(KWapSmsOptionNameDCS,KWapSmsOptionLevel,codingScheme)); + break; + } + case TSmsDataCodingScheme::ESmsAlphabet7Bit: + break; + default: + User::Leave(KErrNotSupported); + } + + //Send the message + iSocket.SendTo(*iMessage8, iWapAddr, 0, iStatus); + CleanupStack::PopAndDestroy(2); //addr, msg + iState = ESmsRecipientSendSendingMessage; + SetActive(); + } + +void CWapRecipientSend::DoCancelSendingMessage() + { + SMSSLOG(FLogFormat(_L8("CWapRecipientSend::DoCancelSendingMessage() while sending msg %d"), iEntry.Id())); + iSocket.CancelSend(); + } + +CWapRecipientSend::~CWapRecipientSend() + { + Cancel(); + delete iMessage8; + }