metadataengine/client/src/mdeenginesession.cpp
changeset 0 c53acadfccc6
child 3 b73a2e62868f
equal deleted inserted replaced
-1:000000000000 0:c53acadfccc6
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This is Metadata engine client session file
       
    15 *
       
    16 */
       
    17 
       
    18 #include <e32std.h>
       
    19 #include <f32file.h>
       
    20 
       
    21 // INCLUDE FILES
       
    22 #include "mdeenginesession.h"
       
    23 #include "mdcserializationbuffer.h"
       
    24 #include "mdequerycriteriaserialization.h"
       
    25 #include "mdesessionimpl.h"
       
    26 #include "mdsutils.h"
       
    27 
       
    28 RMdEEngineSession::RMdEEngineSession(CMdESessionImpl& aSession) 
       
    29 	: RSessionBase(), iSession( aSession )
       
    30     {
       
    31    	iIsSessionOpen = EFalse;
       
    32    	iIsSessionProcessOpen = EFalse;
       
    33     }
       
    34 
       
    35 void RMdEEngineSession::OpenL(TRequestStatus& aStatus)
       
    36     {
       
    37     TFindServer findMdEServer( KMdSServerName );
       
    38     TFullName name;
       
    39 
       
    40     const TInt result = findMdEServer.Next( name );
       
    41     if( result == KErrNone )
       
    42         {
       
    43         // Server already running
       
    44 		iIsSessionProcessOpen = ETrue;
       
    45 
       
    46 		TRequestStatus* status = &aStatus;
       
    47         User::RequestComplete( status, KErrNone );
       
    48 
       
    49         return;
       
    50         }
       
    51 
       
    52     User::LeaveIfError( iServerProcess.Create( KMdSServerFilename, 
       
    53     		KNullDesC ) );
       
    54 
       
    55 	iIsSessionProcessOpen = ETrue;
       
    56 
       
    57     iServerProcess.Rendezvous( aStatus );
       
    58 
       
    59     if( aStatus != KRequestPending )
       
    60     	{
       
    61         iServerProcess.Kill( 0 );   // abort startup
       
    62     	}
       
    63     else
       
    64     	{
       
    65         iServerProcess.Resume();    // logon OK - start the server   
       
    66     	}
       
    67     }
       
    68 
       
    69 void RMdEEngineSession::OpenCancel(TRequestStatus& aStatus)
       
    70 	{
       
    71 	if( iIsSessionProcessOpen )
       
    72 		{		
       
    73 		iServerProcess.RendezvousCancel( aStatus );
       
    74 
       
    75 		iServerProcess.Close();
       
    76 	
       
    77 		iIsSessionProcessOpen = EFalse;
       
    78 		}
       
    79 	}
       
    80 
       
    81 void RMdEEngineSession::ConnectL()
       
    82     {
       
    83     if( iIsSessionProcessOpen )
       
    84     	{
       
    85 	    TBool error = (iServerProcess.ExitType() != EExitPending);
       
    86 
       
    87     	iServerProcess.Close();
       
    88 
       
    89 		iIsSessionProcessOpen = EFalse;
       
    90 	
       
    91 		if( error )
       
    92 			{
       
    93 			User::LeaveIfError( KErrCommsBreak );
       
    94 			}
       
    95 
       
    96 	    const TInt result = CreateSession( 
       
    97 	    	KMdSServerName,
       
    98 			Version(),
       
    99 	        KMetadataMessageSlots,
       
   100 	        EIpcSession_Unsharable );
       
   101 
       
   102 		User::LeaveIfError( result );
       
   103 		
       
   104 		iIsSessionOpen = ETrue;
       
   105     	}
       
   106     else
       
   107     	{
       
   108     	User::LeaveIfError( KErrBadHandle );
       
   109     	}
       
   110     }
       
   111 
       
   112 TInt RMdEEngineSession::Shutdown()
       
   113     {
       
   114     TInt err = KErrNone;
       
   115 
       
   116     if( iIsSessionOpen )
       
   117     	{
       
   118 	    err = SendReceive( EShutdown );
       
   119     	}
       
   120 
       
   121 	if( iIsSessionProcessOpen )
       
   122 		{		
       
   123 		iServerProcess.Close();
       
   124 
       
   125 		iIsSessionProcessOpen = EFalse;
       
   126 		}
       
   127 
       
   128     return err;
       
   129     }
       
   130 
       
   131 TVersion RMdEEngineSession::Version() const
       
   132     {
       
   133     return( TVersion( KMdSServMajorVersionNumber,
       
   134                       KMdSServMinorVersionNumber,
       
   135                       KMdSServBuildVersionNumber ) );
       
   136     }
       
   137 
       
   138 void RMdEEngineSession::DoAddEventDefL(const TDefId aNameSpaceId, 
       
   139 		const TDesC &aName )
       
   140 	{
       
   141 	TIpcArgs ipcArgs;
       
   142 	ipcArgs.Set( EAddDefArgNamespaceId, aNameSpaceId );
       
   143 	ipcArgs.Set( EAddDefArgDefName,     &aName );
       
   144     const TInt ret = SendReceive( EAddEventDef, ipcArgs );
       
   145     
       
   146     NotifySessionError( ret );
       
   147     
       
   148     User::LeaveIfError( ret );
       
   149 	}
       
   150 
       
   151 void RMdEEngineSession::DoAddRelationDefL(const TDefId aNameSpaceId, 
       
   152 		const TDesC &aName )
       
   153 	{
       
   154 	TIpcArgs ipcArgs;
       
   155 	ipcArgs.Set( EAddDefArgNamespaceId, aNameSpaceId );
       
   156 	ipcArgs.Set( EAddDefArgDefName,     &aName );
       
   157     const TInt ret = SendReceive( EAddRelationDef, ipcArgs );
       
   158     
       
   159     NotifySessionError( ret );
       
   160     
       
   161     User::LeaveIfError( ret );
       
   162 	}
       
   163 
       
   164 void RMdEEngineSession::DoAddItemsL( 
       
   165 		const CMdCSerializationBuffer& aSerializedBuffer, 
       
   166 		CMdCSerializationBuffer& aResultBuffer )
       
   167     {
       
   168     TIpcArgs ipcArgs;
       
   169     ipcArgs.Set( 0, aSerializedBuffer.BufferConstPtr() );
       
   170     ipcArgs.Set( 1, aResultBuffer.BufferPtr() );
       
   171     const TInt ret = SendReceive( EAdd, ipcArgs );
       
   172     
       
   173     NotifySessionError( ret );
       
   174     
       
   175     User::LeaveIfError( ret );
       
   176     }
       
   177 
       
   178 void RMdEEngineSession::DoAddItemsAsync( 
       
   179 		const CMdCSerializationBuffer& aSerializedBuffer, 
       
   180 		CMdCSerializationBuffer& aResultBuffer, TRequestStatus& aStatus )
       
   181     {
       
   182     TIpcArgs ipcArgs;
       
   183     ipcArgs.Set( 0, aSerializedBuffer.BufferConstPtr() );
       
   184     ipcArgs.Set( 1, aResultBuffer.BufferPtr() );
       
   185 	SendReceive( EAdd, ipcArgs, aStatus );
       
   186     }
       
   187 
       
   188 void RMdEEngineSession::DoUpdateItemsL( 
       
   189 		const CMdCSerializationBuffer& aSerializedBuffer, 
       
   190 		CMdCSerializationBuffer& aResultBuffer )
       
   191     {
       
   192     TIpcArgs ipcArgs;
       
   193     ipcArgs.Set( 0, aSerializedBuffer.BufferConstPtr() );
       
   194     ipcArgs.Set( 1, aResultBuffer.BufferPtr() );
       
   195     const TInt ret = SendReceive( EUpdate, ipcArgs );
       
   196     
       
   197     NotifySessionError( ret );
       
   198     
       
   199     User::LeaveIfError( ret );
       
   200     }
       
   201 
       
   202 void RMdEEngineSession::DoUpdateItemsAsync( 
       
   203 		const CMdCSerializationBuffer& aSerializedBuffer, 
       
   204 		CMdCSerializationBuffer& aResultBuffer, TRequestStatus& aStatus )
       
   205     {
       
   206     TIpcArgs ipcArgs;
       
   207     ipcArgs.Set( 0, aSerializedBuffer.BufferConstPtr() );
       
   208     ipcArgs.Set( 1, aResultBuffer.BufferPtr() );
       
   209 	SendReceive( EUpdate, ipcArgs, aStatus );
       
   210     }
       
   211     
       
   212 CMdCSerializationBuffer* RMdEEngineSession::DoFindSyncLC( 
       
   213 	const CMdEQuery* aQuery, 
       
   214     const CMdEQueryCriteriaSerialization& aSerializationBuffer, 
       
   215     TMdCQueryLockType aLocktype, TUint32 aNotifyCount)
       
   216 	{
       
   217     TIpcArgs ipcArgs;
       
   218     TPckgBuf<TInt> size(0);
       
   219 
       
   220     ipcArgs.Set( EFindArgQueryId,         (TUint32)aQuery->GetQueryId() );
       
   221     ipcArgs.Set( EFindArgConditions,      aSerializationBuffer.BufferPtr() );
       
   222     ipcArgs.Set( EFindArgResulBufferSize, &size );
       
   223     ipcArgs.Set( EFindArgNotifyCount,     aNotifyCount );	
       
   224 
       
   225     const TInt err = SendReceive( EFind, ipcArgs );
       
   226     
       
   227     NotifySessionError( err );
       
   228     
       
   229     User::LeaveIfError( err );
       
   230 
       
   231     CMdCSerializationBuffer* resultBuf = 
       
   232     	CMdCSerializationBuffer::NewLC( size() );
       
   233 
       
   234     DoGetDataL( aQuery, resultBuf, EFind, aLocktype );
       
   235 
       
   236     return resultBuf;	
       
   237 	}
       
   238 
       
   239 void RMdEEngineSession::DoFindAsync( TUint32 aQueryId, 
       
   240 		const CMdEQueryCriteriaSerialization& aSerializationBuffer,
       
   241 		TPckgBuf<TInt>* aSizeBuf, TRequestStatus& aAsyncStatus, 
       
   242 		TUint32 aNotifyCount )
       
   243     {
       
   244     TIpcArgs ipcArgs;
       
   245 
       
   246     ipcArgs.Set( EFindArgQueryId,         (TUint32)aQueryId );
       
   247     ipcArgs.Set( EFindArgConditions,      aSerializationBuffer.BufferPtr() );
       
   248     ipcArgs.Set( EFindArgResulBufferSize, aSizeBuf );
       
   249     ipcArgs.Set( EFindArgNotifyCount,     aNotifyCount );
       
   250 
       
   251     SendReceive( EAsyncFind, ipcArgs, aAsyncStatus );
       
   252     }
       
   253 
       
   254 void RMdEEngineSession::DoFindContinue( 
       
   255 	const CMdEQuery* aQuery, 
       
   256     TPckgBuf<TInt>* aSizeBuf,
       
   257     TRequestStatus& aAsyncStatus )
       
   258     {
       
   259     TIpcArgs ipcArgs;
       
   260 
       
   261     ipcArgs.Set( EFindArgQueryId,         (TUint32)aQuery->GetQueryId() );
       
   262     ipcArgs.Set( EFindArgResulBufferSize, aSizeBuf );
       
   263 
       
   264     SendReceive( EContinueAsyncFind, ipcArgs, aAsyncStatus );
       
   265     }
       
   266 
       
   267 void RMdEEngineSession::DoFindCancelL( const CMdEQuery* aQuery )
       
   268     {
       
   269     // silently skip if session is not open
       
   270     if( iIsSessionOpen )
       
   271     	{
       
   272     	TIpcArgs ipcArgs;
       
   273     	ipcArgs.Set( EFindArgQueryId, (TUint32)aQuery->GetQueryId() );
       
   274 
       
   275 	    const TInt err = SendReceive( ECancelFind, ipcArgs );
       
   276 	
       
   277 	    NotifySessionError( err );
       
   278 	    
       
   279 	    User::LeaveIfError( err );
       
   280     	}
       
   281     }
       
   282     
       
   283 void RMdEEngineSession::DoCheckObjectL( 
       
   284 		CMdCSerializationBuffer& aObjectBuffer, const TDesC& aUri, 
       
   285 		TDefId aNamespaceDefId )
       
   286 	{
       
   287 	TIpcArgs ipcArgs;
       
   288 
       
   289 	TPckgBuf<TDefId> namespaceDefId( aNamespaceDefId );
       
   290 
       
   291 	ipcArgs.Set( ECheckObjectArgType,           ECheckObjectByUri );
       
   292 	ipcArgs.Set( ECheckObjectArgTypeValue,      &aUri );
       
   293 	ipcArgs.Set( ECheckObjectArgNamespaceDefId, &namespaceDefId );
       
   294 	ipcArgs.Set( ECheckObjectArgObject,         aObjectBuffer.BufferPtr() );
       
   295 
       
   296 	TInt err = SendReceive( ECheckObject, ipcArgs );
       
   297 	
       
   298 	NotifySessionError( err );
       
   299 	
       
   300 	User::LeaveIfError( err );
       
   301 	}
       
   302 
       
   303 void RMdEEngineSession::DoCheckObjectL( 
       
   304 		CMdCSerializationBuffer& aObjectBuffer, TItemId aId, 
       
   305 		TDefId aNamespaceDefId )
       
   306 	{
       
   307 	TIpcArgs ipcArgs;
       
   308 	TPckgBuf<TDefId> namespaceDefId( aNamespaceDefId );
       
   309 	TPckgBuf<TItemId> objectId( aId );
       
   310 
       
   311 	ipcArgs.Set( ECheckObjectArgType,           ECheckObjectById );
       
   312 	ipcArgs.Set( ECheckObjectArgTypeValue,      &objectId );
       
   313 	ipcArgs.Set( ECheckObjectArgNamespaceDefId, &namespaceDefId );
       
   314 	ipcArgs.Set( ECheckObjectArgObject,         aObjectBuffer.BufferPtr() );
       
   315 
       
   316 	TInt err = SendReceive( ECheckObject, ipcArgs );
       
   317 	
       
   318 	NotifySessionError( err );
       
   319 	
       
   320 	User::LeaveIfError( err );
       
   321 	}
       
   322 
       
   323 void RMdEEngineSession::DoCheckObjectL( 
       
   324 		CMdCSerializationBuffer& aObjectsBuffer, 
       
   325 		const CMdCSerializationBuffer& aObjectIdsBuffer, 
       
   326 		TDefId aNamespaceDefId )
       
   327 	{
       
   328 	TIpcArgs ipcArgs;
       
   329 	TPckgBuf<TDefId> namespaceDefId( aNamespaceDefId );
       
   330 
       
   331 	ipcArgs.Set( ECheckObjectArgType,           ECheckObjectByIds );
       
   332 	ipcArgs.Set( ECheckObjectArgTypeValue,      aObjectIdsBuffer.BufferPtr() );
       
   333 	ipcArgs.Set( ECheckObjectArgNamespaceDefId, &namespaceDefId );
       
   334 	ipcArgs.Set( ECheckObjectArgObject,         aObjectsBuffer.BufferPtr() );
       
   335 
       
   336 	TInt err = SendReceive( ECheckObject, ipcArgs );
       
   337 	
       
   338 	NotifySessionError( err );
       
   339 	
       
   340 	User::LeaveIfError( err );
       
   341 	}
       
   342 
       
   343 void RMdEEngineSession::DoCommitObjectsL( const CMdCSerializationBuffer& aCodedObjects )
       
   344 	{
       
   345 	TIpcArgs ipcArgs;
       
   346 	ipcArgs.Set( 0, aCodedObjects.BufferConstPtr() );
       
   347 
       
   348 	TInt err = SendReceive( EUpdate, ipcArgs );
       
   349 	
       
   350 	NotifySessionError( err );
       
   351 	
       
   352 	User::LeaveIfError( err );
       
   353 	}
       
   354 
       
   355 void RMdEEngineSession::DoCancelObjectL( CMdCSerializationBuffer& aRemoveId )
       
   356     {
       
   357     // silently skip if session is not open
       
   358     if( iIsSessionOpen )
       
   359     	{
       
   360 	    TIpcArgs ipcArgs;
       
   361 	    ipcArgs.Set( 0, aRemoveId.BufferPtr() );
       
   362 	
       
   363 	   	TInt err = SendReceive( ECancelObject, ipcArgs );
       
   364 	   	
       
   365 	   	NotifySessionError( err );
       
   366 	   	
       
   367 	   	User::LeaveIfError( err );
       
   368     	}
       
   369     }
       
   370 
       
   371 void RMdEEngineSession::DoRegisterL( TInt aId,
       
   372     TUint32 aType,
       
   373     CMdCSerializationBuffer& aBuffer,
       
   374     TDefId aNamespaceDefId )
       
   375     {
       
   376     TIpcArgs ipcArgs;
       
   377     ipcArgs.Set( 0, aId );
       
   378     ipcArgs.Set( 1, aType );
       
   379     ipcArgs.Set( 2, aBuffer.BufferPtr() );
       
   380     ipcArgs.Set( 3, aNamespaceDefId );
       
   381 
       
   382     const TInt err = SendReceive( ERegister, ipcArgs );
       
   383 
       
   384     NotifySessionError( err );
       
   385 
       
   386     User::LeaveIfError( err );
       
   387     }
       
   388 
       
   389 void RMdEEngineSession::DoListen( TInt aId,
       
   390     TPckgBuf<TInt>* aSizeBuf,
       
   391     TRequestStatus& aAsyncStatus )
       
   392     {
       
   393     TIpcArgs ipcArgs;
       
   394     ipcArgs.Set( 0, aId );
       
   395     ipcArgs.Set( 1, aSizeBuf );
       
   396 
       
   397     SendReceive( EListen, ipcArgs, aAsyncStatus );
       
   398     }
       
   399 
       
   400 void RMdEEngineSession::DoUnregisterL( TInt aId )
       
   401     {
       
   402     // silently skip if session is not open
       
   403     if( iIsSessionOpen )
       
   404     	{
       
   405 	    TIpcArgs ipcArgs;
       
   406 	    ipcArgs.Set( 0, aId );
       
   407 	
       
   408 	    const TInt err = SendReceive( EUnregister, ipcArgs );
       
   409 	
       
   410 	    NotifySessionError( err );
       
   411 	
       
   412 	    User::LeaveIfError( err );
       
   413     	}
       
   414     }
       
   415 
       
   416 void RMdEEngineSession::DoRemoveItemsL( const CMdCSerializationBuffer& aRemoveId, CMdCSerializationBuffer& aSuccessfulId )
       
   417     {
       
   418     TIpcArgs ipcArgs;
       
   419     ipcArgs.Set( 0, aRemoveId.BufferConstPtr() );
       
   420     ipcArgs.Set( 1, aSuccessfulId.BufferPtr() );
       
   421 
       
   422    	TInt err = SendReceive( ERemove, ipcArgs );
       
   423    	
       
   424    	NotifySessionError( err );
       
   425    	
       
   426    	User::LeaveIfError( err );
       
   427     }
       
   428 
       
   429 void RMdEEngineSession::DoRemoveItemsAsync( const CMdCSerializationBuffer& aRemoveId, CMdCSerializationBuffer& aSuccessfulId, TRequestStatus& aStatus )
       
   430     {
       
   431     TIpcArgs ipcArgs;
       
   432     ipcArgs.Set( 0, aRemoveId.BufferPtr() );
       
   433     ipcArgs.Set( 1, aSuccessfulId.BufferPtr() );
       
   434 
       
   435    	SendReceive( ERemove, ipcArgs, aStatus );
       
   436     }
       
   437 
       
   438 void RMdEEngineSession::DoLoadSchemaL( TInt& aHandle )
       
   439     {
       
   440     TPckgBuf<TInt> handleBuf;
       
   441 
       
   442     TIpcArgs ipcArgs;
       
   443     ipcArgs.Set( 1, &handleBuf );
       
   444     ipcArgs.Set( 2, ELoadSchema );
       
   445     
       
   446     const TInt err = SendReceive( EGetData, ipcArgs );
       
   447     
       
   448     NotifySessionError( err );
       
   449     
       
   450     User::LeaveIfError( err );
       
   451 
       
   452     aHandle = handleBuf();
       
   453     }
       
   454 
       
   455 void RMdEEngineSession::DoGetDataL( const CMdEQuery* aQuery, 
       
   456 	CMdCSerializationBuffer* aResultBuffer, 
       
   457 	TUint32 aRelatedCommand, TUint32 aExtraData)
       
   458 	{
       
   459 	TIpcArgs ipcArgs;
       
   460 
       
   461     ipcArgs.Set( 0, (TUint32)aQuery->GetQueryId() );
       
   462 	ipcArgs.Set( 1, aResultBuffer->BufferPtr() );
       
   463     ipcArgs.Set( 2, aRelatedCommand );
       
   464     ipcArgs.Set( 3, aExtraData );
       
   465 
       
   466     const TInt err = SendReceive( EGetData, ipcArgs );
       
   467     
       
   468     NotifySessionError( err );
       
   469     
       
   470     User::LeaveIfError( err );
       
   471 	}
       
   472 
       
   473 void RMdEEngineSession::DoGetDataL( CMdCSerializationBuffer& aBuffer, TUint32 aExtraData )
       
   474     {
       
   475     TIpcArgs ipcArgs;
       
   476     ipcArgs.Set( 0, 0 );
       
   477     ipcArgs.Set( 1, aBuffer.BufferPtr() );
       
   478     ipcArgs.Set( 2, EListen );
       
   479     ipcArgs.Set( 3, aExtraData );
       
   480     const TInt err = SendReceive( EGetData, ipcArgs );
       
   481     
       
   482     NotifySessionError( err );
       
   483     
       
   484     User::LeaveIfError( err );
       
   485     }
       
   486 
       
   487 void RMdEEngineSession::DoImportSchemaL( const TDesC& aFileName )
       
   488     {
       
   489     TIpcArgs ipcArgs;
       
   490     ipcArgs.Set( 0, &aFileName );
       
   491 
       
   492     const TInt err = SendReceive( EImportSchema, ipcArgs );
       
   493 
       
   494     NotifySessionError( err );
       
   495     
       
   496     User::LeaveIfError( err );
       
   497     }
       
   498     
       
   499 TInt RMdEEngineSession::DoImportMetadataL( const TDesC& aFileName )
       
   500     {
       
   501     TIpcArgs ipcArgs;
       
   502     TPckgBuf<TInt> failed;
       
   503     ipcArgs.Set( 0, &aFileName );
       
   504     ipcArgs.Set( 1, &failed );
       
   505 
       
   506     const TInt err = SendReceive( EImportMetadata, ipcArgs );
       
   507 
       
   508     NotifySessionError( err );
       
   509     
       
   510     User::LeaveIfError( err );    
       
   511     return failed();
       
   512     }
       
   513 
       
   514 void RMdEEngineSession::DoImportMetadata( const TDesC& aFileName, 
       
   515 		TPckgBuf<TInt>& aResult, TRequestStatus& aStatus )
       
   516     {
       
   517     TIpcArgs ipcArgs;
       
   518     ipcArgs.Set( 0, &aFileName );
       
   519     ipcArgs.Set( 1, &aResult );
       
   520 
       
   521     SendReceive( EAsyncImportMetadata, ipcArgs, aStatus );
       
   522     }
       
   523 
       
   524 void RMdEEngineSession::DoExportMetadataL( const TDesC& aFileName, 
       
   525 		const CMdCSerializationBuffer& aItems )
       
   526     {
       
   527     TIpcArgs ipcArgs;
       
   528     ipcArgs.Set( 0, &aFileName );
       
   529     ipcArgs.Set( 1, aItems.BufferConstPtr() );
       
   530 
       
   531     const TInt err = SendReceive( EExportMetadata, ipcArgs );
       
   532 
       
   533     NotifySessionError( err );
       
   534     
       
   535     User::LeaveIfError( err );    
       
   536     }
       
   537 
       
   538 void RMdEEngineSession::DoExportMetadataL( const TDesC& aFileName, 
       
   539 		const CMdCSerializationBuffer& aItems, TRequestStatus& aStatus )
       
   540     {
       
   541     TIpcArgs ipcArgs;
       
   542     ipcArgs.Set( 0, &aFileName );
       
   543     ipcArgs.Set( 1, aItems.BufferConstPtr() );
       
   544 
       
   545     SendReceive( EAsyncExportMetadata, ipcArgs, aStatus );
       
   546     }
       
   547 
       
   548 void RMdEEngineSession::DoAddMemoryCard(TUint32 aMediaId)
       
   549 	{
       
   550     TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   551 
       
   552 	TIpcArgs ipcArgs;
       
   553     ipcArgs.Set( 0, &mediaIdPckg );
       
   554 
       
   555     const TInt err = SendReceive( EAddMemoryCard, ipcArgs );
       
   556 
       
   557     NotifySessionError( err );
       
   558 	}
       
   559 
       
   560 TBool RMdEEngineSession::DoGetMemoryCard(TUint32& aMediaId)
       
   561 	{
       
   562     TPckg<TUint32> mediaIdPckg( aMediaId );
       
   563 
       
   564 	TIpcArgs ipcArgs;
       
   565     ipcArgs.Set( 0, &mediaIdPckg );
       
   566 
       
   567     const TInt error = SendReceive( EGetMemoryCard, ipcArgs );
       
   568 
       
   569     NotifySessionError( error );
       
   570 
       
   571     if( error != KErrNone )
       
   572     	{
       
   573     	return EFalse;
       
   574     	}
       
   575     else
       
   576     	{
       
   577 	    aMediaId = mediaIdPckg();
       
   578     	return ETrue;
       
   579     	}
       
   580     }
       
   581 
       
   582 TBool RMdEEngineSession::DoCheckMemoryCard(TUint32 aMediaId, TBool& aExist)
       
   583 	{
       
   584     TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   585     TPckg<TBool> existPckg( aExist );
       
   586 
       
   587 	TIpcArgs ipcArgs;
       
   588     ipcArgs.Set( 0, &mediaIdPckg );
       
   589     ipcArgs.Set( 1, &existPckg );
       
   590 
       
   591     const TInt error = SendReceive( ECheckMemoryCard, ipcArgs );
       
   592 
       
   593     NotifySessionError( error );
       
   594     
       
   595     if( error != KErrNone )
       
   596     	{
       
   597     	return EFalse;
       
   598     	}
       
   599     else
       
   600     	{
       
   601 	    aExist = existPckg();
       
   602     	return ETrue;
       
   603     	}
       
   604     }
       
   605 
       
   606 void RMdEEngineSession::DoSetMediaL(TUint32 aMediaId, TChar aDrive, 
       
   607 		TBool aPresentState)
       
   608 	{
       
   609     TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   610     TPckgC<TChar> drivePckg( aDrive );
       
   611     TPckgC<TBool> presentStatePckg( aPresentState );
       
   612 
       
   613 	TIpcArgs ipcArgs;
       
   614     ipcArgs.Set( 0, &mediaIdPckg );
       
   615     ipcArgs.Set( 1, &drivePckg );
       
   616     ipcArgs.Set( 2, &presentStatePckg );
       
   617 
       
   618     const TInt err = SendReceive( ESetMedia, ipcArgs );
       
   619 
       
   620     NotifySessionError( err );
       
   621     
       
   622     User::LeaveIfError( err );
       
   623 	}
       
   624 
       
   625 TBool RMdEEngineSession::DoGetMediaL(TUint32 aMediaId, TChar& aDrive, 
       
   626 		TBool& aPresentState)
       
   627 	{
       
   628 	TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   629     TPckg<TChar> drivePckg( aDrive );
       
   630     TPckg<TBool> presentStatePckg( aPresentState );
       
   631 
       
   632     TBool exists;
       
   633     TPckg<TBool> existsPckg( exists );
       
   634 
       
   635 	TIpcArgs ipcArgs;
       
   636     ipcArgs.Set( 0, &mediaIdPckg );
       
   637     ipcArgs.Set( 1, &drivePckg );
       
   638     ipcArgs.Set( 2, &presentStatePckg );
       
   639     ipcArgs.Set( 3, &existsPckg );
       
   640 
       
   641     const TInt error = SendReceive( EGetMedia, ipcArgs );
       
   642 
       
   643     NotifySessionError( error );
       
   644 
       
   645 	User::LeaveIfError( error );
       
   646 
       
   647 	aDrive = drivePckg();
       
   648 	aPresentState = presentStatePckg();
       
   649 	
       
   650 	exists = existsPckg();
       
   651 	
       
   652 	return exists;
       
   653     }
       
   654 
       
   655 void RMdEEngineSession::DoGetPresentMediasL(RArray<TMdEMediaInfo>& aMedias)
       
   656 	{
       
   657 	// buffer size for media info for every possible drive
       
   658 	const TInt KMediaInfoSize = sizeof( TMdEMediaInfo ) * KMaxDrives;
       
   659 
       
   660 	TInt32 mediaCount;
       
   661 	TPckg<TInt32> mediaCountPckg( mediaCount );
       
   662 	
       
   663 	HBufC8* mediaInfoBuffer = HBufC8::NewLC( KMediaInfoSize );
       
   664 	
       
   665 	TIpcArgs ipcArgs;
       
   666     ipcArgs.Set( 0, &mediaCountPckg );
       
   667     TPtr8 ptr( CONST_CAST( TUint8*, mediaInfoBuffer->Ptr() ), KMediaInfoSize );
       
   668     ipcArgs.Set( 1, &ptr );
       
   669 
       
   670 	TInt error = SendReceive( EGetPresentMedias, ipcArgs );
       
   671 
       
   672     NotifySessionError( error );
       
   673 
       
   674 	User::LeaveIfError( error );
       
   675 
       
   676 	mediaCount = mediaCountPckg();
       
   677 
       
   678 	aMedias.ReserveL( mediaCount );
       
   679 
       
   680 	mediaCount *= sizeof( TMdEMediaInfo );
       
   681 	
       
   682 	const TUint8* mediaInfoPtr = mediaInfoBuffer->Ptr();
       
   683 	
       
   684 	// get media infos from buffer
       
   685 	for( TInt32 i = 0; i < mediaCount; i += sizeof( TMdEMediaInfo ) )
       
   686 		{
       
   687 		const TMdEMediaInfo& mediaInfo = *STATIC_CAST( const TMdEMediaInfo*, 
       
   688 				(const TMdEMediaInfo*)( mediaInfoPtr + i ) );
       
   689 		
       
   690 		aMedias.AppendL( mediaInfo );
       
   691 		}
       
   692 	
       
   693 	CleanupStack::PopAndDestroy( mediaInfoBuffer );
       
   694 	}
       
   695 
       
   696 TBool RMdEEngineSession::DoSetFileToPresent(TUint32 aMediaId, 
       
   697 		const TDesC& aUri, TMdSFileInfo& aFileInfo)
       
   698 	{
       
   699     TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   700     TPckgC<TMdSFileInfo> fileInfoPckg( aFileInfo );
       
   701 
       
   702 	TIpcArgs ipcArgs;
       
   703     ipcArgs.Set( 0, &mediaIdPckg );
       
   704     ipcArgs.Set( 1, &aUri );
       
   705     ipcArgs.Set( 2, &fileInfoPckg );
       
   706 
       
   707    	TInt error = SendReceive( ESetFileToPresent, ipcArgs );
       
   708 
       
   709    	NotifySessionError( error );
       
   710 
       
   711    	if( error != KErrNone )
       
   712     	{
       
   713     	return EFalse;
       
   714     	}
       
   715     else
       
   716     	{
       
   717     	return ETrue;
       
   718     	}
       
   719 	}
       
   720 
       
   721 TInt RMdEEngineSession::DoSetFilesToPresent(TMdSMediaIdAndCount aMediaIdAndCount, 
       
   722 		const TDes8& aUris, const TDes8& aFileInfos, TDes8& aResults)
       
   723 	{
       
   724     TPckgC<TMdSMediaIdAndCount> mediaIdAndCountPckg( aMediaIdAndCount );
       
   725 
       
   726 	TIpcArgs ipcArgs;
       
   727     ipcArgs.Set( 0, &mediaIdAndCountPckg );
       
   728     ipcArgs.Set( 1, &aUris );
       
   729     ipcArgs.Set( 2, &aFileInfos );
       
   730     ipcArgs.Set( 3, &aResults );
       
   731 
       
   732    	TInt error = SendReceive( ESetFilesToPresent, ipcArgs );
       
   733 
       
   734    	return error;
       
   735 	}
       
   736 
       
   737 void RMdEEngineSession::DoSetFilesToNotPresent(TUint32 aMediaId, TBool aStartUp)
       
   738 	{
       
   739     TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   740     TPckgC<TBool> startUpPckg( aStartUp );
       
   741 
       
   742 	TIpcArgs ipcArgs;
       
   743     ipcArgs.Set( 0, &mediaIdPckg );
       
   744     ipcArgs.Set( 1, &startUpPckg );
       
   745 
       
   746     const TInt err = SendReceive( ESetFilesToNotPresent, ipcArgs );
       
   747 
       
   748     NotifySessionError( err );
       
   749 	}
       
   750 	
       
   751 void RMdEEngineSession::DoRemoveFilesNotPresent(TUint32 aMediaId, TBool aStartUp)
       
   752 	{
       
   753     TPckgC<TUint32> mediaIdPckg( aMediaId );
       
   754     TPckgC<TBool> startUpPckg( aStartUp );
       
   755 	
       
   756 	TIpcArgs ipcArgs;
       
   757     ipcArgs.Set( 0, &mediaIdPckg );
       
   758     ipcArgs.Set( 1, &startUpPckg );
       
   759 
       
   760     const TInt err = SendReceive( ERemoveFilesNotPresent, ipcArgs );
       
   761     
       
   762     NotifySessionError( err );
       
   763 	}
       
   764 
       
   765 void RMdEEngineSession::DoGetSchemaVersionL(
       
   766 		TInt& aMajorVersion, TInt& aMinorVersion)
       
   767 	{
       
   768     TPckg<TInt> majorVersion( aMajorVersion );
       
   769     TPckg<TInt> minorVersion( aMinorVersion );
       
   770 
       
   771 	TIpcArgs ipcArgs;
       
   772     ipcArgs.Set( 0, &majorVersion );
       
   773     ipcArgs.Set( 1, &minorVersion );
       
   774 
       
   775     const TInt err = SendReceive( EGetSchemaVersion, ipcArgs );
       
   776     
       
   777     NotifySessionError( err );
       
   778     
       
   779     User::LeaveIfError( err );
       
   780     }
       
   781 
       
   782 void RMdEEngineSession::DoSetObjectToPresentByGuidL( 
       
   783 		const TInt64& aGuidHigh, const TInt64& aGuidLow )
       
   784 	{
       
   785     TPckgC<TInt64> guidHigh( aGuidHigh );
       
   786     TPckgC<TInt64> guidLow( aGuidLow );
       
   787 
       
   788 	TIpcArgs ipcArgs;
       
   789     ipcArgs.Set( ESetObjectToPresentByGuidArgGuidHigh, &guidHigh );
       
   790     ipcArgs.Set( ESetObjectToPresentByGuidArgGuidLow,  &guidLow );
       
   791 
       
   792     const TInt err = SendReceive( ESetObjectToPresentByGuid, ipcArgs );
       
   793 
       
   794     NotifySessionError( err );
       
   795 
       
   796     User::LeaveIfError( err );
       
   797 	}
       
   798 
       
   799 void RMdEEngineSession::DoChangePath( 
       
   800 		const TDesC& aOldPath, const TDesC& aNewPath, TRequestStatus& aStatus )
       
   801 	{
       
   802 	TIpcArgs ipcArgs;
       
   803     ipcArgs.Set( 0, &aOldPath );
       
   804     ipcArgs.Set( 1, &aNewPath );
       
   805 
       
   806 	SendReceive( EChangePath, ipcArgs, aStatus );
       
   807 	}
       
   808 
       
   809 void RMdEEngineSession::DoChangeCDriveMediaId()
       
   810 	{
       
   811 	SendReceive( EChangeMediaId );
       
   812 	}
       
   813 
       
   814 void RMdEEngineSession::DoSetPendingL( const RArray<TItemId>& aObjectIds )
       
   815 	{
       
   816 	HBufC8* idBuffer = SerializeArrayL( aObjectIds );
       
   817 	CleanupStack::PushL( idBuffer );
       
   818 
       
   819 	TIpcArgs ipcArgs;
       
   820     ipcArgs.Set( 0, idBuffer );
       
   821 
       
   822     const TInt err = SendReceive( ESetPending, ipcArgs );
       
   823 
       
   824     NotifySessionError( err );
       
   825 
       
   826 	CleanupStack::PopAndDestroy( idBuffer );
       
   827 	}
       
   828 
       
   829 void RMdEEngineSession::DoResetPendingL( const RArray<TItemId>& aObjectIds )
       
   830 	{
       
   831 	HBufC8* idBuffer = SerializeArrayL( aObjectIds );
       
   832 	CleanupStack::PushL( idBuffer );
       
   833 
       
   834 	TIpcArgs ipcArgs;
       
   835     ipcArgs.Set( 0, idBuffer );
       
   836 
       
   837     const TInt err = SendReceive( EResetPending, ipcArgs );
       
   838 
       
   839     NotifySessionError( err );
       
   840 
       
   841 	CleanupStack::PopAndDestroy( idBuffer );
       
   842 	}
       
   843 	
       
   844 TInt RMdEEngineSession::DoGetPendingCount( const CMdEObjectDef* aObjectDef )
       
   845 	{
       
   846 	TDefId objectDefId = KNoDefId;
       
   847 	
       
   848 	if( aObjectDef )
       
   849 		{
       
   850 		objectDefId = aObjectDef->Id();
       
   851 		}
       
   852 
       
   853 	TPckg<TDefId> objectDefIdPckg( objectDefId );
       
   854 	TPckg<TInt> idCountPckg( 0 );
       
   855 	
       
   856 	TIpcArgs ipcArgs;
       
   857 	ipcArgs.Set( 0, &objectDefIdPckg );
       
   858 	ipcArgs.Set( 1, &idCountPckg );
       
   859 
       
   860     SendReceive( EGetPendingCount, ipcArgs );
       
   861 
       
   862     return idCountPckg();
       
   863 	}
       
   864 
       
   865 TInt RMdEEngineSession::DoGetPending( 
       
   866 		const CMdEObjectDef* aObjectDef, TInt& /* aObjectIdCount */, 
       
   867 		CMdCSerializationBuffer& aObjectIdBuffer )
       
   868 	{
       
   869 	TDefId objectDefId = KNoDefId;
       
   870 	
       
   871 	if( aObjectDef )
       
   872 		{
       
   873 		objectDefId = aObjectDef->Id();
       
   874 		}
       
   875 
       
   876 	TPckg<TDefId> objectDefIdPckg( objectDefId );
       
   877 	TPckg<TInt> idCountPckg( 0 );
       
   878 	TPckg<TInt> resultPckg( 0 );
       
   879 	TInt result( 0 );
       
   880 	
       
   881 	TIpcArgs ipcArgs;
       
   882 	ipcArgs.Set( 0, &objectDefIdPckg );
       
   883 	ipcArgs.Set( 1, &idCountPckg );
       
   884 	ipcArgs.Set( 2, aObjectIdBuffer.BufferPtr() );
       
   885 	ipcArgs.Set( 3, &resultPckg );
       
   886 	
       
   887     SendReceive( EGetPending, ipcArgs );
       
   888 
       
   889     result = resultPckg();
       
   890     
       
   891     return result;
       
   892 	}
       
   893 
       
   894 void RMdEEngineSession::DoResetDBL()
       
   895 	{
       
   896 	TInt err = SendReceive( EResetDB );
       
   897 
       
   898     NotifySessionError( err );
       
   899 
       
   900 	User::LeaveIfError( err );
       
   901 	}
       
   902 
       
   903 void RMdEEngineSession::DoSetHarvestingPrioritizationChunkL( 
       
   904 		RHandleBase aHandle )
       
   905 	{
       
   906 	TIpcArgs ipcArgs;
       
   907     ipcArgs.Set( 0, aHandle );
       
   908 
       
   909     const TInt err = SendReceive( ESetHarvestingPrioritizationChunk, ipcArgs );
       
   910     
       
   911     NotifySessionError( err );
       
   912     
       
   913     User::LeaveIfError( err );
       
   914 	}
       
   915 
       
   916 void RMdEEngineSession::DoAddHarvestingPrioritizationObserver( 
       
   917 		TRequestStatus& aStatus )
       
   918 	{
       
   919     SendReceive( EAddHarvestingPrioritizationObserver, aStatus );
       
   920 	}
       
   921 
       
   922 TInt RMdEEngineSession::DoCancelHarvestingPrioritizationObserver()
       
   923 	{
       
   924     const TInt err = SendReceive( ECancelHarvestingPrioritizationObserver );
       
   925     
       
   926     NotifySessionError( err );
       
   927     
       
   928     return err;
       
   929 	}
       
   930 
       
   931 void RMdEEngineSession::NotifySessionError( TInt aError )
       
   932 	{
       
   933 	if( aError != KErrServerTerminated )
       
   934 		{
       
   935 		return;
       
   936 		}
       
   937 	
       
   938 	iIsSessionOpen = EFalse;
       
   939 	iSession.NotifyError( aError );
       
   940 	}