--- /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<MSenHandlerContext*>(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
+