sapi_mediamanagement/tsrc/dev/tmediamgmtprovidertest/src/mediamgmtblocks.cpp
changeset 0 14df0fbfcc4e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sapi_mediamanagement/tsrc/dev/tmediamgmtprovidertest/src/mediamgmtblocks.cpp	Mon Mar 30 12:51:10 2009 +0300
@@ -0,0 +1,812 @@
+/*
+* Copyright (c) 2002 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:   ?Description
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <LiwServiceHandler.h>
+#include "mediamgmt.h"
+
+using namespace LIW;
+
+_LIT8(KGetList,"GetList");
+
+//Just for comparison with cfg file
+_LIT8(KNull8,"NULL");
+_LIT(KNull,"NULL");
+
+
+//Input Keys/arguments
+_LIT8(KDsName,"Type");// used by interface class
+_LIT8(KFileType,"FileType");
+_LIT8(KKey,"Key");
+_LIT8(KStartRange,"StartRange");
+_LIT8(KEndRange,"EndRange");
+_LIT8(KOrder,"Order");
+
+
+// Filter Map
+_LIT8(KFilter,"Filter");
+
+// Sorting Map
+_LIT8(KSort,"Sort");
+
+//Output Keys/arguments
+_LIT8(KErrorCode,"ErrorCode");
+_LIT8(KResponse,"ReturnValue");
+
+
+
+
+
+_LIT8(KService, "Service.MediaManagement");
+_LIT8(KIDataSource,"IDataSource");
+_LIT8(KTransactionID,"TransactionID");
+
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CMediaMgmt::Delete()
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CMediaMgmt::RunMethodL(
+    CStifItemParser& aItem )
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function.
+        ENTRY( "InterfaceClass", CMediaMgmt::InterfaceClassL ),
+
+        };
+
+    const TInt count = sizeof( KFunctions ) /
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CMediaMgmt::ExampleL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMediaMgmt::InterfaceClassL( CStifItemParser& aItem )
+    {
+    _LIT( KExample, "In InterfaceClass" );
+    iLog->Log( KExample );
+
+    struct ParamPass* arg1 = new ParamPass();
+    arg1->it = &aItem;
+	TRequestStatus Status = KRequestPending  ;
+	RThread FunctionThread ;
+
+    //creating the thread , this thread is reponsible for sending the request to SAPI
+    TInt ret = FunctionThread.Create( _L("FunctionThread1"), ThreadFunction ,KDefaultStackSize ,
+    						NULL ,( TAny * ) arg1);
+
+    User::LeaveIfError(ret);
+    FunctionThread.Logon(Status);
+    FunctionThread.Resume() ;
+
+    // Waiting for thread to die in other words we are making asynch call to synch call :-))
+    User :: WaitForRequest (Status)	;
+
+    FunctionThread.Close();
+
+    delete arg1;
+	return Status.Int() ;
+
+    }
+
+// -----------------------------------------------------------------------------
+// Callback:: HandleNotifyL
+// Call Back Function Called by the Media Management SAPI.
+// -----------------------------------------------------------------------------
+//
+
+
+
+TInt Callback:: HandleNotifyL(TInt /*aCmdId*/,TInt aEventId,CLiwGenericParamList& aOutParamList,const CLiwGenericParamList& /*aInParamList*/)
+{
+
+	if ( KLiwEventStarted == aEventId )
+	{
+	    arg->log->Log(_L(" Started Event Capture "));
+		// Asynchronous request started
+	}
+	else if ( KLiwEventCanceled == aEventId )
+	{
+		// Asynchronous event canceled
+		arg->log->Log(_L("Cancel Event Capture "));
+		User::Exit( KErrNone );
+	}
+	else if( KLiwEventError == aEventId)
+	{
+	    // Error occurs in Asynchronous operation
+	    arg->log->Log(_L(" Error Event Capture "));
+	    User::Exit( KErrGeneral );
+	}
+	else
+	{
+
+
+	TInt32 ErrCode = KErrNone;
+	CLiwIterable* iIterable;
+	TLiwVariant Map;
+	const CLiwMap* MetaData;
+	TInt pos = 0;
+
+	// Traiverse the List and Fill in the Log Files
+	const TLiwGenericParam* p = aOutParamList.FindFirst(pos, KErrorCode); // Finding Error Code
+	if( p )
+	{
+		ErrCode = p->Value().AsTInt32();
+
+	}
+	else
+	{
+		arg->log->Log(_L(" Not able to Find the Error Code "));
+		CActiveScheduler :: Stop() ;
+		User::Exit( KErrGeneral );
+	}
+
+	if(ErrCode < 0 ) // If any error comes in MG SAPI
+	{
+		arg->log->Log(_L(" Error Occured in SAPI = %d"),ErrCode);
+		CActiveScheduler :: Stop() ;
+		User::Exit( KErrGeneral );
+	}
+
+	p = aOutParamList.FindFirst(pos, KResponse);// Finding out the response of Media Management
+	if(!p)
+	{
+		arg->log->Log(_L(" Not able to Find the Response "));
+		CActiveScheduler :: Stop() ;
+		User::Exit( KErrGeneral );
+	}
+	else
+	{
+		iIterable = p->Value().AsIterable();// returning Iterator as Response
+		TBuf8<30> Key;// Key In The Map
+		TPtrC KeyValue;// value of that key
+		TLiwVariant val;//just for extracting the value
+
+		//-----------Loop for Iterator -------------------------------//
+		TBuf<200> Output;
+		int count =0;
+		while(iIterable->NextL(Map))// Find the next value from Iterator
+		{
+			count++;
+			Output.Copy(_L("\n\nFile\n"));
+			arg->log->Log(Output);
+
+			MetaData = Map.AsMap();// Iterator return the map which contains meta data
+			Output.Copy(_L("key"));
+			Output.Append(_L("							"));
+			Output.Append(_L("KeyValue"));
+			arg->log->Log(Output);
+
+			for(TInt i = 0 ; i <MetaData->Count(); i++ )
+			{
+
+				MetaData->AtL(i,Key);
+				MetaData->FindL(Key, val);
+				Key.Trim();
+				Output.Copy(Key);
+				Output.Append(_L("            "));
+				if(EVariantTypeTInt32==val.TypeId())
+				{
+					TInt value = val.AsTInt32();
+					TBuf<30> string;
+					string.AppendNum(value);
+					string.Trim();
+					Output.Append(string);
+				}
+				else if(EVariantTypeTTime==val.TypeId())
+				{
+					TTime time = val.AsTTime();
+					_LIT(KTimeFormat,"%F%M/%D/%Y %H:%T");
+					TBuf <20> StringTime;
+					time.FormatL(StringTime, KTimeFormat);
+					StringTime.Trim();
+					Output.Append(StringTime);
+                    // date format : 5/25/2005 12:40"
+				}
+				else
+				{
+					val.Get(KeyValue);
+				//	KeyValue.Trim();
+				Output.Append(KeyValue);
+				}
+				arg->log->Log(Output); // printing Key Values in log files
+
+			}
+		Map.Reset();
+		}
+	}
+	//------Loop for Iterator-----------------------------------------//
+	CActiveScheduler :: Stop() ;
+
+	}
+	return 0;
+}
+
+// -----------------------------------------------------------------------------
+// Thread Function For Sending the Asynch request to Media Management SAPI
+// -----------------------------------------------------------------------------
+//
+
+TInt ThreadFunction (TAny *a)
+{
+	// Creating the Cleanup stack for this new thread
+	 CTrapCleanup* cleanup = CTrapCleanup::New();
+	 struct ParamPass* arg1 = (ParamPass*) a;
+	 TInt errorCode = 0;
+	 TInt error = KErrNone;
+	 TInt expectedResult;
+
+	 TRAP(error, errorCode = GetFilesAsynchL(a));
+	 delete cleanup;
+	 if( arg1->it->GetNextInt(expectedResult) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Sorting Order ")) ;
+        return KErrGeneral;
+        }
+	 if(error == KErrNone)
+	 {
+	 	if(errorCode>0)
+	 	{
+	 	  arg1->log->Log(_L(" Error in input "));
+	 	  TBuf<30> string;
+		  string.AppendNum(errorCode);
+		  arg1->log->Log(string);
+		  delete arg1->log;
+		  if( expectedResult != 0)//negative test case
+    	  {
+    	    return KErrNone;
+          }
+		  return KErrGeneral;
+
+	 	}
+	 	else
+	 	{
+	 	   return  KErrNone;
+	 	}
+
+	 }
+
+	 return KErrGeneral;
+}
+
+
+
+
+TInt GetFilesAsynchL( TAny *a)
+{
+    TPtrC cfgCommand16;
+    TPtrC cfgDataSourceName;
+	TPtrC FileType16;
+	TPtrC FilterField16;
+	TPtrC StartVal;
+	TPtrC EndVal;
+	TPtrC SortField16;
+	TPtrC order;
+	TInt expectedResult = 0;
+	TInt operation = 0;
+
+	struct ParamPass *arg1 = (ParamPass *)a;
+
+	arg1->log = CStifLogger::NewL( KMediaMgmtLogPath,
+                          KResultFile,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          ETrue,
+                          EFalse);
+
+
+
+    // Get All the Values From CFG file
+    if( arg1->it->GetNextString ( cfgCommand16 ) != KErrNone )
+        {
+        arg1->log->Log(_L(" Failed to Get the File Type ") );
+        return KErrGeneral;
+        }
+
+    if( arg1->it->GetNextString ( cfgDataSourceName ) != KErrNone )
+        {
+        arg1->log->Log(_L(" Failed to Get the File Type ") );
+        return KErrGeneral;
+        }
+
+    if( arg1->it->GetNextString ( FileType16 ) != KErrNone )
+        {
+        arg1->log->Log(_L(" Failed to Get the File Type ") );
+        return KErrGeneral;
+        }
+	if( arg1->it->GetNextString ( FilterField16 ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Filter Field of File ")) ;
+        return KErrGeneral;
+        }
+    if( arg1->it->GetNextString ( StartVal ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the start value of Filter ")) ;
+        return KErrGeneral;
+        }
+	if( arg1->it->GetNextString ( EndVal ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the End Value of Filter ")) ;
+        return KErrGeneral;
+        }
+    if( arg1->it->GetNextString ( SortField16 ) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Sort Filed  ")) ;
+        return KErrGeneral;
+        }
+
+	if( arg1->it->GetNextString(order) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Sorting Order ")) ;
+        return KErrGeneral;
+        }
+
+    if( arg1->it->GetNextInt(operation) != KErrNone )
+        {
+        arg1->log->Log(_L("Failed to Get the Sorting Order ")) ;
+        return KErrGeneral;
+        }
+
+        // the below section for giving header to log files
+
+     	TBuf<200> TestCase;
+
+     	TestCase.Copy(_L("FileType "));
+     	TestCase.Append(_L("   "));
+
+       	TestCase.Append(_L("FilterField"));
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(_L("StartVal"));
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(_L("EndVal"));
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(_L("SortField"));
+     	TestCase.Append(_L("   "));
+
+
+       	TestCase.Append(_L("order"));
+     	TestCase.Append(_L("   "));
+
+
+
+     	arg1->log->Log(TestCase);
+
+     	TestCase.Copy(FileType16);
+     	TestCase.Append(_L("   "));
+
+       	TestCase.Append(FilterField16);
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(StartVal);
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(EndVal);
+     	TestCase.Append(_L("   "));
+
+
+     	TestCase.Append(SortField16);
+     	TestCase.Append(_L("   "));
+
+
+       	TestCase.Append(order);
+     	TestCase.Append(_L("   "));
+
+     	arg1->log->Log(TestCase);
+
+
+         // Convert 16 Bit values into 8 bit as SAPI accept 8 bit key
+        TBuf8<30> Command ;
+        Command.Copy(cfgCommand16);
+
+        TBuf8<30> FileType ;
+        //FileType.Copy(FileType16);
+
+        TBuf8<30> FilterField ;
+        //FilterField.Copy(FilterField16);
+
+        TBuf8<30> SortField ;
+        //SortField.Copy(SortField16);
+
+        TBuf8<30> Order ;
+        //Order.Copy(order);
+
+	CLiwGenericParamList* input = CLiwGenericParamList::NewL();
+	CleanupStack::PushL(input);
+    	// Start Scheduler
+	CActiveScheduler *Scheduler = new (ELeave) CActiveScheduler ;
+	CActiveScheduler :: Install(Scheduler) ;
+	CleanupStack::PushL(Scheduler);
+
+    CLiwServiceHandler* iServiceHandler = CLiwServiceHandler::NewL();
+    CleanupStack::PushL(iServiceHandler);
+
+    CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL(1,KIDataSource,KService);
+    crit->SetServiceClass(TUid::Uid(KLiwClassBase));
+    CleanupStack::PushL(crit);
+
+
+    RCriteriaArray critArray;
+    critArray.AppendL(crit);
+    CleanupClosePushL(critArray);
+
+    iServiceHandler->AttachL(critArray);
+
+    //Create the object of callback
+	MLiwNotifyCallback*  aCallBack = new (ELeave) Callback(arg1);
+	CleanupStack::PushL(aCallBack);
+
+
+
+    CLiwGenericParamList* output = CLiwGenericParamList::NewL();
+	CleanupStack::PushL(output);
+	
+
+    iServiceHandler->ExecuteServiceCmdL(*crit, *input, *output);
+
+
+    // Create the Instance of SAPI class and the Input Param and output Param
+    TInt pos = 0;
+    MLiwInterface* Interface = NULL;
+    output->FindFirst(pos,KIDataSource );
+    if(pos != KErrNotFound)
+        {
+        Interface = (*output)[pos].Value().AsInterface();
+        }
+    output->Reset();
+
+    input->Reset();
+
+    //MLiwInterface* Interface = CMgDataSourceInterface::NewL();
+    CleanupClosePushL(*Interface);
+
+	if( 0 != cfgDataSourceName.CompareF(KNull) )
+	{
+	TLiwVariant dsName;
+	dsName.Set(cfgDataSourceName);
+    TLiwGenericParam dsNameParam(KDsName, dsName);
+	input->AppendL(dsNameParam);
+	}
+	CLiwDefaultMap *filterMap = CLiwDefaultMap::NewL();
+	TLiwGenericParam iFilterParam(KFilter, TLiwVariant(filterMap));
+	input->AppendL(iFilterParam);
+	filterMap->DecRef();
+
+    CLiwDefaultMap *sortingMap = CLiwDefaultMap::NewL();
+    TLiwGenericParam iSortingParam(KSort, TLiwVariant(sortingMap));
+	input->AppendL(iSortingParam);
+	sortingMap->DecRef();
+
+
+
+
+
+	//Inserting data source name
+
+//------Send all this thing in Filter Map -------------------------------//
+
+
+
+	if( 0 != FileType16.CompareF( KNull ) )
+	{
+	    TLiwVariant ifileType;
+	    //ifileType.Set(FileType);
+	    ifileType.Set(FileType16);
+	    filterMap->InsertL(KFileType,ifileType);
+	}
+
+	if( 0 != FilterField16.CompareF( KNull ) )
+	{
+	    TLiwVariant iFilterField;
+	    //iFilterField.Set(FilterField);
+	    iFilterField.Set(FilterField16);
+	    filterMap->InsertL(KKey,iFilterField);
+	}
+
+	if( 0 != StartVal.CompareF( KNull ) )
+	{
+	   	TLiwVariant iStartVal;
+	    iStartVal.Set(StartVal);
+	    filterMap->InsertL(KStartRange,iStartVal);
+	}
+
+	if( 0 != EndVal.CompareF( KNull ) )
+	{
+	   	TLiwVariant iEndVal;
+	    iEndVal.Set(EndVal);
+	    filterMap->InsertL(KEndRange,iEndVal);
+	}
+
+
+
+
+
+
+
+//------------------Send all the below in sorting map----------------------------------------------------------//
+
+	if( 0 != SortField16.CompareF( KNull ) )
+	{
+	    TLiwVariant iSortField;
+	    //iSortField.Set(SortField);
+	    iSortField.Set(SortField16);
+	    sortingMap->InsertL(KKey,iSortField);
+	}
+
+	if( 0 != order.CompareF( KNull ) )
+	{
+	    TLiwVariant iOrder;
+	    //iOrder.Set(Order);
+	    iOrder.Set(order);
+	    sortingMap->InsertL(KOrder,iOrder);
+	}
+
+
+
+const TLiwGenericParam* p= NULL;
+
+//---------------------------------------------------------------------------------//
+
+	if( operation == 0)
+	{
+	        // normal asynch operation
+	        if( Interface != NULL)
+	    	Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+
+	}
+	else if(operation == 1)
+	{
+	        //cancel
+	        Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+	        pos = 0;
+            p = output->FindFirst(pos, KTransactionID); // Finding Error Code
+            input->Reset();
+            TUint transactionID = 0;
+	        if( p )
+	        {
+		    p->Value().Get(transactionID);
+		    input->AppendL( TLiwGenericParam( KTransactionID, TLiwVariant( transactionID ) ) );
+            }
+	    	Interface->ExecuteCmdL(_L8("Cancel"),*input,*output,KLiwOptCancel,aCallBack);
+
+    }
+	else if( operation == 3)
+	{
+	        // check back to back request
+	    	Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+            Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+            Interface->ExecuteCmdL(Command,*input,*output,KLiwOptCancel,aCallBack);
+	}
+		else if(operation == 4)
+	{
+	        Interface->Close();
+	        CleanupStack::Pop();
+	        CleanupStack::PopAndDestroy(7);
+            return KErrNone;
+	}
+	else if(operation == 5) // Stress testing: Calling getlist n number of times
+	{
+	TInt no_of_times;
+	TInt retcode = KErrNone;
+	arg1->it->GetNextInt(no_of_times);
+	for (int i=0;i<no_of_times;i++)	
+	{
+			
+		        if( Interface != NULL)
+		        output->Reset();
+	        	Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+				_LIT8(KErrorCode,"ErrorCode");
+			    pos = 0;
+			    TInt retcode;        
+	            p = output->FindFirst(pos, KErrorCode); // Finding Error Code
+	            
+	            TUint transactionID = 0;
+		        if(p)
+			    {
+			    	retcode = p->Value().AsTInt32();
+
+			    	if(retcode != KErrNone)
+			    	{
+
+			    	CleanupStack::PopAndDestroy(); //.sorting Map,filterMap,Interface,input, output, Scheduler,aCallBack
+			    	CleanupStack::PopAndDestroy();
+			    	CleanupStack::PopAndDestroy();
+			    	CleanupStack::PopAndDestroy();
+			    	CleanupStack::PopAndDestroy();
+			    	CleanupStack::PopAndDestroy();
+			    	CleanupStack::PopAndDestroy();
+			    	CleanupStack::PopAndDestroy();
+			    	return retcode;
+			    	}
+			    	else
+			    		{
+			    		CActiveScheduler :: Start() ;
+			    		}
+			    }
+				else
+					{
+					CleanupStack::PopAndDestroy(input); 
+    				return KErrGeneral ;
+					}
+	    
+	    }
+	CleanupStack::PopAndDestroy(8); 
+	return KErrNone;
+	    
+	}
+	
+	else if(operation == 6) // Loading twice
+	{
+		// normal asynch operation
+	        if( Interface != NULL)
+	    	Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+	        _LIT8(KErrorCode,"ErrorCode");
+		    pos = 0;
+		    TInt retcode = KErrNone;
+		    p = output->FindFirst(pos, KErrorCode); // Finding Error Code
+
+
+		    if(p)
+		    {
+		    	retcode = p->Value().AsTInt32();
+
+		    	if(retcode != KErrNone)
+		    	{
+
+		    	CleanupStack::PopAndDestroy(); //.sorting Map,filterMap,Interface,input, output, Scheduler,aCallBack
+		    	CleanupStack::PopAndDestroy();
+		    	CleanupStack::PopAndDestroy();
+		    	CleanupStack::PopAndDestroy();
+		    	CleanupStack::PopAndDestroy();
+		    	CleanupStack::PopAndDestroy();
+		    	CleanupStack::PopAndDestroy();
+		    	CleanupStack::PopAndDestroy();
+		    	return retcode;
+		    	}
+		    }
+
+		    CActiveScheduler :: Start() ;
+		    CleanupStack::PopAndDestroy(7); //Interface ,input, output, coreobj, Scheduler,aCallBack
+		    
+		    
+		    CActiveScheduler *Scheduler = new (ELeave) CActiveScheduler ;
+			CActiveScheduler :: Install(Scheduler) ;
+			CleanupStack::PushL(Scheduler);
+
+		    CLiwServiceHandler* iServiceHandler = CLiwServiceHandler::NewL();
+		    CleanupStack::PushL(iServiceHandler);
+
+		    CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL(1,KIDataSource,KService);
+		    crit->SetServiceClass(TUid::Uid(KLiwClassBase));
+		    CleanupStack::PushL(crit);
+
+
+		    RCriteriaArray critArray;
+		    critArray.AppendL(crit);
+		    CleanupClosePushL(critArray);
+
+		    iServiceHandler->AttachL(critArray);
+
+		    //Create the object of callback
+			MLiwNotifyCallback*  aCallBack = new (ELeave) Callback(arg1);
+			CleanupStack::PushL(aCallBack);
+
+
+
+		    CLiwGenericParamList* output = CLiwGenericParamList::NewL();
+			CleanupStack::PushL(output);
+		
+
+		    iServiceHandler->ExecuteServiceCmdL(*crit, *input, *output);
+
+
+		    // Create the Instance of SAPI class and the Input Param and output Param
+		    TInt pos = 0;
+		    MLiwInterface* Interface = NULL;
+		    output->FindFirst(pos,KIDataSource );
+		    if(pos != KErrNotFound)
+		        {
+		        Interface = (*output)[pos].Value().AsInterface();
+		        }
+		    output->Reset();
+		    CleanupClosePushL(*Interface);
+		    // normal asynch operation
+	        if( Interface != NULL)
+	    	Interface->ExecuteCmdL(Command,*input,*output,KLiwOptASyncronous,aCallBack);
+
+		    
+			
+	}
+	else
+	{
+	        // synchronous
+	    	Interface->ExecuteCmdL(Command,*input,*output,0,aCallBack);
+	}
+
+    _LIT8(KErrorCode,"ErrorCode");
+    pos = 0;
+    TInt retcode = KErrNone;
+    p = output->FindFirst(pos, KErrorCode); // Finding Error Code
+
+
+    if(p)
+    {
+    	retcode = p->Value().AsTInt32();
+
+    	if(retcode != KErrNone)
+    	{
+
+    	CleanupStack::PopAndDestroy(); //.sorting Map,filterMap,Interface,input, output, Scheduler,aCallBack
+    	CleanupStack::PopAndDestroy();
+    	CleanupStack::PopAndDestroy();
+    	CleanupStack::PopAndDestroy();
+    	CleanupStack::PopAndDestroy();
+    	CleanupStack::PopAndDestroy();
+    	CleanupStack::PopAndDestroy();
+    	CleanupStack::PopAndDestroy();
+    	return retcode;
+    	}
+    }
+
+    CActiveScheduler :: Start() ;
+    CleanupStack::PopAndDestroy(8); //Interface ,input, output, coreobj, Scheduler,aCallBack
+    return retcode ;
+}
+