telutils/phoneparser/src/CPhoneGsmParser.cpp
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/phoneparser/src/CPhoneGsmParser.cpp	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,266 @@
+/*
+* 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 "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:  Principal parsing process is defined by the CPhoneGsmParser
+*                class.
+*
+*/
+
+
+// INCLUDE FILES
+#include    <bldvariant.hrh>
+
+#include    "CPhoneGsmParser.h"
+#include    "CPhoneGsmParserResult.h"
+#include    "CPhoneGsmParserBase.h"
+#include    "CPhoneGsmDummyParser.h"
+#include    "CPhoneGsmOptionContainer.h"
+#include    "CPhoneParserFeatures.h"
+#include    "CPhoneGsmOptionContainerBase.h"
+
+// CONSTANTS
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::NewL
+// -----------------------------------------------------------------------------
+//
+CPhoneGsmParser* CPhoneGsmParser::NewL( 
+        CPhoneGsmParserBase* aSsProcedure,
+        CPhoneGsmParserBase* aSimControlProcedure,
+        CPhoneGsmParserBase* aPhoneNumber,
+        CPhoneGsmParserBase* aManufacturerSpecific,
+        CPhoneGsmParserBase* aEmergencyNumberParser,
+        CPhoneGsmParserBase* aVoipNumber,
+        CPhoneGsmParserBase* aImeiParser )
+    {
+    // Ownership of these instances is transferred, thus
+    // creation of the instance must not leave. 
+
+    CPhoneGsmParser* self = 
+        new CPhoneGsmParser(
+            aSsProcedure,
+            aSimControlProcedure,
+            aPhoneNumber,
+            aManufacturerSpecific,
+            aEmergencyNumberParser,
+            aVoipNumber,
+            aImeiParser );
+    
+    if ( !self )
+        {
+        delete aSsProcedure;
+        delete aSimControlProcedure;
+        delete aPhoneNumber;
+        delete aManufacturerSpecific;
+        delete aEmergencyNumberParser;
+        delete aVoipNumber;
+        delete aImeiParser;
+        
+        User::Leave( KErrNoMemory );
+        }
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::~CPhoneGsmParser
+// -----------------------------------------------------------------------------
+//
+CPhoneGsmParser::~CPhoneGsmParser()
+    {
+    delete iGsmSsProcedure;
+    delete iGsmSimControlProcedure;
+    delete iGsmPhoneNumber;
+    delete iGsmManufacturerProcedure;
+    delete iGsmEmergencyNumber;
+    delete iVoipNumber;
+    delete iImeiParser;
+    CPhoneParserFeatures::Free();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::CPhoneGsmParser
+// -----------------------------------------------------------------------------
+//
+CPhoneGsmParser::CPhoneGsmParser( 
+        CPhoneGsmParserBase* aSsProcedure,
+        CPhoneGsmParserBase* aSimControlProcedure,
+        CPhoneGsmParserBase* aPhoneNumber,
+        CPhoneGsmParserBase* aManufacturerSpecific,
+        CPhoneGsmParserBase* aEmergencyNumberParser,
+        CPhoneGsmParserBase* aVoipNumber,
+        CPhoneGsmParserBase* aImeiParser )
+    : iGsmSsProcedure( aSsProcedure ), 
+      iGsmSimControlProcedure( aSimControlProcedure ),
+      iGsmPhoneNumber( aPhoneNumber ),
+      iGsmManufacturerProcedure( aManufacturerSpecific ),
+      iGsmEmergencyNumber( aEmergencyNumberParser ),
+      iVoipNumber( aVoipNumber ),
+      iImeiParser( aImeiParser )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneGsmParser::ConstructL()
+    {
+    // If we didn't receive a parser for something, then create dummy.
+
+    if ( !iGsmSsProcedure )
+        {
+        iGsmSsProcedure = CPhoneGsmDummyParser::NewL();
+        }
+    if ( !iGsmSimControlProcedure )
+        {
+        iGsmSimControlProcedure = CPhoneGsmDummyParser::NewL();
+        }
+    if ( !iGsmPhoneNumber )
+        {
+        iGsmPhoneNumber = CPhoneGsmDummyParser::NewL();
+        }
+    if ( !iGsmManufacturerProcedure )
+        {
+        iGsmManufacturerProcedure = CPhoneGsmDummyParser::NewL();
+        }
+    if ( !iGsmEmergencyNumber )
+        {
+        iGsmEmergencyNumber = CPhoneGsmDummyParser::NewL();
+        }
+    if ( !iVoipNumber )
+        {
+        iVoipNumber = CPhoneGsmDummyParser::NewL();
+        }
+    if ( !iImeiParser )
+        {
+        iImeiParser = CPhoneGsmDummyParser::NewL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::ParseL
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneGsmParser::ParseL( 
+        const TDesC& aString, 
+        CPhoneGsmParserResult& aResult,
+        CPhoneGsmOptionContainerBase& aOptions )
+    {
+    TBool result = EFalse;
+        
+    result = DoParseL(
+            aString,
+            aResult, 
+            static_cast<CPhoneGsmOptionContainer&>( aOptions ) );
+
+    if ( !result )
+        {
+        aResult.ClearL();
+        }
+
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::DoParseL
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneGsmParser::DoParseL( 
+        const TDesC& aString,
+        CPhoneGsmParserResult& aResult,
+        CPhoneGsmOptionContainer& aOptions )
+    {
+    TBool result = EFalse;
+    aResult.ClearL();
+
+    // We do not handle empty strings.
+    if ( !aString.Length() )
+        {
+        return EFalse;
+        }
+
+    TBool sendOperation = aOptions.FindOptionStatus( KPhoneOptionSend );
+
+    // Check if it is the only phone control string, show imei.
+    result = iImeiParser->ParseL( aString, aResult, aOptions );
+    
+    // Check if emergency number.
+    if ( !result )
+        {
+        result = iGsmEmergencyNumber->ParseL( aString, aResult, aOptions );
+        }
+    
+    // First check if string is GSM ss procedure supported by MS.
+    if ( !result )
+        {
+        result = iGsmSsProcedure->ParseL( aString, aResult, aOptions );
+        }
+        
+    if ( !result )
+        {
+        // Check if it is sim control procedure.
+        result = iGsmSimControlProcedure->ParseL( aString, aResult, aOptions );
+        }
+
+    if ( !result )
+        {
+        // Check if it is manufacturer specific procedure.
+        result = 
+            iGsmManufacturerProcedure->ParseL( aString, aResult, aOptions );
+        }
+    if ( !result )
+        {
+        // Check if it voip call.
+        result = iVoipNumber->ParseL( aString, aResult, aOptions );
+        }
+    if ( !result )
+        {
+        result = iGsmPhoneNumber->ParseL( aString, aResult, aOptions );
+        }
+    if ( !result )
+        {
+        result = DefineAsUssdL( aString, aResult, aOptions );
+        } 
+
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneGsmParser::DefineAsUssd
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneGsmParser::DefineAsUssdL( 
+        const TDesC& aString,
+        CPhoneGsmParserResult& aResult,
+        CPhoneGsmOptionContainer& aOptions )
+    {
+    aResult.ClearL();
+    
+    TBool result = aOptions.FindOptionStatus( KPhoneOptionSend );
+    if ( result )
+        {
+        aResult.SetUid( KPhoneUidUnstructuredService );
+        aResult.AddParameterL( aString );
+        }
+    return result;
+    }
+
+//  End of File