messagingappbase/obexmtms/TObexMTM/SRC/AddHeadersState.cpp
changeset 0 72b543305e3a
--- /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 <obexheaderlist.h>
+
+
+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);
+	}