| branch | RCL_3 |
| changeset 21 | f742655b05bf |
| parent 20 | 65a3ef1d5bd0 |
| child 22 | d38647835c2e |
--- a/voipplugins/voipadapters/voipxmlprovisioning/voipxmlprocessor/src/voipxmlparser.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -* Copyright (c) 2009-2010 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: VoIP settings XML handler -* -*/ - - -#include <e32base.h> -#include <gmxmldocument.h> -#include <gmxmltext.h> -#include <e32cmn.h> -#include <e32def.h> - -#include "voipxmlparser.h" -#include "voipxmlparamhandler.h" -#include "voipxmlprocessordefaults.h" -#include "voipxmlprocessorlogger.h" - - -// --------------------------------------------------------------------------- -// CVoipXmlParser::NewL -// --------------------------------------------------------------------------- -// -EXPORT_C CVoipXmlParser* CVoipXmlParser::NewL() - { - CVoipXmlParser* self = NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::NewLC -// --------------------------------------------------------------------------- -// -EXPORT_C CVoipXmlParser* CVoipXmlParser::NewLC() - { - CVoipXmlParser* self = new ( ELeave ) CVoipXmlParser(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::ConstructL -// --------------------------------------------------------------------------- -// -void CVoipXmlParser::ConstructL() - { - DBG_PRINT( "CVoipXmlParser::ConstructL begin" ); - - iParser = CMDXMLParser::NewL( this ); - iParamHandler = CVoipXmlParamHandler::NewL(); - iDescription = HBufC::NewL( 0 ); - iBrandUrl = HBufC::NewL( 0 ); - - DBG_PRINT( "CVoipXmlParser::ConstructL end" ); - } - -// --------------------------------------------------------------------------- -// CVoIPXmlHandler::~CVoIPXmlHandler() -// Destructor -// --------------------------------------------------------------------------- -// -CVoipXmlParser::~CVoipXmlParser() - { - delete iParser; - delete iParamHandler; - if ( iXmlDoc ) - { - delete iXmlDoc; - } - if ( iDescription ) - { - delete iDescription; - } - if( iBrandUrl ) - { - delete iBrandUrl; - } - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::CVoipXmlParser -// --------------------------------------------------------------------------- -// -CVoipXmlParser::CVoipXmlParser() - { - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::ImportDocumentL -// Reads document. -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CVoipXmlParser::ImportDocument( RFile& aFile, - TUint32& aServiceTabId ) - { - DBG_PRINT( "CVoipXmlParser::ImportDocumentL - begin" ); - iParseDescription = EFalse; - iParser->ParseFile( aFile ); - CActiveScheduler::Start(); - if ( KErrNone == iError ) - { - iError = iParamHandler->StoreSettings(); - } - if ( KErrNone == iError ) - { - // Give other applications 2 seconds to react - // to the newly created service. - const TInt KTwoSeconds( 2000000 ); - User::After( KTwoSeconds ); - aServiceTabId = iParamHandler->ServiceTabId(); - } - DBG_PRINT2( "CVoipXmlParser::ImportDocumentL - end (%d)", iError ); - return iError; - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::ReadDescription -// Reads document description. -// --------------------------------------------------------------------------- -// -EXPORT_C HBufC* CVoipXmlParser::ReadDescriptionLC( RFile& aFile, - TDes8& aBrandUrl ) - { - DBG_PRINT( "CVoipXmlParser::ReadDescriptionLC begin" ); - iParseDescription = ETrue; - iParser->ParseFile( aFile ); - CActiveScheduler::Start(); - if ( !iDescription ) - { - iDescription = HBufC::NewL( 0 ); - } - HBufC* buf = HBufC::NewLC( iDescription->Des().Length() ); - buf->Des().Copy( iDescription->Des() ); - if ( !iBrandUrl ) - { - iBrandUrl = HBufC::NewL( 0 ); - } - aBrandUrl.Copy( iBrandUrl->Des() ); - DBG_PRINT( "CVoipXmlParser::ReadDescriptionLC end" ); - return buf; - } - -// --------------------------------------------------------------------------- -// From base class MMDXMLParserObserver. -// CVoipXmlParser::ParseFileCompleteL -// --------------------------------------------------------------------------- -// -void CVoipXmlParser::ParseFileCompleteL() - { - DBG_PRINT( "CVoipXmlParser::ParseFileCompleteL - begin" ); - // We may have already received XML document from iParser since we - // commit two parsing operations (first the description and then the - // settings). Thus we need to delete iXmlDoc because iParser has given - // its responsibility here. - if ( iXmlDoc ) - { - delete iXmlDoc; - iXmlDoc = NULL; - } - iXmlDoc = iParser->DetachXMLDoc(); - CActiveScheduler::Stop(); - if ( !iXmlDoc ) - { - iError = KErrCorrupt; - return; - } - CMDXMLElement* xmlElement = iXmlDoc->DocumentElement(); - if ( !xmlElement ) - { - iError = KErrCorrupt; - DBG_PRINT( "CVoipXmlParser::ParseFileCompleteL - end KErrCorrupt" ); - return; - } - - if ( iParseDescription ) - { - ParseDescription( *xmlElement ); - } - else - { - ParseRoot( *xmlElement ); - } - DBG_PRINT( "CVoipXmlParser::ParseFileCompleteL - end" ); - } - -// --------------------------------------------------------------------------- -// Parses description node. -// --------------------------------------------------------------------------- -// -void CVoipXmlParser::ParseDescription( CMDXMLElement& aXmlElement ) - { - CMDXMLNode* node = aXmlElement.FirstChild(); - if ( !node ) - { - iError = KErrCorrupt; - return; - } - TBuf<KMaxNodeNameLength> nodeName; - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - - // <nokia-confdoc> is the root node; thus parse it first. - while ( nodeName != KNodeNokiaConfDoc && node ) - { - node = node->NextSibling(); - if ( !node ) - { - DBG_PRINT( "CVoipXmlParser::ParseRoot - end KErrEof" ); - iError = KErrEof; - return; - } - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - } - // After <nokia-confdoc> has been found, search for <confdescription> - // and <confbrandurl> from its children. - node = node->FirstChild(); - while ( node ) - { - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - CMDXMLNode* child = node->FirstChild(); - //lint -e{960} No need for else statement here - if ( KNodeConfDescription() == nodeName && child && - CMDXMLNode::ETextNode == child->NodeType() ) - { - CMDXMLText* text = NULL; - text = static_cast<CMDXMLText*>( child ); - delete iDescription; - iDescription = NULL; - TRAP_IGNORE( iDescription = text->Data().AllocL() ); - } - else if ( KNodeConfBrandUrl() == nodeName && child && - CMDXMLNode::ETextNode == child->NodeType() ) - { - CMDXMLText* text = NULL; - text = static_cast<CMDXMLText*>( child ); - delete iBrandUrl; - iBrandUrl = NULL; - TRAP_IGNORE( iBrandUrl = text->Data().AllocL() ); - } - node = node->NextSibling(); - } - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::ParseRoot -// Parses root node. -// --------------------------------------------------------------------------- -// -void CVoipXmlParser::ParseRoot( CMDXMLElement& aXmlElement ) - { - DBG_PRINT( "CVoipXmlParser::ParseRoot - begin" ); - - CMDXMLNode* node = aXmlElement.FirstChild(); - if ( !node ) - { - iError = KErrCorrupt; - return; - } - TBuf<KMaxNodeNameLength> nodeName; - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - - while ( nodeName != KNodeNokiaConfDoc ) - { - node = node->NextSibling(); - if ( !node ) - { - DBG_PRINT( "CVoipXmlParser::ParseRoot - end KErrEof" ); - iError = KErrEof; - return; - } - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - } - - node = node->FirstChild(); - - TInt settingsCount( 0 ); - while ( node ) - { - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - // At this level in XML tree only 'settings' nodes are allowed. - if ( nodeName == KNodeSettings ) - { - ParseSettings( node ); - settingsCount++; - } - node = node->NextSibling(); - } - if ( !settingsCount ) - { - iError = KErrAbort; - } - DBG_PRINT( "CVoipXmlParser::ParseRoot - end" ); - - } - -// --------------------------------------------------------------------------- -// CVoipXmlParser::ParseSettingsL -// Parses 'settings' nodes. -// --------------------------------------------------------------------------- -// -void CVoipXmlParser::ParseSettings( CMDXMLNode* aXmlNode ) - { - DBG_PRINT( "CVoipXmlParser::ParseSettings - begin" ); - if ( CMDXMLNode::EElementNode != aXmlNode->NodeType() ) - { - DBG_PRINT( - "CVoipXmlParser::ParseSettings - node type not element, end" ); - iError = KErrBadHandle; - return; - } - - CMDXMLElement* element = NULL; - element = static_cast<CMDXMLElement*>( aXmlNode ); - TPtrC attributeValue; - element->GetAttribute( KAttributeType(), attributeValue ); - if ( !attributeValue.Length() ) - { - DBG_PRINT( - "CVoipXmlParser::ParseSettings - attribute type not ok, end" ); - iError = KErrBadName; - } - - iParamHandler->SettingsStart( attributeValue ); - - - CMDXMLNode* node = element->FirstChild(); - - while ( node ) - { - if ( node->NodeType() == CMDXMLNode::EElementNode ) - { - - TBuf<KMaxNodeNameLength> nodeName; - nodeName.Copy( node->NodeName() ); - nodeName.LowerCase(); - element = NULL; - element = static_cast<CMDXMLElement*>( node ); - - //lint -e{960} No need for else statement here - if ( KNodeParam() == nodeName ) - { - TPtrC nameVal; - element->GetAttribute( KAttributeName(), nameVal ); - if ( nameVal.Length() ) - { - TPtrC attVal; - element->GetAttribute( KAttributeValue(), attVal ); - { - if ( attVal.Length() ) - { - iParamHandler->HandleParameter( - nameVal, attVal ); - } - } - } - } - else if ( KNodeSettings() == nodeName ) - { - ParseSettings( element ); - } - } - node = node->NextSibling(); - } - - iParamHandler->SettingsEnd(); - - DBG_PRINT( "CVoipXmlParser::ParseSettings - end" ); - } - -// End of file.