webservices/wsstar/wsstarmessagehandlers/src/wsstarcredentialcollectorhandler.cpp
changeset 0 62f9d29f7211
--- /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 <SenDateUtils.h>
+
+// Create instance of concrete ECOM interface implementation
+CWSStarCredentialCollectorHandler* CWSStarCredentialCollectorHandler::NewL(TAny* aHandlerCtx)
+    {
+    
+    MSenHandlerContext* handlerCtx =
+        reinterpret_cast<MSenHandlerContext*>(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<SenDateUtils::KXmlDateTimeMaxLength> 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
+