diff -r 000000000000 -r 72b543305e3a messagingappbase/obexmtms/TObexMTM/SRC/AddHeadersState.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/obexmtms/TObexMTM/SRC/AddHeadersState.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,128 @@ +// 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: +// $Workfile: AddHeadersState.cpp $ +// +// + +#include "AddHeadersState.h" + +#include "obexharness.h" +#include "obextestutils.h" + +#include + + +CAddHeadersState::CAddHeadersState(const CObexHeader::THeaderType aHeaderType, const TUint8 aHeaderHI, const TDesC& aHeaderHV, CObexClientTest& aClientTest) : +iClientTest(aClientTest), +iHeaderType(aHeaderType), +iHeaderHI(aHeaderHI) + { + // Setup the header data buffer. + iHeaderHV = HBufC::NewL(aHeaderHV.Length()); + iHeaderHV->Des().Copy(aHeaderHV); + } +// + +CAddHeadersState::~CAddHeadersState() + { + delete iHeaderHV; + } +// + +void CAddHeadersState::StartL(TRequestStatus& aStatus) + { + + // Create a new obex header. + CObexHeader* header = CObexHeader::NewL(); + CleanupStack::PushL(header); + + // Process the header data type depending on type. + switch (iHeaderType) + { + case CObexHeader::EUnicode: + { + header->SetUnicodeL(iHeaderHI, iHeaderHV->Des()); + + break; + } + + case CObexHeader::EByteSeq: + { + // Convert the 16 bit string to 8 bit string. + + // Src + TPtrC ptrHeaderHV(iHeaderHV->Des()); + + // Dst + HBufC8* byteSeqHV = HBufC8::NewMaxLC(iHeaderHV->Length()); + TPtr8 ptrByteSeqHV(byteSeqHV->Des()); + + TInt i = 0; + while (i < iHeaderHV->Length()) + { + ptrByteSeqHV[i] = (TUint8)ptrHeaderHV[i]; + i++; + } + header->SetByteSeqL(iHeaderHI, byteSeqHV->Des()); + + CleanupStack::PopAndDestroy(byteSeqHV); + break; + } + + case CObexHeader::EByte: + { + TUint8 byteHV = 0; + TLex lex(iHeaderHV->Des()); + + lex.Inc(2); // Jump '0x'. + User::LeaveIfError(lex.Val(byteHV, EHex)); + header->SetByte(iHeaderHI, byteHV); + break; + } + + case CObexHeader::EFourByte: + { + TUint32 fourByteHV = 0; + TLex lex(iHeaderHV->Des()); + + lex.Inc(2); // Jump '0x'. + User::LeaveIfError(lex.Val(fourByteHV, EHex)); + header->SetFourByte(iHeaderHI, fourByteHV); + break; + } + + default: + User::Leave(KErrUnknown); + } + + // Add header to the current headers list. + CObexHeaderList* currentHeaders = iClientTest.CurrentHeaders(); + User::LeaveIfError(currentHeaders->AddHeader(header)); + + // Make a dupilcate header and add to the verify headers list. + CObexHeader* dupHeader = CObexHeader::NewL(); + CleanupStack::PushL(dupHeader); + + dupHeader->Set(header); + + CObexTestHeaderList* verifyHeaders = iClientTest.VerifyHeaders(); + User::LeaveIfError(verifyHeaders->AddHeader(dupHeader)); + + CleanupStack::Pop(dupHeader); + CleanupStack::Pop(header); + + // Complete the state. + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNone); + }