Add a script to validate the Diameter dictionary XML.

I wrote this during Sharkfest to get the Diameter dictionary into (mostly)
valid XML.  There's some room for improvement in the script but it works.

Change-Id: Ic8548c4f321831397951bf1d76779c263a832682
Reviewed-on: https://code.wireshark.org/review/17124
Reviewed-by: Jeff Morriss <jeff.morriss.ws@gmail.com>
This commit is contained in:
Jeff Morriss 2016-08-17 19:47:42 -04:00
parent cdd3f45c64
commit f17ba6b21c
2 changed files with 78 additions and 0 deletions

View File

@ -92,6 +92,7 @@ EXTRA_DIST = \
usb-ptp-extract-models.pl \
usb-ptp-extract-models.txt \
valgrind-wireshark.sh \
validate-diameter-xml.sh \
vg-suppressions \
win-setup.ps1 \
wireshark_be.py \

77
tools/validate-diameter-xml.sh Executable file
View File

@ -0,0 +1,77 @@
#!/bin/bash
# A small script to run xmllint on the Diameter XML files (after doing some
# fixups to those files).
#
# Copyright 2016 Jeff Morriss <jeff.morriss.ws [AT] gmail.com>
#
# Wireshark - Network traffic analyzer
# By Gerald Combs <gerald@wireshark.org>
# Copyright 1998 Gerald Combs
# 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 option) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
if ! type -p sed > /dev/null
then
echo "Sorry, 'sed' is needed to run this program."
exit 1
fi
if ! type -p xmllint > /dev/null
then
echo "Sorry, 'xmllint' is needed to run this program."
exit 1
fi
# Ideally this would work regardless of our cwd
if [ ! -r diameter/dictionary.xml ]
then
echo "Couldn't find diameter/dictionary.xml"
exit 1
fi
if [ ! -r diameter/dictionary.dtd ]
then
echo "Couldn't find diameter/dictionary.dtd"
exit 1
fi
# First edit all the AVP names that start with "3GPP" to indicate "TGPP".
# XML doesn't allow ID's to start with a digit but:
# 1) We don't *really* care if it's valid XML
# 2) (but) we do want to use xmllint to find problems
# 3) (and) users see the AVP names. Showing them "TGPP" instead of "3GPP"
# is annoying enough to warrant this extra work.
mkdir /tmp/diameter || exit 1
cp diameter/dictionary.dtd /tmp/diameter || exit 1
for f in diameter/*.xml
do
sed 's/name="3GPP/name="TGPP/g' $f > /tmp/$f || exit 1
done
xmllint --noout --noent --postvalid /tmp/diameter/dictionary.xml &&
echo "Diameter dictionary is (mostly) valid XML!"
rm -rf /tmp/diameter
#
# Editor modelines - https://www.wireshark.org/tools/modelines.html
#
# Local variables:
# c-basic-offset: 8
# tab-width: 8
# indent-tabs-mode: t
# End:
#
# vi: set shiftwidth=8 tabstop=8 noexpandtab:
# :indentSize=8:tabSize=8:noTabs=false:
#