diff -r 000000000000 -r 62f9d29f7211 webservices/wsstar/wsstarplugin/src/wsstarregisterhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsstar/wsstarplugin/src/wsstarregisterhandler.cpp Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,298 @@ +/* +* 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 "wsstarregisterhandler.h" +#include "wsstartrustclient.h" +#include "sendebug.h" +#include "senlogger.h" + + +class CWSStarHandlerContext; +// Create instance of concrete ECOM interface implementation +CWSStarRegisterHandler* CWSStarRegisterHandler::NewL(TAny* aHandlerCtx) + { + + MSenHandlerContext* handlerCtx = + reinterpret_cast(aHandlerCtx); + CWSStarRegisterHandler* self = new (ELeave) CWSStarRegisterHandler(*handlerCtx); + CleanupStack::PushL (self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// Constructor +CWSStarRegisterHandler::CWSStarRegisterHandler(MSenHandlerContext& aCtx):CSenSessionHandler(aCtx) + { + + } + +// Destructor +CWSStarRegisterHandler::~CWSStarRegisterHandler() + { + } + +// Second phase construction. +void CWSStarRegisterHandler::ConstructL() + { + } + +TInt CWSStarRegisterHandler::InvokeL(MSenSessionContext& aCtx) + { + MSenServiceDescription& pServiceDescription = *(MSenServiceDescription*)aCtx.GetSenWSDescriptionL(WSStarContextKeys::KServiceDescription()); + const TDesC8* action = aCtx.GetDesC8L(WSStarContextKeys::KRegisterAction()); + TInt result(KErrNone); + if (*action == WSStarContextValues::KActionRegister()) + { + result = RegisterServiceDescriptionL(pServiceDescription); + } + else if (*action == WSStarContextValues::KActionUnregister()) + { + result = UnregisterServiceDescriptionL(pServiceDescription); + }; + return result; + } + +SenHandler::THandlerDirection CWSStarRegisterHandler::Direction() const + { + return SenHandler::EBoth; + }; +SenHandler::THandlerPhase CWSStarRegisterHandler::Phase() + { + return SenHandler::EDiscovery; + }; + +//--------------------------------------------------------------------------- +// Attempt to register the ServiceDescription to the ServiceManager +//--------------------------------------------------------------------------- +// +TInt CWSStarRegisterHandler::RegisterServiceDescriptionL(MSenServiceDescription& aServiceDescription ) + { + TInt retval(KErrNone); + CWSStarServiceSession* pSession = NULL; + TPtrC8 contract = aServiceDescription.Contract(); + TPtrC8 endpoint = aServiceDescription.Endpoint(); + + if (contract == KNullDesC8) + { + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarRegisterHandler::RegisterServiceDescriptionL failed - KErrSenNoContract"); + retval = KErrSenNoContract; + } + else if(endpoint == KNullDesC8) + { + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarRegisterHandler::RegisterServiceDescriptionL failed - KErrSenNoEndpoint"); + retval = KErrSenNoEndpoint; + } + else + { + if(contract == KWSStarSTSContract) + { + retval = RegisterSTSClientL(&aServiceDescription); + } + else if (aServiceDescription.DescriptionClassType() == + MSenServiceDescription::EWSStarServiceSession) + { + // description already is a session so we just add to core-DAO + // example: when connection has been made, and service is registered + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarRegisterHandler::RegisterServiceDescriptionL - session is already so just adding"))); + pSession = (CWSStarServiceSession*) &aServiceDescription; + retval = iHandlerContext.GetSenCoreServiceManager()->AddServiceDescriptionL(pSession); + } + else + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarRegisterHandler::RegisterServiceDescriptionL - Creating session from description..."))); + pSession = CWSStarServiceSession::NewLC(*(CSIF*)iHandlerContext.GetAnyL(HandlerContextKey::KSIF())); //codescannerwarnings + //example: when description has been read from db during bootup + // session has to be initialized (set validity time for example) + retval = pSession->InitializeFromL(aServiceDescription); + if (retval == KErrNone) + { + retval = iHandlerContext.GetSenCoreServiceManager()->AddServiceDescriptionL(pSession); + CleanupStack::Pop(pSession); + } + else + { + CleanupStack::PopAndDestroy(pSession); + } + } + } + return retval; + } + + +//--------------------------------------------------------------------------- +// Attempt to unregister the ServiceDescription from the ServiceManager +//--------------------------------------------------------------------------- +// +TInt CWSStarRegisterHandler::UnregisterServiceDescriptionL( + MSenServiceDescription& aServiceDescription) + { + TInt retval(KErrNone); + CWSStarServiceSession *pSession = NULL; + TPtrC8 contract = aServiceDescription.Contract(); + + if(contract == KWSStarSTSContract) + { + retval = UnRegisterSTSClientL(&aServiceDescription); + } + else + { + if(aServiceDescription.DescriptionClassType() == + MSenServiceDescription::EWSStarServiceSession) + { + pSession = (CWSStarServiceSession*) &aServiceDescription; + retval = iHandlerContext.GetSenCoreServiceManager()->RemoveServiceDescriptionL(*pSession); + } + else + { + + pSession = CWSStarServiceSession::NewLC(*(CSIF*)iHandlerContext.GetAnyL(HandlerContextKey::KSIF())); //codescannerwarnings + retval = pSession->InitializeFromL(aServiceDescription); + if (retval == KErrNone) + { + retval = iHandlerContext.GetSenCoreServiceManager()->RemoveServiceDescriptionL(*pSession); + } + CleanupStack::PopAndDestroy(pSession); + } + } + + return retval; + } + +//--------------------------------------------------------------------------- +// Register specific description (STS contract) +//--------------------------------------------------------------------------- +// +TInt CWSStarRegisterHandler::RegisterSTSClientL( + MSenServiceDescription *aServiceDescription) + { + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarRegisterHandler::RegisterSTSClientL"); + + TPtrC8 endpoint = aServiceDescription->Endpoint(); + TInt retval = KErrNone; + CWSStarServiceSession* pSession = NULL; + CWSStarTrustClient* pSTSClient = NULL; + + if(aServiceDescription->DescriptionClassType() == + MSenServiceDescription::EWSStarSTSClient) + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarRegisterHandler::RegisterSTSClient - This ServiceDescription is already an STS Client"))); + pSTSClient = (CWSStarTrustClient*)aServiceDescription; + retval = iHandlerContext.GetSenCoreServiceManager()->AddServiceDescriptionL(pSTSClient); + } + else + { + // Create new STS client and initialize + // it from given description + pSession = CWSStarServiceSession::NewLC(*(CSIF*)iHandlerContext.GetAnyL(HandlerContextKey::KSIF())); //codescannerwarnings + retval = pSession->InitializeFromL(*aServiceDescription); + + if(retval != KErrNone) + { + TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase , KMinLogLevel, _L8("CWSStarRegisterHandler::RegisterSTSClientL failed %d"), retval)); + CleanupStack::PopAndDestroy(pSession); + return retval; + } + TPtrC8 sessionEndpoint = pSession->Endpoint(); + TLSLOG_FORMAT((KSenCoreServiceManagerLogChannelBase , KMinLogLevel, _L8("CWSStarRegisterHandler::RegisterSTSClientL created STS using endpoint:'%S'"), &sessionEndpoint)); + + pSTSClient = CWSStarTrustClient::NewLC(*(CSIF*)iHandlerContext.GetAnyL(HandlerContextKey::KSIF()), *Log()); //codescannerwarnings + pSTSClient->SetSTSSessionL(pSession); // pSession will be owned by STSClient + CleanupStack::Pop(pSTSClient); + CleanupStack::Pop(pSession); + CleanupStack::PushL(pSTSClient); + + retval = iHandlerContext.GetSenCoreServiceManager()->AddServiceDescriptionL(pSTSClient); + if(retval != KErrNone) + { + delete pSTSClient; + } + CleanupStack::Pop(pSTSClient); + pSTSClient = NULL; + } + return retval; + } + +//--------------------------------------------------------------------------- +// Unregister specific description (STS contract) +//--------------------------------------------------------------------------- +// + +TInt CWSStarRegisterHandler::UnRegisterSTSClientL( + MSenServiceDescription *aServiceDescription) + { + TInt retval = KErrNone; + + CWSStarServiceSession *pSession = NULL; + CWSStarTrustClient *pSTSClient = NULL; + + if(aServiceDescription->DescriptionClassType() == + MSenServiceDescription::EWSStarSTSClient) + { + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarRegisterHandler::RegisterSTSClient - This ServiceDescription is already an STS Client"))); + pSTSClient = (CWSStarTrustClient*)aServiceDescription; + retval = iHandlerContext.GetSenCoreServiceManager()->RemoveServiceDescriptionL(*pSTSClient); + } + else + { + + pSession = CWSStarServiceSession::NewLC(*(CSIF*)iHandlerContext.GetAnyL(HandlerContextKey::KSIF())); //codescannerwarnings + retval = pSession->InitializeFromL(*aServiceDescription); + if(retval != KErrNone) + { + CleanupStack::PopAndDestroy(pSession); + return retval; + } + pSTSClient = CWSStarTrustClient::NewLC(*(CSIF*)iHandlerContext.GetAnyL(HandlerContextKey::KSIF()), *Log()); //codescannerwarnings + pSTSClient->SetSTSSessionL(pSession); // pSession will be owned by STSClient + CleanupStack::Pop(pSTSClient); + CleanupStack::Pop(pSession); + CleanupStack::PushL(pSTSClient); + + retval = iHandlerContext.GetSenCoreServiceManager()->RemoveServiceDescriptionL(*pSTSClient); + CleanupStack::PopAndDestroy(pSTSClient); + } + + return retval; + } + +//--------------------------------------------------------------------------- +// Logger using during DEBUG mode +//--------------------------------------------------------------------------- +// +RFileLogger* CWSStarRegisterHandler::Log() const + { + RFileLogger* pLog = NULL; + TRAP_IGNORE( pLog = (RFileLogger*)iHandlerContext.GetAnyL(HandlerContextKey::KLogger); ) + return pLog; + } + +TInt CWSStarRegisterHandler::InitL(MSenHandlerContext& aCtx) + { + iHandlerContext = aCtx; + return KErrNone; + } + +// END OF FILE +