--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/obex/obexprotocol/obex/test/tobex/TREFHANDLER.CPP Tue Oct 19 11:00:12 2010 +0800
@@ -0,0 +1,1236 @@
+// Copyright (c) 1997-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 "TOBEXCON.H"
+#include "obexconstantsinternal.h"
+
+//reference object constants
+_LIT8(KAlphabet, "abcdefghijklmnopqrstuvwxyz");
+
+_LIT8(KRefType, "text/plain");
+_LIT8(KRefRichTextType, "text/richtext");
+_LIT8(KRefImageJpegType, "image/jpeg");
+
+_LIT8(KRefIrMCTarget, "IRMC-SYNC");
+_LIT8(KRefSyncMLTarget, "SYNCML-SYNC");
+
+
+CReferenceHandler* CReferenceHandler::NewL()
+{
+ CReferenceHandler* self = new (ELeave) CReferenceHandler();
+ return self;
+}
+
+CReferenceHandler::CReferenceHandler()
+{
+}
+
+CReferenceHandler::~CReferenceHandler()
+{
+}
+
+
+
+void CReferenceHandler::CreateReferenceL(CObexBufObject& aObject, CBufFlat& aObjectBuf, TInt aReferenceId, TTransport aTransport)
+{
+ switch (aReferenceId)
+ {
+ case (1) :
+ CreateReferenceObject1L(aObject,aObjectBuf,aTransport);
+ break;
+ case (2) :
+ CreateReferenceObject2L(aObject,aObjectBuf,aTransport);
+ break;
+ case (3) :
+ CreateReferenceObject3L(aObject,aObjectBuf,aTransport);
+ break;
+ case (4) :
+ CreateReferenceObject4L(aObject,aObjectBuf,aTransport);
+ break;
+ case (5) :
+ CreateReferenceObject5L(aObject,aObjectBuf,aTransport);
+ break;
+ case (6) :
+ CreateReferenceObject6L(aObject,aObjectBuf,aTransport);
+ break;
+ case (7) :
+ CreateReferenceObject7L(aObject,aObjectBuf,aTransport);
+ break;
+ case (8) :
+ CreateReferenceObject8L(aObject,aObjectBuf,aTransport);
+ break;
+ case (9) :
+ CreateReferenceObject9L(aObject,aObjectBuf,aTransport);
+ break;
+ case (10) :
+ CreateReferenceObject10L(aObject,aObjectBuf,aTransport);
+ break;
+ default :
+ CreateReferenceObject1L(aObject,aObjectBuf,aTransport);
+ break;
+ }
+}
+
+void CReferenceHandler::CreateReferenceObject1L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 2;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+ aObject.SetNameL(KRef2Name); // check the deletecurrentheader method
+ aObject.SetNameL(KRef1Name);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ _LIT8(KRef2HTTP, "Location: http://www.w3.org");
+ _LIT8(KRef3HTTP, "Date: Tue, 10 Nov 2002 09:17:21 GMT");
+
+ // add Http header using old API
+ //
+/* aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+
+ // USE THE HEADER MASK TO REMOVE HTTP HEADERS FROM HEADERSET
+ // THIS DOES NOT REMOVE THE ITEMS FROM iHttp LIST - this tests
+ // the Http() function which should remove items from iHttp list
+ //
+
+ TObexMatchHeader* headerMask = new(ELeave) TObexMatchHeader;
+ headerMask->SetHeader(TObexInternalHeader::EName);
+ aObject.HeaderSet().SetMask(headerMask);
+ aObject.HeaderSet().DeleteMasked();
+ aObject.HeaderSet().SetMask(NULL);
+ delete headerMask;
+
+*/
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+
+/* if (aObject.Http())
+ {
+ NULL;
+ }
+*/
+ // add a Count header using new API
+ //
+ CObexHeader* tempheader = CObexHeader::NewL();
+ CleanupStack::PushL(tempheader);
+ tempheader->SetFourByte(TObexInternalHeader::ECount, 0xFE22FF54);
+ aObject.AddHeaderL(*tempheader);
+ CleanupStack::Pop(tempheader);
+
+ // add an Http header using new API
+ //
+ tempheader = CObexHeader::NewL();
+ CleanupStack::PushL(tempheader);
+ tempheader->SetByteSeqL(TObexInternalHeader::EHttp, KRef1HTTP);
+ aObject.AddHeaderL(*tempheader);
+ CleanupStack::Pop(tempheader);
+
+ aObject.SetTypeL(KRefType);
+ // set again to check header update functionality
+ aObject.SetTypeL(KRefType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ // set again to check header update functionality
+ aObject.SetLengthL(aObjectBuf.Size());
+
+ TBuf8<40> param;
+ param.Copy(_L("\x04"));
+ param.Append(_L("\x03"));
+ param.Append(_L("App params 123"));
+ aObject.SetAppParamL(param);
+ // set again to check header update functionality
+ aObject.SetAppParamL(param);
+
+ const TTime KRef1Time = TDateTime(2003, EApril, 29, 10, 10, 10, 0);
+ aObject.SetTimeL(KRef1Time);
+ // set again to check header update functionality
+ aObject.SetTimeL(KRef1Time);
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+ ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+ // set again to check header update functionality
+ aObject.SetDescriptionL(ptr);
+
+ CleanupStack::PopAndDestroy(descBuf);
+
+ aObject.SetTargetL(KRefTarget);
+ // set again to check header update functionality
+ aObject.SetTargetL(KRefTarget);
+
+ CObexHeader* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x30, KRef1Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(TObexInternalHeader::ECreatorID, 0x5F3A2343);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x36, KRef5Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByteSeqL(TObexInternalHeader::EWanUUID, KRefTarget);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x3F, KRef5Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xB0, 0x03);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xBF, 0x12);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xBE, 0x12);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0xF0, 0x54545454);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+// THIS NEXT HEADER IS A NEGATIVE TEST. It should cause a panic
+// 0x2F header doesnt have a FourByte HI Type.
+/* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0x2F, 0x54);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+*/
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0xFF, 0x00111243);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByteSeqL(0x73, KRefTarget);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByteSeqL(TObexInternalHeader::EObjectClass, KRefTarget);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ aObject.SetHeaderMask(KObexHdrName |KObexHdrType | KObexHdrLength | KObexHdrTime | KObexHdrDescription | KObexHdrTarget | KObexHdrHttp | KObexHdrCount | KObexHdrAppParam | KObexHdrUserDefined | KObexHdrObjectClass | KObexHdrWanUUID | KObexHdrCreatorID);
+
+}
+
+void CReferenceHandler::CreateReferenceObject2L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfObjects = 2;
+ aObjectBuf.ResizeL(KNumOfObjects * 20);
+ //populate the buffer...
+ _LIT8(KRefDesc2, "*Reference Object 2*");
+ TUint i;
+ for (i=0; i<KNumOfObjects; i++)
+ {
+ aObjectBuf.Write(20*i, KRefDesc2);
+ }
+ //populate the object
+ aObject.SetNameL(KRef2Name);
+ aObject.SetTypeL(KRefType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ const TTime KRef2Time = TDateTime(2002, EJanuary, 0, 0, 0, 0, 0);
+ aObject.SetTimeL(KRef2Time);
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+ ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+ CleanupStack::PopAndDestroy(descBuf);
+ aObject.SetTargetL(KRefIrMCTarget);
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrType | KObexHdrLength | KObexHdrTime | KObexHdrDescription | KObexHdrTarget);
+}
+
+void CReferenceHandler::CreateReferenceObject3L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 1000;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+ aObject.SetNameL(KRef3Name);
+ aObject.SetTypeL(KRefRichTextType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ const TTime KRef3Time = TDateTime(2002, EJanuary, 0, 0, 0, 0, 0);
+ aObject.SetTimeL(KRef3Time);
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+ ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+ CleanupStack::PopAndDestroy(descBuf);
+ aObject.SetTargetL(KRefTarget);
+
+ CObexHeader* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x30, KRef1Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x36, KRef5Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x3F, KRef5Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xB0, 0x03);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xBF, 0x12);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0xF0, 0x54);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+// THIS NEXT HEADER IS A NEGATIVE TEST. It should cause a panic
+// 0x2F header doesnt have a FourByte HI Type.
+/* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0x2F, 0x54);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+*/
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0xFF, 0x43);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByteSeqL(0x73, KRefTarget);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrType | KObexHdrLength | KObexHdrTime | KObexHdrDescription | KObexHdrTarget | KObexHdrUserDefined);
+}
+
+void CReferenceHandler::CreateReferenceObject4L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 200;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+
+ aObject.SetNameL(KRef4Name);
+ aObject.SetLengthL(aObjectBuf.Size());
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+ ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+ CleanupStack::PopAndDestroy(descBuf);
+ aObject.SetTargetL(KRefTarget);
+
+ TBuf8<40> param;
+ param.Copy(_L("\x04"));
+ param.Append(_L("\x03"));
+ param.Append(_L("App params 456"));
+ aObject.SetAppParamL(param);
+
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrLength | KObexHdrDescription | KObexHdrTarget | KObexHdrAppParam);
+}
+
+void CReferenceHandler::CreateReferenceObject5L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 200;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+ aObject.SetNameL(KRef5Name);
+ aObject.SetTypeL(KRefImageJpegType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ const TTime KRef5Time = TDateTime(2001, EFebruary, 14, 15, 38, 24, 0);//set time to 15:38:24.0 on 14th Feb 2001 - obex doesn't transfer microseconds!!
+ aObject.SetTimeL(KRef5Time);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ _LIT8(KRef2HTTP, "Location: http://www.w3.org");
+ _LIT8(KRef3HTTP, "Date: Tue, 10 Nov 2002 09:17:21 GMT");
+
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+ ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+ CleanupStack::PopAndDestroy(descBuf);
+ aObject.SetTargetL(KRefTarget);
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrType | KObexHdrTime | KObexHdrLength | KObexHdrTime | KObexHdrDescription | KObexHdrHttp | KObexHdrTarget);
+}
+
+void CReferenceHandler::CreateReferenceObject6L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 200;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+
+ aObject.SetNameL(KRef6Name);
+ aObject.SetTypeL(KRefImageJpegType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ const TTime KRef5Time = TDateTime(2001, EFebruary, 14, 15, 38, 24, 0);//set time to 15:38:24.0 on 14th Feb 2001 - obex doesn't transfer microseconds!!
+ aObject.SetTimeL(KRef5Time);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ _LIT8(KRef2HTTP, "Location: http://www.w3.org");
+ _LIT8(KRef3HTTP, "Date: Tue, 10 Nov 2002 09:17:21 GMT");
+/*
+ TObexMatchHeader* headerMask = new(ELeave) TObexMatchHeader;
+
+ headerMask->SetHeader(TObexInternalHeader::EName);
+ aObject.HeaderSet().SetMask(headerMask);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ if (aObject.Http())
+ {
+ NULL;
+ }
+ aObject.HeaderSet().SetMask(headerMask);
+ aObject.HeaderSet().DeleteMasked();
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ if (aObject.Http())
+ {
+ NULL;
+ }
+ aObject.HeaderSet().SetMask(headerMask);
+ aObject.HeaderSet().DeleteMasked();
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+
+
+ if (aObject.Http())
+ {
+ NULL;
+ }
+
+ aObject.HeaderSet().SetMask(headerMask);
+ aObject.HeaderSet().DeleteMasked();
+ delete headerMask;
+*/
+
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+
+/*
+ if (aObject.Http())
+ {
+ NULL;
+ }
+
+
+ aObject.HeaderSet().SetMask(NULL);
+*/
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+/* ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+*/ CleanupStack::PopAndDestroy(descBuf);
+
+ aObject.SetTargetL(KRefTarget);
+
+ CObexHeader* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x30, KRef1Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x36, KRef5Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetUnicodeL(0x3F, KRef5Name);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xB0, 0x03);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xBF, 0x12);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0xF0, 0x54);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+// THIS NEXT HEADER IS A NEGATIVE TEST. It should cause a panic
+// 0x2F header doesnt have a FourByte HI Type.
+/* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0x2F, 0x54);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+*/
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetFourByte(0xFF, 0x43);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByteSeqL(0x73, KRefTarget);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrType | KObexHdrTime | KObexHdrLength | KObexHdrHttp | KObexHdrTarget | KObexHdrUserDefined );
+}
+
+
+void CReferenceHandler::CreateReferenceObject7L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 200;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+
+ aObject.SetNameL(KRef7Name);
+ aObject.SetTypeL(KRefImageJpegType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ const TTime KRef5Time = TDateTime(2001, EFebruary, 14, 15, 38, 24, 0);//set time to 15:38:24.0 on 14th Feb 2001 - obex doesn't transfer microseconds!!
+ aObject.SetTimeL(KRef5Time);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ _LIT8(KRef2HTTP, "Location: http://www.w3.org");
+ _LIT8(KRef3HTTP, "Date: Tue, 10 Nov 2002 09:17:21 GMT");
+
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+/* ASSERT(descBuf);
+ TPtr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+*/
+ CleanupStack::PopAndDestroy(descBuf);
+
+ aObject.SetTargetL(KRefSyncMLTarget);
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrType | KObexHdrTime | KObexHdrLength | KObexHdrHttp | KObexHdrTarget);
+}
+
+void CReferenceHandler::CreateReferenceObject8L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 200;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+
+ //populate the object
+
+ aObject.SetNameL(KRef8Name);
+ aObject.SetTypeL(KRefType);
+ const TTime KRef10Time = TDateTime(2005, EJanuary, 17, 14, 35, 30, 0);
+ aObject.SetTimeL(KRef10Time);
+ aObject.SetTargetL(KRefIrMCTarget);
+ TBuf8<40> param;
+ param.Copy(_L("\x04"));
+ param.Append(_L("\x03"));
+ param.Append(_L("PARAM 435"));
+ aObject.SetAppParamL(param);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ aObject.AddHttpL(KRef1HTTP);
+
+ CObexHeader* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ _LIT(KUserDefUnicode2, "UserDef2");
+ header->SetUnicodeL(0x34, KUserDefUnicode2);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xBC, 0x23);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+/* ASSERT(descBuf);
+ Ptr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+*/
+ CleanupStack::PopAndDestroy(descBuf);
+
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrType | KObexHdrTime | KObexHdrTarget | KObexHdrAppParam | KObexHdrHttp |KObexHdrUserDefined);
+}
+
+void CReferenceHandler::CreateReferenceObject9L(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+ const TUint KNumOfAlphabets = 1000;
+ aObjectBuf.ResizeL(KNumOfAlphabets * 30);
+ //populate the buffer...
+ TBuf8<4> buf;
+ TUint i;
+ for (i=0; i<KNumOfAlphabets; i++)
+ {
+ buf.Zero();
+ buf.AppendNumFixedWidth(i, EDecimal, 4);
+ aObjectBuf.Write(30*i, buf);
+ aObjectBuf.Write(30*i + 4, KAlphabet);
+ }
+ //populate the object
+ aObject.SetNameL(KRef9Name);
+ aObject.SetTypeL(KRefType);
+ aObject.SetLengthL(aObjectBuf.Size());
+ const TTime KRef3Time = TDateTime(2002, EJanuary, 0, 0, 0, 0, 0);
+ aObject.SetTimeL(KRef3Time);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ _LIT8(KRef2HTTP, "Location: http://www.bluetooth.com");
+ _LIT8(KRef3HTTP, "Date: Tue, 10 Nov 2002 09:17:21 GMT");
+
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+ aObject.AddHttpL(KRef1HTTP);
+ aObject.AddHttpL(KRef2HTTP);
+ aObject.AddHttpL(KRef3HTTP);
+
+ // Set up the MF description header
+ const TUint KDescLength = ( (aTransport==EBluetooth?KObexPacketDefaultSize:2044) - KObexPacketHeaderSize - 5 - 5)/sizeof(TText); // Size in characters
+ HBufC* descBuf = HBufC::NewLC(KDescLength);
+/* ASSERT(descBuf);
+ Ptr ptr(descBuf->Des());
+ ptr.Zero();
+ for (i=0; i<KDescLength; i++)
+ {
+ ptr.AppendNumFixedWidth(i%10, EDecimal, 1);
+ }
+ aObject.SetDescriptionL(ptr);
+*/
+ CleanupStack::PopAndDestroy(descBuf);
+ aObject.SetTargetL(KRefSyncMLTarget);
+ aObject.SetHeaderMask(KObexHdrName | KObexHdrHttp | KObexHdrType | KObexHdrLength | KObexHdrTime | KObexHdrDescription | KObexHdrTarget);
+}
+
+//Empty object with EoB headder
+void CReferenceHandler::CreateReferenceObject10L(CObexBufObject& aObject, CBufFlat& /*aObjectBuf*/, TTransport /*aTransport*/)
+{
+ //Reset the object (also resets the buffer)
+ aObject.Reset();
+
+ aObject.SetNameL(KRef8Name);
+ aObject.SetTypeL(KRefType);
+ const TTime KRef10Time = TDateTime(2005, EJanuary, 17, 14, 35, 30, 0);
+ aObject.SetTimeL(KRef10Time);
+ aObject.SetTargetL(KRefIrMCTarget);
+ TBuf8<40> param;
+ param.Copy(_L("\x04"));
+ param.Append(_L("\x03"));
+ param.Append(_L("PARAM 435"));
+ aObject.SetAppParamL(param);
+
+ _LIT8(KRef1HTTP, "Accept: text/*");
+ aObject.AddHttpL(KRef1HTTP);
+
+ CObexHeader* header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ _LIT(KUserDefUnicode2, "UserDef2");
+ header->SetUnicodeL(0x34, KUserDefUnicode2);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ header->SetByte(0xBC, 0x23);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+ header = CObexHeader::NewL();
+ CleanupStack::PushL(header);
+ TBuf8<1000> dummy;
+ header->SetByteSeqL(TObexInternalHeader::EEndOfBody, dummy);
+ aObject.AddHeaderL(*header);
+ CleanupStack::Pop(header);
+
+
+ HBufC* descBuf = HBufC::NewLC(0);
+ CleanupStack::PopAndDestroy(descBuf);
+}
+
+TInt CReferenceHandler::CompareObjectToReferenceL(CObexBufObject& aObject, CBufFlat& aObjectBuf, TTransport aTransport)
+{
+ CBufFlat* buf = CBufFlat::NewL(3000);
+ CleanupStack::PushL(buf);
+ CObexBufObject* obj = CObexBufObject::NewL(buf);
+ CleanupStack::PushL(obj);
+
+ if (aObject.Name() == KRef1Name)
+ CreateReferenceObject1L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef2Name)
+ CreateReferenceObject2L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef3Name)
+ CreateReferenceObject3L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef4Name)
+ CreateReferenceObject4L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef5Name)
+ CreateReferenceObject5L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef6Name)
+ CreateReferenceObject6L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef7Name)
+ CreateReferenceObject7L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef8Name)
+ CreateReferenceObject8L(*obj, *buf, aTransport);
+ else if (aObject.Name() == KRef9Name)
+ CreateReferenceObject9L(*obj, *buf, aTransport);
+ else //default
+ CreateReferenceObject1L(*obj, *buf, aTransport);
+
+ TInt res = 0;
+
+ if (aObject.Name() != obj->Name())
+ res |= EDifferentName;
+ if (aObject.Type() != obj->Type())
+ res |= EDifferentType;
+ if (aObject.Length() != obj->Length())
+ res |= EDifferentLength;
+ if (aObject.Time() != obj->Time())
+ res |= EDifferentTime;
+ if (aObject.Description() != obj->Description())
+ res |= EDifferentDescription;
+ if (aObject.Target() != obj->Target())
+ res |= EDifferentTarget;
+ if (aObjectBuf.Ptr(0) != buf->Ptr(0))
+ res |= EDifferentBuf;
+ if (aObject.AppParam() != obj->AppParam())
+ res |= EDifferentAppParam;
+ if (aObject.Http())
+ {
+ if ( ((aObject.Http())->Count()) == ((obj->Http())->Count()))
+ {
+ TInt arrayIndex = 0;
+ while (arrayIndex < ((aObject.Http())->Count()))
+ {
+ if ((((*aObject.Http())[arrayIndex])->Des()) != (((*obj->Http())[arrayIndex])->Des()))
+ {
+ res |= EDifferentHttp;
+ }
+ arrayIndex++;
+ }
+ }
+ else
+ {
+ res |= EDifferentHttp;
+ }
+ }
+
+
+ CObexHeader* firstHeader = CObexHeader::NewL();
+ CObexHeader* secondHeader = CObexHeader::NewL();
+
+ TInt err1 =0;
+ TInt err2 =0;
+
+/*
+ TObexMatchHeader* headerMask = new(ELeave) TObexMatchHeader;
+
+ headerMask->SetHeader(TObexInternalHeader::EName);
+
+ aObject.HeaderSet().SetMask(headerMask);
+ err1 = aObject.HeaderSet().This(firstHeader);
+ obj->HeaderSet().SetMask(headerMask);
+ err2 = obj->HeaderSet().This(secondHeader);
+
+ if (err1 == err2)
+ {
+ if (firstHeader->AsUnicodeL() != secondHeader->AsUnicodeL())
+ {
+ res |= EDifferentName;
+ }
+ }
+ else
+ {
+ res |= EDifferentName;
+ }
+
+ aObject.HeaderSet().SetMask(NULL);
+ obj->HeaderSet().SetMask(NULL);
+
+ delete headerMask;
+ delete firstHeader;
+ delete secondHeader;
+
+*/
+
+ if (aObject.Http())
+ {
+ if (obj->Http())
+ {
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+
+ err1 = aObject.HeaderSet().Find(TObexInternalHeader::EHttp, *firstHeader);
+ err2 = obj->HeaderSet().Find(TObexInternalHeader::EHttp, *secondHeader);
+
+ while (err1 == KErrNone && err2 == KErrNone)
+ {
+ if (firstHeader->AsByteSeq() != secondHeader->AsByteSeq())
+ {
+ res |= EDifferentHttp;
+ }
+ aObject.HeaderSet().Next();
+ obj->HeaderSet().Next();
+ err1 = aObject.HeaderSet().Find(TObexInternalHeader::EHttp, *firstHeader);
+ err2 = obj->HeaderSet().Find(TObexInternalHeader::EHttp, *secondHeader);
+ }
+ if (err1 != err2)
+ {
+ res |= EDifferentHttp;
+ }
+
+ }
+ else
+ {
+ res |= EDifferentHttp;
+ }
+ }
+ else
+ {
+ if (obj->Http())
+ {
+ res |= EDifferentHttp;
+ }
+ }
+
+
+// delete firstHeader;
+// delete secondHeader;
+
+ for (TUint8 headerNameIndex = KObexUserDefinedHdrAddrMin;
+ headerNameIndex <= KObexUserDefinedHdrAddrMax; headerNameIndex++)
+ {
+ TUint8 localHI = static_cast<TUint8>(headerNameIndex | TObexInternalHeader::EUnicode);
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+
+ err1 = aObject.HeaderSet().Find(localHI, *firstHeader);
+ err2 = obj->HeaderSet().Find(localHI, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsUnicode() != secondHeader->AsUnicode())
+ {
+ res |= EDifferentUserDefined;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentUserDefined;
+ }
+
+ localHI = static_cast<TUint8>(headerNameIndex | TObexInternalHeader::EByteSeq);
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+
+ err1 = aObject.HeaderSet().Find(localHI, *firstHeader);
+ err2 = obj->HeaderSet().Find(localHI, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsByteSeq() != secondHeader->AsByteSeq())
+ {
+ res |= EDifferentUserDefined;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentUserDefined;
+ }
+
+ localHI = static_cast<TUint8>(headerNameIndex | TObexInternalHeader::E1Byte);
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+
+ err1 = aObject.HeaderSet().Find(localHI, *firstHeader);
+ err2 = obj->HeaderSet().Find(localHI, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsByte() != secondHeader->AsByte())
+ {
+ res |= EDifferentUserDefined;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentUserDefined;
+ }
+
+ localHI = static_cast<TUint8>(headerNameIndex | TObexInternalHeader::E4Byte);
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+
+ err1 = aObject.HeaderSet().Find(localHI, *firstHeader);
+ err2 = obj->HeaderSet().Find(localHI, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsFourByte() != secondHeader->AsFourByte())
+ {
+ res |= EDifferentUserDefined;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentUserDefined;
+ }
+ }
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+ err1 = aObject.HeaderSet().Find(TObexInternalHeader::ECount, *firstHeader);
+ err2 = obj->HeaderSet().Find(TObexInternalHeader::ECount, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsFourByte() != secondHeader->AsFourByte())
+ {
+ res |= EDifferentCount;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentCount;
+ }
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+ err1 = aObject.HeaderSet().Find(TObexInternalHeader::ECreatorID, *firstHeader);
+ err2 = obj->HeaderSet().Find(TObexInternalHeader::ECreatorID, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsFourByte() != secondHeader->AsFourByte())
+ {
+ res |= EDifferentCreatorID;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentCreatorID;
+ }
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+ err1 = aObject.HeaderSet().Find(TObexInternalHeader::EWanUUID, *firstHeader);
+ err2 = obj->HeaderSet().Find(TObexInternalHeader::EWanUUID, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsByteSeq() != secondHeader->AsByteSeq())
+ {
+ res |= EDifferentWanUUID;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentWanUUID;
+ }
+
+ aObject.HeaderSet().First();
+ obj->HeaderSet().First();
+ err1 = aObject.HeaderSet().Find(TObexInternalHeader::EObjectClass, *firstHeader);
+ err2 = obj->HeaderSet().Find(TObexInternalHeader::EObjectClass, *secondHeader);
+
+ if (err1 == err2)
+ {
+ if (err1 == KErrNone)
+ {
+ if (firstHeader->AsByteSeq() != secondHeader->AsByteSeq())
+ {
+ res |= EDifferentObjectClass;
+ }
+ }
+ }
+ else
+ {
+ res |= EDifferentObjectClass;
+ }
+
+ delete firstHeader;
+ delete secondHeader;
+
+ CleanupStack::PopAndDestroy(2); //obj, buf
+
+ return res;
+
+}