--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/sisxrecognizer/recsisx.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2004-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:
+*
+*/
+
+
+#include "recsisx.h"
+#include "dessisdataprovider.h"
+#include "swicommon.h"
+#include <apadef.h>
+#include "patchdata.h"
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+#include <u32hal.h>
+
+using namespace Swi;
+
+CApaSisxRecognizer::CApaSisxRecognizer() : CApaDataRecognizerType (KApaSisx,
+ CApaDataRecognizerType::ENormal)
+ {
+ iCountDataTypes = KSupportedDataTypesTotal;
+ }
+
+TUint CApaSisxRecognizer::PreferredBufSize ()
+ {
+ return sizeof(TCheckedUid);
+ }
+
+TDataType CApaSisxRecognizer::SupportedDataTypeL (TInt /*aIndex*/) const
+ {
+ return TDataType(KDataTypeSisx);
+ }
+
+void CApaSisxRecognizer::DoRecognizeL (const TDesC& aName, const TDesC8& aBuffer)
+ {
+ iDataType = TDataType(KDataTypeSisx);
+ iConfidence = ENotRecognized;
+ if (aBuffer.Size() < sizeof(TCheckedUid))
+ {
+ return;
+ }
+ TCheckedUid checkedUID(aBuffer.Mid(0, sizeof(TCheckedUid)) );
+ if (checkedUID.UidType()[0] != KUidSisxFile)
+ return;
+
+ const TInt positionOfExtDelimiter=aName.LocateReverse(TChar(KExtDelimiter));
+ TUint8 patchableConst = KSisxRecognizerConst;
+
+#ifdef __WINS__
+// For the emulator allow the constant to be patched via epoc.ini
+UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalIntProperty,
+ (TAny*)"KSisxRecognizerConst", &patchableConst); // read emulator property (if present)
+#endif
+
+ if (patchableConst)
+ {
+ if (positionOfExtDelimiter >= 0)
+ {
+ if ((aName.Mid(positionOfExtDelimiter).CompareF(KFileExtensionSisx) == 0) ||
+ (aName.Mid(positionOfExtDelimiter).CompareF(KFileExtensionLegacySis) == 0))
+ {
+ iConfidence = ECertain;
+ }
+ // All other extentions will be set to ENotRecognized
+ }
+ }
+ else
+ {
+ // When KSisxRecognizerConst is zero, use the following method to recognise file extentions
+ if ((positionOfExtDelimiter >= 0) &&
+ (aName.Mid(positionOfExtDelimiter).CompareF(KFileExtensionSisx) == 0))
+ {
+ iConfidence = ECertain;
+ }
+ else
+ {
+ iConfidence = EPossible;
+ }
+ }
+ }
+
+CApaDataRecognizerType* CApaSisxRecognizer::CreateRecognizerL()
+ {
+ return new (ELeave) CApaSisxRecognizer();
+ }
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(0x10204FC7, CApaSisxRecognizer::CreateRecognizerL)
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
+