--- /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;
+ }