mobilemessaging/smsmtm/servermtm/src/WapRecipientSend.cpp
changeset 0 72b543305e3a
--- /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 <e32std.h>
+#include <smuthdr.h>
+#include "SMSSPAN.H"
+#include "SMSRecipientSend.h"
+#include <logwraplimits.h>
+
+#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;
+	}