--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/tsrc/IptvTestUtility/src/CIptvTestSMApiUtil.cpp Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,624 @@
+/*
+* Copyright (c) 2002-2004 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: Object to offer some common utility functions to Iptv engine testing*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32Base.h>
+#include "CIptvTestSMApiUtil.h"
+#include "CIptvService.h"
+#include "VCXTestLog.h"
+#include <BAUTILS.H>
+//#include <CIptvServiceManager.h>
+#include "CIptvTestActiveWait.h"
+
+#include "CIptvServiceManagementClient.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::CIptvTestSMApiUtil
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CIptvTestSMApiUtil::CIptvTestSMApiUtil()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIptvTestSMApiUtil::ConstructL()
+ {
+ iIptvServiceManagementClient = CIptvServiceManagementClient::NewL(*this);
+ iActiveWait = CIptvTestActiveWait::NewL();
+
+ iRefreshNeeded = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvServicesFromFile::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIptvTestSMApiUtil* CIptvTestSMApiUtil::NewL()
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::NewL");
+ CIptvTestSMApiUtil* self = new( ELeave ) CIptvTestSMApiUtil;
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::NewL");
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvServicesFromFile::NewL
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CIptvTestSMApiUtil::~CIptvTestSMApiUtil()
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::~CIptvTestSMApiUtil");
+
+ iServicesArray.ResetAndDestroy();
+
+ delete iActiveWait;
+
+ if(iIptvServiceManagementClient)
+ {
+ delete iIptvServiceManagementClient;
+ iIptvServiceManagementClient=NULL;
+ }
+
+ iFsSession.Close();
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::~CIptvTestSMApiUtil");
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::GetServiceFromDb
+// Creates CIptvServiceInstance from parameters
+// returns pointer to service if succeeded, otherwise NULL
+// -----------------------------------------------------------------------------
+//
+CIptvService* CIptvTestSMApiUtil::GetServiceFromDb(TInt aId)
+ {
+ if( iRefreshNeeded )
+ {
+ RefreshServicesL();
+ }
+
+ for(TInt i=iServicesArray.Count()-1; i>=0; i--)
+ {
+ if( iServicesArray[i]->GetId() == aId )
+ {
+ return CopyServiceL( *iServicesArray[i] );
+ }
+ }
+
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::GetUsedIap
+// -----------------------------------------------------------------------------
+//
+TBool CIptvTestSMApiUtil::GetUsedIap(TUint32 aServiceId, TUint32& aIAPId, TDes& aIapName)
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::GetUsedIap");
+ TBool rv = ETrue;
+
+ CIptvNetworkSelection::TConnectionPermission connectionPermission;
+ CIptvNetworkSelection::TRespStatus respStatus;
+
+ TRAPD(error, iIptvServiceManagementClient->GetUsedIapL(aServiceId,
+ aIAPId,
+ aIapName,
+ connectionPermission,
+ respStatus));
+ if(error != KErrNone ||
+ respStatus != CIptvNetworkSelection::ESucceeded)
+ {
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetUsedIap failed!!!");
+ rv = EFalse;
+ }
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetUsedIap");
+ return rv;
+ }
+
+// ---------------------------------------------------------------------------
+// CIptvServiceManager::GetServicesFromDbL()
+// Get services from databases.
+// ---------------------------------------------------------------------------
+//
+TBool CIptvTestSMApiUtil::GetServicesFromDbL(RPointerArray<CIptvService>& aServicesArray, TUint32 aFlagsFilter,
+ CIptvServiceManagementClient::TOrder aOrder)
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::GetServicesFromDbL");
+
+ aServicesArray.ResetAndDestroy();
+
+ TInt err = KErrNone, err2 = KErrNone;
+
+ TRAP(err2, err = iIptvServiceManagementClient->GetServicesReqL( aFlagsFilter, aOrder ) );
+
+ if(err2 != KErrNone)
+ {
+ VCXLOGLO2("GetServicesReqL caused a leave: %d", err2);
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetServicesFromDbL");
+ return EFalse;
+ }
+ else
+ if(err != KErrNone)
+ {
+ VCXLOGLO2("GetServicesReqL returned error: %d", err);
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetServicesFromDbL");
+ return EFalse;
+ }
+
+ iActiveWait->ActiveWait(CIptvTestActiveWait::EActiveWaitStart);
+
+ TBool ret = ETrue;
+ if( iSMRespStatus != MIptvServiceManagementClientObserver::ESucceeded
+ && iSMRespStatus != MIptvServiceManagementClientObserver::EEmpty
+ )
+ {
+ ret = EFalse;
+ }
+
+ for(TInt i = 0; i < iServicesArray.Count(); i++)
+ {
+ aServicesArray.Append( CopyServiceL( *iServicesArray[i] ) );
+ }
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetServicesFromDbL");
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CIptvServiceManager::GetServicesFromDbL()
+// Get services from databases.
+// ---------------------------------------------------------------------------
+//
+TBool CIptvTestSMApiUtil::GetServicesFromDbL(RPointerArray<CIptvService>& aServicesArray)
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::GetServicesFromDbL (2)");
+
+ aServicesArray.ResetAndDestroy();
+
+ if( iRefreshNeeded )
+ {
+ RefreshServicesL();
+ }
+
+ for(TInt i = 0; i < iServicesArray.Count(); i++)
+ {
+ aServicesArray.Append( CopyServiceL( *iServicesArray[i] ) );
+ }
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetServicesFromDbL (2)");
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CIptvServiceManager::RefreshServicesL()
+// ---------------------------------------------------------------------------
+//
+TBool CIptvTestSMApiUtil::RefreshServicesL()
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::RefreshServicesL");
+ iServicesArray.ResetAndDestroy();
+
+ if( iRefreshingServices )
+ {
+ VCXLOGLO1("<<<CIptvTestSMApiUtil:: Already refreshing.");
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshServicesL");
+ return ETrue;
+ }
+
+ TInt err = KErrNone, err2 = KErrNone;
+ TRAP(err2, err = iIptvServiceManagementClient->GetServicesReqL(0, CIptvServiceManagementClient::EDisplayOrderAscending ));
+
+ if(err2 != KErrNone)
+ {
+ VCXLOGLO2("GetServicesReqL caused a leave: %d", err2);
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshServicesL");
+ return EFalse;
+ }
+ else
+ if(err != KErrNone)
+ {
+ VCXLOGLO2("GetServicesReqL returned error: %d", err);
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshServicesL");
+ return EFalse;
+ }
+
+ iRefreshingServices = ETrue;
+
+ iActiveWait->ActiveWait(CIptvTestActiveWait::EActiveWaitStart);
+
+ TBool ret = ETrue;
+ if( iSMRespStatus != MIptvServiceManagementClientObserver::ESucceeded
+ && iSMRespStatus != MIptvServiceManagementClientObserver::EEmpty
+ )
+ {
+ ret = EFalse;
+ }
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshServicesL");
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CIptvTestSMApiUtil::IsServiceIncludedInSearch()
+//
+// Decides if the service is included in the search.
+// ---------------------------------------------------------------------------
+//
+TBool CIptvTestSMApiUtil::IsServiceIncludedInSearch(TUint32 aSearchLimitFlags, CIptvService& aIptvService)
+ {
+ if(aSearchLimitFlags == 0)
+ {
+ return ETrue;
+ }
+
+ /* ESelectedServices = (1 << 0),
+ EMainServices = (1 << 1),
+ ESubServices = (1 << 2),
+ EVod = (1 << 3),
+ ELiveTv = (1 << 4),
+ EVodCast = (1 << 5),
+ EOther = (1 << 6) */
+
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::ESelectedServices)
+ && aIptvService.GetFlags() & CIptvService::ESelected)
+ {
+ return ETrue;
+ }
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::EMainServices)
+ && (aIptvService.GetFlags() & CIptvService::EMainService))
+ {
+ return ETrue;
+ }
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::ESubServices)
+ && !(aIptvService.GetFlags() & CIptvService::EMainService))
+ {
+ return ETrue;
+ }
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::EVod)
+ && (aIptvService.GetType() == CIptvService::EVod))
+ {
+ return ETrue;
+ }
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::EVodCast)
+ && (aIptvService.GetType() == CIptvService::EVodCast))
+ {
+ return ETrue;
+ }
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::EBrowser)
+ && (aIptvService.GetType() == CIptvService::EBrowser))
+ {
+ return ETrue;
+ }
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::EVideoRemote)
+ && (aIptvService.GetType() == CIptvService::EVideoRemote))
+ {
+ return ETrue;
+ }
+
+
+ if((aSearchLimitFlags & CIptvServiceManagementClient::EApplication)
+ && (aIptvService.GetType() == CIptvService::EApplication))
+ {
+ return ETrue;
+ }
+
+ if(aSearchLimitFlags & CIptvServiceManagementClient::ELiveTv
+ && (aIptvService.GetType() == CIptvService::ELiveTv))
+ {
+ return ETrue;
+ }
+
+ if(aSearchLimitFlags & CIptvServiceManagementClient::EMobileTv
+ && (aIptvService.GetType() == CIptvService::EMobileTv))
+ {
+ return ETrue;
+ }
+
+ if(aSearchLimitFlags & CIptvServiceManagementClient::EOther
+ && (aIptvService.GetType() == CIptvService::EOther))
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::CopyService
+// -----------------------------------------------------------------------------
+//
+CIptvService* CIptvTestSMApiUtil::CopyServiceL( CIptvService& aService )
+ {
+ CIptvService* iptvService = NULL;
+
+ iptvService = CIptvService::NewL();
+ CleanupStack::PushL(iptvService);
+ HBufC8* buff = aService.GetL();
+ CleanupStack::PushL(buff);
+ iptvService->SetL( buff->Des() );
+ CleanupStack::PopAndDestroy(buff);
+ CleanupStack::Pop(iptvService);
+
+ return iptvService;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::SetUsedIap(TUint32 aServiceId, TUint32 aIapId)
+//
+// Sets default iap for a service, and set connecting allowed for the iap.
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestSMApiUtil::SetUsedIap(TUint32 aServiceId, TUint32 aIapId)
+ {
+ TInt err(KErrNone);
+ CIptvNetworkSelection::TRespStatus respStatus;
+
+ TRAP(err, iIptvServiceManagementClient->SetUsedIapL(aIapId, aServiceId, ETrue, respStatus));
+
+ if(KErrNone != err)
+ {
+ VCXLOGLO1("CIptvServiceManagementClient::SetUsedIapL leaved");
+ return err;
+ }
+ else if( CIptvNetworkSelection::ESucceeded != respStatus )
+ {
+ VCXLOGLO1("CIptvServiceManagementClient::SetUsedIapL returned error");
+ return respStatus;
+ }
+
+ TRAP(err, iIptvServiceManagementClient->SetConnectionAllowedL(ETrue, aIapId, respStatus));
+
+ if(KErrNone != err)
+ {
+ VCXLOGLO1("CIptvServiceManagementClient::SetConnectionAllowedL leaved");
+ return err;
+ }
+
+ else if( CIptvNetworkSelection::ESucceeded != respStatus )
+ {
+ VCXLOGLO1("CIptvServiceManagementClient::SetConnectionAllowedL returned error");
+ return respStatus;
+ }
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::RefreshService(TUint32 aServiceId)
+//
+// Loads old service, creates a new duplicate of it and delete the old service.
+// Useful for testing scheduled download, because all the contents seems to be
+// new, not previously downloaded after calling this for a service.
+// Old service id is not valid after calling this
+// -----------------------------------------------------------------------------
+//
+TInt CIptvTestSMApiUtil::RefreshService(TUint32 aServiceId, TTime aLastDownloadTime)
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::RefreshService");
+ MIptvServiceManagementClientObserver::TRespStatus status;
+ TInt leave(KErrNone);
+ TInt err(KErrNone);
+ CIptvService* service(NULL);
+
+ TRAP(leave, service = GetServiceFromDb(aServiceId));
+
+ if( leave!=KErrNone || service==NULL )
+ {
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshService: GetServiceFromDb");
+ return KErrNotFound;
+ }
+
+ TRAP(leave, err = iIptvServiceManagementClient->DeleteServiceL(aServiceId, status));
+
+ if( MIptvServiceManagementClientObserver::ESucceeded != status ||
+ KErrNone != leave || KErrNone != err)
+ {
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshService: DeleteServiceL");
+ return KErrGeneral;
+ }
+
+ // Create new unique provider id.
+ _LIT(Kd,"%d");
+ TBuf<24> buf;
+ TTime now;
+ now.HomeTime();
+ buf.Format(Kd, now.Int64());
+ service->SetProviderId(buf);
+
+ // After this it seems that downloas haven't ever been scheduled for this service.
+ service->SetScheduledLastDownloadTime(aLastDownloadTime);
+
+ TRAP(leave, err = iIptvServiceManagementClient->AddServiceL(*service, status));
+
+ if( MIptvServiceManagementClientObserver::ESucceeded != status||
+ KErrNone != leave|| KErrNone != err )
+ {
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshService: AddServiceL");
+ return KErrGeneral;
+ }
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::RefreshService");
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::GetServicesResp()
+//
+// -----------------------------------------------------------------------------
+//
+void CIptvTestSMApiUtil::GetServicesResp(TRespStatus aRespStatus, CDesC8ArraySeg* aServicesArray)
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::GetServicesResp");
+
+ iRefreshNeeded = EFalse;
+ switch(iSMRespStatus)
+ {
+ case MIptvServiceManagementClientObserver::ESucceeded:
+ {
+ VCXLOGLO1("GetServicesReqL response: ESucceeded");
+ break;
+ }
+
+ case MIptvServiceManagementClientObserver::EEmpty:
+ {
+ VCXLOGLO1("GetServicesReqL response: EEmpty");
+ break;
+ }
+
+ case MIptvServiceManagementClientObserver::EServiceNotFound:
+ {
+ VCXLOGLO1("GetServicesReqL response: EServiceNotFound");
+ iRefreshNeeded = ETrue;
+ break;
+ }
+
+ case MIptvServiceManagementClientObserver::EGeneralError:
+ {
+ VCXLOGLO1("GetServicesReqL response: EGeneralError");
+ iRefreshNeeded = ETrue;
+ break;
+ }
+
+ case MIptvServiceManagementClientObserver::ECancelled:
+ {
+ VCXLOGLO1("GetServicesReqL response: ECancelled");
+ iRefreshNeeded = ETrue;
+ break;
+ }
+
+ default:
+ {
+ VCXLOGLO2("GetServicesReqL response: unknown: %d", aRespStatus);
+ iRefreshNeeded = ETrue;
+ break;
+ }
+ }
+
+ iSMRespStatus = aRespStatus;
+ iRefreshingServices = EFalse;
+
+ if( aServicesArray )
+ {
+ iServicesArray.ResetAndDestroy();
+
+ CIptvService* iptvService = NULL;
+
+ for(TInt i = 0; i < aServicesArray->MdcaCount(); i++)
+ {
+ iptvService = CIptvService::NewL();
+ CleanupStack::PushL(iptvService);
+ iptvService->SetL(aServicesArray->MdcaPoint(i));
+ iServicesArray.Append( iptvService );
+ VCXLOGLO3("CIptvTestSMApiUtil:: service id: %d, name: %S", iptvService->GetId(), &(iptvService->GetName()) );
+ CleanupStack::Pop(iptvService);
+ iptvService = NULL;
+ }
+
+ aServicesArray->Reset();
+ delete aServicesArray;
+ aServicesArray = NULL;
+ }
+ else
+ {
+ VCXLOGLO1("CIptvTestSMApiUtil:: aServicesArray = NULL");
+ iRefreshNeeded = ETrue;
+ }
+
+ iActiveWait->ActiveWait(CIptvTestActiveWait::EActiveWaitStop);
+
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::GetServicesResp");
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestSMApiUtil::HandleSmEvent()
+//
+// -----------------------------------------------------------------------------
+//
+void CIptvTestSMApiUtil::HandleSmEvent(CIptvSmEvent& aEvent )
+ {
+ VCXLOGLO1(">>>CIptvTestSMApiUtil::HandleSmEvent");
+ VCXLOGLO2(">>>CIptvTestSMApiUtil:: Event: %d", aEvent.iEvent );
+ switch( aEvent.iEvent )
+ {
+ case CIptvSmEvent::EServiceAdded:
+ case CIptvSmEvent::EServiceModified:
+ case CIptvSmEvent::EServiceScheduleModified:
+ case CIptvSmEvent::EServiceDeleted:
+ {
+ iRefreshNeeded = ETrue;
+ }
+ break;
+
+ case CIptvSmEvent::EServiceSelectionModified:
+ {
+
+ }
+ break;
+
+ default:
+ {
+ }
+ break;
+ }
+ VCXLOGLO1("<<<CIptvTestSMApiUtil::HandleSmEvent");
+ }
+
+// End of File
+