--- /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();
+ }
+