locationcentre/lcservice/src/lcasyncoperation.cpp
branchRCL_3
changeset 16 4721bd00d3da
parent 14 3a25f69541ff
child 21 e15b7f06eba6
--- a/locationcentre/lcservice/src/lcasyncoperation.cpp	Wed Apr 14 15:50:30 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*
-* Copyright (c) 2007 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:  Handles all the Asynchronous operations with the Location
-*                Centre Client Session
-*
-*/
-
-
-// SYSTEM INCLUDES
-#include <s32mem.h>
-
-// USER INCLUDES
-#include "lcasyncoperation.h"
-#include "lcclientsession.h"
-#include "lcipcparams.h"
-#include "lcsyncoperation.h"
-
-// CONSTANT DEFINTIONS
-const TInt  KLcLengthofInteger  = 4;
-
-// ----- Member functions for TLcAppInfoContainer ----------------------------
-
-CLcAsyncOperation::TLcAppInfoContainer::TLcAppInfoContainer( 
-						CLcLocationAppInfoArray*&    aAppInfoArray )
-	:iAppInfoArray( aAppInfoArray )						
-	{
-	}
-	
-// ----- Member funtions for LcSyncOperation ---------------------------------
-
-// ---------------------------------------------------------------------------
-// CLcAsyncOperation::CLcAsyncOperation
-// ---------------------------------------------------------------------------
-//
-CLcAsyncOperation::CLcAsyncOperation( RLcClientSession&  		aSession,
-    								MLcAsynOperationObserver&	aObserver )
-	:CActive( EPriorityStandard ),
-	iClientSession( aSession ),
-	iObserver( aObserver ),
-	iBufferPtr( NULL, 0 )
-	{
-	CActiveScheduler::Add( this );	
-	}
-
-// ---------------------------------------------------------------------------
-// CLcAsyncOperation::~CLcAsyncOperation
-// ---------------------------------------------------------------------------
-//	
-CLcAsyncOperation::~CLcAsyncOperation()
-	{
-	// Cancel any outstanding request.
-	Cancel();
-	
-	// Delete the filter
-	delete iFilterBuffer;
-	
-	// Delete the Buffer pointer
-	delete iBuffer;
-	
-	// Delete the App Info array container
-	delete iAppInfoArrayContainer;
-	}
-
-// ---------------------------------------------------------------------------
-// CLcAsyncOperation* CLcAsyncOperation::NewL
-// ---------------------------------------------------------------------------
-//
-CLcAsyncOperation* CLcAsyncOperation::NewL( RLcClientSession&  		    aSession,
-    										MLcAsynOperationObserver&	aObserver )
-	{
-	CLcAsyncOperation* self = new ( ELeave ) CLcAsyncOperation( aSession, aObserver );
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CLcAsyncOperation::ConstructL()
-	{
-	// Construct the Buffer structure used for exchanging information with the
-	// Location Centre Server.
-    iBuffer = CBufFlat::NewL( KLcLengthofInteger );
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::GetLocationApplicationsL
-// ---------------------------------------------------------------------------
-//	
-void CLcAsyncOperation::GetLocationApplicationsL(
-                     const TLcLocationAppFilter&        aLocationAppFilter,
-                           CLcLocationAppInfoArray*&    aAppInfoArray )
-	{
-	// Check if there was any request outstanding. Incase, there was any
-	// request then the request will leave with KErrInUse. 
-	if ( IsActive())
-		{
-		User::Leave( KErrInUse );
-		}
-	// Copy the Filter parameters to the Filter member variable.
-	iAppFilter = aLocationAppFilter;
-	
-	iFilterBuffer = new ( ELeave ) TPckg< TLcLocationAppFilter >( iAppFilter );
-	
-	// Hold the Array pointer
-	iAppInfoArrayContainer = new ( ELeave )TLcAppInfoContainer( aAppInfoArray );
-	
-	// Set the Operation to the Initial state and issue a new request.
-	GetLengthL();				
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::CancelGetLocationApplications
-// ---------------------------------------------------------------------------
-//
-void CLcAsyncOperation::CancelGetLocationApplications()
-	{
-	Cancel();
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::ReIssueRequestL
-// ---------------------------------------------------------------------------
-//	
-void CLcAsyncOperation::ReIssueRequestL()
-	{	
-	// Check if there are any operation outstanding. This request will be valid
-	// only when there are no requests outstanding.
-	if ( ELcNoOperation != iOperation )
-		{	
-		// Rest the State to the initial state and Issue a new request
-		GetLengthL();
-		}			
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::GetLengthL
-// ---------------------------------------------------------------------------
-//
-void CLcAsyncOperation::GetLengthL()
-	{
-	if ( !IsActive())
-		{
-		
-		// Set the size of this buffer to 4. This is required because we dont
-	    // actually fill this buffer but expect the server to fill it. In that case
-	    // if we dont set the expected length, the server would fail with
-	    // KrrBadDescriptor.
-	    iBuffer->ResizeL( KLcLengthofInteger );
-	    
-	    // Fill the IPC argument structure with the Length buffer, the server
-	    // will write the data onto this buffer.
-	    
-	    // By the IPC exchange parameter defintion, this must be the first
-	    // argument to the IPC message.
-	    iIpcArgs.Set( 0, iFilterBuffer );
-	    
-	    // Set the buffer pointer to the start of the Length buffer
-	    iBufferPtr.Set( const_cast< TUint8 *>( iBuffer->Ptr( 0 ).Ptr()),
-	                    KLcLengthofInteger,
-	                    KLcLengthofInteger );
-	    
-	    // This will be the second argument passed to this IPC message.
-	    iIpcArgs.Set( 1, &iBufferPtr);
-	    
-	    // Send an asynchronous message to the server to obtain the length. On return the
-	    // server is expected to pack the length of the Application information
-	    // arrays in the LengthBuffer pointer.
-	    iClientSession.SendReceive( ELcFilteredAppsBufferLength, 
-	    							iIpcArgs,
-	    							iStatus );
-		iOperation = ELcGetAppLength;
-		SetActive();
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::RunL
-// ---------------------------------------------------------------------------
-//	
-void CLcAsyncOperation::RunL()
-	{
-	if( !iStatus.Int())
-		{
-		switch ( iOperation )
-			{
-			case ELcGetAppLength:
-				{
-				// The Server has passed the Length of the buffer that is needed to pack
-				// the Location Applications.
-				
-			    // If the server has not set the buffer then leave with KErrNotFound
-			    if ( !iBufferPtr.Length())
-			        {
-			        User::Leave( KErrNotFound );
-			        }
-			    
-			    // Obtain the length from the Length buffer;
-			    RBufReadStream  readStream( *iBuffer, 0 );
-			    CleanupClosePushL( readStream );
-			    TUint length = readStream.ReadInt32L();
-			    CleanupStack::PopAndDestroy();   // readStream
-			    
-				// If the server has returned a length of 0, then there are no applications
-				// registered with Location Centre.
-				if ( !length )
-				    {
-				    User::Leave( KErrNotFound );
-				    }
-				    
-			    // Set the actual size to 'length' obtained in the previous IPC. This is required
-			    // because we dont actually fill this buffer but expect the server to fill it.
-			    // In that case if we dont set the expected length, the server would fail with
-			    // KrrBadDescriptor.
-			    iBuffer->ResizeL( length );
-			    
-			    // Fill the IPC argument structure with the Application info buffer, the server
-			    // will write the data onto this buffer.
-			    TIpcArgs    args;
-			    	    
-			    // Pass the filter parameters to the Location Centre Server
-			    // By the IPC exchange parameter defintion, this must be the first
-			    // argument to the IPC message.
-			    args.Set( 0, iFilterBuffer );
-			    
-			    // Set the buffer pointer to the start of the Length buffer
-			    iBufferPtr.Set( const_cast< TUint8 *>( iBuffer->Ptr( 0 ).Ptr()),
-			                    length,
-			                    length );
-			    
-			    // This will be the second argument passed to this IPC message.
-			    args.Set( 1, &iBufferPtr);
-			    
-			    // Send an Asynchrnous message to the server to obtain the array of Applications. 
-			    iClientSession.SendReceive( ELcFilteredApps, 
-			    					        args,
-			    					  		iStatus );
-				
-				iOperation = ELcGetApp;
-				SetActive();    
-				    				
-				break;
-				}
-			case ELcGetApp:
-				{
-				// The server has successfully returned the Location based Applications
-				
-			    // If the server has not set the buffer then leave with KErrNotFound
-			    if ( !iBufferPtr.Length())
-			        {
-			        User::Leave( KErrNotFound );
-			        }
-			        				
-			    // Parse the Application information array to obtain the array
-			    RBufReadStream  appReadStream( *iBuffer, 0 );
-			    CleanupClosePushL( appReadStream );
-			    
-			    iAppInfoArrayContainer->iAppInfoArray = 
-			    			LcSyncOperation::ParseLocAppBufferL( appReadStream );
-			    
-			    // The App Info array container has been used. We can now free the
-			    // memory for the same.
-			    delete iAppInfoArrayContainer;
-			    iAppInfoArrayContainer = NULL;
-			    
-			    CleanupStack::PopAndDestroy();   // appReadStream
-
-				// The request has been successfully processed.
-				iObserver.OperationComplete( KErrNone );
-				
-				break;
-				}				
-			default:
-				{
-				// This condition should never occur
-				break;
-				}
-			}
-		}
-	else
-		{
-		// If the Retrieval function completes with KErrOverflow then there has been
-		// an update to the registry since the time we obtained the length. We need 
-		// to re-issue the request to obtain the Length from the application		
-		if( iOperation == ELcGetApp && KErrOverflow == iStatus.Int())
-			{
-			ReIssueRequestL();
-			}
-		else
-			{
-			// All other condtions terminate
-			
-			// There is nothing to be done to the App Info buffer. Delete it	
-			delete iAppInfoArrayContainer;
-			iAppInfoArrayContainer = NULL;
-				    		
-			// There is an error from the Server side. Hence, complete the request
-			// to the Client Side.
-			iObserver.OperationComplete( iStatus.Int());			
-			}			
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcAsyncOperation::DoCancel
-// ---------------------------------------------------------------------------
-//	
-void CLcAsyncOperation::DoCancel()
-	{
-    iClientSession.SendReceive( ELcCancelFilteredApps );
-    
-    // Clear the App Info array container
-	delete iAppInfoArrayContainer;
-	iAppInfoArrayContainer = NULL;    
-	}
-
-// ---------------------------------------------------------------------------
-// TInt CLcAsyncOperation::RunError
-// ---------------------------------------------------------------------------
-// 
-TInt CLcAsyncOperation::RunError( TInt aError )
-	{
-    // Clear the App Info array container
-	delete iAppInfoArrayContainer;
-	iAppInfoArrayContainer = NULL;
-	
-	// The RunL has left with an Error, Notify the Client of the same
-	iObserver.OperationComplete( aError );
-	return KErrNone;
-	}
-    	                                                                                                            
-// End of File