diff -r 000000000000 -r dd21522fd290 codhandler/codrecog/src/CodRecog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/codrecog/src/CodRecog.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,163 @@ +/* +* Copyright (c) 2002 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: +* Implementation of class CCodRecog. +* +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include +#include "CodRecog.h" +#include "CodRecogLogger.h" + +// ================= CONSTANTS ======================= + +/// UID of COD Viewer Application. +LOCAL_D const TUid KCodUidCodViewerApp = { COD_VIEWER_UID }; +/// Preferred recognition buffer size. +const TInt KCodPreferedBufferSize = 1024; +/// COD MIME type string. +_LIT8( KCodMimeType, COD_MIME_TYPE ); +/// COD file extension. +_LIT( KCodExt,".cod" ); +/// COD content recognition pattern (8 bit). +_LIT8( KCod8,"COD-"); +/// COD content recognition pattern (16 bit). +_LIT( KCod16,"COD-"); + +/// COD recog ecom plugin implementation UID. +LOCAL_D const TInt KCodRecogImplementationUid = 0x10008d49; +/// ECOM implementation table. +LOCAL_D const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY\ + ( KCodRecogImplementationUid, CCodRecog::CreateRecognizerL ) + }; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CCodRecog::CCodRecog() +// --------------------------------------------------------- +// +CCodRecog::CCodRecog() +: CApaDataRecognizerType + ( KCodUidCodViewerApp, CApaDataRecognizerType::ENormal ) + { + iCountDataTypes = 1; + } + +// --------------------------------------------------------- +// CCodRecog::PreferredBufSize() +// --------------------------------------------------------- +// +TUint CCodRecog::PreferredBufSize() + { + return KCodPreferedBufferSize; + } + +// --------------------------------------------------------- +// CCodRecog::SupportedDataTypeL() +// --------------------------------------------------------- +// +TDataType CCodRecog::SupportedDataTypeL( TInt aIndex ) const + { + switch ( aIndex ) + { + case 0: + { + return TDataType( KCodMimeType ); + } + + default: + { + return TDataType(); + } + } + } + +// --------------------------------------------------------- +// CCodRecog::CreateRecognizerL() +// --------------------------------------------------------- +// +CApaDataRecognizerType* CCodRecog::CreateRecognizerL() + { + return new (ELeave) CCodRecog(); + } + +// --------------------------------------------------------- +// CCodRecog::DoRecognizeL() +// --------------------------------------------------------- +// +void CCodRecog::DoRecognizeL( const TDesC& aName, const TDesC8& aBuffer ) + { + CLOG_ENTERFN( "CCodRecog::DoRecognizeL" ); + CLOG_WRITE_FORMAT( "DoRecognize: name: %S", &aName ); + + iConfidence = ENotRecognized; + + // Check extension. We cannot use TParse* classes, as the recog is + // called with generated filenames which contain invalid chars and + // panic TParsePtrC. + TInt len( KCodExt().Length() ); + if( aName.Length() >= len && !aName.Right( len ).CompareF( KCodExt ) ) + { + CLOG_WRITE( "DoRecognize: extension is '.cod'" ); + // Named ".cod" + iDataType = TDataType( KCodMimeType ); + iConfidence = ECertain; + } + else + { + CLOG_WRITE( "DoRecognize: pattern search" ); + // Not named ".cod". Recognition by pattern-matching. + // Prepare pointers to buffer (both 8 and 16 bits). + TPtrC8 buf8( aBuffer ); + if ( aBuffer.Length() > KCodPreferedBufferSize ) + { + buf8.Set( aBuffer.Left( KCodPreferedBufferSize ) ); + } + TPtrC buf16( (TText*)buf8.Ptr(), buf8.Length() / 2 ); + // Find COD-specific pattern in buffer (both 8 and 16 bits). + if ( buf8.FindF( KCod8 ) >= 0 || buf16.FindF( KCod16 ) >= 0 ) + { + iDataType = TDataType( KCodMimeType ); + iConfidence = ECertain; + } + } + CLOG_WRITE_FORMAT( "DoRecognize: confidence: %d", iConfidence ); + CLOG_LEAVEFN( "CCodRecog::DoRecognizeL" ); + } + +/** +* Implementation group proxy. +* @param aTableCount Table count is returned here. +* @return Implementation table is returned here. +*/ +EXPORT_C const TImplementationProxy* ImplementationGroupProxy +( TInt& aTableCount ) + { + aTableCount = + sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); + return ImplementationTable; + }