diff -r 4dc88a4ac6f4 -r f6055a57ae18 obex/obexprotocol/obex/test/tobex/TREFHANDLER.CPP --- /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; iSetHeader(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; iSetUnicodeL(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; iDes()); + ptr.Zero(); + for (i=0; i buf; + TUint i; + for (i=0; iDes()); + ptr.Zero(); + for (i=0; iSetUnicodeL(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; iDes()); + ptr.Zero(); + for (i=0; i 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; iDes()); + ptr.Zero(); + for (i=0; i buf; + TUint i; + for (i=0; iSetHeader(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; iSetUnicodeL(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; iDes()); + ptr.Zero(); + for (i=0; i buf; + TUint i; + for (i=0; i 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 buf; + TUint i; + for (i=0; iDes()); + ptr.Zero(); + for (i=0; i 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(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(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(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(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; + +}