diff -r 000000000000 -r f5a58ecadc66 servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/specversionparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/specversionparser.cpp Tue Feb 02 01:12:20 2010 +0200 @@ -0,0 +1,109 @@ +// Copyright (c) 2008-2009 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: +// + +#include "specversionparser.h" +#include "upnpdescriptionschema.h" +#include + +CSpecVersionParser* CSpecVersionParser::NewL(CUPnPDeviceDescription* aDeviceDesc, const RStringPool& aStringPool) + { + CSpecVersionParser* self = new (ELeave) CSpecVersionParser(aDeviceDesc, aStringPool); + return self; + } + +CSpecVersionParser* CSpecVersionParser::NewL(CUPnPServiceDescription* aServiceDesc, const RStringPool& aStringPool) + { + CSpecVersionParser* self = new (ELeave) CSpecVersionParser(aServiceDesc, aStringPool); + return self; + } + +CSpecVersionParser::CSpecVersionParser(CUPnPDeviceDescription* aDeviceDesc, const RStringPool& aStringPool) : iDeviceDesc(aDeviceDesc), iStringPool(aStringPool) + { + iType = CSpecVersionParser::EDeviceType; + } + +CSpecVersionParser::CSpecVersionParser(CUPnPServiceDescription* aServiceDesc, const RStringPool& aStringPool) : iServiceDesc(aServiceDesc), iStringPool(aStringPool) + { + iType = CSpecVersionParser::EServiceType; + } + +CSpecVersionParser::~CSpecVersionParser() + { + } + +void CSpecVersionParser::ParseStartElementL(const RTagInfo& aElement, const RAttributeArray& /*aAttributes*/) + { + iSiblingsCount++; + iString = iStringPool.OpenStringL(aElement.LocalName().DesC()); + TInt tblIndex = iString.Index ( UPNPDESCRIPTIONXMLTAGS::Table ); + switch( tblIndex ) + { + case UPNPDESCRIPTIONXMLTAGS::ESpecVersion: + iFlags = ESpec; + break; + case UPNPDESCRIPTIONXMLTAGS::EMajorNumber: + iFlags = EMajorVersion; + break; + case UPNPDESCRIPTIONXMLTAGS::EMinorNumber: + iFlags = EMinorVersion; + break; + default: + User::Leave(KErrCorrupt); + } + + } + + +void CSpecVersionParser::ParseEndElementL(const RTagInfo& /*aElement*/) + { + iSiblingsCount--; + iString.Close(); + } + +void CSpecVersionParser::ParseContentL(const TDesC8& aBytes) + { + switch(iFlags) + { + case EMajorVersion: + { + TInt majorNumber; + TLex8 data(aBytes); + data.Val(majorNumber); + if (iType == CSpecVersionParser::EServiceType) + iServiceDesc->SetMajorNumberL(majorNumber); + else + iDeviceDesc->SetMajorNumberL(majorNumber); + iFlags = 0; + break; + } + + case EMinorVersion: + { + TInt minorNumber; + TLex8 data(aBytes); + data.Val(minorNumber); + if (iType == CSpecVersionParser::EServiceType) + iServiceDesc->SetMinorNumberL(minorNumber); + else + iDeviceDesc->SetMinorNumberL(minorNumber); + iFlags = 0; + break; + } + + default: + break; + } + } +