diff -r 6b1d113cdff3 -r 6638e7f4bd8f smsprotocols/smsstack/test/smspdudbitems.cpp --- a/smsprotocols/smsstack/test/smspdudbitems.cpp Mon May 03 13:37:20 2010 +0300 +++ b/smsprotocols/smsstack/test/smspdudbitems.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,387 +1,387 @@ -// Copyright (c) 2003-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 "smspdudbitems.h" -#include "Gsmumsg.h" -#include "gsmubuf.h" -#include - - -EXPORT_C CSmsPduDbConcatSegment* CSmsPduDbConcatSegment::NewL(RFs& aFs, const CTestConfigItem& aItem, CSmsPDU::TSmsPDUType aType) - { - CSmsPduDbConcatSegment* self = new (ELeave) CSmsPduDbConcatSegment(aType); - CleanupStack::PushL(self); - self->DecodeL(aFs, aItem); - CleanupStack::Pop(self); - return self; - } - - - -EXPORT_C CSmsPduDbMessage* CSmsPduDbMessage::NewL(RFs& aFs, const CTestConfigItem& aItem, CSmsPDU::TSmsPDUType aType) - { - CSmsPduDbMessage* pdu = new (ELeave) CSmsPduDbMessage(aType); - CleanupStack::PushL(pdu); - - pdu->DecodeL(aFs, aItem); - - CleanupStack::Pop(pdu); - - return pdu; - } - - - - - -EXPORT_C CSmsPduDbPdu* CSmsPduDbPdu::NewL(RFs& aFs, const CTestConfigItem& aItem, CSmsPDU::TSmsPDUType aType) - { - CSmsPduDbPdu* self = new (ELeave) CSmsPduDbPdu(aType); - CleanupStack::PushL(self); - self->DecodeL(aFs, aItem); - CleanupStack::Pop(self); - return self; - } - - - -EXPORT_C CSmsPduDbBase::~CSmsPduDbBase() - { - delete iSmsMessage; - } - -EXPORT_C CSmsPduDbConcat::~CSmsPduDbConcat() - { - iSegments.ResetAndDestroy(); - } - -void CSmsPduDbPdu::DecodeL(RFs& aFs, const CTestConfigItem& aItem) - { - const TDesC8& val = aItem.Value(); - - User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, CSmsPduDbBase::ESmsPduDbId, iId)); - - TPtrC8 pdu; - User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, EPdu, pdu)); - SetPduL(pdu); - - const TInt err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EPduError, iDecodeError); - if (err != KErrNone) - { - iDecodeError = KErrNone; - } - - (void) CTestConfig::GetElement(val, KSmsPduDbDelimiter, EPduDesc, iDescription); //ignore error - - TRAP(iSmsMessageError, ConstructSmsMessageL(aFs)); - } - -void CSmsPduDbPdu::ConstructSmsMessageL(RFs& aFs) - { - delete iSmsMessage; - iSmsMessage = NULL; - TGsmSms sms; - sms.SetPdu(iPdu); - const TBool mt = IsMobileTerminatedL(); - iSmsMessage = CSmsMessage::NewL(aFs, sms, CSmsBuffer::NewL(), EFalse, mt); - } - -void CSmsPduDbConcatSegment::DecodeL(RFs& aFs, const CTestConfigItem& aItem) - { - const TDesC8& val = aItem.Value(); - - User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, CSmsPduDbBase::ESmsPduDbId, iId)); - User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatSegment, iSegment)); - - TPtrC8 pdu; - User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatPdu, pdu)); - SetPduL(pdu); - - const TInt err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatError, iDecodeError); - if (err != KErrNone) - { - iDecodeError = KErrNone; - } - - (void) CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatDesc, iDescription); //ignore error - - TRAP(iSmsMessageError, ConstructSmsMessageL(aFs)); - } - -EXPORT_C void CSmsPduDbPdu::GetHexPdu(TDes8& aHexPdu) const - { - const TInt len = iPdu.Length(); - aHexPdu.Zero(); - - for (TInt i=0; i < len; i++) - { - _LIT8(KHexFormat, "%02X"); - const TUint8 val = iPdu[i]; - aHexPdu.AppendFormat(KHexFormat, val); - } - } - -void CSmsPduDbPdu::SetPduL(const TDesC8& aHexPdu) - { - const TInt len = aHexPdu.Length(); - - if (len % 2 != 0) - User::Leave(KErrArgument); - - for (TInt i = 0; i < len; i+=2) - { - const TPtrC8 ptr(aHexPdu.Mid(i, 2)); - TLex8 lex(ptr); - TUint8 val; - User::LeaveIfError(lex.Val(val, EHex)); - iPdu.Append(val); - } - } - -TBool CSmsPduDbPdu::IsMobileTerminatedL() const - { - TBool ret(EFalse); - - switch(iType) - { - case CSmsPDU::ESmsSubmit: - case CSmsPDU::ESmsCommand: - - ret = EFalse; - break; - - case CSmsPDU::ESmsDeliver: - case CSmsPDU::ESmsStatusReport: - - ret = ETrue; - break; - - default: - - User::Leave(KErrNotSupported); - break; - } - - - return ret; - } - -void CSmsPduDbMessage::DecodeL(RFs& aFs, const CTestConfigItem& aItem) - { - const TDesC8& val = aItem.Value(); - - iPdus.Reset(); - delete iSmsMessage; - iSmsMessage = NULL; - - CSmsBuffer* buffer = CSmsBuffer::NewL(); - iSmsMessage = CSmsMessage::NewL(aFs, iType, buffer); //takes ownership of buffer - - TPtrC8 body; - TBool statusReport(EFalse); - TInt dataCodingScheme(0); - TInt protocolIdentifier(0); - - User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, CSmsPduDbBase::ESmsPduDbId, iId)); - - TInt err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgBody, body); - if (err == KErrNone) - { - SetBufferL(body, *buffer); - } - - err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgStatusReport, statusReport); - if (err == KErrNone) - { - if (iType == CSmsPDU::ESmsSubmit) - { - CSmsSubmit& submit = static_cast(iSmsMessage->SmsPDU()); - submit.SetStatusReportRequest(statusReport); - } - else if (iType == CSmsPDU::ESmsCommand) - { - CSmsCommand& command = static_cast(iSmsMessage->SmsPDU()); - command.SetStatusReportRequest(statusReport); - } - } - - err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgDCS, dataCodingScheme); - if (err == KErrNone) - { - SetDataCodingScheme(dataCodingScheme); - } - - err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgPID, protocolIdentifier); - if (err == KErrNone) - { - SetProtocolIdentifier(protocolIdentifier); - } - - (void) CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgDesc, iDescription); //ignore error - - TRAP(iPdusError, iSmsMessage->EncodeMessagePDUsL(iPdus)); - } - -void CSmsPduDbMessage::SetDataCodingScheme(TInt aDCS) - { - TSmsOctet octet(aDCS); - TSmsDataCodingScheme& dcs = reinterpret_cast(octet); - - CSmsPDU& pdu = iSmsMessage->SmsPDU(); - - pdu.SetBits7To4(dcs.Bits7To4()); - - TSmsDataCodingScheme::TSmsClass dcsClass; - const TBool hasClass = dcs.Class(dcsClass); - pdu.SetClass(hasClass, dcsClass); - - pdu.SetAlphabet(dcs.Alphabet()); - pdu.SetTextCompressed(dcs.TextCompressed()); - pdu.SetIndicationState(dcs.IndicationState()); - pdu.SetIndicationType(dcs.IndicationType()); - } - -void CSmsPduDbMessage::SetProtocolIdentifier(TInt aPID) - { - TSmsOctet octet(aPID); - TSmsProtocolIdentifier& pid = reinterpret_cast(octet); - CSmsPDU& pdu = iSmsMessage->SmsPDU(); - - pdu.SetPIDType(pid.PIDType()); - pdu.SetTelematicDeviceIndicator(pid.TelematicDeviceIndicator()); - - if (pid.PIDType()==TSmsProtocolIdentifier::ESmsPIDShortMessageType) - { - TSmsProtocolIdentifier::TSmsShortMessageType pidSMT = (TSmsProtocolIdentifier::TSmsShortMessageType) pid.ShortMessageType(); - pdu.SetShortMessageType(pidSMT); - } - - if (pid.TelematicDeviceIndicator()==TSmsProtocolIdentifier::ESmsTelematicDevice) - { - pdu.SetTelematicDeviceType(pid.TelematicDeviceType()); - } - } - -void CSmsPduDbMessage::SetBufferL(const TDesC8& aBody, CSmsBufferBase& aBuffer) - { - TLex8 body(aBody); - body.Mark(); - TPtrC8 marked; - - - while (!body.Eos()) - { - if (body.Peek() == KSmsPduDbTagStart) - { - marked.Set(body.MarkedToken()); - AppendToBufferL(marked, aBuffer); - body.Mark(); - ProcessUnicodeL(body, aBuffer); - } - else - { - body.Inc(); - } - } - - marked.Set(body.MarkedToken()); - if (marked.Length() != 0) - { - AppendToBufferL(marked, aBuffer); - } - } - -void CSmsPduDbMessage::ProcessUnicodeL(TLex8& aBody, CSmsBufferBase& aBuffer) - { - const TPtrC8 remainder(aBody.Remainder()); - const TInt locate = remainder.Locate(KSmsPduDbTagEnd); - - if (locate != KErrNotFound) - { - aBody.Inc(); - if (!aBody.Eos() && aBody.Peek().IsDigit()) - { - aBody.Mark(); - aBody.Inc(locate - 1); - TPtrC8 marked(aBody.MarkedToken()); - ParseUnicodeL(marked, aBuffer); - aBody.Inc(); - if (!aBody.Eos()) - aBody.Mark(); - } - } - else - aBody.Inc(); - } - -void CSmsPduDbMessage::AppendToBufferL(const TDesC8& aItem, CSmsBufferBase& aBuffer) - { - HBufC* body16 = HBufC::NewLC(aItem.Length()); - body16->Des().Copy(aItem); - - const TInt len = aBuffer.Length(); - aBuffer.InsertL(len, *body16); - - CleanupStack::PopAndDestroy(body16); - } - -void CSmsPduDbMessage::ParseUnicodeL(const TDesC8& aUnicode, CSmsBufferBase& aBuffer) - { - TInt unicodeChar(0); - TInt unicodeRepeat(1); - - User::LeaveIfError(CTestConfig::GetElement(aUnicode, KSmsPduDbTagDelimitier, EUnicodeChar, unicodeChar)); - - TInt err = CTestConfig::GetElement(aUnicode, KSmsPduDbTagDelimitier, EUnicodeCharRepeat, unicodeRepeat); - - if (err != KErrNone || unicodeRepeat < 1) - { - unicodeRepeat = 1; - } - - TBuf8<1> buf; - buf.Append(unicodeChar); - - while (unicodeRepeat--) - { - AppendToBufferL(buf, aBuffer); - } - } - -EXPORT_C void CSmsPduDbConcat::DecodeL(RFs& aFs) - { - delete iSmsMessage; - iSmsMessage = NULL; - const CSmsPDU::TSmsPDUType type = iSegments[0]->iType; - iSmsMessage = CSmsMessage::NewL(aFs, type, CSmsBuffer::NewL()); - - CArrayFixFlat* pdus = new (ELeave) CArrayFixFlat(1); - CleanupStack::PushL(pdus); - - const TInt count = iSegments.Count(); - - for (TInt i=0; iAppendL(sms); - } - - TRAP(iSmsMessageError, iSmsMessage->DecodeMessagePDUsL(*pdus)); - CleanupStack::PopAndDestroy(pdus); - } +// Copyright (c) 2003-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 "smspdudbitems.h" +#include "Gsmumsg.h" +#include "gsmubuf.h" +#include + + +EXPORT_C CSmsPduDbConcatSegment* CSmsPduDbConcatSegment::NewL(RFs& aFs, const CTestConfigItem& aItem, CSmsPDU::TSmsPDUType aType) + { + CSmsPduDbConcatSegment* self = new (ELeave) CSmsPduDbConcatSegment(aType); + CleanupStack::PushL(self); + self->DecodeL(aFs, aItem); + CleanupStack::Pop(self); + return self; + } + + + +EXPORT_C CSmsPduDbMessage* CSmsPduDbMessage::NewL(RFs& aFs, const CTestConfigItem& aItem, CSmsPDU::TSmsPDUType aType) + { + CSmsPduDbMessage* pdu = new (ELeave) CSmsPduDbMessage(aType); + CleanupStack::PushL(pdu); + + pdu->DecodeL(aFs, aItem); + + CleanupStack::Pop(pdu); + + return pdu; + } + + + + + +EXPORT_C CSmsPduDbPdu* CSmsPduDbPdu::NewL(RFs& aFs, const CTestConfigItem& aItem, CSmsPDU::TSmsPDUType aType) + { + CSmsPduDbPdu* self = new (ELeave) CSmsPduDbPdu(aType); + CleanupStack::PushL(self); + self->DecodeL(aFs, aItem); + CleanupStack::Pop(self); + return self; + } + + + +EXPORT_C CSmsPduDbBase::~CSmsPduDbBase() + { + delete iSmsMessage; + } + +EXPORT_C CSmsPduDbConcat::~CSmsPduDbConcat() + { + iSegments.ResetAndDestroy(); + } + +void CSmsPduDbPdu::DecodeL(RFs& aFs, const CTestConfigItem& aItem) + { + const TDesC8& val = aItem.Value(); + + User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, CSmsPduDbBase::ESmsPduDbId, iId)); + + TPtrC8 pdu; + User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, EPdu, pdu)); + SetPduL(pdu); + + const TInt err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EPduError, iDecodeError); + if (err != KErrNone) + { + iDecodeError = KErrNone; + } + + (void) CTestConfig::GetElement(val, KSmsPduDbDelimiter, EPduDesc, iDescription); //ignore error + + TRAP(iSmsMessageError, ConstructSmsMessageL(aFs)); + } + +void CSmsPduDbPdu::ConstructSmsMessageL(RFs& aFs) + { + delete iSmsMessage; + iSmsMessage = NULL; + TGsmSms sms; + sms.SetPdu(iPdu); + const TBool mt = IsMobileTerminatedL(); + iSmsMessage = CSmsMessage::NewL(aFs, sms, CSmsBuffer::NewL(), EFalse, mt); + } + +void CSmsPduDbConcatSegment::DecodeL(RFs& aFs, const CTestConfigItem& aItem) + { + const TDesC8& val = aItem.Value(); + + User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, CSmsPduDbBase::ESmsPduDbId, iId)); + User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatSegment, iSegment)); + + TPtrC8 pdu; + User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatPdu, pdu)); + SetPduL(pdu); + + const TInt err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatError, iDecodeError); + if (err != KErrNone) + { + iDecodeError = KErrNone; + } + + (void) CTestConfig::GetElement(val, KSmsPduDbDelimiter, EConcatDesc, iDescription); //ignore error + + TRAP(iSmsMessageError, ConstructSmsMessageL(aFs)); + } + +EXPORT_C void CSmsPduDbPdu::GetHexPdu(TDes8& aHexPdu) const + { + const TInt len = iPdu.Length(); + aHexPdu.Zero(); + + for (TInt i=0; i < len; i++) + { + _LIT8(KHexFormat, "%02X"); + const TUint8 val = iPdu[i]; + aHexPdu.AppendFormat(KHexFormat, val); + } + } + +void CSmsPduDbPdu::SetPduL(const TDesC8& aHexPdu) + { + const TInt len = aHexPdu.Length(); + + if (len % 2 != 0) + User::Leave(KErrArgument); + + for (TInt i = 0; i < len; i+=2) + { + const TPtrC8 ptr(aHexPdu.Mid(i, 2)); + TLex8 lex(ptr); + TUint8 val; + User::LeaveIfError(lex.Val(val, EHex)); + iPdu.Append(val); + } + } + +TBool CSmsPduDbPdu::IsMobileTerminatedL() const + { + TBool ret(EFalse); + + switch(iType) + { + case CSmsPDU::ESmsSubmit: + case CSmsPDU::ESmsCommand: + + ret = EFalse; + break; + + case CSmsPDU::ESmsDeliver: + case CSmsPDU::ESmsStatusReport: + + ret = ETrue; + break; + + default: + + User::Leave(KErrNotSupported); + break; + } + + + return ret; + } + +void CSmsPduDbMessage::DecodeL(RFs& aFs, const CTestConfigItem& aItem) + { + const TDesC8& val = aItem.Value(); + + iPdus.Reset(); + delete iSmsMessage; + iSmsMessage = NULL; + + CSmsBuffer* buffer = CSmsBuffer::NewL(); + iSmsMessage = CSmsMessage::NewL(aFs, iType, buffer); //takes ownership of buffer + + TPtrC8 body; + TBool statusReport(EFalse); + TInt dataCodingScheme(0); + TInt protocolIdentifier(0); + + User::LeaveIfError(CTestConfig::GetElement(val, KSmsPduDbDelimiter, CSmsPduDbBase::ESmsPduDbId, iId)); + + TInt err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgBody, body); + if (err == KErrNone) + { + SetBufferL(body, *buffer); + } + + err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgStatusReport, statusReport); + if (err == KErrNone) + { + if (iType == CSmsPDU::ESmsSubmit) + { + CSmsSubmit& submit = static_cast(iSmsMessage->SmsPDU()); + submit.SetStatusReportRequest(statusReport); + } + else if (iType == CSmsPDU::ESmsCommand) + { + CSmsCommand& command = static_cast(iSmsMessage->SmsPDU()); + command.SetStatusReportRequest(statusReport); + } + } + + err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgDCS, dataCodingScheme); + if (err == KErrNone) + { + SetDataCodingScheme(dataCodingScheme); + } + + err = CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgPID, protocolIdentifier); + if (err == KErrNone) + { + SetProtocolIdentifier(protocolIdentifier); + } + + (void) CTestConfig::GetElement(val, KSmsPduDbDelimiter, EMsgDesc, iDescription); //ignore error + + TRAP(iPdusError, iSmsMessage->EncodeMessagePDUsL(iPdus)); + } + +void CSmsPduDbMessage::SetDataCodingScheme(TInt aDCS) + { + TSmsOctet octet(aDCS); + TSmsDataCodingScheme& dcs = reinterpret_cast(octet); + + CSmsPDU& pdu = iSmsMessage->SmsPDU(); + + pdu.SetBits7To4(dcs.Bits7To4()); + + TSmsDataCodingScheme::TSmsClass dcsClass; + const TBool hasClass = dcs.Class(dcsClass); + pdu.SetClass(hasClass, dcsClass); + + pdu.SetAlphabet(dcs.Alphabet()); + pdu.SetTextCompressed(dcs.TextCompressed()); + pdu.SetIndicationState(dcs.IndicationState()); + pdu.SetIndicationType(dcs.IndicationType()); + } + +void CSmsPduDbMessage::SetProtocolIdentifier(TInt aPID) + { + TSmsOctet octet(aPID); + TSmsProtocolIdentifier& pid = reinterpret_cast(octet); + CSmsPDU& pdu = iSmsMessage->SmsPDU(); + + pdu.SetPIDType(pid.PIDType()); + pdu.SetTelematicDeviceIndicator(pid.TelematicDeviceIndicator()); + + if (pid.PIDType()==TSmsProtocolIdentifier::ESmsPIDShortMessageType) + { + TSmsProtocolIdentifier::TSmsShortMessageType pidSMT = (TSmsProtocolIdentifier::TSmsShortMessageType) pid.ShortMessageType(); + pdu.SetShortMessageType(pidSMT); + } + + if (pid.TelematicDeviceIndicator()==TSmsProtocolIdentifier::ESmsTelematicDevice) + { + pdu.SetTelematicDeviceType(pid.TelematicDeviceType()); + } + } + +void CSmsPduDbMessage::SetBufferL(const TDesC8& aBody, CSmsBufferBase& aBuffer) + { + TLex8 body(aBody); + body.Mark(); + TPtrC8 marked; + + + while (!body.Eos()) + { + if (body.Peek() == KSmsPduDbTagStart) + { + marked.Set(body.MarkedToken()); + AppendToBufferL(marked, aBuffer); + body.Mark(); + ProcessUnicodeL(body, aBuffer); + } + else + { + body.Inc(); + } + } + + marked.Set(body.MarkedToken()); + if (marked.Length() != 0) + { + AppendToBufferL(marked, aBuffer); + } + } + +void CSmsPduDbMessage::ProcessUnicodeL(TLex8& aBody, CSmsBufferBase& aBuffer) + { + const TPtrC8 remainder(aBody.Remainder()); + const TInt locate = remainder.Locate(KSmsPduDbTagEnd); + + if (locate != KErrNotFound) + { + aBody.Inc(); + if (!aBody.Eos() && aBody.Peek().IsDigit()) + { + aBody.Mark(); + aBody.Inc(locate - 1); + TPtrC8 marked(aBody.MarkedToken()); + ParseUnicodeL(marked, aBuffer); + aBody.Inc(); + if (!aBody.Eos()) + aBody.Mark(); + } + } + else + aBody.Inc(); + } + +void CSmsPduDbMessage::AppendToBufferL(const TDesC8& aItem, CSmsBufferBase& aBuffer) + { + HBufC* body16 = HBufC::NewLC(aItem.Length()); + body16->Des().Copy(aItem); + + const TInt len = aBuffer.Length(); + aBuffer.InsertL(len, *body16); + + CleanupStack::PopAndDestroy(body16); + } + +void CSmsPduDbMessage::ParseUnicodeL(const TDesC8& aUnicode, CSmsBufferBase& aBuffer) + { + TInt unicodeChar(0); + TInt unicodeRepeat(1); + + User::LeaveIfError(CTestConfig::GetElement(aUnicode, KSmsPduDbTagDelimitier, EUnicodeChar, unicodeChar)); + + TInt err = CTestConfig::GetElement(aUnicode, KSmsPduDbTagDelimitier, EUnicodeCharRepeat, unicodeRepeat); + + if (err != KErrNone || unicodeRepeat < 1) + { + unicodeRepeat = 1; + } + + TBuf8<1> buf; + buf.Append(unicodeChar); + + while (unicodeRepeat--) + { + AppendToBufferL(buf, aBuffer); + } + } + +EXPORT_C void CSmsPduDbConcat::DecodeL(RFs& aFs) + { + delete iSmsMessage; + iSmsMessage = NULL; + const CSmsPDU::TSmsPDUType type = iSegments[0]->iType; + iSmsMessage = CSmsMessage::NewL(aFs, type, CSmsBuffer::NewL()); + + CArrayFixFlat* pdus = new (ELeave) CArrayFixFlat(1); + CleanupStack::PushL(pdus); + + const TInt count = iSegments.Count(); + + for (TInt i=0; iAppendL(sms); + } + + TRAP(iSmsMessageError, iSmsMessage->DecodeMessagePDUsL(*pdus)); + CleanupStack::PopAndDestroy(pdus); + }