videofeeds/clientapi/src/CIptvVodContentClient.cpp
branchRCL_3
changeset 23 befca0ec475f
parent 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/clientapi/src/CIptvVodContentClient.cpp	Wed Sep 01 12:30:28 2010 +0100
@@ -0,0 +1,1253 @@
+/*
+* Copyright (c) 2005-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:    Implements VoD ECG content API.*
+*/
+
+
+
+
+#include <e32svr.h>
+#include <s32mem.h> 
+#include "IptvDebug.h"
+#include "CIptvMediaContent.h"
+
+#include "MIptvVodContentClientObserver.h"
+#include "CIptvVodContentClient.h"
+#include "IptvClientServerCommon.h"
+#include "IptvServer.pan"
+#include "CIptvVodContentCategoryBriefDetails.h"
+#include "CIptvVodContentContentBriefDetails.h"
+#include "CIptvVodContentContentFullDetails.h"
+#include "CIptvVodContentUpdateObserver.h"
+#include "CIptvMyVideosGlobalFileId.h"
+#include "TIptvRssSearchQuery.h"
+
+const TInt KTUint32SizeInBytes( 4 );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::CIptvVodContentClient
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CIptvVodContentClient::CIptvVodContentClient(TIptvServiceId aServiceId, MIptvVodContentClientObserver& aClientObserver) : 
+    CActive( EPriorityStandard ), 
+    iClientObserver( aClientObserver ), 
+    iMsg(NULL), 
+    iMsgPtr((unsigned char*)0, 0), 
+    iServiceId(aServiceId), 
+    iObserver(NULL)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentClient::ConstructL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::ConstructL");         
+             
+    User::LeaveIfError(iSession.Connect());
+    iObserver = CIptvVodContentUpdateObserver::NewL(iClientObserver, iSession, iServiceId);
+    TRequestStatus status;
+    SendRequestL(EIptvEngineVodContentServiceId, iServiceId, status);
+
+    if (status.Int() != KErrNone)    
+        {
+        User::Leave(status.Int());
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIptvVodContentClient* CIptvVodContentClient::NewL(TIptvServiceId aServiceId, MIptvVodContentClientObserver& aClientObserver)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::NewL");         
+
+	CIptvVodContentClient* self = new ( ELeave ) CIptvVodContentClient(aServiceId, aClientObserver);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIptvVodContentClient *CIptvVodContentClient::NewLC(TIptvServiceId aServiceId, MIptvVodContentClientObserver& aClientObserver)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::NewLC");         
+
+	CIptvVodContentClient* self = new ( ELeave ) CIptvVodContentClient(aServiceId, aClientObserver);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::~CIptvVodContentClient
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CIptvVodContentClient::~CIptvVodContentClient()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::~CIptvVodContentClient");         
+
+    Cancel();         
+    SendCancelRequest();
+
+    delete iMsg;
+    delete iObserver;   
+    iSession.Close();                    
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::CleanupL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentClient::CleanupL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::CleanupL");
+
+    delete iMsg;
+    iMsg = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetEcgCategoryList
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetEcgCategoryListL(TIptvCategoryId aParentCategoryId, RPointerArray<CIptvVodContentCategoryBriefDetails>& aCategoryList)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL");
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {        
+        SendSizeRequestL(EIptvEngineVodContentGetEcgCategoryListSizeReq, aParentCategoryId, status);        
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {
+            HandleVodContentGetEcgCategoryListSizeReqL();
+            HandleVodContentGetEcgCategoryListDataReqL(aCategoryList);
+            }
+        }
+
+#ifdef _DEBUG
+
+    TInt count = aCategoryList.Count();
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL ----------------------------------------------------");
+    IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Parent id = %d", aParentCategoryId);
+    IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Category count = %d", count);
+
+    for (TInt i = 0; i < count; i++)
+        {
+        TDesC& name = aCategoryList[i]->iName;
+        IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Category name = %S", &name);        
+        IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL Category ID = %d", aCategoryList[i]->iCategoryId);        
+        }
+
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgCategoryListL ----------------------------------------------------");
+
+#endif
+
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetCategoryDetails
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetCategoryDetailsL(TIptvCategoryId aCategoryId, CIptvVodContentCategoryBriefDetails& aCategory)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetCategoryDetailsL");         
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {       
+        SendSizeRequestL(EIptvEngineVodContentGetCategoryDetailsSizeReq, aCategoryId, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();            
+            }
+        else
+            {
+            HandleVodContentGetCategoryDetailsSizeReqL();
+            HandleVodContentGetCategoryDetailsDataReqL(aCategory);
+            }
+        }    
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetParentCategory
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetParentCategoryL(TIptvCategoryId aCategoryId, TIptvCategoryId& aParentId)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetParentCategoryL");         
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {        
+        SendRequestL(EIptvEngineVodContentGetParentCategoryReq, aCategoryId, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {
+            HandleVodContentGetParentCategoryReqL(aParentId);
+            }
+        }    
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetEcgList
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetEcgListL(TIptvCategoryId aCategoryId, TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount, TUint32& aTotalAmount, RPointerArray<CIptvVodContentContentBriefDetails>& aEcgList)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgListL");         
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {        
+        SendSizeRequestL(EIptvEngineVodContentGetEcgListSizeReq, aCategoryId, aFrom, aAmount, aSearchString, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {
+            HandleVodContentGetEcgListSizeReqL();
+            HandleVodContentGetEcgListDataReqL(aTotalAmount, aEcgList);
+            }  
+        }
+
+#ifdef _DEBUG
+
+    TInt count = aEcgList.Count();
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgListL ----------------------------------------------------");
+    IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL Content info for category = %d", aCategoryId);
+    IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL Item count = %d", count);
+
+    for (TInt i = 0; i < count; i++)
+        {
+        TDesC& name = aEcgList[i]->iName;
+        IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL Name = %S", &name);
+        IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL GFID = %d", aEcgList[i]->iFileId->iFileId);                    
+        IPTVLOGSTRING2_LOW_LEVEL("CIptvVodContentClient::GetEcgListL GDID = %d", aEcgList[i]->iFileId->iDrive);                    
+        }
+
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgListL ----------------------------------------------------");
+
+#endif
+
+    return status.Int();  
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetEcgAllList
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetEcgAllListL(TDesC& aSearchString, TUint32 aFrom, TUint32 aAmount, TUint32& aTotalAmount, RPointerArray<CIptvVodContentContentBriefDetails>& aEcgList)
+    {    
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetEcgAllListL");         
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {
+        SendSizeRequestL(EIptvEngineVodContentGetEcgAllListSizeReq, aFrom, aAmount, aSearchString, status);    
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {            
+            HandleVodContentGetEcgAllListSizeReqL();
+            HandleVodContentGetEcgAllListDataReqL(aTotalAmount, aEcgList);
+            }
+        }
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetContentDetails
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetContentDetailsL(TIptvContentId aContentId, CIptvVodContentContentFullDetails& aContentFullDetails)
+    {    
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetContentDetailsL");         
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {                
+        SendSizeRequestL(EIptvEngineVodContentGetContentDetailsSizeReq, aContentId, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {            
+            HandleVodContentGetContentDetailsSizeReqL();
+            HandleVodContentGetContentDetailsDataReqL(aContentFullDetails);
+            }
+        }
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SetIapL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::SetIapL(const TUint32 aIap)
+    {           
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SetIapL");         
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        { 
+        SendSizeRequestL(EIptvEngineVodContentSetIap, aIap, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::UpdateEcg
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::UpdateEcgL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::UpdateEcgL");
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {        
+        SendRequestL(EIptvEngineVodContentUpdateEcg, 0, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::CheckGroupL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::CheckGroupL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::CheckGroupL");
+
+    TRequestStatus status( KErrNone );
+    if ( !IsActive() )
+        {        
+        SendRequestL( EIptvEngineVodContentCheckGroup, 0, status );
+        if ( status.Int() != KErrNone )
+            {
+            CleanupL();
+            }
+        }
+    
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetUpdateTimeL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetUpdateTimeL(TTime& aTime)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetUpdateTimeL");
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {
+        SendUpdateTimeRequestL(status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {
+            HandleVodContentGetUpdateTimeL(aTime);
+            }
+        }
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::GetContentAccessListL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::GetContentAccessListL(TUint32 aContentId, RPointerArray<CIptvMediaContent>& aCAList)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetContentAccessListL");
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {        
+        SendSizeRequestL(EIptvEngineVodContentGetCAListSizeReq, aContentId, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        else
+            {
+            HandleVodContentGetCAListSizeReqL();
+            HandleVodContentGetCAListDataReqL(aCAList);
+            }
+        }   
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SetLastPositionL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::SetLastPositionL(TUint32 aContentId, TUint32 aIndex, TUint32 aPosition)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::GetContentAccessListL");
+
+    TRequestStatus status(KErrNone);
+    if (!IsActive())
+        {        
+        SendLastPositionL(EIptvEngineVodContentSetLastPosition, aContentId, aIndex, aPosition, status);
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    return status.Int();    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SetMpxIdL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::SetMpxIdL( TUint32 aContentId,
+                                                TUint32 aCaIndex,
+                                                TUint32 aMpxId )
+    {
+    TRequestStatus status( KErrServerBusy );
+    if ( !IsActive() )
+        {        
+        SendMpxIdL( EIptvEngineVodContentSetMpxId, aContentId, aCaIndex, aMpxId, status );
+        if ( status.Int() != KErrNone )
+            {
+            CleanupL();
+            }
+        }
+    return status.Int();    
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendLastPositionL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendLastPositionL(TInt aMessage, TUint32 aContentId, TUint32 aIndex, TUint32 aPosition, TRequestStatus& aStatus)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendLastPositionL");
+    
+    delete iMsg;
+    iMsg = NULL;
+    
+    iMsg = HBufC8::NewL(KIptvVodSendLastPositionSize);
+    iMsgPtr.Set(iMsg->Des());
+
+    RDesWriteStream stream;
+    stream.Open(iMsgPtr);
+    CleanupClosePushL( stream );
+    stream.WriteUint32L(aContentId);
+    stream.WriteUint32L(aIndex);
+    stream.WriteUint32L(aPosition);
+    CleanupStack::PopAndDestroy( &stream );
+
+    iSession.SendRequest(aMessage, iMsgPtr, aStatus);
+    User::WaitForRequest(aStatus);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendMpxIdL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendMpxIdL( TInt aMessage,
+                                        TUint32 aContentId,
+                                        TUint32 aCaIndex,
+                                        TUint32 aMpxId,
+                                        TRequestStatus& aStatus )
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendMpxIdL");
+    
+    delete iMsg;
+    iMsg = NULL;
+    
+    iMsg = HBufC8::NewL( KIptvVodSendMpxIdSize );
+    iMsgPtr.Set( iMsg->Des() );
+
+    RDesWriteStream stream;
+    stream.Open( iMsgPtr );
+    CleanupClosePushL( stream );
+    stream.WriteUint32L( aContentId );
+    stream.WriteUint32L( aCaIndex);
+    stream.WriteUint32L( aMpxId );
+    CleanupStack::PopAndDestroy( &stream );
+
+    iSession.SendRequest( aMessage, iMsgPtr, aStatus );
+    User::WaitForRequest( aStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::RunL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::RunL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::RunL");            
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::DoCancel
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::DoCancel()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::DoCancel");            
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetEcgCategoryListSizeReq
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetEcgCategoryListSizeReqL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgCategoryListSizeReqL");            
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 dataSize = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );
+    
+        IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetEcgCategoryListSizeReq:: Data size = %d", dataSize);
+        
+        delete iMsg;
+        iMsg = NULL;
+       
+        iMsg = HBufC8::NewL(dataSize);
+        iMsgPtr.Set(iMsg->Des());
+     
+        TRequestStatus status;
+        iSession.SendRequest(EIptvEngineVodContentGetEcgCategoryListDataReq, iMsgPtr, status);
+        User::WaitForRequest(status);  
+
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }     
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetEcgCategoryListDataReq
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetEcgCategoryListDataReqL(RPointerArray<CIptvVodContentCategoryBriefDetails>& aCategoryList)
+    {    
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgCategoryListDataReqL");            
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 count = stream.ReadUint32L();
+        for (TUint32 i = 0; i < count; i++)
+            {
+            CIptvVodContentCategoryBriefDetails* brief = CIptvVodContentCategoryBriefDetails::NewL();
+            CleanupStack::PushL(brief);
+            brief->InternalizeL(stream);
+            aCategoryList.AppendL(brief);
+            CleanupStack::Pop(brief);            
+            }
+        CleanupStack::PopAndDestroy( &stream );
+        delete iMsg;
+        iMsg = NULL;
+        }                
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvMyVideosClient::SendRequestL
+// -----------------------------------------------------------------------------
+//
+TInt CIptvVodContentClient::SendRequestL(
+    TInt aMessage,
+    CIptvMyVideosGlobalFileId& aFileIdParam,
+    TUint32 aUintParam )
+    {
+    IPTVLOGSTRING_LOW_LEVEL(
+        "My Videos Mgr ## CIptvMyVideosClient::SendRequestL" );
+
+    TUint32 dataSize(
+        aFileIdParam.CountExternalizeSize() + KTUint32SizeInBytes );
+
+    HBufC8* ipcMsg = HBufC8::NewL( dataSize );
+    CleanupStack::PushL( ipcMsg ); // 1->
+            
+    TPtr8 ipcMsgPtr( ipcMsg->Des() );
+    ipcMsgPtr.Zero();
+
+    RDesWriteStream stream;
+    stream.Open( ipcMsgPtr );
+    CleanupClosePushL( stream );
+    aFileIdParam.ExternalizeL( stream );
+    stream.WriteUint32L( aUintParam );
+    CleanupStack::PopAndDestroy( &stream );
+
+    TRequestStatus status;
+    iSession.SendRequest( aMessage, ipcMsgPtr, status );
+    User::WaitForRequest( status);
+
+    CleanupStack::PopAndDestroy( ipcMsg ); // <-1
+
+    return status.Int();
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendRequestL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendRequestL(TInt aMessage, TUint32 aParam, TRequestStatus& aStatus)
+    {    
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendRequestL");
+
+    SendSizeRequestL(aMessage, aParam, aStatus);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendSizeRequest
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendSizeRequestL(TInt aMessage, TUint32 aParam, TRequestStatus& aStatus)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendSizeRequestL");
+    
+    delete iMsg;
+    iMsg = NULL;
+    
+    iMsg = HBufC8::NewL(KIptvSizeRequestSize);
+    iMsgPtr.Set(iMsg->Des());
+
+    RDesWriteStream stream;
+    stream.Open(iMsgPtr);
+    CleanupClosePushL( stream );
+    stream.WriteUint32L(aParam);
+    CleanupStack::PopAndDestroy( &stream );
+
+    iSession.SendRequest(aMessage, iMsgPtr, aStatus);
+    User::WaitForRequest(aStatus);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendSizeRequest
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendSizeRequestL( TInt aMessage,
+                                              TUint32 aUintParam1,
+                                              TUint32 aUintParam2,
+                                              TUint32 aUintParam3,
+                                              const TDesC& aDesCParam,
+                                              TRequestStatus& aStatus )
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendSizeRequestL");
+    
+    delete iMsg;
+    iMsg = NULL;
+        
+    // length (2), TUint32 aUintParam1, TUint32 aUintParam2, TUint32 aUintParam3, TDesC& aDesCParam)
+    TUint32 length = aDesCParam.Length();
+    TUint32 dataSize = 2 + 4 + 4 + 4 + (length * 2);
+    IPTVLOGSTRING2_LOW_LEVEL("SendSizeRequestL:: data size = %d", dataSize);
+    
+    iMsg = HBufC8::NewL(dataSize);
+    iMsgPtr.Set(iMsg->Des());
+
+    RDesWriteStream stream;
+    stream.Open(iMsgPtr);
+    CleanupClosePushL( stream );      
+    stream.WriteUint32L(aUintParam1);
+    stream.WriteUint32L(aUintParam2);
+    stream.WriteUint32L(aUintParam3);
+    CIptvUtil::WriteDesToStreamL(aDesCParam, stream);    
+    CleanupStack::PopAndDestroy( &stream );
+    
+    iSession.SendRequest(aMessage, iMsgPtr, aStatus);
+    User::WaitForRequest(aStatus);            
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendSizeRequest
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendSizeRequestL( TInt aMessage,
+                                              TUint32 aUintParam1,
+                                              TUint32 aUintParam2,
+                                              const TDesC& aDesCParam,
+                                              TRequestStatus& aStatus )
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendSizeRequestL");
+    
+    delete iMsg;
+    iMsg = NULL;
+            
+    // length (2), TUint32 aUintParam1, TUint32 aUintParam2, TDesC& aDesCParam)
+    TUint32 length = aDesCParam.Length();
+    TUint32 dataSize = 2 + 4 + 4 + (length * 2);
+    IPTVLOGSTRING2_LOW_LEVEL("SendSizeRequestL:: data size = %d", dataSize);
+    
+    iMsg = HBufC8::NewL(dataSize);
+    iMsgPtr.Set(iMsg->Des());
+
+    RDesWriteStream stream;
+    stream.Open(iMsgPtr);  
+    CleanupClosePushL( stream );     
+    stream.WriteUint32L(aUintParam1);
+    stream.WriteUint32L(aUintParam2);
+    CIptvUtil::WriteDesToStreamL(aDesCParam, stream);
+    CleanupStack::PopAndDestroy( &stream );
+
+    iSession.SendRequest(aMessage, iMsgPtr, aStatus);
+    User::WaitForRequest(aStatus);           
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetCategoryDetailsSizeReq
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetCategoryDetailsSizeReqL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCategoryDetailsSizeReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );   
+        TUint32 dataSize = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );
+
+        IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetCategoryDetailsSizeReq:: Data size = %d", dataSize);    
+        
+        delete iMsg;
+        iMsg = NULL;
+        
+        iMsg = HBufC8::NewL(dataSize);
+        iMsgPtr.Set(iMsg->Des());                                                  
+     
+        TRequestStatus status;
+        iSession.SendRequest(EIptvEngineVodContentGetCategoryDetailsDataReq, iMsgPtr, status);
+        User::WaitForRequest(status);
+
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetCategoryDetailsDataReq
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetCategoryDetailsDataReqL(CIptvVodContentCategoryBriefDetails& aCategory)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCategoryDetailsDataReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        aCategory.InternalizeL(stream);
+        CleanupStack::PopAndDestroy( &stream );    
+        }   
+       
+    delete iMsg;
+    iMsg = NULL;        
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetParentCategoryReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetParentCategoryReqL(TIptvCategoryId& aParentId)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetParentCategoryReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        aParentId = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );      
+        }   
+       
+    delete iMsg;
+    iMsg = NULL;      
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetEcgListSizeReq
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetEcgListSizeReqL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgListSizeReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 dataSize = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );   
+    
+        IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetEcgListSizeReq:: Data size = %d", dataSize);    
+        
+        delete iMsg;
+        iMsg = NULL;
+        
+        iMsg = HBufC8::NewL(dataSize);
+        iMsgPtr.Set(iMsg->Des());                                                  
+     
+        TRequestStatus status;
+        iSession.SendRequest(EIptvEngineVodContentGetEcgListDataReq, iMsgPtr, status);
+        User::WaitForRequest(status);
+
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetCAListSizeReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetCAListSizeReqL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCAListSizeReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 dataSize = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );   
+    
+        IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetCAListSizeReqL:: Data size = %d", dataSize);    
+        
+        delete iMsg;
+        iMsg = NULL;
+        
+        iMsg = HBufC8::NewL(dataSize);
+        iMsgPtr.Set(iMsg->Des());                                                  
+     
+        TRequestStatus status;        
+        iSession.SendRequest(EIptvEngineVodContentGetCAListDataReq, iMsgPtr, status);
+        User::WaitForRequest(status);
+
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetCAListDataReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetCAListDataReqL(RPointerArray<CIptvMediaContent>& aCAList)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetCAListDataReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 count = stream.ReadUint32L();        
+        for (TUint32 i = 0; i < count; i++)
+            {
+            CIptvMediaContent* content = CIptvMediaContent::NewL();
+            CleanupStack::PushL(content);
+            content->InternalizeL(stream);
+            aCAList.AppendL(content);
+            CleanupStack::Pop(content);            
+            }
+        CleanupStack::PopAndDestroy( &stream );
+        }    
+
+    delete iMsg;
+    iMsg = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetEcgListSizeReq
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetEcgListDataReqL(TUint32& aTotalAmount, RPointerArray<CIptvVodContentContentBriefDetails>& aEcgList)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgListDataReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 count = stream.ReadUint32L();
+        aTotalAmount = stream.ReadUint32L();
+        for (TUint32 i = 0; i < count; i++)
+            {
+            CIptvVodContentContentBriefDetails* brief = CIptvVodContentContentBriefDetails::NewL();
+            CleanupStack::PushL(brief);
+            brief->InternalizeL(stream);
+            aEcgList.AppendL(brief);
+            CleanupStack::Pop(brief);            
+            }
+        CleanupStack::PopAndDestroy( &stream );
+        }    
+
+    delete iMsg;
+    iMsg = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetEcgAllListSizeReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetEcgAllListSizeReqL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgAllListSizeReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 dataSize = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );   
+    
+        IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetEcgAllListSizeReqL:: Data size = %d", dataSize);    
+        
+        delete iMsg;
+        iMsg = NULL;
+        
+        iMsg = HBufC8::NewL(dataSize);
+        iMsgPtr.Set(iMsg->Des());                                                  
+     
+        TRequestStatus status;
+        iSession.SendRequest(EIptvEngineVodContentGetEcgAllListDataReq, iMsgPtr, status);
+        User::WaitForRequest(status);
+
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetEcgAllListDataReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetEcgAllListDataReqL(TUint32& aTotalAmount, RPointerArray<CIptvVodContentContentBriefDetails>& aEcgList)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetEcgAllListDataReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 count = stream.ReadUint32L();
+        aTotalAmount = stream.ReadUint32L();
+        for (TUint32 i = 0; i < count; i++)
+            {
+            CIptvVodContentContentBriefDetails* brief = CIptvVodContentContentBriefDetails::NewL();
+            CleanupStack::PushL(brief);
+            brief->InternalizeL(stream);
+            aEcgList.AppendL(brief);
+            CleanupStack::Pop(brief);            
+            }
+        CleanupStack::PopAndDestroy( &stream );
+        }    
+
+    delete iMsg;
+    iMsg = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetContentDetailsSizeReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetContentDetailsSizeReqL()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetContentDetailsSizeReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 dataSize = stream.ReadUint32L();                       	    
+        CleanupStack::PopAndDestroy( &stream );
+
+        IPTVLOGSTRING2_LOW_LEVEL("HandleVodContentGetContentDetailsSizeReqL:: Data size = %d", dataSize);    
+        
+        delete iMsg;
+        iMsg = NULL;
+        
+        iMsg = HBufC8::NewL(dataSize);
+        iMsgPtr.Set(iMsg->Des());                                                  
+     
+        TRequestStatus status;
+        iSession.SendRequest(EIptvEngineVodContentGetContentDetailsDataReq, iMsgPtr, status);
+        User::WaitForRequest(status);
+
+        if (status.Int() != KErrNone)
+            {
+            CleanupL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetContentDetailsDataReqL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetContentDetailsDataReqL(CIptvVodContentContentFullDetails& aContentFullDetails)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetContentDetailsDataReqL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        aContentFullDetails.InternalizeL(stream);
+        CleanupStack::PopAndDestroy( &stream );  
+        }   
+       
+    delete iMsg;
+    iMsg = NULL;        
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendCancelRequest
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendCancelRequest()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendCancelRequest");
+
+    TRequestStatus status;
+    iSession.SendRequest(EIptvEngineVodContentCancel, status);
+    User::WaitForRequest(status);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendCancelUpdateRequest
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendCancelUpdateRequest()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendCancelUpdateRequest");
+
+    TRequestStatus status;
+    iSession.SendRequest( EIptvEngineVodContentCancelUpdate, status );
+    User::WaitForRequest(status);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::SendUpdateTimeRequestL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendUpdateTimeRequestL(TRequestStatus& aStatus)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendUpdateTimeRequestL");
+
+    delete iMsg;
+    iMsg = NULL;
+    
+    iMsg = HBufC8::NewL(KIptvVodGetUpdateTimeRequestSize);
+    iMsgPtr.Set(iMsg->Des());
+        
+    iSession.SendRequest(EIptvEngineVodGetUpdateTime, iMsgPtr, aStatus);
+    User::WaitForRequest(aStatus);
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::HandleVodContentGetUpdateTimeL
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::HandleVodContentGetUpdateTimeL(TTime& aTime)
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentGetUpdateTimeL");
+
+    if (iMsg)
+        {
+        RDesReadStream stream;
+        stream.Open(iMsgPtr);
+        CleanupClosePushL( stream );
+        TUint32 lower = stream.ReadUint32L();
+        TUint32 upper = stream.ReadUint32L();
+        TInt64 time = 0;
+        time = (TInt64) lower;    
+        TInt64 longUpper = (TInt64) upper;
+        longUpper = longUpper << 32;        
+        longUpper &= (0xFFFFFFFF00000000ULL);    
+        time |= longUpper;
+        aTime = time;  
+        CleanupStack::PopAndDestroy( &stream );       
+        }    
+
+    delete iMsg;
+    iMsg = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::Search
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::Search(
+							TIptvRssSearchQuery& aQuery
+							)
+	{
+	TInt retVal = KErrNotSupported;
+
+	if( !IsActive() )
+		{
+	    TPckgBuf<TIptvRssSearchQuery> pckg( aQuery );
+
+	    TIpcArgs args( &pckg );
+
+	    retVal = iSession.SendRequest( EIptvEngineVodContentRssSearch, args );
+		}
+	else
+		{
+		retVal = KErrNotReady;
+		}
+
+	return retVal;
+	}
+
+// -----------------------------------------------------------------------------
+// CIptvVodContentClient::CancelSearch
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CIptvVodContentClient::CancelSearch()
+	{
+	TInt retVal = KErrNotSupported;
+
+	if( !IsActive() )
+		{
+		TRequestStatus status;
+		iSession.SendRequest( EIptvEngineVodContentRssSearchCancel, status );
+		User::WaitForRequest( status );
+		retVal = KErrNone;
+		}
+
+	return retVal;
+	}
+
+// -----------------------------------------------------------------------------
+// Reset global Id.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CIptvVodContentClient::ResetGlobalId(
+    CIptvMyVideosGlobalFileId& aFileId,
+    TUint32 aServiceId )
+    {
+    if ( !IsActive() )
+        {
+        TRAP_IGNORE( SendRequestL(
+            EIptvEngineVodContentResetGlobalId,
+            aFileId,
+            aServiceId ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Check if update needed 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CIptvVodContentClient::UpdateAvailableL( TBool& aAvailable )
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::UpdateAvailableL");
+
+    TRequestStatus status( KErrNone );
+    if (!IsActive())
+        {
+        SendUpdateCheckRequestL( status );
+        if ( status.Int() != KErrNone )
+            {
+            CleanupL();
+            }
+        else
+            {
+            HandleVodContentUpdateCheckL( aAvailable );
+            }
+        }
+    return status.Int();    
+    }
+
+// -----------------------------------------------------------------------------
+// Cancel ongoing content update
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CIptvVodContentClient::CancelUpdate()
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::CancelUpdate()");
+    Cancel();
+    SendCancelUpdateRequest();
+    }
+
+// -----------------------------------------------------------------------------
+// Send update check request
+// -----------------------------------------------------------------------------
+void CIptvVodContentClient::SendUpdateCheckRequestL( TRequestStatus& aStatus )
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::SendUpdateCheckRequestL");
+
+    delete iMsg;
+    iMsg = NULL;
+
+    iMsg = HBufC8::NewL( KIptvVodUpdateCheckRequestSize );
+    iMsgPtr.Set(iMsg->Des());
+        
+    iSession.SendRequest( EIptvEngineVodContentCheckUpdate, iMsgPtr, aStatus );
+    User::WaitForRequest(aStatus);
+    }
+
+// -----------------------------------------------------------------------------
+// Handle content update check
+// -----------------------------------------------------------------------------
+//
+void CIptvVodContentClient::HandleVodContentUpdateCheckL( TBool& aAvailable )
+    {
+    IPTVLOGSTRING_LOW_LEVEL("CIptvVodContentClient::HandleVodContentUpdateCheckL");
+
+    if ( iMsg )
+        {
+        RDesReadStream stream;
+        stream.Open( iMsgPtr );
+        CleanupClosePushL( stream );
+        TInt32 updateValue = stream.ReadInt32L();
+        TInt32 updateAvailable = (TBool) updateValue;
+        aAvailable = updateAvailable;  
+        CleanupStack::PopAndDestroy( &stream );
+        }    
+
+    delete iMsg;
+    iMsg = NULL;
+    }