diff -r 000000000000 -r 62f9d29f7211 webservices/wsstar/wsstarplugin/src/wsstarcobrandingclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsstar/wsstarplugin/src/wsstarcobrandingclient.cpp Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,546 @@ +/* +* Copyright (c) 2009 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 FILES +#include "wsstarcobrandingclient.h" + +#include +#include +#include +#include +#include "sencryptoutils.h" + +#include "wsstarservicesession.h" +#include "SenXmlUtils.h" +#include "msencoreservicemanager.h" +#include "sendebug.h" +#include "senlogger.h" +#include "MSenServiceDescription.h" +#include "senlogger.h" +#include "SenServiceConnection.h" +#include "seninternalserviceconsumer.h" +#include "wsstarrstresponse.h" +#include +#include "wsstarpolicy.h" +#include "wsstarplugin.h" +#include +#include "senwspattern.h" + +using namespace WSTrust; +using namespace WSPolicy; + +//namespace +// { +// _LIT8(KRemoteConsumer, "RemoteConsumer"); +// } + +//--------------------------------------------------------------------------- +// Creates and returns a new instace of this class. +//--------------------------------------------------------------------------- +// +CWSStarCoBrandingClient* CWSStarCoBrandingClient::NewL( + CSIF& aSIF, + RFileLogger& aLogger) + { + CWSStarCoBrandingClient* pNew = NewLC(aSIF, aLogger); + CleanupStack::Pop(pNew); + return pNew; + } + +//--------------------------------------------------------------------------- +// Creates and returns a new instace of this class and leaves the object on the cleanup stack +//--------------------------------------------------------------------------- +// +CWSStarCoBrandingClient* CWSStarCoBrandingClient::NewLC( + CSIF& aSIF, + RFileLogger& aLogger) + { + CWSStarCoBrandingClient* pNew = + new (ELeave) CWSStarCoBrandingClient( + aSIF, + MSenServiceDescription::EWSStarSTSClient, + aLogger); + + CleanupStack::PushL(pNew); + pNew->BaseConstructL(); + return pNew; + } + +//--------------------------------------------------------------------------- +// Constructor +//--------------------------------------------------------------------------- +// +CWSStarCoBrandingClient::CWSStarCoBrandingClient( + CSIF& aSIF, + TDescriptionClassType aType, + RFileLogger& aLogger) + : CSenInternalServiceConsumer(aType, aSIF), + iLog(aLogger) + { + } + +void CWSStarCoBrandingClient::BaseConstructL() + { + CSenInternalServiceConsumer::ConstructL(); + iTpCounter = 0; + TLSLOG(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,(_L("CWSStarCoBrandingClient::ConstructL()"))); + } + +//--------------------------------------------------------------------------- +// Destructor +//--------------------------------------------------------------------------- +// +CWSStarCoBrandingClient::~CWSStarCoBrandingClient() + { + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarCoBrandingClient::~CWSStarCoBrandingClient"); + delete ipTransport; + delete iCoBrandingOrginalEndpoint; + } + + +//--------------------------------------------------------------------------- +// SetStatus +//--------------------------------------------------------------------------- +// + +void CWSStarCoBrandingClient::SetStatus(TInt /*aStatus */) + { + // No implementation in Java + } + +//--------------------------------------------------------------------------- +// SetSTSSessionL +//--------------------------------------------------------------------------- +// +void CWSStarCoBrandingClient::SetCoBrandingSessionL( + CWSStarServiceSession* aSession) + { + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarCoBrandingClient::SetCoBrandingSessionL"); + _LIT8(KTouch, "touch"); + const TDesC8* attrValue = aSession->AsElement().AttrValue(KTouch); + if(attrValue != NULL) + { + AsElement().AddAttrL(KTouch, *attrValue); + } + iCoBrandingSession = aSession; + } + +//--------------------------------------------------------------------------- +// Fetch SCT request +//--------------------------------------------------------------------------- +//Co-Branding CR +TInt CWSStarCoBrandingClient::FetchSCTL( + CWSStarServiceSession& aSession, + HBufC8*& aErrorMessage) +{ + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarCoBrandingClient::FetchSCTL(..)"); + TInt retVal(KErrNone); // for returning error codes + iWSStarServiceSession = &aSession; // save session + iWSStarServiceSession->AddConsumerL(*this); + + CWSStarSessionContext* coBrandingSsnContext = iCoBrandingSession->SessionContext(); + CWSStarSessionContext* valSsnContext = iWSStarServiceSession->SessionContext(); + + //PART 2 :: + + HBufC8* pBodyXML = NULL; + HBufC8* coBrandResponseXML = NULL; + + const TBool* brandID = coBrandingSsnContext->GetIntL(WSStarContextKeys::KBrandIDEnabled); + if(brandID && *brandID) + { + + //Create a Fetch SCt body and update + CWSStarPlugin& frmWSStar = (CWSStarPlugin&)Framework(); + CSenElement* pBody = CreateFSTL(); + + if(pBody) + { + + //Update application info attribute + if (CWSStarPolicy::CheckPolicyValueL(WSStarContextKeys::KMwsNamespace, iCoBrandingSession)) + { + HBufC8* mwsNameSapce = CWSStarPolicy::GetPolicyValueL(WSStarContextKeys::KMwsNamespace,iCoBrandingSession); + CleanupStack::PushL(mwsNameSapce); + valSsnContext->Update(WSStarContextKeys::KMwsNamespace, mwsNameSapce->Des()); + CleanupStack::PopAndDestroy(mwsNameSapce); + + } + + AddAppInfoHeaderL(); + + //Update action + valSsnContext->Update(WSStarContextKeys::KAction, KActionIssueFST200610); + + HBufC8* address = NULL; + + address = CWSStarPolicy::GetPolicyValueL(WSStarContextKeys::KWAPGW,iCoBrandingSession); + + if (address) + { + valSsnContext->Update(WSStarContextKeys::KTo, *address); + + delete address; + address = NULL; + } + + + valSsnContext->Update(WSStarContextKeys::KBodyElement, pBody); + pBodyXML = pBody->AsXmlL(); + CleanupStack::PushL(pBodyXML); + + + //Set transport properties + CSenTransportProperties* transProp = CSenTransportProperties::NewLC(); + TPtrC8 value; + value.Set(*valSsnContext->GetDesC8L(WSStarContextKeys::KAction)); + transProp->SetSoapActionL(value); + + // Get the IAP setting and accordingly set the transport properties + TUint32 id = 0; + TInt getIapRetCode = IapId(id); + + ; + // Check whether IAP ID is pre-defined, and copy it only if such property value is found + //if ( getIapRetCode == KErrNone && id < 4294967295) // unsigned 4294967295 == -1 signed + if ( getIapRetCode == KErrNone && id < (TUint32)KErrNotFound) // unsigned 4294967295 == -1 signed + { + transProp->SetIapIdL(id); + } + // ETMI-6WAGDB end + + //limit http timeout, + // if sts hangs and can not send any response, then we block every async client method. + // Possibel revalidation during sendL can take too long time therefore we create new limit + transProp->SetMaxTimeToLiveL(WSStarSession::KMaxHttpTimeOut); + + const TDesC8* pMwsNamespace = valSsnContext->GetDesC8L(WSStarContextKeys::KMwsNamespace); + + if(pMwsNamespace) + transProp->SetMwsNamespaceL(*pMwsNamespace); + + HBufC8* transPropAsXml = transProp->AsUtf8LC(); + + //overwrite passport endpoint (provided by GUI) by endpoint provided by policy + AdaptCoBrandEndpointL(); + + iTpCounter++; + retVal = iWSStarServiceSession->SubmitL(*pBodyXML, *transPropAsXml, *this, coBrandResponseXML); + iTpCounter--; + CleanupStack::PushL(coBrandResponseXML); + AdaptCoBrandEndpointL(ETrue); + valSsnContext->Remove(WSStarContextKeys::KTo); + valSsnContext->Remove(WSStarContextKeys::KAppInfoPresent); + + + if(coBrandResponseXML) + { + //Parse the response + CSenParser* pParser = CSenParser::NewLC(); + CSenSoapEnvelope2* pResponseFragment = CSenSoapEnvelope2::NewL(); + CleanupStack::PushL(pResponseFragment); + TRAPD(errorL,pParser->ParseL(*coBrandResponseXML, *pResponseFragment)); + + if ( retVal!= KErrNone || errorL!= KErrNone) + { + aErrorMessage = coBrandResponseXML; + } + + CleanupStack::PopAndDestroy(2); // pParser, pResponseFragment + + } + + if (!aErrorMessage) + { + CleanupStack::PopAndDestroy(coBrandResponseXML); + } + else + { + CleanupStack::Pop(coBrandResponseXML); + } + + CleanupStack::PopAndDestroy(transPropAsXml); + CleanupStack::PopAndDestroy(transProp); + CleanupStack::PopAndDestroy(pBodyXML); + + } + } + + if (! iTpCounter) + { + delete ipTransport; + ipTransport = NULL; + } + + + iWSStarServiceSession->RemoveConsumerL(*this); + + return retVal; + +} +//End Of Co-Branding +void CWSStarCoBrandingClient::AddAppInfoHeaderL() +{ + CWSStarSessionContext* valSsnContext = iWSStarServiceSession->SessionContext(); + + //Update application info attribute + if (CWSStarPolicy::CheckPolicyValueL(WSStarContextKeys::KAppInfo, iCoBrandingSession)) + { + valSsnContext->Update(WSStarContextKeys::KAppInfoPresent, ETrue); + + RPointerArray aAppElements; + CWSStarPolicy::GetPolicyValueL(WSStarContextKeys::KAppInfo,WSStarContextKeys::KApplication,iCoBrandingSession,aAppElements); + + for(TInt i=0;iLocalName() == KName) + { + valSsnContext->Update(WSStarContextKeys::KApplicationName, element->Content()); + } + if(element->LocalName() == WSStarContextKeys::KVendor) + { + valSsnContext->Update(WSStarContextKeys::KApplicationVendor, element->Content()); + } + if(element->LocalName() == WSStarContextKeys::KVersion) + { + valSsnContext->Update(WSStarContextKeys::KApplicationVersion, element->Content()); + } + } + + RPointerArray aDeOpElements; + CWSStarPolicy::GetPolicyValueL(WSStarContextKeys::KAppInfo,WSStarContextKeys::KDeviceOptions,iCoBrandingSession,aDeOpElements); + for(TInt i=0;iLocalName() == WSStarContextKeys::KLocale) + { + valSsnContext->Update(WSStarContextKeys::KLocale, element->Content()); + } + if(element->LocalName() == WSStarContextKeys::KUserAgent) + { + RPointerArray childElements1 = element->ElementsL(); + for(TInt j=0;jLocalName() == WSStarContextKeys::KManufacturer) + { + valSsnContext->Update(WSStarContextKeys::KManufacturer, childElement1->Content()); + } + if(childElement1->LocalName() == WSStarContextKeys::KModel) + { + valSsnContext->Update(WSStarContextKeys::KModel, childElement1->Content()); + } + if(childElement1->LocalName() == WSStarContextKeys::KIMSI) + { + valSsnContext->Update(WSStarContextKeys::KIMSI, childElement1->Content()); + } + if(childElement1->LocalName() == WSStarContextKeys::KOS) + { + + RPointerArray childElements2 = childElement1->ElementsL(); + for(TInt k=0;kLocalName() == WSStarContextKeys::KName) + { + valSsnContext->Update(WSStarContextKeys::KDeviceName, childElement2->Content()); + } + if(childElement2->LocalName() == WSStarContextKeys::KVersion) + { + valSsnContext->Update(WSStarContextKeys::KDeviceVersion, childElement2->Content()); + } + } + } + } + } + } + } +} +CSenServiceSession* CWSStarCoBrandingClient::ServiceSession() + { + return iWSStarServiceSession; + } + +//--------------------------------------------------------------------------- +// Create body for Fetch SCT request +//--------------------------------------------------------------------------- +//Co-Branding CR +CSenElement* CWSStarCoBrandingClient::CreateFSTL() +{ + + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarTrustClient::CreateFSTL"); + +//----------------- +//1 Proxy +//----------------- + + if (CWSStarPolicy::CheckPolicyValueL(WSStarContextKeys::KWAPGW, iCoBrandingSession)) + { + + HBufC8* wapGW = CWSStarPolicy::GetPolicyValueL(WSStarContextKeys::KWAPGW, iCoBrandingSession); + if (wapGW) + { + CleanupStack::PushL(wapGW); + } + else + { + //Hard Coded Value + } + + CSenDomFragment* domFrg = CSenDomFragment::NewL(KFSTTag); + CSenElement* elementRst = domFrg->ExtractElement(); + + CleanupStack::PushL(elementRst); + + delete domFrg; + domFrg = NULL; + + elementRst->AddNamespaceL(KNullDesC8,*wapGW); + + + CleanupStack::Pop(elementRst); + + if (wapGW) + { + CleanupStack::PopAndDestroy(wapGW); + } + + return elementRst; + } + + return NULL; + +} + +//End Of Co-Branding +MSenTransport& CWSStarCoBrandingClient::TransportL() + { + if(!ipTransport) + { + // Core is capable of working as transport factory, too. + // The returned transport instancies may or may not be + // ECOM plugins: + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarTrustClient::Instantiating new transport"); + ipTransport = Framework().Manager().CreateL(*iWSStarServiceSession, iWSStarServiceSession); + } + return *ipTransport; + } +//--------------------------------------------------------------------------- +// Getter for endpoint +//--------------------------------------------------------------------------- +// +TPtrC8 CWSStarCoBrandingClient::Endpoint() + { + return iWSStarServiceSession->Endpoint(); + } +//--------------------------------------------------------------------------- +// Getter for contract +//--------------------------------------------------------------------------- +// +TPtrC8 CWSStarCoBrandingClient::Contract() + { + return iWSStarServiceSession->Contract(); + } +//--------------------------------------------------------------------------- +// Getter for providerId +//--------------------------------------------------------------------------- +// +TPtrC8 CWSStarCoBrandingClient::ProviderID() + { + return iWSStarServiceSession->ProviderID(); + } + +//--------------------------------------------------------------------------- +// Getter for framework +//--------------------------------------------------------------------------- +// +TPtrC8 CWSStarCoBrandingClient::FrameworkId() + { + return iWSStarServiceSession->FrameworkId(); + } +//--------------------------------------------------------------------------- +// serialie to xml +//--------------------------------------------------------------------------- +// +void CWSStarCoBrandingClient::WriteAsXMLToL(RWriteStream& aWriteStream) + { + iWSStarServiceSession->WriteAsXMLToL(aWriteStream); + } +MSenServicePolicy* CWSStarCoBrandingClient::ServicePolicy() + { + return iWSStarServiceSession->ServicePolicy(); + } +TInt CWSStarCoBrandingClient::IapId(TUint32& aCurrentIapId) + { + return iWSStarServiceSession->IapId(aCurrentIapId); + } + +//--------------------------------------------------------------------------- +// setter for ws-trust version +//--------------------------------------------------------------------------- +// +void CWSStarCoBrandingClient::SetHandlerCtx(MSenHandlerContext* aHndCtx) + { + iHndCtx = aHndCtx; + } + +//Co-branding CR +TInt CWSStarCoBrandingClient::AdaptCoBrandEndpointL(TBool aToOrginal) //codescannerwarnings + { + + TInt returnValue( KErrNone ); + if (aToOrginal) + { + iWSStarServiceSession->SetEndPointL(*iCoBrandingOrginalEndpoint); + return returnValue; + } + delete iCoBrandingOrginalEndpoint; + iCoBrandingOrginalEndpoint = NULL; + iCoBrandingOrginalEndpoint = iWSStarServiceSession->Endpoint().AllocL(); + HBufC8* address = NULL; + + address = CWSStarPolicy::GetPolicyValueL(WSStarContextKeys::KWAPGW,iCoBrandingSession); + + if (address) + { + iWSStarServiceSession->SetEndPointL(*address); + TLSLOG_L(KSenCoreServiceManagerLogChannelBase , KMinLogLevel,"CWSStarTrustClient::AdaptCoBrandEndpointL() - endpoint replaced by value from policy"); + + delete address; + address = NULL; + } + else + { + returnValue = KErrNotFound; + } + + return returnValue; + } + +TBool CWSStarCoBrandingClient::Matches(MSenServiceDescription& aOtherServiceDescription) + { + return iWSStarServiceSession->Matches(aOtherServiceDescription); + + } + +// End of file + +