diff -r 000000000000 -r 62f9d29f7211 webservices/idwsfplugin/src/idwsfcorrelationheader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/idwsfplugin/src/idwsfcorrelationheader.cpp Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2002-2005 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 FILES +#include +#include + +#include "idwsfcorrelationheader.h" +#include "senguidgen.h" +#include "idwsfmessage.h" + + +namespace + { + _LIT8(KAttrMessageId, "messageID"); + _LIT8(KAttrRefToMessageId, "refToMessageID"); + _LIT8(KAttrTimestamp, "timestamp"); + } + +CIdWsfCorrelationHeader* CIdWsfCorrelationHeader::NewL( + const TDesC8& aRefToMessageId) + { + CIdWsfCorrelationHeader* pNew = new (ELeave) CIdWsfCorrelationHeader; + CleanupStack::PushL(pNew); + pNew->ConstructL(aRefToMessageId); + CleanupStack::Pop(); // pNew; + return pNew; + } + +CIdWsfCorrelationHeader* CIdWsfCorrelationHeader::NewL( + const RAttributeArray& aAttributes) + { + CIdWsfCorrelationHeader* pNew = new (ELeave) CIdWsfCorrelationHeader; + CleanupStack::PushL(pNew); + pNew->ConstructL(aAttributes); + CleanupStack::Pop(); // pNew; + return pNew; + } + +CIdWsfCorrelationHeader::CIdWsfCorrelationHeader() + { + } + +void CIdWsfCorrelationHeader::ConstructL(const TDesC8& aRefToMessageId) + { + BaseConstructL(KSBXmlNs, KCorrelationName, KCorrelationQName); + + CSenGuidGen* pGuidGenerator = CSenGuidGen::NewLC(); + ipMessageId = pGuidGenerator->GetRandomGuid8LC(); + CleanupStack::Pop(); // ipMessageId + CleanupStack::PopAndDestroy(); // pGuidGenerator + + ipRefToMessageId = aRefToMessageId.AllocL(); + + // Init timestamp + TTime t; + t.UniversalTime(); + TBuf8 ts; + SenDateUtils::ToXmlDateTimeUtf82L(ts, t); + ipTimestamp = ts.AllocL(); + } + +void CIdWsfCorrelationHeader::ConstructL(const RAttributeArray& aAttributes) + { + BaseConstructL(KSBXmlNs, KCorrelationName); + + ipMessageId = SenXmlUtils::AllocAttrValueL(aAttributes, KAttrMessageId); + ipRefToMessageId = SenXmlUtils::AllocAttrValueL(aAttributes, KAttrRefToMessageId); + ipTimestamp = SenXmlUtils::AllocAttrValueL(aAttributes, KAttrTimestamp); + + __ASSERT_ALWAYS(ipMessageId != NULL, User::Leave(KErrArgument)); + __ASSERT_ALWAYS(ipTimestamp != NULL, User::Leave(KErrArgument)); + } + +CIdWsfCorrelationHeader::~CIdWsfCorrelationHeader() + { + delete ipMessageId; + delete ipRefToMessageId; + delete ipTimestamp; + } + +TPtrC8 CIdWsfCorrelationHeader::MessageId() + { + return *ipMessageId; + } + +TPtrC8 CIdWsfCorrelationHeader::RefToMessageId() + { + if (!ipRefToMessageId) + { + return KNullDesC8(); + } + else + { + return *ipRefToMessageId; + } + } + +TPtrC8 CIdWsfCorrelationHeader::Timestamp() + { + if(ipTimestamp) + return *ipTimestamp; + else + { + return KNullDesC8(); // should not happen(!) + } + } + +void CIdWsfCorrelationHeader::SetCorrelationL(const TDesC8& aRefToMessageId) + { + HBufC8* pRefToMessageId = NULL;aRefToMessageId.AllocL(); + delete ipRefToMessageId; + ipRefToMessageId = pRefToMessageId; + } + +void CIdWsfCorrelationHeader::WriteAttrsToL(RWriteStream& aWriteStream) + { + WriteAttrToL(aWriteStream, KAttrMessageId, *ipMessageId); + + // check that reftomessageid exists and is over zero-length + // IOP: empty reftomessageid is not allowed by specs(!): + if (ipRefToMessageId && ipRefToMessageId->Length()>0) + { + WriteAttrToL(aWriteStream, KAttrRefToMessageId, *ipRefToMessageId); + } + WriteAttrToL(aWriteStream, KAttrTimestamp, *ipTimestamp); + } + +// End of File + +