telephonyserver/etelpacketdata/cetel/pckt_retrieve.cpp
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserver/etelpacketdata/cetel/pckt_retrieve.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,212 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This file contains all the code for the retrieval classes which retrieve variable length 
+// buffers from the TSY, such as MBMS monitor service list and MBMS sessions. 
+// 
+//
+
+/**
+ @file
+*/
+
+#include "pcktretrieve.h"
+#include <pcktcs.h>
+#include <etelext.h>
+
+//
+//
+// Retrieve a list of MBMS monitored service entries 
+//
+//
+EXPORT_C CRetrievePcktMbmsMonitoredServices* CRetrievePcktMbmsMonitoredServices::NewL(RPacketService& aService)
+/** Creates an instance of the CActive derived CRetrievePcktMbmsMonitoredServices 
+ * class.
+ * @param aService An instance of RPacketService over which the list retrieval class operates.
+ * @return The newly created CRetrievePcktMbmsMonitoredServices class. 
+ * @capability None
+ */
+	{
+	CRetrievePcktMbmsMonitoredServices* self = new(ELeave) CRetrievePcktMbmsMonitoredServices(aService);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+	
+CRetrievePcktMbmsMonitoredServices::CRetrievePcktMbmsMonitoredServices(RPacketService& aService) 
+:	CAsyncRetrieveWithClientIds(aService.SessionHandle().Handle(), aService.SubSessionHandle()),
+	iService(aService)
+/**
+ * Standard constructor; initialises the data members. 
+ */
+	{
+	}
+
+void CRetrievePcktMbmsMonitoredServices::ConstructL()
+/**
+ * Part of 2 phase construction, assigns the IPCs to be used 
+ * in 2 phase retrieval mechanism.
+ */
+	{
+	iIpcPhase1=EPacketGetMbmsMonitoredServicesPhase1;
+	iIpcPhase2=EPacketGetMbmsMonitoredServicesPhase2;
+	iIpcCancel=EPacketGetMbmsMonitoredServicesCancel;
+	}
+
+EXPORT_C CRetrievePcktMbmsMonitoredServices::~CRetrievePcktMbmsMonitoredServices()
+/** 
+ * The destructor frees all resources owned by the object, prior to its destruction.
+ */
+	{
+	Cancel();
+	delete iResults;
+	}
+
+EXPORT_C CPcktMbmsMonitoredServiceList* CRetrievePcktMbmsMonitoredServices::RetrieveListL()
+/** 
+ * Provides the client with a handle to the appropriate 
+ * MBMS service availability list class retrieved. The client will call this function 
+ * once Start() has completed.
+ * The ownership of the list object is transferred to the client and the client 
+ * is responsible for eventual deletion of this object.	 
+ *
+ * @leave KErrNotFound If there is no valid list object to return to the client.
+ * @return A handle to the list class retrieved from the store. If there are no entries in 
+ * the list then a handle to an empty list is returned.
+ * @capability ReadDeviceData
+ */
+	{
+	if (iResults)
+		{
+		// Give ownership of list to caller of this method
+		CPcktMbmsMonitoredServiceList* ptr=iResults;
+		iResults = NULL;
+		return ptr;
+		}
+	else
+		{
+		User::Leave(KErrNotFound);
+		return NULL;
+		}
+	}
+	
+EXPORT_C void CRetrievePcktMbmsMonitoredServices::Start(TRequestStatus& aReqStatus)
+/** Starts the two-phase list retrieval of all entries within the store.
+ * 
+ * @param aReqStatus On completion, the status of the request; KErrNone if successful, 
+ * KErrNotSupported if the phone does not support access to an MBMS service availability list  
+ * and KErrNotFound if the list does not exist. If the list is empty then KErrNone
+ * is returned.
+ * @capability ReadDeviceData
+ */
+	{
+	if (!CompleteIfInUse(aReqStatus))
+		{
+	   	delete iResults;
+		iResults = NULL;
+		CAsyncRetrieveVariableLengthBufferV2::Start(aReqStatus,&iId,&iId);
+		}
+	}
+		
+void CRetrievePcktMbmsMonitoredServices::RestoreListL()
+/**
+ * Restores a list from a buffer that contains the streamed version of the list
+ */
+	{
+	iResults=CPcktMbmsMonitoredServiceList::NewL();
+	iResults->RestoreL(iResultsPtr);
+	FreeBuffer();
+	}
+	
+void CRetrievePcktMbmsMonitoredServices::CancelReq(TInt aIpc1, TInt aIpc2)
+/**
+ *  Cancels previously issued request
+ */
+	{
+	iService.CancelReq(aIpc1, aIpc2);
+	}
+		
+void CRetrievePcktMbmsMonitoredServices::Get(TInt aIpc, TRequestStatus& aReqStatus, TDes8& aDes1, TDes8& aDes2)
+/** 
+ * Sends a request through the sub-session this object was created with.
+ */
+	{
+	iService.Get(aIpc, aReqStatus, aDes1, aDes2);
+	}
+
+CAsyncRetrieveWithClientIds::CAsyncRetrieveWithClientIds(TInt aSessionHandle, TInt aSubSessionHandle)
+	{
+	iId().iSessionHandle = aSessionHandle;
+	iId().iSubSessionHandle = aSubSessionHandle;
+	}
+
+EXPORT_C CRetrievePcktMbmsSessionList* CRetrievePcktMbmsSessionList::NewL(RPacketMbmsContext& aPcktMbmsContext, RPacketMbmsContext::CMbmsSession& aSessionIdList)
+/**
+ * Standard 2 phase constructor.
+ * @param aPcktMbmsContext Reference to an open MBMS packet context object.
+ * @param aSessionIdList On completion this holds the list of MBMS sessions.
+ * @return Pointer instance of the class.
+ */
+	{
+	return new (ELeave)CRetrievePcktMbmsSessionList(aPcktMbmsContext, aSessionIdList);
+	}
+
+EXPORT_C void CRetrievePcktMbmsSessionList::Start(TRequestStatus& aReqStatus)
+/**
+ * Starts the 2 phase retrieval. Assigns the IPCs to be used for the 2-phase retrieval mechanism.
+ * @param aReqStatus On return, KErrNone if successful.
+ * @capability ReadDeviceData
+ */
+	{
+	if (!CompleteIfInUse(aReqStatus))
+		{
+		iIpcPhase1=EPacketGetMbmsSessionListPhase1;
+		iIpcPhase2=EPacketGetMbmsSessionListPhase2;
+		iIpcCancel=EPacketGetMbmsSessionListCancel;
+		CAsyncRetrieveVariableLengthBufferV2::Start(aReqStatus,&iId,&iId); 
+		}
+	}
+void CRetrievePcktMbmsSessionList::Get(TInt aIpc, TRequestStatus& aReqStatus, TDes8& aDes1, TDes8& aDes2)
+/**
+ * Issues requested IPC to the ETEL/TSY
+ */
+	{
+	iPcktMbmsContext.Get(aIpc, aReqStatus, aDes1, aDes2);
+	}
+void CRetrievePcktMbmsSessionList::CancelReq(TInt aIpc1, TInt aIpc2)
+/**
+ * Cancels previously issued request
+ */
+	{
+	iPcktMbmsContext.CancelReq(aIpc1,aIpc2);
+	}
+void CRetrievePcktMbmsSessionList::RestoreListL()
+/**
+ * Overload of base class virtual method; de-serializes data retrieved from TSY to 
+ * provided data structure.
+ */
+	{
+	iSessionIdList.InternalizeL(iResultsPtr);
+	FreeBuffer();
+	}
+CRetrievePcktMbmsSessionList::CRetrievePcktMbmsSessionList(RPacketMbmsContext& aPcktMbmsContext,RPacketMbmsContext::CMbmsSession& aSessionIdList)
+:iPcktMbmsContext(aPcktMbmsContext),iSessionIdList(aSessionIdList)
+/**
+ * Standard constructor; initialises data members and the base class
+ */	
+	{
+	iId().iSessionHandle=iPcktMbmsContext.SessionHandle().Handle();
+	iId().iSubSessionHandle=iPcktMbmsContext.SubSessionHandle();
+	}
+