installationservices/refswinstallationplugin/source/sifrefplugin.cpp
branchRCL_3
changeset 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/refswinstallationplugin/source/sifrefplugin.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2008-2009 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: 
+* This file implements a SIF plug-in for the Reference Installer.
+*
+*/
+
+
+#include "usiflog.h"
+#include "sifrefplugin.h"
+#include <usif/sif/sif.h>
+#include <usif/sif/sifcommon.h>
+#include <usif/usiferror.h>
+#include <usif/sif/sifplugin.h>
+#include <e32property.h>
+#include <f32file.h>
+
+using namespace Usif;
+
+static const TInt KSifRefPluginImpId = 0x10286350;
+
+static const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(KSifRefPluginImpId, CSifRefPlugin::NewL)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+CSifRefPlugin* CSifRefPlugin::NewL()
+	{
+	DEBUG_PRINTF(_L8("Constructing CSifRefPlugin"));
+	CSifRefPlugin* self = new (ELeave) CSifRefPlugin();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CSifRefPlugin::ConstructL()
+	{
+	iImpl = CSifRefPluginActiveImpl::NewL();
+	}
+
+CSifRefPlugin::~CSifRefPlugin()
+	{
+	delete iImpl;
+	}
+
+void CSifRefPlugin::CancelOperation()
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Cancel"));
+	iImpl->Cancel();
+	}
+
+void CSifRefPlugin::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+										 CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - GetComponentInfo by filename"));
+	iImpl->GetComponentInfo(aFileName, aSecurityContext, aComponentInfo, aStatus);
+	}
+
+void CSifRefPlugin::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+						 				CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - GetComponentInfo by file handle"));
+	iImpl->GetComponentInfo(aFileHandle, aSecurityContext, aComponentInfo, aStatus);
+	}
+
+void CSifRefPlugin::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Install by file name"));
+	iImpl->Install(aFileName, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CSifRefPlugin::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+								TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Install by file handle"));
+	iImpl->Install(aFileHandle, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CSifRefPlugin::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+								const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Uninstall"));
+	iImpl->Uninstall(aComponentId, aSecurityContext, aInputParams, aOutputParams, aStatus);
+	}
+
+void CSifRefPlugin::Activate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Activate"));
+	iImpl->Activate(aComponentId, aSecurityContext, aStatus);
+	}
+
+void CSifRefPlugin::Deactivate(TComponentId aComponentId, const TSecurityContext& aSecurityContext, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Deactivate"));
+	iImpl->Deactivate(aComponentId, aSecurityContext, aStatus);
+	}
+
+//------------------CSifRefPluginActiveImpl---------------------
+
+CSifRefPluginActiveImpl* CSifRefPluginActiveImpl::NewL()
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - Constructing CSifRefPluginActiveImpl"));
+	CSifRefPluginActiveImpl* self = new (ELeave) CSifRefPluginActiveImpl();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(1, self);
+	return self;
+	}
+
+void CSifRefPluginActiveImpl::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	User::LeaveIfError(iTransporter.Connect());
+	}
+
+CSifRefPluginActiveImpl::~CSifRefPluginActiveImpl()
+	{
+	iTransporter.Close();
+	}
+
+void CSifRefPluginActiveImpl::RunL()
+	{
+	TInt res = iStatus.Int();
+	DEBUG_PRINTF2(_L8("Reference Installer plug-in - Operation finished with result %d"), res);
+
+	User::RequestComplete(iClientStatus, res);
+	iClientStatus = NULL;
+	}
+
+void CSifRefPluginActiveImpl::DoCancel()
+	{
+	ASSERT(iClientStatus);
+	
+	iTransporter.CancelOperation();
+	User::RequestComplete(iClientStatus, iStatus.Int());
+	iClientStatus = NULL;
+	}
+
+TBool CSifRefPluginActiveImpl::CommonRequestPreamble(const TSecurityContext& aSecurityContext, const COpaqueNamedParams& aInputParams, 
+				COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iInputParams = &aInputParams;
+	iOutputParams = &aOutputParams;
+
+	// Check required capabilities here
+	TInt silent = EFalse;
+	TRAP_IGNORE(aInputParams.GetIntByNameL(_L("Silent"), silent));
+	if (silent)
+		{
+		if (!aSecurityContext.HasCapability(ECapabilityTrustedUI))
+			{
+			User::RequestComplete(iClientStatus, KErrPermissionDenied);
+			return EFalse;
+			}
+		}
+
+	return ETrue;
+	}
+
+void CSifRefPluginActiveImpl::GetComponentInfo(const TDesC& aFileName, const TSecurityContext& /*aSecurityContext*/,
+												CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.GetComponentInfo(aFileName, aComponentInfo, iStatus);
+	
+	SetActive();
+	}
+
+void CSifRefPluginActiveImpl::GetComponentInfo(RFile& aFileHandle, const TSecurityContext& /*aSecurityContext*/,
+												CComponentInfo& aComponentInfo, TRequestStatus& aStatus)
+	{
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.GetComponentInfo(aFileHandle, aComponentInfo, iStatus);
+	
+	SetActive();
+	}
+
+void CSifRefPluginActiveImpl::Install(const TDesC& aFileName, const TSecurityContext& aSecurityContext,
+										const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+										TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF2(_L("Reference Installer plug-in - install for %S"), &aFileName);
+
+	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
+		{
+		iTransporter.Install(aFileName, aInputParams, aOutputParams, iStatus);
+
+		SetActive();
+		}
+	}
+
+void CSifRefPluginActiveImpl::Install(RFile& aFileHandle, const TSecurityContext& aSecurityContext,
+										const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+										TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - install by file handle"));
+
+	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
+		{
+		iTransporter.Install(aFileHandle, aInputParams, aOutputParams, iStatus);
+
+		SetActive();
+		}
+	}
+
+void CSifRefPluginActiveImpl::Uninstall(TComponentId aComponentId, const TSecurityContext& aSecurityContext,
+		  const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - uninstall"));
+
+	if (CommonRequestPreamble(aSecurityContext, aInputParams, aOutputParams, aStatus))
+		{
+		iTransporter.Uninstall(aComponentId, aInputParams, aOutputParams, iStatus);
+
+		SetActive();
+		}
+	}
+
+void CSifRefPluginActiveImpl::Activate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - activate"));
+	
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.Activate(aComponentId, iStatus);
+
+	SetActive();
+	}
+
+void CSifRefPluginActiveImpl::Deactivate(TComponentId aComponentId, const TSecurityContext& /*aSecurityContext*/, TRequestStatus& aStatus)
+	{
+	DEBUG_PRINTF(_L8("Reference Installer plug-in - deactivate"));
+
+	aStatus = KRequestPending;
+	iClientStatus = &aStatus;
+
+	iTransporter.Deactivate(aComponentId, iStatus);
+
+	SetActive();
+	}