diff -r 000000000000 -r 62f9d29f7211 webservices/wsstar/wsstarmessagehandlers/src/wsstarcredentialcollectorhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsstar/wsstarmessagehandlers/src/wsstarcredentialcollectorhandler.cpp Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2006-2006 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 "wsstarcredentialcollectorhandler.h" +#include "senlogger.h" +#include + +// Create instance of concrete ECOM interface implementation +CWSStarCredentialCollectorHandler* CWSStarCredentialCollectorHandler::NewL(TAny* aHandlerCtx) + { + + MSenHandlerContext* handlerCtx = + reinterpret_cast(aHandlerCtx); + CWSStarCredentialCollectorHandler* self = + new(ELeave)CWSStarCredentialCollectorHandler(*handlerCtx); + CleanupStack::PushL (self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// Constructor +CWSStarCredentialCollectorHandler::CWSStarCredentialCollectorHandler(MSenHandlerContext& aCtx) +:CSenMessageHandler(aCtx) + { + } + +// Destructor +CWSStarCredentialCollectorHandler::~CWSStarCredentialCollectorHandler() + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCredentialCollectorHandler::\ + ~CWSStarCredentialCollectorHandler()"))); + } + +// Second phase construction. +void CWSStarCredentialCollectorHandler::ConstructL() + { + } + +TInt CWSStarCredentialCollectorHandler::InvokeL(MSenMessageContext& aCtx) + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCredentialCollectorHandler::InvokeL(MSenMessageContext& aCtx)"))); + TInt result = KErrNone; + CSenSoapMessage* message = + (CSenSoapMessage*)(aCtx.GetSenSoapEnvelopeL(SenContext::KSenCurrentSoapMessageCtxKey)); + if (message) + { + if (aCtx.Direction()==SenContext::EOutgoing) + { + //1. first put timestamp in security section. + //Propably 1st tag processed by servers + + + HBufC8* timestamp = NULL; + const TDesC8* createdValue = aCtx.GetDesC8L(WSStarContextKeys::KTimestampCreated); + const TDesC8* expiredValue = aCtx.GetDesC8L(WSStarContextKeys::KTimestampExpires); + + if (createdValue) + { + TTime clientTime; + TTime mtTime; + const TDesC8* mtTimetd = aCtx.GetDesC8L(WSStarContextKeys::KPhoneTimeWhenMTResolved); + mtTime = SenDateUtils::FromXmlDateTimeL(*mtTimetd); + clientTime.UniversalTime(); + if (clientTime != Time::NullTTime()) + { + TTimeIntervalMicroSeconds diff = clientTime.MicroSecondsFrom(mtTime); + if (diff > 0) + { + TTime createTime = SenDateUtils::FromXmlDateTimeL(*createdValue); + TBuf8 newCreateTime; + TInt leaveCode(KErrNone); + TRAP(leaveCode, SenDateUtils::ToXmlDateTimeUtf82L(newCreateTime, createTime + diff);) + if (!leaveCode) + { + User::LeaveIfError( + ((MSenContext&)aCtx).Update(WSStarContextKeys::KTimestampCreated, + newCreateTime)); + createdValue = &newCreateTime; + } + } + } + //problem with signing if "expired" tag exists. + //Presently wssecurity is turned-off, so we can include this tag. + if (expiredValue) + { + CSenWsSecurityHeader::TimestampL(*createdValue, *expiredValue, timestamp); + CleanupStack::PushL(timestamp); + } + else + { + CSenWsSecurityHeader::TimestampL(*createdValue, timestamp); + CleanupStack::PushL(timestamp); + } + message->AddSecurityTokenL(*timestamp); + CleanupStack::PopAndDestroy(timestamp); + } +//2.after timestamp put else stuff like MT + const TDesC8* securityToken = aCtx.GetDesC8L(WSStarContextKeys::KSecurityToken); + if (securityToken) + { + message->AddSecurityTokenL(*securityToken); + } + else + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCredentialCollectorHandler::InvokeL\ + (MSenMessageContext& aCtx) - \ + Security token in message context not exists"))); + return KErrNone; + } + } + } + else + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCredentialCollectorHandler::InvokeL(MSenMessageContext& aCtx)\ + - SOAP message in message context not exists"))); + result = KErrNotFound; + } + return result; + } + +TInt CWSStarCredentialCollectorHandler::InitL(MSenHandlerContext& aCtx) + { + iHandlerContext = aCtx; + return KErrNone; + } + +SenHandler::THandlerDirection CWSStarCredentialCollectorHandler::Direction() const + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCredentialCollectorHandler::Direction()"))); + return SenHandler::EOutgoing; + }; +SenHandler::THandlerPhase CWSStarCredentialCollectorHandler::Phase() + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCredentialCollectorHandler::Phase()"))); + return SenHandler::EMessage; + }; +RFileLogger* CWSStarCredentialCollectorHandler::Log() const + { + RFileLogger* pLog = NULL; + TRAP_IGNORE( pLog = (RFileLogger*)iHandlerContext.GetAnyL(HandlerContextKey::KLogger); ) + return pLog; + } +// END OF FILE +