srsf/sicc/src/nsssispeechrecognitioncustomcommandparser.cpp
branchRCL_3
changeset 18 cad71a31b7fc
parent 17 8ce15fced3a6
child 19 e36f3802f733
--- a/srsf/sicc/src/nsssispeechrecognitioncustomcommandparser.cpp	Thu Aug 19 09:56:14 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1823 +0,0 @@
-/*
-* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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 is the implementation of the server side for the
-*               speaker independent controller.
-*
-*/
-
-
-// INCLUDE FILES
-#include "srsfbldvariant.hrh"
-#include <e32std.h>
-#include <nsssispeechrecognitioncustomcommandparser.h>
-#include <nsssispeechrecognitioncustomcommands.h>
-#include "nsssispeechrecognitioncustomcommandcommon.h"
-#include "nsssicustomcommanddata.h"
-#include "rubydebug.h"
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::CSISpeechRecognitionCustomCommandParser
-// C++ constructor.
-// -----------------------------------------------------------------------------
-//
-CSISpeechRecognitionCustomCommandParser::CSISpeechRecognitionCustomCommandParser(
-	MSISpeechRecognitionCustomCommandImplementor& aImplementor) :
-	CMMFCustomCommandParserBase(KUidInterfaceSpeakerIndependent),
-	iImplementor(aImplementor),
-    iAdaptationSet( 0 )
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::NewL
-// Two-phased constructor.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CSISpeechRecognitionCustomCommandParser* 
-			CSISpeechRecognitionCustomCommandParser::NewL(
-	MSISpeechRecognitionCustomCommandImplementor& aImplementor)
-	{
-	return new(ELeave) CSISpeechRecognitionCustomCommandParser(aImplementor);
-	
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::~CSISpeechRecognitionCustomCommandParser
-// Destructor for CSISpeechRecognitionCustomCommandParser class
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CSISpeechRecognitionCustomCommandParser::
-			~CSISpeechRecognitionCustomCommandParser()
-	{
-	
-	iPronunciationIDs.Close();
-	iRuleIDs.Close();
-	iModelIDs.Close();
-	iGrammarIDs.Close();
-	iLexiconIDs.Close();
-	iModelBankIDs.Close();
-    iLanguageArray.Close();
-    for ( TInt i = 0; i < iLanguageArrayArray.Count(); i++ )
-        {
-        iLanguageArrayArray[i].Close();
-        }
-    iLanguageArrayArray.Close();
-
-	delete iResultCopyBuffer;	
-	//delete iResultSet;
-    delete iSIResultSet;
-    delete iWordArray;
-    delete iAdaptationSet;
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::HandleRequest
-// Handles the client side request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::HandleRequest(
-	TMMFMessage& aMessage)
-	{
-	ASSERT(aMessage.Destination().InterfaceId() == 
-						KUidInterfaceSpeakerIndependent);
-	TRAPD(error, DoHandleRequestL(aMessage));
-	if(error)
-		aMessage.Complete(error);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoHandleRequestL
-// Decodes aMessage and calls the correct function. This function is trapped by
-// HandleRequest() and the leave code, if any, sent to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoHandleRequestL(
-	TMMFMessage& aMessage)
-    {
-    TPckgBuf<TInt> pckgSize;
-    
-    // call required function to do the requested operation
-    switch( aMessage.Function() )
-        {
-        case ESrAddPronunciation:
-            DoAddPronunciationL(aMessage);
-            break;
-            
-        case ESrAddRule:
-            DoAddRuleL(aMessage);
-            break;
-            
-        case ESrCancel:
-            DoCancel();
-            break;
-            
-        case ESrCommitChanges:
-            DoCommitChangesL();
-            break;
-            
-        case ESrCreateGrammar:
-            DoCreateGrammarL(aMessage);
-            break;
-            
-        case ESrCreateLexicon:
-            DoCreateLexiconL(aMessage);
-            break;
-            
-        case ESrCreateModelBank:
-            DoCreateModelBankL(aMessage);
-            break;
-            
-        case ESrEndRecSession:
-            DoEndRecSessionL();
-            break;
-            
-        case ESrGetAllClientGrammarIDs:
-            DoGetAllClientGrammarIDsL();
-            break;
-            
-        case ESrGetAllClientLexiconIDs:
-            DoGetAllClientLexiconIDsL();
-            break;
-            
-        case ESrGetAllClientModelBankIDs:
-            DoGetAllClientModelBankIDsL();
-            break;
-            
-        case ESrGetAllGrammarIDs:
-            DoGetAllGrammarIDsL();
-            break;
-            
-        case ESrGetAllLexiconIDs:
-            DoGetAllLexiconIDsL();
-            break;
-            
-        case ESrGetAllModelBankIDs:
-            DoGetAllModelBankIDsL();
-            break;
-            
-        case ESrGetAllModelIDs:
-            DoGetAllModelIDsL(aMessage);
-            break;
-            
-        case ESrGetAllPronunciationIDs:
-            DoGetAllPronunciationIDsL(aMessage);
-            break;
-            
-        case ESrGetAllRuleIDs:
-            DoGetAllRuleIDsL(aMessage);
-            break;
-            
-        case ESrGetAvailableStorage:
-            DoGetAvailableStorageL(aMessage);
-            break;
-            
-        case ESrGetEngineProperties:
-            DoGetEnginePropertiesL(aMessage);
-            break;
-            
-        case ESrGetModelCount:
-            DoGetModelCountL(aMessage);
-            break;
-            
-        case ESrGetRuleValidity:
-            DoGetRuleValidityL(aMessage);
-            break;
-            
-        case ESrUtteranceDuration:
-            DoGetUtteranceDurationL(aMessage);
-            break;
-            
-        case ESrLoadGrammar:
-            DoLoadGrammarL(aMessage);
-            break;
-            
-        case ESrActivateGrammar:
-            DoActivateGrammarL(aMessage);
-            break;
-            
-        case ESrDeactivateGrammar:
-            DoDeactivateGrammarL(aMessage);
-            break;
-            
-        case ESrLoadLexicon:
-            DoLoadLexiconL(aMessage);
-            break;
-            
-        case ESrLoadModels:
-            DoLoadModelsL(aMessage);
-            break;
-            
-        case ESrPlayUtterance:
-            DoPlayUtteranceL(aMessage);
-            break;
-            
-        case ESrRecognize:
-            DoRecognizeL(aMessage);
-            break;
-            
-        case ESrRecord:
-            DoRecordL(aMessage);
-            break;
-            
-        case ESrRemoveGrammar:
-            DoRemoveGrammarL(aMessage);
-            break;
-            
-        case ESrRemoveLexicon:
-            DoRemoveLexiconL(aMessage);
-            break;
-            
-        case ESrRemoveModelBank:
-            DoRemoveModelBankL(aMessage);
-            break;
-            
-        case ESrRemoveModel:
-            DoRemoveModelL(aMessage);
-            break;
-            
-        case ESrRemovePronunciation:
-            DoRemovePronunciationL(aMessage);
-            break;
-            
-        case ESrRemoveRule:
-            DoRemoveRuleL(aMessage);
-            break;
-            
-        case ESrRemoveRules:
-            RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoHandleRequestL. case ESrRemoveRules" );
-            DoRemoveRulesL( aMessage );
-            break;
-            
-        case ESrSetClientUid:
-            DoSetClientUidL(aMessage);
-            break;
-            
-        case ESrStartRecSession:
-            DoStartRecSessionL(aMessage);
-            break;
-            
-        case ESrTrain:
-            DoTrainL(aMessage);
-            break;
-            
-        case ESrUnloadRule:
-            DoUnloadRuleL(aMessage);
-            break;
-            
-        case ESrLoadEngineParameters:
-            DoLoadEngineParametersL(aMessage);
-            break;
-            
-        case ESrGetPronunciationIDArraySize:
-            pckgSize() = iPronunciationIDs.Count();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetPronunciationIDArrayContents:
-            DoCopyPronunciationIDArrayL(aMessage);
-            break;
-            
-        case ESrGetRuleIDArraySize:
-            pckgSize() = iRuleIDs.Count();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetRuleIDArrayContents:
-            DoCopyRuleIDArrayL(aMessage);			
-            break;
-            
-        case ESrGetModelIDArraySize:
-            pckgSize() = iModelIDs.Count();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetModelIDArrayContents:
-            DoCopyModelIDArrayL(aMessage);
-            break;
-            
-        case ESrGetGrammarIDArraySize:
-            pckgSize() = iGrammarIDs.Count();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetGrammarIDArrayContents:
-            DoCopyGrammarIDArrayL(aMessage);
-            break;
-            
-        case ESrGetLexiconIDArraySize:
-            pckgSize() = iLexiconIDs.Count();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetLexiconIDArrayContents:
-            DoCopyLexiconIDArrayL(aMessage);
-            break;
-            
-        case ESrGetModelBankIDArraySize:
-            pckgSize() = iModelBankIDs.Count();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetModelBankIDArrayContents:
-            DoCopyModelBankIDArrayL(aMessage);
-            break;
-            
-        case ESrGetClientResultSetSize:
-            DoExternalizeResultSetL();
-            pckgSize() = iResultCopyBuffer->Size();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetClientResultSetSizeSI:
-            DoExternalizeSIResultSetL();
-            pckgSize() = iResultCopyBuffer->Size();
-            aMessage.WriteDataToClientL(pckgSize);
-            break;
-            
-        case ESrGetClientResultSet:
-            DoCopyResultSetL(aMessage);
-            break;
-            
-            // SI main requests
-        case ESrAdapt:
-            DoAdaptL( aMessage );
-            break;
-            
-        case ESrAddPronunciationSI:
-            DoAddPronunciationSIL( aMessage );
-            break;
-            
-        case ESrAddRuleVariant:
-            DoAddRuleVariantL( aMessage );
-            break;
-            
-        case ESrAddVoiceTag:
-            DoAddVoiceTagL( aMessage );
-            break;
-            
-        case ESrAddVoiceTags:
-            DoAddVoiceTagsL( aMessage );
-            break;
-            
-        case ESrCreateRule:
-            DoCreateRuleL( aMessage );
-            break;
-            
-        case ESrEndRecord:
-            DoEndRecordL( aMessage );
-            break;
-            
-        case ESrRecognizeSI:
-            DoRecognizeSIL( aMessage );
-            break;
-            
-        case ESrUnloadGrammar:
-            DoUnloadGrammarL( aMessage );
-            break;
-            
-        case ESrAddSindeVoiceTag:
-            DoAddSindeVoiceTagL( aMessage );
-            break;
-            
-        case ESrAddSindeVoiceTags:
-            DoAddSindeVoiceTagsL( aMessage );
-            break;
-            
-        case ESrPreStartSampling:
-            DoPreStartSamplingL( aMessage );
-            break;
-            
-        default:
-            RUBY_DEBUG1( "CSISpeechRecognitionCustomCommandParser::DoHandleRequestL. Unknown function [%d]. Leaving", aMessage.Function() );
-            User::Leave(KErrNotSupported);
-            
-        }	// end of switch
-    
-    
-    aMessage.Complete(KErrNone);
-    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddPronunciationL
-// Calls the controller plugin to add a pronunciation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddPronunciationL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoAddPronunciationL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddRuleL
-// Calls the controller plugin to add a rule.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoAddRuleL(
-	TMMFMessage& aMessage)
-	{
-
-	// Async
-	TSrsAddRulePckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TSrsAddRule srsAddRule = pckg();
-
-	iImplementor.MSrAddRuleL( srsAddRule.iGrammarID, srsAddRule.iLexiconID,
-							 srsAddRule.iPronunciationID, *srsAddRule.iRuleID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCancel
-// Calls the controller plugin to cancel the currect asynchronous operation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoCancel()
-	{
-
-	iImplementor.MSrCancel();
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCommitChanges
-// Saves the current trained model into a permanent storage.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoCommitChangesL()
-	{
-
-	iImplementor.MSrCommitChangesL();
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCreateGrammarL
-// Calls the controller plugin to create a grammar.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoCreateGrammarL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPtrPckg srsGrammarIDPtrPckg;
-	aMessage.ReadData1FromClientL(srsGrammarIDPtrPckg);
-	TSIGrammarID* grammarID = srsGrammarIDPtrPckg();
-	iImplementor.MSrCreateGrammarL(*grammarID) ;
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCreateLexiconL
-// Calls the controller plugin to create a lexicon.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoCreateLexiconL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsLexiconIDPtrPckg srsLexiconIDPtrPckg;
-	aMessage.ReadData1FromClientL(srsLexiconIDPtrPckg);
-	TSILexiconID* lexiconID = srsLexiconIDPtrPckg();
-	iImplementor.MSrCreateLexiconL(*lexiconID) ;
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCreateModelBankL
-// Calls the controller plugin to create a model bank.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoCreateModelBankL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsModelBankIDPtrPckg modelBankIDPtrPckg;
-	aMessage.ReadData1FromClientL(modelBankIDPtrPckg);
-	TSIModelBankID* modelBankID = modelBankIDPtrPckg();
-	iImplementor.MSrCreateModelBankL(*modelBankID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoEndRecSessionL
-// Calls the controller plugin to end the current recognition session and free
-// the allocated resources.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoEndRecSessionL()
-	{
-
-	iImplementor.MSrEndRecSessionL();
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllClientGrammarIDsL
-// Calls the controller plugin to get all client grammar IDs.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllClientGrammarIDsL()
-	{
-
-	// Async
-	iGrammarIDs.Reset();
-	iImplementor.MSrGetAllClientGrammarIDsL(iGrammarIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllClientLexiconIDsL
-// Calls the controller plugin to get all client lexicon IDs.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllClientLexiconIDsL()
-	{
-
-	// Async
-	iLexiconIDs.Reset();
-	iImplementor.MSrGetAllClientLexiconIDsL(iLexiconIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllClientModelBankIDsL
-// Calls the controller plugin to get all client model bank IDs.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllClientModelBankIDsL()
-	{
-
-	// Async
-	iModelBankIDs.Reset();
-	iImplementor.MSrGetAllClientModelBankIDsL(iModelBankIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllGrammarIDsL
-// Calls the controller plugin to get all grammar IDs for all clients.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllGrammarIDsL()
-	{
-
-	// Async
-	iGrammarIDs.Reset();
-	iImplementor.MSrGetAllGrammarIDsL(iGrammarIDs);
-	
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllLexiconIDsL
-// Calls the controller plugin to get all lexicon IDs for all clients.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllLexiconIDsL()
-	{	
-
-	// Async
-	iLexiconIDs.Reset();
-	iImplementor.MSrGetAllLexiconIDsL(iLexiconIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllModelBankIDsL
-// Calls the controller plugin to get all model bank IDs.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllModelBankIDsL()
-	{
-
-	// Async
-	iModelBankIDs.Reset();
-	iImplementor.MSrGetAllModelBankIDsL(iModelBankIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllModelIDsL
-// Calls the controller plugin to get all model IDs from a model bank.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllModelIDsL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoGetAllModelIDsL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllPronunciationIDsL
-// Calls the controller plugin to get all pronunciation IDs from a lexicon.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllPronunciationIDsL(
-	TMMFMessage& aMessage)
-	{
-
-	// Async
-	TSrsLexiconIDPckg lexiconIDPckg;
-	iPronunciationIDs.Reset();
-	aMessage.ReadData1FromClientL(lexiconIDPckg);
-
-	iImplementor.MSrGetAllPronunciationIDsL(lexiconIDPckg(), iPronunciationIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAllRuleIDsL
-// Calls the controller plugin to get all rule IDs from a grammar.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAllRuleIDsL(
-	TMMFMessage& aMessage)
-	{
-
-	// Async
-	TSrsGrammarIDPckg grammarIDPckg;
-	iRuleIDs.Reset();
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-
-	iImplementor.MSrGetAllRuleIDsL(grammarIDPckg(), iRuleIDs);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetAvailableStorageL
-// Calls the controller plugin to get the available storage for training new 
-// models.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetAvailableStorageL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoGetAvailableStorageL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetEnginePropertiesL
-// Calls the controller plugin to get the engine properties.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetEnginePropertiesL(
-	TMMFMessage& aMessage)
-	{
-
-	RArray<TInt> propertyIDs;
-	RArray<TInt> propertyValues;
-	CleanupClosePushL(propertyIDs);
-	CleanupClosePushL(propertyValues);
-	DoExtractIntArrayFromData1L(aMessage, propertyIDs);
-	iImplementor.MSrGetEnginePropertiesL(propertyIDs,propertyValues);
-	// the custom command is aware of the size of the result, so it can copy the data back directly
-	DoCopyIntArrayL(aMessage, propertyValues);
-	CleanupStack::PopAndDestroy(2); //propertyIDs, propertyValues
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetModelCountL
-// Calls the controller plugin to get the number of models in a model bank.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetModelCountL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoGetModelCountL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetRuleValidityL
-// Calls the controller plugin to determine if a rule is valid.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetRuleValidityL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsRuleValidityPckg srsRuleValidityPckg;
-	aMessage.ReadData1FromClientL(srsRuleValidityPckg);
-	TSrsRuleValidity srsRuleValidity = srsRuleValidityPckg();
-	iImplementor.MSrGetRuleValidityL( srsRuleValidity.iGrammarID, 
-				srsRuleValidity.iRuleID, *srsRuleValidity.iRuleValid );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoGetUtteranceDurationL
-// Calls the controller plugin to get the utterance duration.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoGetUtteranceDurationL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoGetUtteranceDurationL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoLoadGrammarL
-// Calls the controller plugin to load the specified grammar.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoLoadGrammarL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPckg grammarIDPckg;
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-	TSIGrammarID grammarID = grammarIDPckg();
-	iImplementor.MSrLoadGrammarL( grammarID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoActivateGrammarL
-// Calls the controller plugin to activate the specified grammar.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoActivateGrammarL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPckg grammarIDPckg;
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-	TSIGrammarID grammarID = grammarIDPckg();
-	iImplementor.MSrActivateGrammarL( grammarID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoDeactivateGrammarL
-// Calls the controller plugin to deactivate the specified grammar.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoDeactivateGrammarL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPckg grammarIDPckg;
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-	TSIGrammarID grammarID = grammarIDPckg();
-	iImplementor.MSrDeactivateGrammarL( grammarID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoLoadLexiconL
-// Calls the controller plugin to load the specified lexican.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoLoadLexiconL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsLexiconIDPckg lexiconIDPckg;
-	aMessage.ReadData1FromClientL(lexiconIDPckg);
-	TSILexiconID lexiconID = lexiconIDPckg();
-	iImplementor.MSrLoadLexiconL(lexiconID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoLoadModelsL
-// Calls the controller plugin to load all models from a model bank.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoLoadModelsL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsModelBankIDPckg modelBankIDPckg;
-	aMessage.ReadData1FromClientL(modelBankIDPckg);
-	TSIModelBankID modelBankID = modelBankIDPckg();
-	iImplementor.MSrLoadModelsL(modelBankID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoPlayUtteranceL
-// Calls the controller plugin to play a previously recorded utterance.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoPlayUtteranceL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoPlayUtteranceL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRecognizeL
-// Calls the controller plugin to recognize an utterance.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRecognizeL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoRecognizeL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRecordL
-// Calls the controller plugin to start recording an utterance for either 
-// training or recognition
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRecordL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsTimeIntervalMicroSeconds32Pckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TTimeIntervalMicroSeconds32 recordDuration = pckg();
-	iImplementor.MSrRecordL(recordDuration);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoPreStartSamplingL
-// Calls the controller plugin.
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoPreStartSamplingL(
-    TMMFMessage& /*aMessage*/ )
-    {
-    iImplementor.MSrPreStartSamplingL();
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemoveGrammarL
-// Calls the controller plugin to remove a grammar.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRemoveGrammarL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TSIGrammarID grammarID = pckg();
-	iImplementor.MSrRemoveGrammarL(grammarID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemoveLexiconL
-// Calls the controller plugin to remove a lexicon.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRemoveLexiconL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsLexiconIDPckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TSILexiconID lexiconID = pckg();
-	iImplementor.MSrRemoveLexiconL(lexiconID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemoveModelBankL
-// Calls the controller plugin to remove a model bank and all associated models.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRemoveModelBankL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsModelBankIDPckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TSIModelBankID modelBankID = pckg();
-	iImplementor.MSrRemoveModelBankL(modelBankID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemoveModelL
-// Calls the controller plugin to remove a model from a model bank.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRemoveModelL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsModelBankIDPckg modelBankIDPckg;
-	aMessage.ReadData1FromClientL(modelBankIDPckg);
-	TSIModelBankID modelBankID = modelBankIDPckg();
-	TSrsModelIDPckg modelIDPckg;
-	aMessage.ReadData2FromClientL(modelIDPckg);
-	TSIModelBankID modelID = modelIDPckg();
-	iImplementor.MSrRemoveModelL(modelBankID, modelID);
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemovePronunciationL
-// Calls the controller plugin to remove a pronunciation.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRemovePronunciationL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsLexiconIDPckg lexiconIDPckg;
-	aMessage.ReadData1FromClientL(lexiconIDPckg);
-	TSILexiconID lexiconID = lexiconIDPckg();
-	TSrsPronunciationIDPckg pronunciationIDPckg;
-	aMessage.ReadData2FromClientL(pronunciationIDPckg);
-	TSIPronunciationID pronunciationID = pronunciationIDPckg();
-	iImplementor.MSrRemovePronunciationL( lexiconID, pronunciationID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemoveRuleL
-// Calls the controller plugin to remove a rule.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoRemoveRuleL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPckg grammarIDPckg;
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-	TSIGrammarID grammarID = grammarIDPckg();
-	TSrsRuleIDPckg ruleIDPckg;
-	aMessage.ReadData2FromClientL(ruleIDPckg);
-	TSIRuleID ruleID = ruleIDPckg();
-	iImplementor.MSrRemoveRuleL( grammarID, ruleID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoSetClientUid
-// Sets the client's UID for data ownership identification.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoSetClientUidL(TMMFMessage& aMessage)
-{
-    RUBY_DEBUG_BLOCK( "CSISpeechRecognitionCustomCommandParser::DoSetClientUidL" );
-
-	TSrsUidPckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TUid uid = pckg();
-	iImplementor.MSrSetClientUid(uid);
-
-}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoStartRecSessionL
-// Calls the controller plugin to begin a recognition session.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoStartRecSessionL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsRecognitionModePckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TNSSRecognitionMode mode = pckg();
-	iImplementor.MSrStartRecSessionL( mode );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoTrainL
-// Calls the controller plugin to begin a recognition session.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoTrainL(
-	TMMFMessage& /*aMessage*/)
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoTrainL is NOT supported" );
-    User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoUnloadRuleL
-// Calls the controller plugin to add a rule.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CSISpeechRecognitionCustomCommandParser::DoUnloadRuleL(
-	TMMFMessage& aMessage)
-	{
-
-	TSrsGrammarIDPckg grammarIDPckg;
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-	TSIGrammarID grammarID = grammarIDPckg();
-	TSrsRuleIDPckg ruleIDPtrPckg;
-	aMessage.ReadData2FromClientL(ruleIDPtrPckg);
-	TSIRuleID ruleID = ruleIDPtrPckg();
-
-	iImplementor.MSrUnloadRuleL( grammarID, ruleID );
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoLoadEngineParametersL
-// Calls the controller plugin to upload the parameters into the engine.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoLoadEngineParametersL(
-	TMMFMessage& aMessage)
-	{
-
-	RArray<TInt> parameters;
-	RArray<TInt> values;
-	CleanupClosePushL(parameters);
-	CleanupClosePushL(values);
-	DoExtractIntArrayFromData1L(aMessage, parameters);
-	DoExtractIntArrayFromData2L(aMessage, values);
-	iImplementor.MSrLoadEngineParametersL(parameters,values);
-	CleanupStack::PopAndDestroy(2); // parameters, values
-	
-	}
-
-// ==================== SI Extensions ==========================================
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAdaptL
-// Adapts the acoustic models to a user's voice.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAdaptL(
-    TMMFMessage& aMessage)
-    {
-    HBufC8* resultSetBuf = SICustomCommandData::ReadMessageDataLC( aMessage, 1 );
-
-    TPckgBuf<TInt> correctPckg;
-    aMessage.ReadData2FromClientL( correctPckg );
-
-    RDesReadStream resultSetStream;
-    CleanupClosePushL( resultSetStream );
-    resultSetStream.Open( *resultSetBuf );
-
-    if ( iAdaptationSet )
-        {
-        delete iAdaptationSet;
-        iAdaptationSet = 0;
-        }
-
-    iAdaptationSet = CSIClientResultSet::NewL();
-    iAdaptationSet->InternalizeL( resultSetStream );
-
-    iImplementor.MSrAdaptL( *iAdaptationSet, correctPckg() );
-
-    CleanupStack::PopAndDestroy( &resultSetStream );
-    CleanupStack::PopAndDestroy( resultSetBuf );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddPronunciationSIL
-// Adds a speaker independent pronunciation
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddPronunciationSIL(
-    TMMFMessage& aMessage)
-    {
-    TSrsAddPronunciationSIPckg pckg;
-    TSrsAddPronunciationSI* addPronunData;
-
-    aMessage.ReadData1FromClientL( pckg );
-    addPronunData = &pckg();
-
-    // Read the phrase to be trained.
-    HBufC8* textData = SICustomCommandData::ReadMessageDataLC( aMessage, 2 );
-
-    // The phrase is in 8-bit descriptor, altough its structure is 16-bit Unicode.
-    // We make a 16-bit TPtr, which points to the same memory area.
-    TUint16* trainTextAddress = (TUint16*)textData->Ptr();
-    TInt     trainTextLength  = addPronunData->iTextLength;
-
-    // Check against buffer overrun before making the descriptor.
-    TInt trainTextSize = 2 * trainTextLength;
-    if ( trainTextSize > textData->Size() )
-        {
-        User::Leave( KErrCorrupt );
-        }
-
-    // Make the descriptor.
-    TPtrC16 trainText( trainTextAddress, trainTextLength );
-
-    iImplementor.MSrAddPronunciationL(
-        addPronunData->iLexiconID,
-        trainText,
-        addPronunData->iLanguage,
-        *addPronunData->iPronunciationIDPtr );
-
-    CleanupStack::PopAndDestroy( textData );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddRuleVariantL
-// Adds a rule variant
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-
-void CSISpeechRecognitionCustomCommandParser::DoAddRuleVariantL(
-    TMMFMessage& aMessage)
-    {
-    TSrsAddRuleVariantPckg pckg;
-    TSrsAddRuleVariant* data;
-
-    aMessage.ReadData1FromClientL( pckg );
-    data = &pckg();
-
-    // Read the second parameter slot of aMessage.
-    HBufC8* pronunChunk = SICustomCommandData::ReadMessageDataLC( aMessage, 2 );
-    // Stack: pronunChunk
-
-    RArray<TSIPronunciationID> pronunArray;
-    CleanupClosePushL( pronunArray ); // Stack: pronunChunk, pronunArray
-
-    SICustomCommandData::InternalizePronunArrayL(
-        *pronunChunk,
-        data->iPronunIDCount,
-        pronunArray );
-
-    iImplementor.MSrAddRuleVariantL(
-        data->iGrammarID,
-        data->iLexiconID,
-        pronunArray,
-        data->iRuleID,
-        *data->iRuleVariantID
-        );
-
-    CleanupStack::PopAndDestroy( &pronunArray );
-    CleanupStack::PopAndDestroy( pronunChunk );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddVoiceTag
-// Adds a voice tag
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddVoiceTagL(
-    TMMFMessage& aMessage)
-    {
-    if ( iWordArray != 0 )
-        {
-        delete iWordArray;
-        iWordArray = 0;
-        }
-
-    TSrsAddVoiceTagPckg pckg;
-    TSrsAddVoiceTag *params = &pckg();
-
-    aMessage.ReadData1FromClient( pckg );
-
-    HBufC8* phraseBuf = SICustomCommandData::ReadMessageDataLC( aMessage, 2 );
-     // Stack: phraseBuf
-
-    // !!!! Is it able to call ~MDesCArray, as MDesCArray is not derived from CBase?
-    iWordArray = SICustomCommandData::InternalizeDesCArrayL( *phraseBuf );
-
-    iLanguageArray.Reset();
-    params->ListLanguagesL( iLanguageArray );
-
-    iImplementor.MSrAddVoiceTagL(
-        *iWordArray, 
-        iLanguageArray, 
-        params->iLexiconID, 
-        params->iGrammarID, 
-        *params->iRuleID );
-
-    CleanupStack::PopAndDestroy( phraseBuf );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddVoiceTags
-// Adds several voice tags
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddVoiceTagsL(
-    TMMFMessage& aMessage)
-    {
-    RPointerArray<MDesCArray>* phraseArray = 0;
-    // The 2 parameter slots contain:
-    //  1. Headers: Various identifiers
-    //  2. Phrases: Recognition phrases in an array.
-
-    // Header storage
-    TSrsAddVoiceTagPckg pckg;
-    TSrsAddVoiceTag *params = &pckg();
-
-    // Phrase storage
-
-    aMessage.ReadData1FromClient( pckg );
-    HBufC8* phraseBuf = SICustomCommandData::ReadMessageDataLC( aMessage, 2 );
-    // Stack: phraseBuf
-
-    phraseArray = SICustomCommandData::InternalizeDesCArrayArrayL( *phraseBuf );
-    CleanupStack::PushL( phraseArray );
-
-    iLanguageArray.Reset();
-    params->ListLanguagesL( iLanguageArray );
-
-    CleanupStack::Pop( phraseArray );
-
-    iImplementor.MSrAddVoiceTagsL(
-        phraseArray,
-        iLanguageArray,
-        params->iLexiconID,
-        params->iGrammarID,
-        iRuleIDs
-        );
-
-    CleanupStack::PopAndDestroy( phraseBuf );
-    }
-
-#ifdef __SINDE_TRAINING
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagL
-// 
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagL( TMMFMessage& aMessage )
-    {
-    if ( iWordArray != NULL )
-        {
-        delete iWordArray;
-        iWordArray = NULL;
-        }
-
-    TSrsAddSindeVoiceTagPckg pckg;
-    TSrsAddSindeVoiceTag *params = &pckg();
-
-    aMessage.ReadData1FromClient( pckg );
-
-    HBufC8* phraseBuf = SICustomCommandData::ReadMessageDataLC( aMessage, 2 );
-     // Stack: phraseBuf
-
-    iWordArray = SICustomCommandData::InternalizeDesCArrayL( *phraseBuf );
-
-    for ( TInt i = 0; i < iLanguageArrayArray.Count(); i++ )
-        {
-        iLanguageArrayArray[i].Close();
-        }
-    iLanguageArrayArray.Reset();
-    params->ListLanguagesL( iLanguageArrayArray );
-
-    iImplementor.MSrAddSindeVoiceTagL( *iWordArray, 
-                                       iLanguageArrayArray, 
-                                       params->iLexiconID, 
-                                       params->iGrammarID, 
-                                       *params->iRuleID );
-
-    CleanupStack::PopAndDestroy( phraseBuf );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagsL
-//
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagsL( TMMFMessage& aMessage )
-    {
-    RPointerArray<MDesCArray>* phraseArray = 0;
-    // The 2 parameter slots contain:
-    //  1. Headers: Various identifiers
-    //  2. Phrases: Recognition phrases in an array.
-
-    // Header storage
-    TSrsAddSindeVoiceTagPckg pckg;
-    TSrsAddSindeVoiceTag *params = &pckg();
-
-    // Phrase storage
-
-    aMessage.ReadData1FromClient( pckg );
-    HBufC8* phraseBuf = SICustomCommandData::ReadMessageDataLC( aMessage, 2 );
-    // Stack: phraseBuf
-
-    phraseArray = SICustomCommandData::InternalizeDesCArrayArrayL( *phraseBuf );
-    CleanupStack::PushL( phraseArray );
-
-    for ( TInt i = 0; i < iLanguageArrayArray.Count(); i++ )
-        {
-        iLanguageArrayArray[i].Close();
-        }
-    iLanguageArrayArray.Reset();
-    params->ListLanguagesL( iLanguageArrayArray );
-
-
-    iImplementor.MSrAddSindeVoiceTagsL( phraseArray, iLanguageArrayArray,
-                                        params->iLexiconID, params->iGrammarID,
-                                        iRuleIDs );
-
-    CleanupStack::Pop( phraseArray );
-    CleanupStack::PopAndDestroy( phraseBuf );
-    }
-
-#else // __SINDE_TRAINING
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagL
-// 
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagL( TMMFMessage& /*aMessage*/ )
-    {
-    User::Leave( KErrNotSupported );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagsL
-//
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoAddSindeVoiceTagsL( TMMFMessage& /*aMessage*/ )
-    {
-    User::Leave( KErrNotSupported );
-    }
-#endif // __SINDE_TRAINING
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCreateRule
-// Creates an empty rule
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCreateRuleL(
-    TMMFMessage& aMessage)
-    {
-    TSrsAddRulePckg pckg;
-    TSrsAddRule* params = &(pckg());
-
-	aMessage.ReadData1FromClientL(pckg);
-
-    iImplementor.MSrCreateRuleL( params->iGrammarID, *params->iRuleID );
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoEndRecord
-// Stops recognition
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoEndRecordL(
-    TMMFMessage& /*aMessage*/)
-    {
-    iImplementor.MSrEndRecordL();
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRecognizeSI
-// Starts a speaker independent recognition
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoRecognizeSIL(
-    TMMFMessage& aMessage)
-    {
-	// remove any previous result set, if any
-	if (iSIResultSet != NULL)
-	{
-		delete iSIResultSet;
-		iSIResultSet = NULL;
-	}
-
-    // Read data chunk of CSIClientResultSet
-    HBufC8* dataBuffer = SICustomCommandData::ReadMessageDataLC( aMessage, 1 );
-
-    // Set up stream
-	RDesReadStream stream( *dataBuffer );
-	CleanupClosePushL(stream);
-
-    // Convert chunk to proper type
-	iSIResultSet = CSIClientResultSet::NewL();
-	iSIResultSet->InternalizeL(stream);
-
-    // Recognize
-	iImplementor.MSrRecognizeL(*iSIResultSet);
-
-	CleanupStack::PopAndDestroy(&stream);//stream
-    CleanupStack::PopAndDestroy(dataBuffer);//databuffer
-    }
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoUnloadGrammar
-// Deactivates a grammar from the current recognition vocabulary
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoUnloadGrammarL(
-    TMMFMessage& aMessage)
-    {
-	TSrsGrammarIDPckg pckg;
-	aMessage.ReadData1FromClientL(pckg);
-	TSIGrammarID grammarID = pckg();
-
-	iImplementor.MSrUnloadGrammarL(grammarID);
-    }
-
-// ==================== SI Extensions end ======================================
-
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyPronunciationIDArrayL
-// Copy the pronunciation IDs to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyPronunciationIDArrayL(
-	TMMFMessage& aMessage)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-	for (TInt i=0;i<iPronunciationIDs.Count();i++)
-	{
-		stream.WriteUint32L(iPronunciationIDs[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-	
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyModelIDArrayL
-// Copy the model IDs to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyModelIDArrayL(
-	TMMFMessage& aMessage)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-	for (TInt i=0;i<iModelIDs.Count();i++)
-	{
-		stream.WriteUint32L(iModelIDs[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	
-//	iModelIDs.Close();
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyRuleIDArrayL
-// Copy the rule IDs to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyRuleIDArrayL(
-	TMMFMessage& aMessage)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-	for (TInt i=0;i<iRuleIDs.Count();i++)
-	{
-		stream.WriteUint32L(iRuleIDs[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-
-	}
-	
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoRemoveRules
-// Remove rules by their IDS
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoRemoveRulesL( TMMFMessage& aMessage )
-	{
-    RUBY_DEBUG_BLOCK( "CSISpeechRecognitionCustomCommandParser::DoRemoveRulesL" );
-
-	TSrsGrammarIDPckg grammarIDPckg;
-	aMessage.ReadData1FromClientL(grammarIDPckg);
-	TSIGrammarID grammarID = grammarIDPckg();
-	RArray<TInt> ruleIDs;
-	CleanupClosePushL( ruleIDs );
-//	TMMFMessage& aMessage, 
-//	RArray<TInt>& aArray)
-	DoExtractIntArrayFromData2L(aMessage, ruleIDs);
-
-	
-	iRuleIDs.Reset();
-	for( TInt i = 0; i < ruleIDs.Count(); i++) 
-		{
-		iRuleIDs.Append(ruleIDs[i]);
-		}
-
-	//iImplementor.MSrRemoveRulesL( grammarID, reinterpret_cast<RArray<TUint32>&> ( forwardedRuleIDs ) );
-    iImplementor.MSrRemoveRulesL( grammarID, iRuleIDs );
-
-	CleanupStack::PopAndDestroy();  // ruleIDs
-	}
-
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyGrammarIDArrayL
-// Copy the grammar IDs to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyGrammarIDArrayL(
-	TMMFMessage& aMessage)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-	for (TInt i=0;i<iGrammarIDs.Count();i++)
-	{
-		stream.WriteUint32L(iGrammarIDs[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyLexiconIDArrayL
-// Copy the lexicon IDs to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyLexiconIDArrayL(
-	TMMFMessage& aMessage)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-	for (TInt i=0;i<iLexiconIDs.Count();i++)
-	{
-		stream.WriteUint32L(iLexiconIDs[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyModelBankIDArrayL
-// Copy the model bank IDs to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyModelBankIDArrayL(
-	TMMFMessage& aMessage)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-	for (TInt i=0;i<iModelBankIDs.Count();i++)
-	{
-		stream.WriteUint32L(iModelBankIDs[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoExternalizeResultSetL
-// Externalize the client result set. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoExternalizeResultSetL()
-	{
-    RUBY_DEBUG0( "CSISpeechRecognitionCustomCommandParser::DoExternalizeResultSetL is NOT supported" );
-	User::Leave( KErrNotSupported );
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyResultSetL
-// Copy the recognition result set to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoCopyResultSetL(
-	TMMFMessage& aMessage)
-	{
-
-	// make sure we have a copy buffer available.
-	if ( iResultCopyBuffer == NULL )
-	{
-		User::Leave(KErrNotReady);
-	}
-
-	aMessage.WriteDataToClientL(iResultCopyBuffer->Ptr(0));
-	delete iResultCopyBuffer;
-	iResultCopyBuffer = NULL;
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoExternalizeSIResultSetL
-// Externalize the client result set. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoExternalizeSIResultSetL()
-	{
-
-	// make sure we have a result set available.
-	if ( iSIResultSet == NULL )
-	{
-		User::Leave(KErrNotReady);
-	}
-	
-	// allocate the result copy buffer if needed.
-	if (iResultCopyBuffer == NULL ) 
-	{
-		iResultCopyBuffer = CBufFlat::NewL(KExpandSize);
-	}
-	else
-	{
-		iResultCopyBuffer->Reset();	// use existing buffer, clear previous results
-	}
-
-	RBufWriteStream stream;
-	stream.Open(*iResultCopyBuffer);
-	CleanupClosePushL(stream);
-	iSIResultSet->ExternalizeL(stream);
-	delete iSIResultSet; // the controller side version is no longer needed
-	iSIResultSet = NULL;
-	CleanupStack::PopAndDestroy(1); //stream
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayFromData1L
-// Extract an integer array from client data 1.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayFromData1L(
-	TMMFMessage& aMessage, 
-	RArray<TInt>& aArray)
-	{
-	TInt size = aMessage.SizeOfData1FromClient();
-	HBufC8* buf = HBufC8::NewL(size);
-	CleanupStack::PushL(buf);
-	TPtr8 ptr = buf->Des();
-	aMessage.ReadData1FromClientL(ptr);
-	DoExtractIntArrayL(ptr,aArray);
-	CleanupStack::PopAndDestroy(buf);
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayFromData2L
-// Extract an integer array from client data 2.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayFromData2L(
-	TMMFMessage& aMessage, 
-	RArray<TInt>& aArray)
-	{
-	
-	TInt size = aMessage.SizeOfData2FromClient();
-	HBufC8* buf = HBufC8::NewL(size);
-	CleanupStack::PushL(buf);
-	TPtr8 ptr = buf->Des();
-	aMessage.ReadData2FromClientL(ptr);
-	DoExtractIntArrayL(ptr,aArray);
-	CleanupStack::PopAndDestroy(buf);
-	
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayL
-// Extract an integer array from a descriptor into an RArray.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------	
-void CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayL(
-	TDes8& aDescriptor, 
-	RArray<TInt>& aArray)
-	{
-
-	RDesReadStream stream(aDescriptor);
-	CleanupClosePushL(stream);
-	
-	TInt numberElements;
-	numberElements = stream.ReadInt32L();
-
-    TInt i( 0 );
-	for ( i = 0; i<numberElements; i++)
-		{
-		User::LeaveIfError(aArray.Append(stream.ReadInt32L()));
-		}
-	CleanupStack::PopAndDestroy(); //stream
-	
-#ifdef _DEBUG
-        RUBY_DEBUG1( "CSISpeechRecognitionCustomCommandParser::DoExtractIntArrayL Read array of size [%d]", aArray.Count() );
-
-		for( i = 0; i < aArray.Count(); i++) 
-			{
-			RUBY_DEBUG2( "::DoExtractIntArrayL aArray[%d] = [%d]", i, aArray[i] );
-			}
-#endif
-
-	}
-
-// -----------------------------------------------------------------------------
-// CSISpeechRecognitionCustomCommandParser::DoCopyIntArrayL
-// Copy data from an RArray to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------	
-void CSISpeechRecognitionCustomCommandParser::DoCopyIntArrayL(
-	TMMFMessage& aMessage, 
-	const RArray<TInt>& aArray)
-	{
-
-	CBufFlat* dataCopyBuffer = CBufFlat::NewL(KExpandSize);
-	CleanupStack::PushL(dataCopyBuffer);
-	RBufWriteStream stream;
-	stream.Open(*dataCopyBuffer);
-	CleanupClosePushL(stream);
-
-	for (TInt i=0;i<aArray.Count();i++)
-	{
-		stream.WriteUint32L(aArray[i]);
-	}
-
-	aMessage.WriteDataToClientL(dataCopyBuffer->Ptr(0));
-	CleanupStack::PopAndDestroy(2); //stream,dataCopyBuffer
-
-	}
-
-
-// End of file