servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/deviceinfoparser.cpp
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/deviceinfoparser.cpp	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,124 @@
+// 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 "deviceinfoparser.h"
+#include "upnpdescriptionschema.h"
+#include "deviceiconparser.h"
+#include "serviceinfoparser.h"
+_LIT8(KDlnaNameSpace,"urn:schemas-dlna-org:device-1-0");
+
+CDeviceInfoParser* CDeviceInfoParser::NewL(CUPnPDevice *aDeviceInfo, const RStringPool& aStringPool)
+	{
+	CDeviceInfoParser* self = new (ELeave) CDeviceInfoParser(aDeviceInfo, aStringPool);
+	return self;
+	}
+
+CDeviceInfoParser::CDeviceInfoParser(CUPnPDevice *aDeviceInfo, const RStringPool& aStringPool) : iDeviceInfo(aDeviceInfo), iStringPool(aStringPool)
+	{
+	}
+
+CDeviceInfoParser::~CDeviceInfoParser()
+	{
+	}
+
+void CDeviceInfoParser::ParseStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes)
+	{
+	iSiblingsCount++;
+	iString = iStringPool.OpenStringL(aElement.LocalName().DesC());
+	const TDesC8& info = iString.DesC();
+	TInt tblIndex = iString.Index ( UPNPDESCRIPTIONXMLTAGS::Table );
+	switch(tblIndex)
+		{
+	case UPNPDESCRIPTIONXMLTAGS::EDevice:
+		{
+		if(!(iFlags & EDevice))
+			{		
+			iFlags = iFlags | EDevice;
+			}
+		else if(iFlags & EEmbeddedDevice)
+			{
+			iSiblingsCount--;
+			CUPnPDevice* deviceInfo = CUPnPDevice::NewL();
+			CleanupStack::PushL( deviceInfo );
+			iDeviceInfo->AppendToEmbeddedDeviceInfoTableL(deviceInfo);
+			CleanupStack::Pop( deviceInfo );
+			CDeviceInfoParser* deviceParser = CDeviceInfoParser::NewL(deviceInfo, iStringPool);
+			CleanupStack::PushL(deviceParser);
+			StartChildParserL(deviceParser, aElement, aAttributes);
+			CleanupStack::Pop( deviceParser );
+			}
+		}
+		break;
+	case UPNPDESCRIPTIONXMLTAGS::EIcon:
+		{
+		iSiblingsCount--;
+		CUPnPIconInfo *iconInfo = CUPnPIconInfo::NewL();
+		CleanupStack::PushL( iconInfo );
+		iDeviceInfo->AppendToIconInfoTableL(iconInfo);
+		CleanupStack::Pop();
+		CDeviceIconParser* deviceIconParser = CDeviceIconParser::NewL(iconInfo, iStringPool);
+		CleanupStack::PushL( deviceIconParser );
+		StartChildParserL(deviceIconParser, aElement, aAttributes);
+		CleanupStack::Pop(deviceIconParser);
+		}
+		break;
+	case UPNPDESCRIPTIONXMLTAGS::EService:
+		{
+		iSiblingsCount--;
+		CUPnPServiceInfo *serviceInfo = CUPnPServiceInfo::NewL();
+		CleanupStack::PushL(serviceInfo);
+		iDeviceInfo->AppendToServiceInfoTableL(serviceInfo);
+		CleanupStack::Pop( serviceInfo );
+		CServiceInfoParser* serviceInfoParser = CServiceInfoParser::NewL(serviceInfo, iStringPool);
+		CleanupStack::PushL(serviceInfoParser);
+		StartChildParserL(serviceInfoParser, aElement, aAttributes);
+		CleanupStack::Pop(serviceInfoParser);
+		}
+		break;
+	
+		// Default: Don't do anything
+	}
+	
+	}
+		
+
+void CDeviceInfoParser::ParseEndElementL(const RTagInfo& /*aElement*/)
+	{
+	iSiblingsCount--;
+	iDeviceInfo->SetPropertyStatus(iString,ETrue);
+	iString.Close();
+	}
+
+void CDeviceInfoParser::ParseContentL(const TDesC8& aBytes)
+	{
+	if ( !IsBlankSpace( aBytes ) )
+		iDeviceInfo->SetPropertyL(iString,aBytes);
+	}
+	
+void CDeviceInfoParser::ParsePrefixL(const RString& aPrefix, const RString& aUri)
+	{
+	_LIT8(KDlna,"dlna");
+	const TDesC8& prefix = aPrefix.DesC();
+	if ( prefix == KDlna )
+		{
+		const TDesC8& uri = aUri.DesC();
+		if ( uri == KDlnaNameSpace)
+			{
+			iDeviceInfo->SetDlna( ETrue );
+			}
+		else
+			User::Leave(KErrCorrupt);
+		}
+	}