diff -r 000000000000 -r 96612d01cf9f videofeeds/omaprovisioning/src/CIptvOmaProvisioningAdapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/omaprovisioning/src/CIptvOmaProvisioningAdapter.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,948 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Receives and stores the IPTV settings.* +*/ + + + + +#include +#include +#include +#include +#include "IptvDebug.h" +#include "IptvEngineUids.h" +#include "CIptvUtil.h" +#include +#include +#include +#include +#include "iptvlocalisationliterals.h" +#include + +#include "CIptvService.h" +#include "CIptvServices.h" +#include "CIptvServiceManagementClient.h" +#include "CIptvOmaProvisioningAdapter.h" +#include "IptvOmaProvisioningAdapterUIDs.h" + +// Type +_LIT(KIptvVodCast, "VC"); +_LIT(KIptvLiveTv, "LiveTV"); +_LIT(KIptvVod, "VOD"); +_LIT(KIptvBrowser, "Browser"); +_LIT(KIptvApplication, "Application"); +_LIT(KIptvMobileTv, "MobileTv"); +_LIT(KIptvSecureProvisioningServer, "SecureProvisioningServer"); +_LIT(KIptvVideoStore, "VideoStore"); + +// Protocol +_LIT(KIptvProtocolRss, "RSS2.0"); +_LIT(KIptvProtocolDvbIpi, "DVB-IPI"); +_LIT(KIptvProtocolHTTPProp, "HTTP-PROP"); // Application and plugin specific communication mechanism +_LIT(KIptvProtocolHTTP, "HTTP"); // Browser +_LIT(KIptvProtocolXMLTV, "XMLTV" ); + +_LIT(KIptvAppId, "w9031"); + +// Parameter names +_LIT(KIptvParamNameApplicationMaxBandWidth, "APPLICATION/MAX-BANDWIDTH"); +_LIT(KIptvParamNameApplicationNetInfo, "APPLICATION/NETINFO"); +_LIT(KIptvParamNameApplicationMinUdpPort, "APPLICATION/MIN-UDP-PORT"); +_LIT(KIptvParamNameApplicationInfraId, "APPLICATION/INFRA-ID"); +_LIT(KIptvParamNameApplicationTypeId, "APPLICATION/TYPE-ID"); +_LIT(KIptvParamNameApplicationIconUrl, "APPLICATION/ICON-URL"); +_LIT(KIptvParamNameApplicationAccountUrl, "APPLICATION/ACCOUNT-URL"); + +const TInt KIptvDriveLetterSpace( 2 ); + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------- +// +CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter() : CWPAdapter() + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CIptvOmaProvisioningAdapter() exit" ); + } + +// --------------------------------------------------------- +// CIptvOmaProvisioningAdapter::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::ConstructL() + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ConstructL() start" ); + + iServices = CIptvServices::NewL(); + + HBufC* resourceText = LoadResourceTextL( R_IPTV_OMA_CLIENT_PROV_SUMMARY_TITLE ); + CleanupStack::PushL( resourceText ); //1-> + if ( resourceText->Des().Length() > KIptvOcpMaxSummaryTitleLength ) + { + iSummaryTitle = resourceText->Des().Left( KIptvOcpMaxSummaryTitleLength - 1 ); + } + else + { + iSummaryTitle = resourceText->Des(); + } + + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iSummaryTitle = %S", &iSummaryTitle ); + + CleanupStack::PopAndDestroy( resourceText ); // <-1 + + User::LeaveIfError( iFs.Connect() ); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ConstructL() exit" ); + } + +// --------------------------------------------------------- +// CIptvOmaProvisioningAdapter::NewL +// Static constructor. +// --------------------------------------------------------- +// +CIptvOmaProvisioningAdapter* CIptvOmaProvisioningAdapter::NewL() + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::NewL() start" ); + CIptvOmaProvisioningAdapter* self = new ( ELeave ) CIptvOmaProvisioningAdapter; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::NewL() exit" ); + return self; + } + +// Destructor +CIptvOmaProvisioningAdapter::~CIptvOmaProvisioningAdapter() + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::~CIptvOmaProvisioningAdapter() start" ); + + delete iCurrentService; + delete iServices; + + iFs.Close(); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::~CIptvOmaProvisioningAdapter() exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::ContextExtension +// ----------------------------------------------------------------------------- +// +TInt CIptvOmaProvisioningAdapter::ContextExtension( MWPContextExtension*& aExtension ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() start" ); + aExtension = this; + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() exit" ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SaveDataL +// ----------------------------------------------------------------------------- +// +const TDesC8& CIptvOmaProvisioningAdapter::SaveDataL( TInt /*aIndex*/ ) const + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() start" ); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ContextExtension() exit" ); + return KIptvEmptyDes8; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::DeleteL +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::DeleteL( const TDesC8& /*aSaveData*/ ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DeleteL() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DeleteL() exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::Uid +// ----------------------------------------------------------------------------- +// +TUint32 CIptvOmaProvisioningAdapter::Uid() const + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::Uid() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::Uid() exit" ); + return PROVISIONING_IPTV_ADAPTER_UID; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::DetailsL +// ----------------------------------------------------------------------------- +// +TInt CIptvOmaProvisioningAdapter::DetailsL( TInt /*aItem*/, MWPPairVisitor& /*aVisitor */ ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DetailsL() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::DetailsL() exit "); + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SummaryCount +// ----------------------------------------------------------------------------- +// +TInt CIptvOmaProvisioningAdapter::ItemCount() const + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ItemCount() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::ItemCount() exit" ); + + TInt count; + if ( iServices ) + { + count = iServices->Count(); + } + else + { + count = 0; + } + + return count; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SummaryTitle +// ----------------------------------------------------------------------------- +// +const TDesC16& CIptvOmaProvisioningAdapter::SummaryTitle( TInt /*aIndex*/ ) const + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryTitle() start" ); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryTitle() exit" ); + return iSummaryTitle; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SummaryText +// ----------------------------------------------------------------------------- +// +const TDesC16& CIptvOmaProvisioningAdapter::SummaryText( TInt aIndex ) const + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryText() start" ); + + if ( !iServices ) + { + return KIptvEmptyDes; + } + + TInt error; + CIptvService& service = iServices->Service( aIndex, error ); + + if ( error == KErrNone ) + { + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: service name found, returning it as a summary text: %S", &(service.GetName()) ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryText() exit" ); + return service.GetName(); + } + else + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: service name not found, returning empty des" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SummaryText() exit" ); + return KIptvEmptyDes; + } + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SaveL +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::SaveL( TInt /*aIndex*/ ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SaveL() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SaveL() exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::CanSetAsDefault +// ----------------------------------------------------------------------------- +// +TBool CIptvOmaProvisioningAdapter::CanSetAsDefault( TInt /*aIndex*/ ) const + { + // service profile cannot be set as default via OMA CP. + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CanSetAsDefault() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::CanSetAsDefault() exit" ); + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CWPIptvAdapter::SetAsDefaultL +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::SetAsDefaultL( TInt /*aIndex*/ ) + { + // service profile cannot be set as default via OMA CP. + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SetAsDefaultL() start" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SetAsDefaultL() exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::VisitL +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::VisitL( CWPCharacteristic& aCharacteristic ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aCharacteristic) start" ); + + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: aCharacteristic.Type() == %d", aCharacteristic.Type() ); + + switch ( aCharacteristic.Type() ) + { + case KWPApplication: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case KWPApplication" ); + + if ( iCurrentService ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: deleting iCurrentService" ); + delete iCurrentService; + iCurrentService = NULL; + } + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: creating iCurrentService" ); + iCurrentService = CIptvService::NewL(); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: starting to fill iCurrentService" ); + + aCharacteristic.AcceptL( *this ); + + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iAppId = %S", &iAppId ); + + if ( iAppId == KIptvAppId ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: was our service settings" ); + + if ( iServices ) + { + TInt i; + TBool serviceWasAlreadyAdded( EFalse ); + TInt servicesCount = iServices->Count(); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iServices.Count() = %d", servicesCount ); + for ( i = 0; ( i < iServices->Count() ) && !serviceWasAlreadyAdded; i++ ) + { + if ( iServices->GetServiceRefL(i).CompareL( *iCurrentService ) ) + { + serviceWasAlreadyAdded = ETrue; + } + } + if ( !serviceWasAlreadyAdded ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding iCurrentService to iServices" ); + iServices->AddL( *iCurrentService ); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iServices.Count() = %d", iServices->Count() ); + } + else + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iCurrentService was already in iServices, skipping add" ); + } + } + else + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iServices didnt exist, skipping add" ); + } + } + else + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: was not our setting, skipping add" ); + } + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: deleting iCurrentService" ); + delete iCurrentService; + iCurrentService = NULL; + break; + + case KWPNamedCharacteristic: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case KWPNamedCharacteristic" ); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name = %S", &aCharacteristic.Name() ); + break; + + case KWPAppAuth: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case KWPAppAuth" ); + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: accepting" ); + aCharacteristic.AcceptL( *this ); + break; + } + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aCharacteristic) exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::VisitL +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::VisitL( CWPParameter& aParameter ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aParameter) start" ); + + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter ID = %d", aParameter.ID() ); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter value = %S", &aParameter.Value() ); + + switch ( aParameter.ID() ) + { + //well known parameters + case EWPParameterAppID: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: case EWPParameterAppID" ); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: value = %S", &aParameter.Value() ); + iAppId.Set( aParameter.Value() ); + break; + + case EWPParameterToProxy: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterToProxy -> ignoring" ); + break; + + case EWPParameterProviderID: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterProviderID -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmServicesDbProviderIdMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: provider ID too long! -> skipping value" ); + } + else + { + iCurrentService->SetProviderId( aParameter.Value() ); + } + break; + + case EWPParameterName: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterName -> collecting" ); + +#if defined(__SERIES60_30__) || defined(__SERIES60_31__) || defined(__SERIES60_32__) + + // Video Store name must be localised here. + if ( 0 == aParameter.Value().CompareF( KQtnIptvVideoStoreList ) ) + { + HBufC* resourceText = LoadResourceTextL( R_IPTV_VIDEO_STORE_LIST ); + if ( resourceText->Length() > KIptvSmServicesDbNameMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name too long! -> skipping value" ); + } + else + { + iCurrentService->SetName( *resourceText ); + } + delete resourceText; + } + else if ( aParameter.Value().Length() > KIptvSmServicesDbNameMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name too long! -> skipping value" ); + } + else + { + iCurrentService->SetName( aParameter.Value() ); + } + +#else // S60 5.0 -> + + if ( aParameter.Value().Length() > KIptvSmServicesDbNameMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: name too long! -> skipping value" ); + } + else + { + iCurrentService->SetName( aParameter.Value() ); + } + +#endif // defined(__SERIES60_30__) || defined(__SERIES60_31__) || defined(__SERIES60_32__) + + break; + + case EWPParameterToNapID: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterToNapID -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmServicesDbIapNameMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: iap name too long! -> skipping value" ); + } + else + { + iCurrentService->SetIapNameL( aParameter.Value() ); + iCurrentService->SetFlags( + iCurrentService->GetFlags() | CIptvService::EReadOnlyIaps ); + } + break; + + case EWPParameterAddr: + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterAddr -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmServicesDbAddressMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: address too long! -> skipping value" ); + } + else + { + iCurrentService->SetAddress( aParameter.Value() ); + } + break; + + case EWPParameterAAuthName: /* 305 */ + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterAuthName -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmPasswordsDbUserNameMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: user name too long! -> skipping value" ); + } + else + { + iCurrentService->SetUserName( aParameter.Value() ); + } + break; + + case EWPParameterAAuthSecret: /* 306 */ + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter EWPParameterAuthSecret -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmPasswordsDbPasswordMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: password too long! -> skipping value" ); + } + else + { + iCurrentService->SetPassword( aParameter.Value() ); + } + break; + + //application spesific parameters + case EWPNamedParameter: + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter name = %S", &aParameter.Name() ); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter value = %S", &aParameter.Value() ); + + if ( aParameter.Name() == KIptvParamNameApplicationMaxBandWidth ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/MAX-BANDWIDTH -> ignoring" ); + } + else if ( aParameter.Name() == KIptvParamNameApplicationNetInfo ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/NETINFO -> ignoring" ); + } + else if ( aParameter.Name() == KIptvParamNameApplicationMinUdpPort ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/MIN-UDP-PORT -> ignoring" ); + } + else if ( aParameter.Name() == KIptvParamNameApplicationInfraId ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/INFRA-ID -> collecting" ); + + if ( aParameter.Value() == KIptvProtocolRss ) + { + TUid uid; + uid.iUid = KIptvRssPluginImplementationUid; + iCurrentService->SetEpgPluginUid( uid ); + uid.iUid = 0; + iCurrentService->SetIptvPluginUid( uid ); + uid.iUid = IPTV_HTTP_VOD_DOWNLOAD_PLUGIN_IMPLEMENTATION_UID; + iCurrentService->SetVodPluginUid( uid ); + } + else if (aParameter.Value() == KIptvProtocolDvbIpi) + { + TUid uid; + uid.iUid = KIptvSmartvisionPluginUid; + iCurrentService->SetEpgPluginUid( uid ); + iCurrentService->SetIptvPluginUid( uid ); + uid.iUid = IPTV_HTTP_VOD_DOWNLOAD_PLUGIN_IMPLEMENTATION_UID; + iCurrentService->SetVodPluginUid( uid ); + } + else if ( aParameter.Value() == KIptvProtocolHTTPProp ) + { + } + else if ( aParameter.Value() == KIptvProtocolHTTP ) + { + } + else if ( aParameter.Value() == KIptvProtocolXMLTV ) + { + TUid uid; + uid.iUid = KIptvLiveTvXmlTvPluginUid; + iCurrentService->SetIptvPluginUid( uid ); + iCurrentService->SetEpgPluginUid( uid ); + uid.iUid = IPTV_HTTP_VOD_DOWNLOAD_PLUGIN_IMPLEMENTATION_UID; + iCurrentService->SetVodPluginUid( uid ); + } + else + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: not a valid protocol" ); + } + + } + else if ( aParameter.Name() == KIptvParamNameApplicationTypeId ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/TYPE-ID -> collecting" ); + + if ( aParameter.Value() == KIptvVodCast ) + { + iCurrentService->SetType( CIptvService::EVodCast ); + iCurrentService->SetFlags( 0 ); + } + else if ( aParameter.Value() == KIptvVod ) + { + iCurrentService->SetType( CIptvService::EVod ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else if ( aParameter.Value() == KIptvLiveTv ) + { + iCurrentService->SetType( CIptvService::ELiveTv ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else if ( aParameter.Value() == KIptvBrowser ) + { + iCurrentService->SetType( CIptvService::EBrowser ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else if ( aParameter.Value() == KIptvApplication ) + { + iCurrentService->SetType( CIptvService::EApplication ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else if ( aParameter.Value() == KIptvMobileTv ) + { + iCurrentService->SetType( CIptvService::EMobileTv ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else if ( aParameter.Value() == KIptvSecureProvisioningServer ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: ESecureProvisioningServer type service" ); + iCurrentService->SetType( + CIptvService::ESecureProvisioningServer ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else if ( aParameter.Value() == KIptvVideoStore ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: EVideoStore type service" ); + iCurrentService->SetType( CIptvService::EVideoStore ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + else + { + // All other services go under other + iCurrentService->SetType( CIptvService::EOther ); + iCurrentService->SetFlags( CIptvService::EMainService ); + } + + } + else if ( aParameter.Name() == KIptvParamNameApplicationIconUrl ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/ICON-URL -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmServicesDbIconPathMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: icon path too long! -> skipping value" ); + } + else + { + SetIconPathL( aParameter.Value() ); + } + } + else if ( aParameter.Name() == KIptvParamNameApplicationAccountUrl ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/ACCOUNT-URL -> collecting" ); + if ( aParameter.Value().Length() > KIptvSmServicesDbAccountManagementUrlMaxLength ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: parameter APPLICATION/ACCOUNT-URL too long, skipping" ); + } + else + { + iCurrentService->SetAccountManagementUrl( aParameter.Value() ); + } + } + break; + + default: + break; + } + + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::VisitL(aParameter) exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SettingsSavedL +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::SettingsSavedL ( const TDesC8& aAppIdOfSavingItem, + const TDesC8& /*aAppRef*/, + const TDesC8& /*aStorageIdValue*/ ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SettingsSavedL() start" ); + + const TInt maxPrintBufSize = 50; + TBuf buf; + buf.Copy( aAppIdOfSavingItem.Left( maxPrintBufSize - 1 ) ); + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: aAppIdOfSavingItem = %S", &buf ); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SettingsSavedL() exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SavingFinalizedL() +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::SavingFinalizedL() + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SavingFinalizedL() start" ); + + if ( iServices ) + { + if ( iServices->Count() > 0 ) + { + CIptvServiceManagementClient* smClient = CIptvServiceManagementClient::NewL( *this ); + CleanupStack::PushL( smClient ); // 1-> + CIptvServices* existingServices = CIptvServices::NewL(); + CleanupStack::PushL( existingServices ); // 2-> + + TInt i; + MIptvServiceManagementClientObserver::TRespStatus respStatus( + MIptvServiceManagementClientObserver::ESucceeded ); + + for ( i = 0; i < iServices->Count(); i++ ) + { + //check if there is already a service with this provider id + TBool serviceExists; + TInt err = smClient->GetServicesL( iServices->GetServiceRefL(i).GetProviderId(), + *existingServices ); + if ( err == KErrNone ) + { + if ( existingServices->Count() > 0 ) + { + serviceExists = ETrue; + } + else + { + serviceExists = EFalse; + } + } + else + { + serviceExists = EFalse; + } + + CIptvService& service = iServices->GetServiceRefL( i ); //creates service from binary data and returns ref to it + + + if ( service.GetType() != CIptvService::ELiveTv ) + { + + service.SetFlags( service.GetFlags() | CIptvService::ESelected ); //a new call to iServices->GetServiceRefL() will destroy this change, be careful out there... + + if ( serviceExists ) + { + TUint32 existingServiceId = existingServices->GetServiceRefL( 0 ).GetId(); + service.SetId( existingServiceId ); //modify the new service instance + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: service (%d) existed, updating old service", existingServiceId ); + TRAP( err, smClient->UpdateServiceL( service, respStatus ) ); + } + else + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding a new service" ); + TRAP( err, smClient->AddServiceL( service, respStatus ) ); + } + + if ( respStatus != MIptvServiceManagementClientObserver::ESucceeded || + err != KErrNone ) + { + IPTVLOGSTRING3_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding service to database failed (%d,%d)!", respStatus, err ); + } + else + { + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: adding iServices(%d) succeeded.", i ); + } + + } + + } //for + CleanupStack::PopAndDestroy( existingServices ); // <-2 + CleanupStack::PopAndDestroy( smClient ); // <-1 + } // if ( iServices->Count() > 0 ) + } // if ( iServices ) + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: deleting iServices" ); + delete iServices; + iServices = NULL; + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: creating iServices" ); + iServices = CIptvServices::NewL(); + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SavingFinalizedL() exit" ); + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::LoadResourceTextL +// ----------------------------------------------------------------------------- +// +HBufC* CIptvOmaProvisioningAdapter::LoadResourceTextL( TInt aResourceId ) const + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::LoadResourceTextL() start" ); + + // Open a file server session + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); // 1-> + + // Get the drive from DLL file name + TFileName dllName; + Dll::FileName( dllName ); + + TFileName fileName; + TParsePtrC parse( dllName ); + fileName = parse.Drive(); + + _LIT(KIptvOcpResourcePath, "\\Resource\\Plugins\\"); + fileName.Append( KIptvOcpResourcePath ); + + _LIT(KIptvOcpResourceFileName, "IptvOmaProvisioningAdapter.rsc"); + fileName.Append( KIptvOcpResourceFileName ); + + //Retrieve the correct suffix + BaflUtils::NearestLanguageFile( fs, fileName ); + + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: resource file = %S", &fileName ); + + //Open the file + RResourceFile resourceFile; + resourceFile.OpenL( fs, fileName ); + CleanupClosePushL( resourceFile ); // 2-> + + //Read data from resource file + HBufC8* resourceData = resourceFile.AllocReadLC( aResourceId ); // 3-> + + //Extract text from data + TResourceReader resReader; + resReader.SetBuffer( resourceData ); + HBufC* text = resReader.ReadHBufCL(); + CleanupStack::PushL( text ); // 4-> + + TPtr textPtr( text->Des() ); + + IPTVLOGSTRING2_LOW_LEVEL( "CIptvOmaProvisioningAdapter:: resource text = %S", &textPtr ); + + CleanupStack::Pop( text ); // <-4 + CleanupStack::PopAndDestroy( resourceData ); // <-3 + CleanupStack::PopAndDestroy( &resourceFile ); // <-2 + CleanupStack::PopAndDestroy( &fs ); // <-1 + + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::LoadResourceTextL() exit" ); + return text; + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::AddServiceResp +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::AddServiceResp( TRespStatus /*aRespStatus*/ ) + { + } +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::UpdateServiceResp +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::UpdateServiceResp( TRespStatus /*aRespStatus*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::DeleteServiceResp +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::DeleteServiceResp( TRespStatus /*aRespStatus*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::GetServicesResp +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::GetServicesResp( TRespStatus /*aRespStatus*/, + CDesC8ArraySeg* /*aServicesArray*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::GetUsedIapResp +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::GetUsedIapResp( TUint32 /*aIapId*/, + const TDesC& /*aIapName*/, + CIptvNetworkSelection::TConnectionPermission /*aConnectionPermission*/, + TBool /*aWlanWhenGPRS*/, + CIptvNetworkSelection::TRespStatus /*aRespStatus*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::ServerShutdownResp +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::ServerShutdownResp( TRespStatus /*aRespStatus*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::HandleSmEvent +// ----------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::HandleSmEvent( CIptvSmEvent& /*aEvent*/ ) + { + } + +// --------------------------------------------------------------------------- +// CIptvOmaProvisioningAdapter::SetIconPathL() +// --------------------------------------------------------------------------- +// +void CIptvOmaProvisioningAdapter::SetIconPathL( const TDesC& aIconPath ) + { + IPTVLOGSTRING_LOW_LEVEL( "CIptvOmaProvisioningAdapter::SetIconPathL" ); + + // Check for a file name without drive letter. + if ( ( aIconPath.Length() > 0 ) && ( aIconPath[0] == '\\' ) ) + { + TBool accept( EFalse ); + TDriveList driveList; + TDriveInfo driveInfo; + + if ( KErrNone == iFs.DriveList( driveList ) ) + { + HBufC* tempName = + HBufC::NewLC( aIconPath.Length() + KIptvDriveLetterSpace ); + TChar character; + + for ( TInt i = EDriveA; i <= EDriveZ && !accept; i++ ) + { + if ( driveList[i] && + ( KErrNone == iFs.Drive( driveInfo, i ) ) && + ( KErrNone == RFs::DriveToChar( i, character ) ) ) + { + tempName->Des().Zero(); + tempName->Des().Append( character ); + tempName->Des().Append( ':' ); + tempName->Des().Append( aIconPath ); + + IPTVLOGSTRING2_LOW_LEVEL( + "Scanning icon from %S", tempName ); + if ( BaflUtils::FileExists( iFs, *tempName ) ) + { + IPTVLOGSTRING_LOW_LEVEL( " ---- Icon found" ); + accept = ETrue; + } + } + } + + if ( accept && iCurrentService ) + { + iCurrentService->SetIconPath( tempName->Des() ); + } + + CleanupStack::PopAndDestroy( tempName ); + } + } + else if ( iCurrentService ) + { + iCurrentService->SetIconPath( aIconPath ); + } + }