diff options
| author | 2008-08-09 11:32:17 +0000 | |
|---|---|---|
| committer | 2008-08-09 11:32:17 +0000 | |
| commit | ef736944c9d8a7833bb1b6e7a78b8266554d5cea (patch) | |
| tree | 3946bb8b8f3e4ca21aeda2147bc72baae85a996f /src/modules/upnp/xmlfunctions.cpp | |
| parent | updated german translation (diff) | |
| download | KVIrc-ef736944c9d8a7833bb1b6e7a78b8266554d5cea.tar.gz KVIrc-ef736944c9d8a7833bb1b6e7a78b8266554d5cea.tar.bz2 KVIrc-ef736944c9d8a7833bb1b6e7a78b8266554d5cea.zip | |
added first test of a upnp module (gateway control point that enables port-forwarding and getting external ip address); based on code from Diederik van der Boor
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2219 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/upnp/xmlfunctions.cpp')
| -rw-r--r-- | src/modules/upnp/xmlfunctions.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/modules/upnp/xmlfunctions.cpp b/src/modules/upnp/xmlfunctions.cpp new file mode 100644 index 000000000..c311f4d97 --- /dev/null +++ b/src/modules/upnp/xmlfunctions.cpp @@ -0,0 +1,126 @@ +//============================================================================= +// +// Creation date : Fri Aug 08 18:00:00 2000 GMT by Szymon Stefanek +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 2008 Szymon Stefanek (pragma at kvirc dot net) +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Original Copyright following: +//============================================================================= + +/*************************************************************************** + xmlfunctions.cpp - description + ------------------- + begin : Sun Jul 24 2005 + copyright : (C) 2005 by Diederik van der Boor + email : vdboor --at-- codingdomain.com + ***************************************************************************/ + +#include "xmlfunctions.h" + +#include <QStringList> + + +// Helper function, get a specific node +QDomNode XmlFunctions::getNode( const QDomNode &rootNode, const QString &path ) +{ + + QStringList pathItems = QStringList::split( "/", path, false ); + QDomNode childNode = rootNode.namedItem( pathItems[0] ); // can be a null node + + uint i = 1; + while( i < pathItems.count() ) + { + if( childNode.isNull() ) + { + break; + } + + childNode = childNode.namedItem( pathItems[ i ] ); + i++; // not using for loop so i is always correct for kdDebug() below. + } + + if( childNode.isNull() ) { + qDebug() << "XmlFunctions::getNode() - notice: node '" << pathItems[ i - 1 ] << "'" + << " does not exist (root=" << rootNode.nodeName() << " path=" << path << ")." << endl; + } + + return childNode; +} + + + +// Helper function, get the attribute text of a node +QString XmlFunctions::getNodeAttribute( const QDomNode &node, const QString &attribute ) +{ + + // Writing this is not funny + return node.attributes().namedItem( attribute ).toAttr().value(); +// node.toElement().attribute( attribute ); does not work for const nodes. +} + + + +// Helper function, get a specific child node +QDomNode XmlFunctions::getNodeChildByKey( const QDomNodeList &childNodes, const QString &keyTagName, const QString &keyValue ) +{ + + for( uint i = 0; i < childNodes.count(); i++ ) + { +// kdDebug() << "node " << childNodes.item(i).nodeName() << "/" << keyTagName +// << "=" << childNodes.item(i).namedItem(keyTagName).toElement().text() << " == " << keyValue << "?" << endl; + + // If the node has an childname with a certain value... e.g. <childNodes> <item><name>value</name></item> .. </childNodes> + if( childNodes.item( i ).namedItem( keyTagName ).toElement().text() == keyValue) + { + // Return the node + return childNodes.item( i ); + } + } + + // Return a null node (is there a better way?) + return childNodes.item( childNodes.count() ); +} + + + +// Helper function, get the text value of a node +QString XmlFunctions::getNodeValue( const QDomNode &rootNode, const QString &path ) +{ + + // Added code to avoid more assertion errors, and trace the cause. + if( rootNode.isNull() ) + { + qWarning() << "XmlFunctions::getNodeValue: Attempted to request '" << path << "' on null root node." << endl; + return QString::null; + } + + + // Because writing node.namedItem("childItem").namedItem("child2").toElement().text() is not funny. + return getNode( rootNode, path ).toElement().text(); +} + + +// Helper function, get the source XML of a node. +QString XmlFunctions::getSource( const QDomNode &node, int indent ) +{ + QString source; + QTextStream textStream( &source, IO_WriteOnly ); + node.save( textStream, indent ); + return source; +} + |
