videofeeds/server/tsrc/IptvTestUtility/src/CIptvTestSMApiUtil.cpp
changeset 0 96612d01cf9f
--- /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
+