installationservices/swinstallationfw/source/siftransportclient.cpp
branchRCL_3
changeset 25 7333d7932ef7
equal deleted inserted replaced
24:5cc91383ab1e 25:7333d7932ef7
       
     1 /*
       
     2 * Copyright (c) 2008-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 the License "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: 
       
    15 * This file implements the client side of the SIF Transport library
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #include <f32file.h>
       
    21 #include <usif/sif/sif.h>
       
    22 #include <scs/scscommon.h>
       
    23 #include "siftransportclient.h"
       
    24 #include "siftransportcommon.h"
       
    25 
       
    26 using namespace Usif;
       
    27 
       
    28 	EXPORT_C RSifTransportClient::RSifTransportClient()
       
    29 	: RScsClientBase(), iArgBuf(NULL), iResBuf(NULL), iOngoingFunction(0)
       
    30 	{
       
    31 	}
       
    32 
       
    33 EXPORT_C TInt RSifTransportClient::Connect(const TDesC& aServerName, const TVersion& aRequiredVersion, const TDesC& aServerImageName, TUid aServerUid)
       
    34 	{
       
    35 	TUidType uidType(KExecutableImageUid, KNullUid, aServerUid);
       
    36 	return RScsClientBase::Connect(aServerName, aRequiredVersion, aServerImageName, uidType);
       
    37 	}
       
    38 
       
    39 EXPORT_C void RSifTransportClient::Close()
       
    40 	{
       
    41 	delete iArgBuf;
       
    42 	delete iResBuf;
       
    43 
       
    44 	RScsClientBase::Close();
       
    45 	}
       
    46 
       
    47 EXPORT_C void RSifTransportClient::GetComponentInfo(const TDesC& aFileName, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
       
    48 	{
       
    49 	TIpcArgs ipcArgs(&aFileName);
       
    50 	TRAPD(err, aComponentInfo.PrepareForIpcL(ipcArgs, 2));
       
    51 	if (err)
       
    52 		{
       
    53 		TRequestStatus *status(&aStatus);
       
    54 		User::RequestComplete(status, err);
       
    55 		return;
       
    56 		}
       
    57 	
       
    58 	CallSifFunction(EGetComponentInfoByFileName, ipcArgs, aStatus);
       
    59 	}
       
    60 
       
    61 EXPORT_C void RSifTransportClient::GetComponentInfo(RFile& aFileHandle, CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
       
    62 	{
       
    63 	TIpcArgs ipcArgs;
       
    64 	TInt transferErr = aFileHandle.TransferToServer(ipcArgs, 0, 1);
       
    65 	TRAPD(err, aComponentInfo.PrepareForIpcL(ipcArgs, 2));
       
    66 	if (err || transferErr)
       
    67 		{
       
    68 		TRequestStatus *status(&aStatus);
       
    69 		User::RequestComplete(status, err ? err : transferErr);
       
    70 		return;
       
    71 		}
       
    72 	
       
    73 	CallSifFunction(EGetComponentInfoByFileHandle, ipcArgs, aStatus);
       
    74 	}
       
    75 
       
    76 EXPORT_C void RSifTransportClient::Install(const TDesC& aFileName, TRequestStatus& aStatus, TBool aExclusiveOperation)
       
    77 	{
       
    78 	TIpcArgs ipcArgs(&aFileName, aExclusiveOperation);
       
    79 	CallSifFunction(EInstallByFileName, ipcArgs, aStatus);
       
    80 	}
       
    81 
       
    82 EXPORT_C void RSifTransportClient::Install(const TDesC& aFileName, const COpaqueNamedParams& aArguments,
       
    83 										COpaqueNamedParams& aResults, TRequestStatus& aStatus, TBool aExclusiveOperation)
       
    84 	{
       
    85 	TIpcArgs ipcArgs(&aFileName, aExclusiveOperation);
       
    86 	TRAPD(err, PrepareOpaqueParamsL(ipcArgs, aArguments, aResults));
       
    87 	if (err)
       
    88 		{
       
    89 		TRequestStatus *status(&aStatus);
       
    90 		User::RequestComplete(status, err);
       
    91 		return;
       
    92 		}
       
    93 	
       
    94 	CallSifFunction(EInstallByFileNameWithOpaqueData, ipcArgs, aStatus);
       
    95 	}
       
    96 
       
    97 EXPORT_C void RSifTransportClient::Install(RFile& aFileHandle, TRequestStatus& aStatus, TBool aExclusiveOperation)
       
    98 	{
       
    99 	TIpcArgs ipcArgs(0, 0, aExclusiveOperation);
       
   100 	TInt err = aFileHandle.TransferToServer(ipcArgs, 0, 1);
       
   101 	if (err)
       
   102 		{
       
   103 		TRequestStatus *status(&aStatus);
       
   104 		User::RequestComplete(status, err);
       
   105 		return;
       
   106 		}	
       
   107 
       
   108 	CallSifFunction(EInstallByFileHandle, ipcArgs, aStatus);
       
   109 	}
       
   110 
       
   111 EXPORT_C void RSifTransportClient::Install(RFile& aFileHandle, const COpaqueNamedParams& aArguments,
       
   112 										COpaqueNamedParams& aResults, TRequestStatus& aStatus, TBool aExclusiveOperation)
       
   113 	{
       
   114 	// An axiliary synchronous call to pass the aExclusiveOperation flag the server as a fifth parameter
       
   115 	TIpcArgs ipcArgs1(aExclusiveOperation);
       
   116 	CallSessionFunction(EInstallByFileHandleWithOpaqueDataPreamble, ipcArgs1);
       
   117 
       
   118 	// Proper asynchronous call
       
   119 	TIpcArgs ipcArgs2;
       
   120 	TInt transferErr = aFileHandle.TransferToServer(ipcArgs2, 0, 1);
       
   121 	TRAPD(err, PrepareOpaqueParamsL(ipcArgs2, aArguments, aResults));
       
   122 	if (err || transferErr)
       
   123 		{
       
   124 		TRequestStatus *status(&aStatus);
       
   125 		User::RequestComplete(status, err ? err : transferErr);
       
   126 		return;
       
   127 		}
       
   128 	CallSifFunction(EInstallByFileHandleWithOpaqueData, ipcArgs2, aStatus);
       
   129 	}
       
   130 
       
   131 EXPORT_C void RSifTransportClient::Uninstall(TComponentId aComponentId, TRequestStatus& aStatus, TBool aExclusiveOperation)
       
   132 	{
       
   133 	TIpcArgs ipcArgs(aComponentId, aExclusiveOperation);
       
   134 	CallSifFunction(EUninstall, ipcArgs, aStatus);
       
   135 	}
       
   136 
       
   137 EXPORT_C void RSifTransportClient::Uninstall(TComponentId aComponentId, const COpaqueNamedParams& aArguments,
       
   138 											COpaqueNamedParams& aResults, TRequestStatus& aStatus, TBool aExclusiveOperation)
       
   139 	{
       
   140 	TIpcArgs ipcArgs(aComponentId, aExclusiveOperation);
       
   141 	TRAPD(err, PrepareOpaqueParamsL(ipcArgs, aArguments, aResults));
       
   142 	if (err)
       
   143 		{
       
   144 		TRequestStatus *status(&aStatus);
       
   145 		User::RequestComplete(status, err);
       
   146 		return;
       
   147 		}
       
   148 	
       
   149 	CallSifFunction(EUninstallWithOpaqueData, ipcArgs, aStatus);
       
   150 	}
       
   151 	
       
   152 EXPORT_C void RSifTransportClient::Activate(TComponentId aComponentId, TRequestStatus& aStatus)
       
   153 	{
       
   154 	TIpcArgs ipcArgs(aComponentId);
       
   155 	CallSifFunction(EActivate, ipcArgs, aStatus);
       
   156 	}
       
   157 	
       
   158 	
       
   159 EXPORT_C void RSifTransportClient::Deactivate(TComponentId aComponentId, TRequestStatus& aStatus)
       
   160 	{
       
   161 	TIpcArgs ipcArgs(aComponentId);
       
   162 	CallSifFunction(EDeactivate, ipcArgs, aStatus);
       
   163 	}
       
   164 
       
   165 EXPORT_C void RSifTransportClient::CancelOperation()
       
   166 	{
       
   167 	if (iOngoingFunction > 0)
       
   168 		{
       
   169 		CancelSessionFunction(iOngoingFunction);
       
   170 		iOngoingFunction = 0;
       
   171 		}
       
   172 	}
       
   173 	
       
   174 void RSifTransportClient::CallSifFunction(TInt aFunction, const TIpcArgs& aArgs, TRequestStatus& aStatus)
       
   175 	{
       
   176 	aStatus = KRequestPending;
       
   177 	iOngoingFunction = aFunction;
       
   178 	CallSessionFunction(aFunction, aArgs, aStatus);
       
   179 	}
       
   180 
       
   181 void RSifTransportClient::PrepareOpaqueParamsL(TIpcArgs& aIpcArgs, const COpaqueNamedParams& aArguments,
       
   182 											COpaqueNamedParams& aResults)
       
   183 	{
       
   184 	aArguments.PrepareArgumentsForIpcL(aIpcArgs, 2);
       
   185 	aResults.PrepareResultsForIpcL(aIpcArgs, 3);
       
   186 	}