![Jeff Morriss](/assets/img/avatar_default.png)
This patch adds support for displaying OPC UA ExtensionObjects. An ExtensionObject is a mechanism to transport user defined structures as serialized blobs. Some types of ExtensionObjects are already defined by the OPC Foundation's OPC UA Specifications. These types can be implemented by this dissector, because they are well-known. Real user-defined or vendor-defined types are unlikely to be implemented by a passive dissector, because this would require browsing of the UA server's address space to retrieve the type information. Currently only the following types are supported: * DataChangeNotification * EventNotification Others OPC defined types will follow. From me: fix warnings: "format not a string literal and no format arguments" svn path=/trunk/; revision=34906
58 lines
3.5 KiB
C
58 lines
3.5 KiB
C
/******************************************************************************
|
|
** $Id$
|
|
**
|
|
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
|
** Web: http://www.ascolab.com
|
|
**
|
|
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
|
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
**
|
|
** Project: OpcUa Wireshark Plugin
|
|
**
|
|
** Description: Implementation of OpcUa built-in type parsers.
|
|
** This contains all the simple types and some complex types.
|
|
**
|
|
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
|
** Last change by: $Author: gergap $
|
|
**
|
|
******************************************************************************/
|
|
#include "opcua_identifiers.h"
|
|
|
|
/* simple types */
|
|
void parseBoolean(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseByte(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseSByte(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseUInt16(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseInt16(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseUInt32(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseInt32(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseUInt64(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseInt64(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseString(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseGuid(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseByteString(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseXmlElement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseFloat(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseDouble(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseDateTime(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
void parseStatusCode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
|
/* complex types */
|
|
void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseDataValue(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseVariant(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
|
void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex, fctSimpleTypeParser pParserFunction);
|
|
void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, fctEnumParser pParserFunction);
|
|
void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName, fctComplexTypeParser pParserFunction);
|
|
void registerSimpleTypes(int proto);
|
|
guint32 getExtensionObjectType(tvbuff_t *tvb, gint *pOffset);
|