diff -r 000000000000 -r 62f9d29f7211 webservices/wsoviplugin/src/wsovisessioncontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsoviplugin/src/wsovisessioncontext.cpp Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,410 @@ +/* +* Copyright (c) 2008 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 "wsovisessioncontext.h" +#include "senwsdescription.h" +#include +#include +#include +#include "senlogger.h" +#include "wsoviservicesession.h" +#include "msenremoteservicesession.h" + +using namespace WSOviContextKeys; +using namespace WSOviContextValues; + +CWSOviSessionContext* CWSOviSessionContext::NewL() + { + CWSOviSessionContext* self = NewLC(); + CleanupStack::Pop(self); + return self; + } +CWSOviSessionContext* CWSOviSessionContext::NewLC() + { + CWSOviSessionContext* self = new (ELeave) CWSOviSessionContext(); + CleanupStack::PushL (self); + self->ConstructL(); + return self; + } + +// Constructor +CWSOviSessionContext::CWSOviSessionContext(): + iDescriptions(EFalse,EFalse), + iInts(EFalse,ETrue), + iDescs(EFalse,ETrue) + { + } + +// Constructor +void CWSOviSessionContext::ConstructL() + { + } + +// Destructor +CWSOviSessionContext::~CWSOviSessionContext() + { + iDescriptions.Reset(); + iInts.Reset(); + iDescs.Reset(); + } +// ----------------------------------------------------------------------------- +// Sets token context keys based on RST response. +// ----------------------------------------------------------------------------- +// +TInt CWSOviSessionContext::SetTokenKeysL(const TDesC8& aToken) + { + +//1)TOKEN + CWSOviServiceSession* session = (CWSOviServiceSession*) + GetSenRemoteServiceSessionL(KServiceSession); + session->SetMaxValidUntil(); + ((CSenWebServiceSession*)session)->SetSecurityL(aToken); + session->AddPropertiesFromSessionContextToCredentialL(); + session->SetStatusL(); + if (((CSenServiceSession*)session)->StatusL() == KSenConnectionStatusExpired) + { + return KErrNotReady; + } + User::LeaveIfError(Update(WSOviContextKeys::KToken, + aToken)); + return KErrNone; + } + +//----------------------------------------------------- +// from MSessionContext +//----------------------------------------------------- +const CSenWSDescription* CWSOviSessionContext::GetSession() + { + return NULL; + }; +const CSenWSDescription* CWSOviSessionContext::GetInitializer() + { + return NULL; + }; + +//descriptions +TInt CWSOviSessionContext::Add(const TDesC8& aKey, CSenWSDescription* aValue) + { + return iDescriptions.Append(&aKey,aValue); + }; + +TInt CWSOviSessionContext::Update(const TDesC8& aKey, CSenWSDescription* aValue) + { + iDescriptions.RemoveByKey(aKey); + return iDescriptions.Append(&aKey,aValue); + }; + +const CSenWSDescription* CWSOviSessionContext::GetSenWSDescriptionL(const TDesC8& aKey) + { + TInt index = iDescriptions.Find(aKey); + if (index!=KErrNotFound) + { + return iDescriptions.ValueAt(index); + } + else + { + return NULL; + }; + }; + + +//sessions +TInt CWSOviSessionContext::Add(const TDesC8& aKey, MSenRemoteServiceSession& aValue) + { + return Update(aKey, aValue); + }; +TInt CWSOviSessionContext::Update(const TDesC8& /*aKey*/, MSenRemoteServiceSession& aValue) + { + iSession = &aValue; + return KErrNone; + }; +const MSenRemoteServiceSession* CWSOviSessionContext::GetSenRemoteServiceSessionL(const TDesC8& /*aKey*/) + { + return iSession; + }; + + + +//----------------------------------------------------- +// from MContext +//----------------------------------------------------- + +SenContext::TContextType CWSOviSessionContext::Type() const + { + return SenContext::ESessionContext; + } + +SenContext::TContextDirection CWSOviSessionContext::Direction() const + { + return SenContext::EBoth; + } + + + +//-----------------descs +TInt CWSOviSessionContext::Add(const TDesC8& aKey, const TDesC8& aValue) + { + if (!aValue.Length()) return KErrUnderflow; + HBufC8* newValue = NULL; + TInt error(KErrNone); + TRAP(error, newValue = aValue.AllocL()); + if (!error) + { + error = iDescs.Append(&aKey,newValue); + } + return + error; + } +TInt CWSOviSessionContext::Update(const TDesC8& aKey, const TDesC8& aValue) + { + TInt error(KErrNone); + if (!aValue.Length()) + { + error = Remove(aKey); + if (error == KErrNotFound) + return KErrNone; + else + return error; + } + HBufC8* newValue = NULL; + + TRAP(error, newValue = aValue.AllocL()); + + if (!error) + { + error = iDescs.UpdateValue(&aKey,newValue); + } + return + error; + } +const TDesC8* CWSOviSessionContext::GetDesC8L(const TDesC8& aKey) + { + TInt index = iDescs.Find(aKey); + if (index != KErrNotFound) + { + return iDescs.ValueAt(index); + } + else + { + return NULL; + }; + } +TInt CWSOviSessionContext::Remove(const TDesC8& aKey) + { + return iDescs.RemoveByKey(aKey); + } + + +//-----------------TInts +TInt CWSOviSessionContext::Add(const TDesC8& aKey, TInt aValue) + { + TInt* a = NULL; + a = new TInt(aValue); + if (a) + { + return iInts.Append(&aKey, a); + } + else + { + return KErrNoMemory; + } + + } +TInt CWSOviSessionContext::Update(const TDesC8& aKey, TInt aValue) + { + TInt* a = NULL; + a = new TInt(aValue); + if (a) + { + return iInts.UpdateValue(&aKey, a); + } + else + { + return KErrNoMemory; + } + } +const TInt* CWSOviSessionContext::GetIntL(const TDesC8& aKey) + { + TInt index = iInts.Find(aKey); + if (index!=KErrNotFound) + { + return iInts.ValueAt(index); + } + else + { + return NULL; + } + } + +//-----------------elements +TInt CWSOviSessionContext::Add(const TDesC8& aKey, CSenElement* aValue) + { + return Update(aKey,aValue); + } +TInt CWSOviSessionContext::Update(const TDesC8& /*aKey*/, CSenElement* /*aValue*/) + { + return KErrNotSupported; + } +const CSenElement* CWSOviSessionContext::GetSenElementL(const TDesC8& /*aKey*/) + { + return NULL; + } + +//-----------------TAnys +TInt CWSOviSessionContext::Add(const TDesC8& aKey, TAny* aValue) + { + TInt err(KErrNone); + if ( aKey == SenContext::KRemoteConsumer() ) + { + if ( !ipConsumer ) + { + ipConsumer = aValue; + } + else + { + err = KErrAlreadyExists; + } + } + else + { + err = KErrNotFound; + } + return err; + } +TInt CWSOviSessionContext::Update(const TDesC8& aKey, TAny* aValue) + { + TInt err(KErrNone); + if ( aKey == SenContext::KRemoteConsumer() ) + { + ipConsumer = aValue; + } + else if ( aKey == WSOviContextKeys::KTP() ) + { + iTP = aValue; + } + else + { + err = KErrNotFound; + } + return err; + } +TAny* CWSOviSessionContext::GetAnyL(const TDesC8& aKey) + { + if ( aKey == WSOviContextKeys::KRemoteConsumer ) + { + return ipConsumer; + } + else if ( aKey == WSOviContextKeys::KTP() ) + { + return iTP; + } + else + { + return NULL; + } + } + + +//-----------------Rest +const CSenXmlReader* CWSOviSessionContext::GetParser() + { + return NULL; + } +TInt CWSOviSessionContext::Count() const + { + return 0; + } +TPtrC8 CWSOviSessionContext::KeyAtL(TInt /*aIndex*/) + { + return KNullDesC8(); + } +void CWSOviSessionContext::Reset() + { + } +//-----------------------new +void CWSOviSessionContext::UpdateDesC8L(CWSOviMessageContext& aMessageContext, const TDesC8& aKey) + { + const TDesC8* ptr = + aMessageContext.GetDesC8L(aKey); + if (ptr) + { + User::LeaveIfError(Update(aKey, *ptr)); + } + else + { + Remove(aKey); + } + + } + +void CWSOviSessionContext::UpdateFromMessageInContextL( + CWSOviMessageContext& /*aMessageContext*/) + { + + } + +void CWSOviSessionContext::UpdateFromMessageOutContextL( + CWSOviMessageContext& /*aMessageContext*/) + { + } +TInt CWSOviSessionContext::ShareTokenWithL(CWSOviSessionContext* aWSOviSessionCtxDst) + { + TInt error = KErrNone; + const TDesC8* desc = NULL; + + desc = GetDesC8L(KTokenCreationTime); + if (desc) + { + error = aWSOviSessionCtxDst->Update(KTokenCreationTime, *desc); + if (error) return error; + } + desc = GetDesC8L(KTTL); + if (desc) + { + error = aWSOviSessionCtxDst->Update(KTTL, *desc); + if (error) return error; + } + desc = GetDesC8L(KTokenSecret); + if (desc) + { + error = aWSOviSessionCtxDst->Update(KTokenSecret, *desc); + if (error) return error; + } + desc = GetDesC8L(KToken); + if (desc) + { + error = aWSOviSessionCtxDst->Update(KToken, *desc); + if (error) return error; + } + + /*desc = GetDesC8L(KSecurityTokenBackup); + if (desc) + { + error = aWSStarSessionCtxDst->Update(KSecurityTokenBackup, *desc); + if (error) return error; + }*/ + return error; + } +// END OF FILE +