installationservices/refswinstallationplugin/source/sifrefplugin.cpp
branchRCL_3
changeset 26 8b7f4e561641
parent 25 7333d7932ef7
child 27 e8965914fac7
equal deleted inserted replaced
25:7333d7932ef7 26:8b7f4e561641
     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 a SIF plug-in for the Reference Installer.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #include "usiflog.h"
       
    21 #include "sifrefplugin.h"
       
    22 #include <usif/sif/sif.h>
       
    23 #include <usif/sif/sifcommon.h>
       
    24 #include <usif/usiferror.h>
       
    25 #include <usif/sif/sifplugin.h>
       
    26 #include <e32property.h>
       
    27 #include <f32file.h>
       
    28 
       
    29 using namespace Usif;
       
    30 
       
    31 static const TInt KSifRefPluginImpId = 0x10286350;
       
    32 
       
    33 static const TImplementationProxy ImplementationTable[] = 
       
    34 	{
       
    35 	IMPLEMENTATION_PROXY_ENTRY(KSifRefPluginImpId, CSifRefPlugin::NewL)
       
    36 	};
       
    37 
       
    38 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
       
    39 	{
       
    40 	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
       
    41 	return ImplementationTable;
       
    42 	}
       
    43 
       
    44 CSifRefPlugin* CSifRefPlugin::NewL()
       
    45 	{
       
    46 	DEBUG_PRINTF(_L8("Constructing CSifRefPlugin"));
       
    47 	CSifRefPlugin* self = new (ELeave) CSifRefPlugin();
       
    48 	CleanupStack::PushL(self);
       
    49 	self->ConstructL();
       
    50 	CleanupStack::Pop(self);
       
    51 	return self;
       
    52 	}
       
    53 
       
    54 void CSifRefPlugin::ConstructL()
       
    55 	{
       
    56 	iImpl = CSifRefPluginActiveImpl::NewL();
       
    57 	}
       
    58 
       
    59 CSifRefPlugin::~CSifRefPlugin()
       
    60 	{
       
    61 	delete iImpl;
       
    62 	}
       
    63 
       
    64 void CSifRefPlugin::CancelOperation()
       
    65 	{
       
    66 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Cancel"));
       
    67 	iImpl->Cancel();
       
    68 	}
       
    69 
       
    70 void CSifRefPlugin::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
       
    71 										 CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
       
    72 	{
       
    73 	DEBUG_PRINTF(_L8("Reference Installer plug-in - GetComponentInfo by filename"));
       
    74 	iImpl->GetComponentInfo(aFileName, aSecurityContext, aComponentInfo, aStatus);
       
    75 	}
       
    76 
       
    77 void CSifRefPlugin::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
       
    78 						 				CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
       
    79 	{
       
    80 	DEBUG_PRINTF(_L8("Reference Installer plug-in - GetComponentInfo by file handle"));
       
    81 	iImpl->GetComponentInfo(aFileHandle, aSecurityContext, aComponentInfo, aStatus);
       
    82 	}
       
    83 
       
    84 void CSifRefPlugin::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
       
    85 								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
       
    86 								TRequestStatus& aStatus)
       
    87 	{
       
    88 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Install by file name"));
       
    89 	iImpl->Install(aFileName, aSecurityContext, aInputParams, aOutputParams, aStatus);
       
    90 	}
       
    91 
       
    92 void CSifRefPlugin::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
       
    93 								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
       
    94 								TRequestStatus& aStatus)
       
    95 	{
       
    96 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Install by file handle"));
       
    97 	iImpl->Install(aFileHandle, aSecurityContext, aInputParams, aOutputParams, aStatus);
       
    98 	}
       
    99 
       
   100 void CSifRefPlugin::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
       
   101 								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
       
   102 	{
       
   103 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Uninstall"));
       
   104 	iImpl->Uninstall(aComponentId, aSecurityContext, aInputParams, aOutputParams, aStatus);
       
   105 	}
       
   106 
       
   107 void CSifRefPlugin::Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
       
   108 
       
   109 	{
       
   110 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Activate"));
       
   111 	iImpl->Activate(aComponentId, aSecurityContext, aStatus);
       
   112 	}
       
   113 
       
   114 void CSifRefPlugin::Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
       
   115 	{
       
   116 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Deactivate"));
       
   117 	iImpl->Deactivate(aComponentId, aSecurityContext, aStatus);
       
   118 	}
       
   119 
       
   120 //------------------CSifRefPluginActiveImpl---------------------
       
   121 
       
   122 CSifRefPluginActiveImpl* CSifRefPluginActiveImpl::NewL()
       
   123 	{
       
   124 	DEBUG_PRINTF(_L8("Reference Installer plug-in - Constructing CSifRefPluginActiveImpl"));
       
   125 	CSifRefPluginActiveImpl* self = new (ELeave) CSifRefPluginActiveImpl();
       
   126 	CleanupStack::PushL(self);
       
   127 	self->ConstructL();
       
   128 	CleanupStack::Pop(1, self);
       
   129 	return self;
       
   130 	}
       
   131 
       
   132 void CSifRefPluginActiveImpl::ConstructL()
       
   133 	{
       
   134 	CActiveScheduler::Add(this);
       
   135 	User::LeaveIfError(iTransporter.Connect());
       
   136 	}
       
   137 
       
   138 CSifRefPluginActiveImpl::~CSifRefPluginActiveImpl()
       
   139 	{
       
   140 	iTransporter.Close();
       
   141 	}
       
   142 
       
   143 void CSifRefPluginActiveImpl::RunL()
       
   144 	{
       
   145 	TInt res = iStatus.Int();
       
   146 	DEBUG_PRINTF2(_L8("Reference Installer plug-in - Operation finished with result %d"), res);
       
   147 
       
   148 	User::RequestComplete(iClientStatus, res);
       
   149 	iClientStatus = NULL;
       
   150 	}
       
   151 
       
   152 void CSifRefPluginActiveImpl::DoCancel()
       
   153 	{
       
   154 	ASSERT(iClientStatus);
       
   155 	
       
   156 	iTransporter.CancelOperation();
       
   157 	User::RequestComplete(iClientStatus, iStatus.Int());
       
   158 	iClientStatus = NULL;
       
   159 	}
       
   160 
       
   161 TBool CSifRefPluginActiveImpl::CommonRequestPreamble(const TSecurityContext& aSecurityContext, const COpaqueNamedParams& aInputParams, 
       
   162 				COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
       
   163 	{
       
   164 	aStatus = KRequestPending;
       
   165 	iClientStatus = &aStatus;
       
   166 
       
   167 	iInputParams = &aInputParams;
       
   168 	iOutputParams = &aOutputParams;
       
   169 
       
   170 	// Check required capabilities here
       
   171 	TInt silent = EFalse;
       
   172 	TRAP_IGNORE(aInputParams.GetIntByNameL(_L("Silent"), silent));
       
   173 	if (silent)
       
   174 		{
       
   175 		if (!aSecurityContext.HasCapability(ECapabilityTrustedUI))
       
   176 			{
       
   177 			User::RequestComplete(iClientStatus, KErrPermissionDenied);
       
   178 			return EFalse;
       
   179 			}
       
   180 		}
       
   181 
       
   182 	return ETrue;
       
   183 	}
       
   184 
       
   185 void CSifRefPluginActiveImpl::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& /*aSecurityContext*/,
       
   186 												CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
       
   187 	{
       
   188 	aStatus = KRequestPending;
       
   189 	iClientStatus = &aStatus;
       
   190 
       
   191 	iTransporter.GetComponentInfo(aFileName, aComponentInfo, iStatus);
       
   192 	
       
   193 	SetActive();
       
   194 	}
       
   195 
       
   196 void CSifRefPluginActiveImpl::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& /*aSecurityContext*/,
       
   197 												CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
       
   198 	{
       
   199 	aStatus = KRequestPending;
       
   200 	iClientStatus = &aStatus;
       
   201 
       
   202 	iTransporter.GetComponentInfo(aFileHandle, aComponentInfo, iStatus);
       
   203 	
       
   204 	SetActive();
       
   205 	}
       
   206 
       
   207 void CSifRefPluginActiveImpl::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
       
   208 										const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
       
   209 										TRequestStatus& aStatus)
       
   210 	{
       
   211 	DEBUG_PRINTF2(_L("Reference Installer plug-in - install for %S"), &aFileName);
       
   212 
       
   213 	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
       
   214 		{
       
   215 		iTransporter.Install(aFileName, aInputParams, aOutputParams, iStatus);
       
   216 
       
   217 		SetActive();
       
   218 		}
       
   219 	}
       
   220 
       
   221 void CSifRefPluginActiveImpl::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
       
   222 										const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
       
   223 										TRequestStatus& aStatus)
       
   224 	{
       
   225 	DEBUG_PRINTF(_L8("Reference Installer plug-in - install by file handle"));
       
   226 
       
   227 	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
       
   228 		{
       
   229 		iTransporter.Install(aFileHandle, aInputParams, aOutputParams, iStatus);
       
   230 
       
   231 		SetActive();
       
   232 		}
       
   233 	}
       
   234 
       
   235 void CSifRefPluginActiveImpl::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
       
   236 		  const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
       
   237 	{
       
   238 	DEBUG_PRINTF(_L8("Reference Installer plug-in - uninstall"));
       
   239 
       
   240 	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
       
   241 		{
       
   242 		iTransporter.Uninstall(aComponentId, aInputParams, aOutputParams, iStatus);
       
   243 
       
   244 		SetActive();
       
   245 		}
       
   246 	}
       
   247 
       
   248 void CSifRefPluginActiveImpl::Activate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
       
   249 	{
       
   250 	DEBUG_PRINTF(_L8("Reference Installer plug-in - activate"));
       
   251 	
       
   252 	aStatus = KRequestPending;
       
   253 	iClientStatus = &aStatus;
       
   254 
       
   255 	iTransporter.Activate(aComponentId, iStatus);
       
   256 
       
   257 	SetActive();
       
   258 	}
       
   259 
       
   260 void CSifRefPluginActiveImpl::Deactivate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
       
   261 	{
       
   262 	DEBUG_PRINTF(_L8("Reference Installer plug-in - deactivate"));
       
   263 
       
   264 	aStatus = KRequestPending;
       
   265 	iClientStatus = &aStatus;
       
   266 
       
   267 	iTransporter.Deactivate(aComponentId, iStatus);
       
   268 
       
   269 	SetActive();
       
   270 	}