summaryrefslogtreecommitdiffstats
path: root/plugins/epan/opcua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/epan/opcua')
-rw-r--r--plugins/epan/opcua/CMakeLists.txt3
-rw-r--r--plugins/epan/opcua/README4
-rw-r--r--plugins/epan/opcua/opcua.c771
-rw-r--r--plugins/epan/opcua/opcua_application_layer.c52
-rw-r--r--plugins/epan/opcua/opcua_application_layer.h3
-rw-r--r--plugins/epan/opcua/opcua_complextypeparser.c846
-rw-r--r--plugins/epan/opcua/opcua_complextypeparser.h840
-rw-r--r--plugins/epan/opcua/opcua_enumparser.c170
-rw-r--r--plugins/epan/opcua/opcua_enumparser.h114
-rw-r--r--plugins/epan/opcua/opcua_extensionobjecttable.c13
-rw-r--r--plugins/epan/opcua/opcua_hfindeces.c592
-rw-r--r--plugins/epan/opcua/opcua_identifiers.h10
-rw-r--r--plugins/epan/opcua/opcua_keyset.c156
-rw-r--r--plugins/epan/opcua/opcua_keyset.h59
-rw-r--r--plugins/epan/opcua/opcua_security_layer.c61
-rw-r--r--plugins/epan/opcua/opcua_security_layer.h8
-rw-r--r--plugins/epan/opcua/opcua_serviceparser.c506
-rw-r--r--plugins/epan/opcua/opcua_serviceparser.h498
-rw-r--r--plugins/epan/opcua/opcua_servicetable.c7
-rw-r--r--plugins/epan/opcua/opcua_servicetable.h2
-rw-r--r--plugins/epan/opcua/opcua_simpletypes.c510
-rw-r--r--plugins/epan/opcua/opcua_simpletypes.h126
-rw-r--r--plugins/epan/opcua/opcua_transport_layer.c240
-rw-r--r--plugins/epan/opcua/opcua_transport_layer.h29
24 files changed, 3285 insertions, 2335 deletions
diff --git a/plugins/epan/opcua/CMakeLists.txt b/plugins/epan/opcua/CMakeLists.txt
index 2f43d42c..7299358f 100644
--- a/plugins/epan/opcua/CMakeLists.txt
+++ b/plugins/epan/opcua/CMakeLists.txt
@@ -28,6 +28,7 @@ set(DISSECTOR_SUPPORT_SRC
opcua_extensionobjecttable.c
opcua_hfindeces.c
opcua_statuscode.c
+ opcua_keyset.c
)
set(PLUGIN_FILES
@@ -50,7 +51,7 @@ register_plugin_files(plugin.c
add_wireshark_plugin_library(opcua epan)
-target_link_libraries(opcua epan)
+target_link_libraries(opcua epan ${GCRYPT_LIBRARIES})
install_plugin(opcua epan)
diff --git a/plugins/epan/opcua/README b/plugins/epan/opcua/README
index 8c4993be..225fbea5 100644
--- a/plugins/epan/opcua/README
+++ b/plugins/epan/opcua/README
@@ -28,7 +28,7 @@ Protocol Mappings:
Binary (TCP): The fastest and most flexible version (small footprint, no XML and SOAP necessary)
can easily be tunneled (SSH, IPSEC, etc.), redirected, ...
-SOAP version: Easy to implement with verious tools like .Net, JAVA, gSOAP, etc.
+SOAP version: Easy to implement with various tools like .Net, JAVA, gSOAP, etc.
Better to communicate through firewalls via HTTP.
SOAP with Binary Attachment: Combines the advantages of both.
The messages are encoded as Binary, and transported via SOAP as binary
@@ -60,7 +60,7 @@ marked "DON'T MODIFY THIS FILE!" for this reason.
However, the code to create this dissector is not part of the Wireshark source
source code distribution. This was discussed prior to the plugin's inclusion.
-From https://www.wireshark.org/lists/wireshark-dev/200704/msg00025.html :
+From https://lists.wireshark.org/archives/wireshark-dev/200704/msg00025.html :
~~~
> a lot of the code seems to be autogenerated (as the comments suggest)
diff --git a/plugins/epan/opcua/opcua.c b/plugins/epan/opcua/opcua.c
index 33d966a9..5872a207 100644
--- a/plugins/epan/opcua/opcua.c
+++ b/plugins/epan/opcua/opcua.c
@@ -14,54 +14,82 @@
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
******************************************************************************/
-#include "config.h"
-
+#include <epan/dissectors/packet-tcp.h>
#include <epan/packet.h>
+#include <epan/prefs.h>
+#include <epan/range.h>
#include <epan/reassemble.h>
-#include <epan/dissectors/packet-tcp.h>
-#include "opcua_transport_layer.h"
-#include "opcua_security_layer.h"
+#include <epan/secrets.h>
+#include <epan/tvbuff.h>
+#include <gcrypt.h>
+#include <wiretap/secrets-types.h>
+#include <wsutil/file_util.h>
+
+#include "config.h"
#include "opcua_application_layer.h"
#include "opcua_complextypeparser.h"
-#include "opcua_serviceparser.h"
#include "opcua_enumparser.h"
-#include "opcua_simpletypes.h"
#include "opcua_hfindeces.h"
+#include "opcua_keyset.h"
+#include "opcua_security_layer.h"
+#include "opcua_serviceparser.h"
+#include "opcua_serviceids.h"
+#include "opcua_simpletypes.h"
+#include "opcua_transport_layer.h"
void proto_register_opcua(void);
extern const value_string g_requesttypes[];
extern const int g_NumServices;
+static const char *g_opcua_debug_file_name;
+int g_opcua_default_sig_len;
/* forward reference */
void proto_reg_handoff_opcua(void);
/* declare parse function pointer */
-typedef int (*FctParse)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+typedef int (*FctParse)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
-int proto_opcua = -1;
+int proto_opcua;
static dissector_handle_t opcua_handle;
+static module_t *opcua_module;
+
+/* #define OPCUA_DEBUG */
+#ifdef OPCUA_DEBUG
+# define debugprintf(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__);
+#else
+# define debugprintf(fmt, ...)
+#endif
+
/** Official IANA registered port for OPC UA Binary Protocol. */
+#define OPCUA_DEFAULT_PORT 4840
+/* default port range for preferences */
#define OPCUA_PORT_RANGE "4840"
+/** header length that is needed to compute the pdu length.
+ * @see get_opcua_message_len
+ */
+#define FRAME_HEADER_LEN 8
+/* AES block size: for both AES128 and AES256 the block size is 128 bits */
+#define AES_BLOCK_SIZE 16
/** subtree types used in opcua_transport_layer.c */
-gint ett_opcua_extensionobject = -1;
-gint ett_opcua_nodeid = -1;
+int ett_opcua_extensionobject;
+int ett_opcua_nodeid;
/** subtree types used locally */
-static gint ett_opcua_transport = -1;
-static gint ett_opcua_fragment = -1;
-static gint ett_opcua_fragments = -1;
-
-static int hf_opcua_fragments = -1;
-static int hf_opcua_fragment = -1;
-static int hf_opcua_fragment_overlap = -1;
-static int hf_opcua_fragment_overlap_conflicts = -1;
-static int hf_opcua_fragment_multiple_tails = -1;
-static int hf_opcua_fragment_too_long_fragment = -1;
-static int hf_opcua_fragment_error = -1;
-static int hf_opcua_fragment_count = -1;
-static int hf_opcua_reassembled_in = -1;
-static int hf_opcua_reassembled_length = -1;
+static int ett_opcua_transport;
+static int ett_opcua_fragment;
+static int ett_opcua_fragments;
+
+static int hf_opcua_fragments;
+static int hf_opcua_fragment;
+static int hf_opcua_fragment_overlap;
+static int hf_opcua_fragment_overlap_conflicts;
+static int hf_opcua_fragment_multiple_tails;
+static int hf_opcua_fragment_too_long_fragment;
+static int hf_opcua_fragment_error;
+static int hf_opcua_fragment_count;
+static int hf_opcua_reassembled_in;
+static int hf_opcua_reassembled_length;
static const fragment_items opcua_frag_items = {
/* Fragment subtrees */
@@ -86,7 +114,6 @@ static const fragment_items opcua_frag_items = {
"Message fragments"
};
-
static reassembly_table opcua_reassembly_table;
/** OpcUa Transport Message Types */
@@ -115,23 +142,35 @@ static const char* g_szMessageTypes[] =
"Invalid message"
};
+static const enum_val_t opcua_sig_len_enum[] = {
+ { "None", "Unsigned", 0 },
+ { "20", "20 Bytes", 20 },
+ { "32", "32 Bytes", 32 },
+ { NULL, NULL, 0 }
+};
-
-
-/** header length that is needed to compute
- * the pdu length.
- * @see get_opcua_message_len
- */
-#define FRAME_HEADER_LEN 8
+#ifdef _MSC_VER
+static char *ua_strtok_r(char *str, const char *delim, char **saveptr)
+{
+ /* use MSVC specific strtok_s */
+ return strtok_s(str, delim, saveptr);
+}
+#else
+static char *ua_strtok_r(char *str, const char *delim, char **saveptr)
+{
+ /* use POSIX strtok_r */
+ return strtok_r(str, delim, saveptr);
+}
+#endif
/** returns the length of an OpcUa message.
* This function reads the length information from
* the transport header.
*/
-static guint get_opcua_message_len(packet_info *pinfo _U_, tvbuff_t *tvb,
+static unsigned get_opcua_message_len(packet_info *pinfo _U_, tvbuff_t *tvb,
int offset, void *data _U_)
{
- gint32 plen;
+ int32_t plen;
/* the message length starts at offset 4 */
plen = tvb_get_letohl(tvb, offset + 4);
@@ -139,6 +178,315 @@ static guint get_opcua_message_len(packet_info *pinfo _U_, tvbuff_t *tvb,
return plen;
}
+/* Helper function to convert hex string to binary data */
+unsigned hex_to_bin(const char *hex_string, unsigned char *binary_data, unsigned int binary_size)
+{
+ unsigned length = (unsigned)strlen(hex_string);
+ unsigned i;
+
+ for (i = 0; i < length / 2 && i < binary_size; ++i) {
+ sscanf(hex_string + 2 * i, "%2hhx", &binary_data[i]);
+ }
+
+ return i;
+}
+
+/** Parsing context */
+struct opcua_keylog_parser_ctx {
+ struct ua_keyset *keyset; /**< current keyset */
+ uint64_t last_id; /**< the id of the previous line, this is also the id of the keyset */
+};
+
+/**
+ * Common function for parsing key log line used by opcua_keylog_process_lines and opcua_load_keylog_file.
+ *
+ * @param ctx Parsing context.
+ * @param line Current line to parse.
+ */
+static void opcua_keylog_process_line(struct opcua_keylog_parser_ctx *ctx, const char *line)
+{
+ struct ua_keyset *keyset;
+ char key[33]; /* 32 chars + null terminator */
+ char value[65]; /* 64 hex chars + null terminator */
+ const char *parts[4]; /* for string split */
+ unsigned int num_parts;
+ char *tmp, *saveptr;
+ uint32_t token_id = 0;
+ uint32_t channel_id = 0;
+ uint64_t id = 0;
+ int n;
+
+ /* parse key/value pair */
+ n = sscanf(line, "%32[^:]: %64s\n", key, value);
+ if (n != 2) return;
+
+ debugprintf("%s = %s\n", key, value);
+
+ /* split key into parts */
+ num_parts = 0;
+ tmp = ua_strtok_r(key, "_", &saveptr);
+ while (tmp && num_parts < 4) {
+ parts[num_parts++] = tmp;
+ tmp = ua_strtok_r(NULL, "_", &saveptr);
+ }
+ if (num_parts != 4) return; /* skip invalid enty */
+ channel_id = (uint32_t)strtoul(parts[2], NULL, 10);
+ token_id = (uint32_t)strtoul(parts[3], NULL, 10);
+
+ debugprintf("channel_id = %u\n", channel_id);
+ debugprintf("token_id = %u\n", token_id);
+
+ /* create unique keyset id */
+ id = ua_keyset_id(channel_id, token_id);
+
+ if (ctx->keyset == NULL || id != ctx->last_id) {
+ debugprintf("Adding new keyset for id %lu...\n", id);
+ /* create new keyset for new id */
+ ctx->keyset = ua_keysets_add();
+ ctx->last_id = id;
+ }
+ keyset = ctx->keyset;
+ if (keyset) {
+ keyset->id = id;
+ /* store key material */
+ if (strcmp(parts[0], "client") == 0) {
+ if (strcmp(parts[1], "iv") == 0) {
+ hex_to_bin(value, keyset->client_iv, sizeof(keyset->client_iv));
+ } else if (strcmp(parts[1], "key") == 0) {
+ keyset->client_key_len = (unsigned int)hex_to_bin(value, keyset->client_key, sizeof(keyset->client_key));
+ } else if (strcmp(parts[1], "siglen") == 0) {
+ keyset->client_sig_len = (unsigned int)strtoul(value, NULL, 10);
+ }
+ } else if (strcmp(parts[0], "server") == 0) {
+ if (strcmp(parts[1], "iv") == 0) {
+ hex_to_bin(value, keyset->server_iv, sizeof(keyset->server_iv));
+ } else if (strcmp(parts[1], "key") == 0) {
+ keyset->server_key_len = (unsigned int)hex_to_bin(value, keyset->server_key, sizeof(keyset->server_key));
+ } else if (strcmp(parts[1], "siglen") == 0) {
+ keyset->server_sig_len = (unsigned int)strtoul(value, NULL, 10);
+ }
+ }
+ }
+}
+
+/**
+ * Parses key log data from PCAP file.
+ * This function splits the data by \n and calls opcua_keylog_process_line.
+ */
+static void opcua_keylog_process_lines(char *data)
+{
+ struct opcua_keylog_parser_ctx ctx = { NULL, 0 };
+ char *saveptr;
+ const char *line = ua_strtok_r(data, "\n", &saveptr);
+
+ while (line) {
+ opcua_keylog_process_line(&ctx, line);
+ line = ua_strtok_r(NULL, "\n", &saveptr);
+ }
+
+ /* sort data by id to make lookup working */
+ ua_keysets_sort();
+}
+
+/**
+ * Loads the configured OPCUA Keylog file.
+ */
+static void opcua_load_keylog_file(const char *filename)
+{
+ struct opcua_keylog_parser_ctx ctx = { NULL, 0 };
+ char line[256];
+
+ debugprintf("Loading key file '%s'...\n", filename);
+ FILE *f = ws_fopen(filename, "r");
+ if (f == NULL) {
+ debugprintf("error: '%s' not found\n", filename);
+ return;
+ }
+
+ /* parse file contents */
+ while (fgets(line, sizeof(line), f)) {
+ opcua_keylog_process_line(&ctx, line);
+ }
+ fclose(f);
+
+ /* sort data by id to make lookup working */
+ ua_keysets_sort();
+}
+
+/**
+ * Checks the padding of a symetric signed message.
+ * A message always contains a padding_len byte, which tells us the length of
+ * the padding. All following padding bytes contain the same value. This makes it
+ * possible the padding from the end of the message.
+ * Example Paddings:
+ * - 00
+ * - 01 01
+ * - 02 02 02
+ * @param padding Pointer to last padding byte.
+ * @return padding length on success, -1 if the paddding is invalid.
+ */
+static int verify_padding(const uint8_t *padding)
+{
+ uint8_t pad_len;
+ uint8_t i;
+
+ pad_len = *padding;
+
+ for (i = 0; i < pad_len; ++i) {
+ if (padding[-pad_len + i] != pad_len) return -1;
+ }
+
+ return pad_len;
+}
+/**
+ * Gets security footer info.
+ *
+ * @param channel_id SecureChannelId for keyset lookup.
+ * @param token_id TokenId for keyset lookup.
+ * @param sig_len Returns the length of the signature.
+ * @param from_server True of the message is sent from the server, false when sent from the client.
+ *
+ * @return Returns 0 on success, -1 if parsing failed.
+ */
+static int opcua_get_footer_info(uint32_t channel_id, uint32_t token_id, uint8_t *sig_len, bool from_server)
+{
+ struct ua_keyset *keyset;
+ uint64_t id;
+
+ id = ua_keyset_id(channel_id, token_id);
+
+ /* try to get correct signature length from key log file */
+ keyset = ua_keysets_lookup(id);
+ if (keyset) {
+ /* The Client keys are used to secure Messages sent by the Client. The Server keys are used to
+ * secure Messages sent by the Server.
+ */
+ if (from_server) {
+ *sig_len = keyset->server_sig_len;
+ } else {
+ *sig_len = keyset->client_sig_len;
+ }
+ }
+
+ debugprintf("no keyset found for channel_id=%u and token_id=%u\n", channel_id, token_id);
+ /* we use sig_len set from OpenSecurehChannel Policy in this case.
+ * this requires to have the OPN in the capture file, otherwise we are out of luck.
+ */
+
+ return 0;
+}
+
+/**
+ * This function to perform AES decryption on service data in-place.
+ * Add also determines the payload length by removing the padding and signature.
+ *
+ * @param channel_id SecureChannelId for keyset lookup.
+ * @param token_id TokenId for keyset lookup.
+ * @param cipher The cipher text.
+ * @param cipher_len The cipher test length in bytes.
+ * @param plaintext The plaintext to return.
+ * @param plaintext_len The plaintext in bytes, should be the same as cipher_len.
+ * @param padding_len Returns the length of the padding.
+ * @param sig_len Returns the length of the signature.
+ * @param from_server True of the message is sent from the server, false when sent from the client.
+ *
+ * @return Returns 0 on success, -1 if decryption failed.
+ */
+static int decrypt_opcua(
+ uint32_t channel_id, uint32_t token_id,
+ const uint8_t *cipher, unsigned cipher_len,
+ uint8_t *plaintext, unsigned plaintext_len,
+ uint8_t *padding_len, uint8_t *sig_len, bool from_server)
+{
+ struct ua_keyset *keyset;
+ uint64_t id;
+ unsigned int keylen, ivlen;
+ unsigned char *keydata, *ivdata;
+ int cipher_mode;
+ gcry_error_t res;
+ int ret = 0;
+
+ id = ua_keyset_id(channel_id, token_id);
+
+ keyset = ua_keysets_lookup(id);
+ if (keyset == NULL) {
+ debugprintf("no keyset found for channel_id=%u and token_id=%u\n", channel_id, token_id);
+ /* col_append_fstr(pinfo->cinfo, COL_INFO, " (encrypted)"); */
+ return -1;
+ }
+ debugprintf("found keyset for channel_id=%u and token_id=%u\n", channel_id, token_id);
+
+ /* The Client keys are used to secure Messages sent by the Client. The Server keys are used to
+ * secure Messages sent by the Server.
+ */
+ if (from_server) {
+ ivlen = sizeof(keyset->server_iv);
+ ivdata = keyset->server_iv;
+ keylen = keyset->server_key_len;
+ keydata = keyset->server_key;
+ *sig_len = keyset->server_sig_len;
+ } else {
+ ivlen = sizeof(keyset->client_iv);
+ ivdata = keyset->client_iv;
+ keylen = keyset->client_key_len;
+ keydata = keyset->client_key;
+ *sig_len = keyset->client_sig_len;
+ }
+ /* derive AES mode from key length */
+ switch (keylen) {
+ case 16:
+ debugprintf("using AES-128-CBC\n");
+ cipher_mode = GCRY_CIPHER_AES128;
+ break;
+ case 32:
+ debugprintf("using AES-256-CBC\n");
+ cipher_mode = GCRY_CIPHER_AES256;
+ break;
+ default:
+ debugprintf("invalid AES key length: %u bytes\n", keylen);
+ /* col_append_fstr(pinfo->cinfo, COL_INFO, " (encrypted)"); */
+ return -1;
+ }
+
+ debugprintf("cipher_len=%u\n", cipher_len);
+ if (cipher_len % 16 != 0) {
+ debugprintf("warning: cipher_len not a multiple of 16.\n");
+ }
+
+ gcry_cipher_hd_t handle;
+ gcry_cipher_open(&handle, cipher_mode, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);
+ gcry_cipher_setkey(handle, keydata, keylen);
+ gcry_cipher_setiv(handle, ivdata, ivlen);
+
+ /* Decrypt the data in-place */
+ res = gcry_cipher_decrypt(handle, plaintext, plaintext_len, cipher, cipher_len);
+ if (res == 0) {
+ /* col_append_fstr(pinfo->cinfo, COL_INFO, " (decrypted)"); */
+ debugprintf("decryption succeeded.\n");
+ } else {
+ /* col_append_fstr(pinfo->cinfo, COL_INFO, " (encrypted)"); */
+ debugprintf("decryption failed.\n");
+ ret = -1;
+ }
+ gcry_cipher_close(handle);
+ /* it makes no sense to continue and verify the padding if decryption failed */
+ if (ret != 0) {
+ return ret;
+ }
+
+ ret = verify_padding(&plaintext[plaintext_len - *sig_len - 1]);
+ if (ret < 0) {
+ debugprintf("padding is invalid.\n");
+ }
+
+ /* return padding length */
+ *padding_len = plaintext[plaintext_len - *sig_len - 1];
+ debugprintf("sig_len=%u\n", *sig_len);
+ debugprintf("pad_len=%u\n", *padding_len);
+
+ return 0;
+}
+
/** The OpcUa message dissector.
* This method dissects full OpcUa messages.
* It gets only called with reassembled data
@@ -148,41 +496,64 @@ static int dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
{
FctParse pfctParse = NULL;
enum MessageType msgtype = MSG_INVALID;
+ uint16_t src_port = pinfo->srcport;
+ range_t *port_range;
+ bool from_server = false;
+ bool decrypted = false; /* successfully decrypted secure message */
+ enum ua_message_mode mode = UA_MessageMode_None;
+ uint8_t sig_len = 0;
+ struct ua_metadata metadata;
+ tvbuff_t *decrypted_tvb = NULL;
+ int ret;
+
+ /* determine if telegram is from server or from client by checking the port number */
+ if (src_port == OPCUA_DEFAULT_PORT) {
+ from_server = true;
+ } else {
+ port_range = prefs_get_range_value("opcua", "tcp.port");
+ if (port_range && value_is_in_range(port_range, src_port)) {
+ from_server = true;
+ }
+ }
+
+ metadata.encrypted = false;
+ get_encryption_info(pinfo, &mode, &sig_len);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "OpcUa");
+
/* parse message type */
- if (tvb_memeql(tvb, 0, (const guint8 * )"HEL", 3) == 0)
+ if (tvb_memeql(tvb, 0, (const uint8_t * )"HEL", 3) == 0)
{
msgtype = MSG_HELLO;
pfctParse = parseHello;
}
- else if (tvb_memeql(tvb, 0, (const guint8*)"ACK", 3) == 0)
+ else if (tvb_memeql(tvb, 0, (const uint8_t*)"ACK", 3) == 0)
{
msgtype = MSG_ACKNOWLEDGE;
pfctParse = parseAcknowledge;
}
- else if (tvb_memeql(tvb, 0, (const guint8*)"ERR", 3) == 0)
+ else if (tvb_memeql(tvb, 0, (const uint8_t*)"ERR", 3) == 0)
{
msgtype = MSG_ERROR;
pfctParse = parseError;
}
- else if (tvb_memeql(tvb, 0, (const guint8*)"RHE", 3) == 0)
+ else if (tvb_memeql(tvb, 0, (const uint8_t*)"RHE", 3) == 0)
{
msgtype = MSG_REVERSEHELLO;
pfctParse = parseReverseHello;
}
- else if (tvb_memeql(tvb, 0, (const guint8*)"MSG", 3) == 0)
+ else if (tvb_memeql(tvb, 0, (const uint8_t*)"MSG", 3) == 0)
{
msgtype = MSG_MESSAGE;
pfctParse = parseMessage;
}
- else if (tvb_memeql(tvb, 0, (const guint8*)"OPN", 3) == 0)
+ else if (tvb_memeql(tvb, 0, (const uint8_t*)"OPN", 3) == 0)
{
msgtype = MSG_OPENSECURECHANNEL;
pfctParse = parseOpenSecureChannel;
}
- else if (tvb_memeql(tvb, 0, (const guint8*)"CLO", 3) == 0)
+ else if (tvb_memeql(tvb, 0, (const uint8_t*)"CLO", 3) == 0)
{
msgtype = MSG_CLOSESECURECHANNEL;
pfctParse = parseCloseSecureChannel;
@@ -205,11 +576,12 @@ static int dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
if (pfctParse)
{
- gint offset = 0;
+ int offset = 0;
int iServiceId = -1;
- tvbuff_t *next_tvb = tvb;
- gboolean bParseService = TRUE;
- gboolean bIsLastFragment = FALSE;
+ bool bParseService = false; /* Only MSG, OPN and CLO have a service payload */
+ bool bIsFinalChunk = false;
+ unsigned payload_len = 0;
+ uint8_t pad_len = 0;
/* we are being asked for details */
proto_item *ti = NULL;
@@ -218,83 +590,149 @@ static int dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
ti = proto_tree_add_item(tree, proto_opcua, tvb, 0, -1, ENC_NA);
transport_tree = proto_item_add_subtree(ti, ett_opcua_transport);
- /* MSG_MESSAGE might be fragmented, check for that */
- if (msgtype == MSG_MESSAGE)
+ /* call the transport message dissector */
+ (*pfctParse)(transport_tree, tvb, pinfo, &offset, &metadata);
+
+ /* MSG_MESSAGE and MSG_CLOSESECURECHANNEL can be decrypted.
+ * Also handle chunked message reassembly for MSG_MESSAGE.
+ */
+ if (msgtype == MSG_MESSAGE || msgtype == MSG_CLOSESECURECHANNEL)
{
- guint8 chunkType = 0;
- guint32 opcua_seqid = 0;
- guint32 opcua_num = 0;
- guint32 opcua_seqnum;
+ uint8_t chunkType = 0;
+ uint32_t opcua_seqno = 0; /* OPCUA sequence number */
+ uint32_t opcua_reqid = 0; /* OPCUA request id */
fragment_head *frag_msg = NULL;
- fragment_item *frag_i = NULL;
+ bParseService = true;
offset = 3;
+ chunkType = tvb_get_uint8(tvb, offset); offset += 1;
+ offset += 4; /* message size */
+ offset += 4; /* skip secure channel_id */
+ parseSecurityHeader(transport_tree, tvb, &offset, &metadata); /* only token_id (4 byte) */
+
+ if (mode == UA_MessageMode_MaybeEncrypted) {
+ /* try to parse ServiceId */
+ iServiceId = getServiceNodeId(tvb, offset + 8); /* skip 4 byte SeqNo and 4 byte RequestId */
+ const char *szServiceName = val_to_str((uint32_t)iServiceId, g_requesttypes, "not found");
+ if (strcmp(szServiceName, "not found") == 0) {
+ mode = UA_MessageMode_SignAndEncrypt;
+ } else {
+ mode = UA_MessageMode_Sign;
+ }
+ store_encryption_info(pinfo, mode, sig_len);
+ }
- chunkType = tvb_get_guint8(tvb, offset); offset += 1;
-
- offset += 4; /* Message Size */
- offset += 4; /* SecureChannelId */
- offset += 4; /* Security Token Id */
+ /* Message Structure:
+ * +-----------------+
+ * / | Message Header | MSGF, MessageSize
+ * | +-----------------+
+ * | | Security Header | SecureChannelId, TokenId
+ * | +-----------------+
+ * Signed < | Sequence Header | \ SequenceNumber, RequestId
+ * | +-----------------+ |
+ * | | Body | |
+ * | +-----------------+ > Encrypted
+ * \ | Padding | |
+ * +-----------------+ |
+ * | Signature | /
+ * +-----------------+
+ */
+ if (mode == UA_MessageMode_SignAndEncrypt) {
+ uint32_t channel_id = tvb_get_letohl(tvb, 8);
+ uint32_t token_id = tvb_get_letohl(tvb, 12);
+ unsigned cipher_len = tvb_ensure_captured_length_remaining(tvb, 16);
+ unsigned plaintext_len = cipher_len;
+ const uint8_t *cipher = tvb_get_ptr(tvb, 16, (int)cipher_len);
+ unsigned char *plaintext = (unsigned char*)wmem_alloc(pinfo->pool, plaintext_len);
+
+ ret = decrypt_opcua(channel_id, token_id, cipher, cipher_len, plaintext, plaintext_len, &pad_len, &sig_len, from_server);
+ if (ret == 0) {
+ /* decrypted */
+ /* to get the payload length we need to subtract the sequence header (8) byte,
+ * the padding (paddin_len+1), and the signature from the plaintext */
+ payload_len = plaintext_len - pad_len - sig_len - 9; /* pad_len 2 = 02 02 02 */
+ /* Now re-setup the tvb buffer to have the new data */
+ decrypted_tvb = tvb_new_child_real_data(tvb, plaintext, (unsigned)plaintext_len, (int)plaintext_len);
+ add_new_data_source(pinfo, decrypted_tvb, "Decrypted Data");
+ /* process decrypted_tvb from here */
+ tvb = decrypted_tvb;
+ offset = 0;
+ decrypted = true;
+ } else {
+ /* decryption failed */
+ metadata.encrypted = true;
+ }
+ } else if (mode == UA_MessageMode_Sign) {
+ uint32_t channel_id = tvb_get_letohl(tvb, 8);
+ uint32_t token_id = tvb_get_letohl(tvb, 12);
+ payload_len = tvb_ensure_captured_length_remaining(tvb, 24); /* subtract header */
+
+ ret = opcua_get_footer_info(channel_id, token_id, &sig_len, from_server);
+ if (ret != 0) {
+ debugprintf("Processing security footer of signed message failed.\n");
+ } else {
+ /* signed only messages have no padding, so the payload is the message size
+ * without 24 byte header and without signature */
+ payload_len -= sig_len;
+ }
+ /* store the current tvb as decrypted tvb, because we need this to parse the signature
+ * at the end, and tvb gets replaces with the reassembled UA message if the message was chunked.
+ */
+ decrypted_tvb = tvb;
+ } else {
+ /* no padding, no signature, just payload */
+ payload_len = tvb_ensure_captured_length_remaining(tvb, 24); /* subtract header */
+ pad_len= 0;
+ sig_len = 0;
+ }
- opcua_num = tvb_get_letohl(tvb, offset); offset += 4; /* Security Sequence Number */
- opcua_seqid = tvb_get_letohl(tvb, offset); offset += 4; /* Security RequestId */
+ opcua_seqno = tvb_get_letohl(tvb, offset); /* Sequence.Sequence Number */
+ opcua_reqid = tvb_get_letohl(tvb, offset + 4); /* Sequence.RequestId */
+ parseSequenceHeader(transport_tree, tvb, &offset, &metadata);
if (chunkType == 'A')
{
- fragment_delete(&opcua_reassembly_table, pinfo, opcua_seqid, NULL);
+ /* cancel chunk reassembly */
+ fragment_delete(&opcua_reassembly_table, pinfo, opcua_reqid, NULL);
col_clear_fence(pinfo->cinfo, COL_INFO);
col_set_str(pinfo->cinfo, COL_INFO, "Abort message");
offset = 0;
- (*pfctParse)(transport_tree, tvb, pinfo, &offset);
- parseAbort(transport_tree, tvb, pinfo, &offset);
+ (*pfctParse)(transport_tree, tvb, pinfo, &offset, &metadata);
+ parseAbort(transport_tree, tvb, pinfo, &offset, &metadata);
return tvb_reported_length(tvb);
}
/* check if tvb is part of a chunked message:
the UA protocol does not tell us that, so we look into
- opcua_reassembly_table if the opcua_seqid belongs to a
+ opcua_reassembly_table if the opcua_reqid belongs to a
chunked message */
- frag_msg = fragment_get(&opcua_reassembly_table, pinfo, opcua_seqid, NULL);
+ frag_msg = fragment_get(&opcua_reassembly_table, pinfo, opcua_reqid, NULL);
if (frag_msg == NULL)
{
- frag_msg = fragment_get_reassembled_id(&opcua_reassembly_table, pinfo, opcua_seqid);
+ frag_msg = fragment_get_reassembled_id(&opcua_reassembly_table, pinfo, opcua_reqid);
}
- if (frag_msg != NULL || chunkType != 'F')
+ if (frag_msg != NULL || chunkType == 'C')
{
- gboolean bSaveFragmented = pinfo->fragmented;
- gboolean bMoreFragments = TRUE;
- tvbuff_t *new_tvb = NULL;
+ bool bSaveFragmented = pinfo->fragmented;
+ bool bMoreFragments = true;
+ tvbuff_t *reassembled_tvb = NULL;
+ bool first_frag = false;
- pinfo->fragmented = TRUE;
+ pinfo->fragmented = true;
if (frag_msg == NULL)
{
- /* first fragment */
- opcua_seqnum = 0;
+ first_frag = true;
}
else
{
- /* the UA protocol does not number the chunks beginning from 0 but from a
- arbitrary value, so we have to fake the numbers in the stored fragments.
- this way Wireshark reassembles the message, as it expects the fragment
- sequence numbers to start at 0 */
- for (frag_i = frag_msg->next; frag_i && frag_i->next; frag_i = frag_i->next) {}
- if (frag_i) {
- opcua_seqnum = frag_i->offset + 1;
- } else {
- /* We should never have a fragment head with no fragment items, but
- * just in case.
- */
- opcua_seqnum = 0;
- }
-
if (chunkType == 'F')
{
- bMoreFragments = FALSE;
+ bMoreFragments = false;
}
}
@@ -302,77 +740,100 @@ static int dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
tvb,
offset,
pinfo,
- opcua_seqid, /* ID for fragments belonging together */
+ opcua_reqid, /* ID for fragments belonging together */
NULL,
- opcua_seqnum, /* fragment sequence number */
- tvb_captured_length_remaining(tvb, offset), /* fragment length - to the end */
+ first_frag ? 0 : opcua_seqno, /* fragment sequence number */
+ payload_len,
bMoreFragments); /* More fragments? */
- new_tvb = process_reassembled_data(tvb,
+ if (first_frag) {
+ /* the UA protocol does not number the chunks beginning
+ * from 0 but uses the common sequence number. We
+ * handle that in Wireshark by setting the sequence
+ * offset here, after passing in 0 for the first
+ * fragment. For later fragments we can use the
+ * sequence number as contained in the protocol.
+ */
+
+ fragment_add_seq_offset(&opcua_reassembly_table, pinfo, opcua_reqid, NULL, opcua_seqno);
+ }
+ reassembled_tvb = process_reassembled_data(tvb,
offset,
pinfo,
- "Reassembled Message",
+ "Reassembled UA Message",
frag_msg,
&opcua_frag_items,
NULL,
transport_tree);
- if (new_tvb)
+ if (reassembled_tvb)
{
/* Reassembled */
- bIsLastFragment = TRUE;
- }
- else
- {
- /* Not last packet of reassembled UA message */
- col_append_fstr(pinfo->cinfo, COL_INFO, " (Message fragment %u)", opcua_num);
- }
-
- if (new_tvb)
- {
+ bIsFinalChunk = true;
/* take it all */
- next_tvb = new_tvb;
+ tvb = reassembled_tvb;
+ /* new tvb starts at payload */
+ offset = 0;
}
else
{
+ /* Not last packet of reassembled UA message */
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (Message fragment %u)", opcua_seqno);
/* only show transport header */
- bParseService = FALSE;
- next_tvb = tvb_new_subset_remaining(tvb, 0);
+ bParseService = false;
+ tvb = tvb_new_subset_remaining(tvb, 0);
}
pinfo->fragmented = bSaveFragmented;
}
}
- offset = 0;
-
- /* call the transport message dissector */
- iServiceId = (*pfctParse)(transport_tree, tvb, pinfo, &offset);
-
- /* parse the service if not chunked or last chunk */
- if (msgtype == MSG_MESSAGE && bParseService)
- {
- if (bIsLastFragment != FALSE)
- {
- offset = 0;
- }
- iServiceId = parseService(transport_tree, next_tvb, pinfo, &offset);
- }
+ /* parse payload if not encrypted */
+ if (!metadata.encrypted && bParseService) {
+ if (msgtype == MSG_CLOSESECURECHANNEL) {
+ iServiceId = parseService(transport_tree, tvb, pinfo, &offset, &metadata);
+ if (iServiceId == OpcUaId_CloseSecureChannelRequest_Encoding_DefaultBinary) {
+ col_append_str(pinfo->cinfo, COL_INFO, ": CloseSecureChannelRequest");
+ } else if (iServiceId == OpcUaId_CloseSecureChannelResponse_Encoding_DefaultBinary) {
+ col_append_str(pinfo->cinfo, COL_INFO, ": CloseSecureChannelResponse");
+ } else {
+ const char *szServiceName = val_to_str((uint32_t)iServiceId, g_requesttypes, "ServiceId %d");
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": %s (Wrong ServiceId)", szServiceName);
+ }
+ } else if (msgtype == MSG_MESSAGE) {
+ /* parse the service if not chunked or message was reassembled */
+ iServiceId = parseService(transport_tree, tvb, pinfo, &offset, &metadata);
- /* display the service type in addition to the message type */
- if (iServiceId != -1)
- {
- const gchar *szServiceName = val_to_str((guint32)iServiceId, g_requesttypes, "ServiceId %d");
+ /* display the service type in addition to the message type */
+ if (iServiceId != -1)
+ {
+ const char *szServiceName = val_to_str((uint32_t)iServiceId, g_requesttypes, "ServiceId %d");
- if (bIsLastFragment == FALSE)
- {
- col_add_fstr(pinfo->cinfo, COL_INFO, "%s: %s", g_szMessageTypes[msgtype], szServiceName);
+ if (bIsFinalChunk == false)
+ {
+ /* normal message in one chunk */
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", szServiceName);
+ }
+ else
+ {
+ /* reassembled message from multiple chunks */
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": %s (Message Reassembled)", szServiceName);
+ }
+ }
}
- else
- {
- col_add_fstr(pinfo->cinfo, COL_INFO, "%s: %s (Message Reassembled)", g_szMessageTypes[msgtype], szServiceName);
+ if (mode == UA_MessageMode_SignAndEncrypt && decrypted) {
+ /* parse padding and signature */
+ parseSecurityFooterSAE(transport_tree, decrypted_tvb, 8 + payload_len, pad_len, sig_len);
+ } else if (mode == UA_MessageMode_Sign) {
+ /* parse signature */
+ parseSecurityFooterSO(transport_tree, decrypted_tvb, 24 + payload_len, sig_len);
}
}
+ if (metadata.encrypted) {
+ col_append_str(pinfo->cinfo, COL_INFO, " (encrypted)");
+ } else if (mode == UA_MessageMode_SignAndEncrypt) {
+ col_append_str(pinfo->cinfo, COL_INFO, " (decrypted)");
+ }
}
return tvb_reported_length(tvb);
@@ -384,11 +845,41 @@ static int dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
*/
static int dissect_opcua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
- tcp_dissect_pdus(tvb, pinfo, tree, TRUE, FRAME_HEADER_LEN,
+ tcp_dissect_pdus(tvb, pinfo, tree, true, FRAME_HEADER_LEN,
get_opcua_message_len, dissect_opcua_message, data);
return tvb_reported_length(tvb);
}
+/** Init plugin resources */
+void proto_init_opcua(void)
+{
+ debugprintf("proto_init_opcua called.\n");
+ ua_keysets_init();
+ opcua_load_keylog_file(g_opcua_debug_file_name);
+}
+
+/** Cleanup plugin resources */
+void proto_cleanup_opcua(void)
+{
+ debugprintf("proto_cleanup_opcua called.\n");
+ ua_keysets_clear();
+}
+
+/** secrets callback called from Wireshark when loading a capture file with OPC UA Keylog File. */
+static void opcua_secrets_block_callback(const void *secrets, unsigned size)
+{
+ char *tmp = g_memdup2(secrets, size + 1);
+ if (tmp == NULL) return; /* OOM */
+
+ debugprintf("Loading secrets block '%s'...\n", (const char*)secrets);
+ debugprintf("size = %u\n", size);
+ /* ensure data is zero terminated */
+ tmp[size] = 0;
+ /* parse data */
+ opcua_keylog_process_lines(tmp);
+ g_free(tmp);
+}
+
/** plugin entry functions.
* This registers the OpcUa protocol.
*/
@@ -410,7 +901,7 @@ void proto_register_opcua(void)
};
/** Setup protocol subtree array */
- static gint *ett[] =
+ static int *ett[] =
{
&ett_opcua_extensionobject,
&ett_opcua_nodeid,
@@ -422,8 +913,21 @@ void proto_register_opcua(void)
proto_opcua = proto_register_protocol("OpcUa Binary Protocol", "OpcUa", "opcua");
opcua_handle = register_dissector("opcua", dissect_opcua, proto_opcua);
+ register_init_routine(proto_init_opcua);
+ register_cleanup_routine(proto_cleanup_opcua);
+
+ opcua_module = prefs_register_protocol(proto_opcua, proto_reg_handoff_opcua);
+ prefs_register_filename_preference(opcua_module, "debug_file", "OPCUA debug file",
+ "Redirect OPC UA Secure Conversion session keys to the file specified to enable decryption.",
+ &g_opcua_debug_file_name, false);
+
+ prefs_register_enum_preference(opcua_module, "signature_length", "Default signature length",
+ "Default signature length to use if the OpenSecureChannel message is missing.",
+ &g_opcua_default_sig_len, opcua_sig_len_enum, false);
+
registerTransportLayerTypes(proto_opcua);
registerSecurityLayerTypes(proto_opcua);
+ registerSequenceLayerTypes(proto_opcua);
registerApplicationLayerTypes(proto_opcua);
registerSimpleTypes(proto_opcua);
registerEnumTypes(proto_opcua);
@@ -436,6 +940,7 @@ void proto_register_opcua(void)
reassembly_table_register(&opcua_reassembly_table,
&addresses_reassembly_table_functions);
+ secrets_register_type(SECRETS_TYPE_OPCUA, opcua_secrets_block_callback);
}
void proto_reg_handoff_opcua(void)
diff --git a/plugins/epan/opcua/opcua_application_layer.c b/plugins/epan/opcua/opcua_application_layer.c
index 688cd651..8006a366 100644
--- a/plugins/epan/opcua/opcua_application_layer.c
+++ b/plugins/epan/opcua/opcua_application_layer.c
@@ -33,9 +33,9 @@ static const value_string g_nodeidmasks[] = {
/** Service type table */
extern const value_string g_requesttypes[];
-static int hf_opcua_nodeid_encodingmask = -1;
-static int hf_opcua_app_nsid = -1;
-static int hf_opcua_app_numeric = -1;
+static int hf_opcua_nodeid_encodingmask;
+static int hf_opcua_app_nsid;
+static int hf_opcua_app_numeric;
/** Register application layer types. */
void registerApplicationLayerTypes(int proto)
@@ -52,23 +52,57 @@ void registerApplicationLayerTypes(int proto)
proto_register_field_array(proto, hf, array_length(hf));
}
+/** Decodes the service nodeid without modifying the tree or offset.
+ * Service NodeIds are alsways numeric.
+ */
+int getServiceNodeId(tvbuff_t *tvb, int offset)
+{
+ uint8_t EncodingMask;
+ uint32_t Numeric = 0;
+
+ EncodingMask = tvb_get_uint8(tvb, offset);
+ offset++;
+
+ switch(EncodingMask)
+ {
+ case 0x00: /* two byte node id */
+ Numeric = tvb_get_uint8(tvb, offset);
+ break;
+ case 0x01: /* four byte node id */
+ offset+=1;
+ Numeric = tvb_get_letohs(tvb, offset);
+ break;
+ case 0x02: /* numeric, that does not fit into four bytes */
+ offset+=2;
+ Numeric = tvb_get_letohl(tvb, offset);
+ break;
+ case 0x03: /* string */
+ case 0x04: /* guid */
+ case 0x05: /* opaque*/
+ /* NOT USED */
+ break;
+ };
+
+ return Numeric;
+}
+
/** Parses an OpcUa Service NodeId and returns the service type.
* In this cases the NodeId is always from type numeric and NSId = 0.
*/
-int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
+int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, int *pOffset)
{
- gint iOffset = *pOffset;
- guint8 EncodingMask;
- guint32 Numeric = 0;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
+ uint32_t Numeric = 0;
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_item(tree, hf_opcua_nodeid_encodingmask, tvb, iOffset, 1, ENC_LITTLE_ENDIAN);
iOffset++;
switch(EncodingMask)
{
case 0x00: /* two byte node id */
- Numeric = tvb_get_guint8(tvb, iOffset);
+ Numeric = tvb_get_uint8(tvb, iOffset);
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 1, ENC_LITTLE_ENDIAN);
iOffset+=1;
break;
diff --git a/plugins/epan/opcua/opcua_application_layer.h b/plugins/epan/opcua/opcua_application_layer.h
index c9b043e8..9e47a2dd 100644
--- a/plugins/epan/opcua/opcua_application_layer.h
+++ b/plugins/epan/opcua/opcua_application_layer.h
@@ -17,4 +17,5 @@
void registerApplicationLayerTypes(int proto);
/* Ua type parsers */
-int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
+int getServiceNodeId(tvbuff_t *tvb, int offset);
+int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, int *pOffset);
diff --git a/plugins/epan/opcua/opcua_complextypeparser.c b/plugins/epan/opcua/opcua_complextypeparser.c
index e37dd299..a04f9c59 100644
--- a/plugins/epan/opcua/opcua_complextypeparser.c
+++ b/plugins/epan/opcua/opcua_complextypeparser.c
@@ -24,288 +24,288 @@
#include "opcua_simpletypes.h"
#include "opcua_hfindeces.h"
-gint ett_opcua_TrustListDataType = -1;
-gint ett_opcua_array_TrustListDataType = -1;
-gint ett_opcua_Node = -1;
-gint ett_opcua_array_Node = -1;
-gint ett_opcua_InstanceNode = -1;
-gint ett_opcua_array_InstanceNode = -1;
-gint ett_opcua_TypeNode = -1;
-gint ett_opcua_array_TypeNode = -1;
-gint ett_opcua_ObjectNode = -1;
-gint ett_opcua_array_ObjectNode = -1;
-gint ett_opcua_ObjectTypeNode = -1;
-gint ett_opcua_array_ObjectTypeNode = -1;
-gint ett_opcua_VariableNode = -1;
-gint ett_opcua_array_VariableNode = -1;
-gint ett_opcua_VariableTypeNode = -1;
-gint ett_opcua_array_VariableTypeNode = -1;
-gint ett_opcua_ReferenceTypeNode = -1;
-gint ett_opcua_array_ReferenceTypeNode = -1;
-gint ett_opcua_MethodNode = -1;
-gint ett_opcua_array_MethodNode = -1;
-gint ett_opcua_ViewNode = -1;
-gint ett_opcua_array_ViewNode = -1;
-gint ett_opcua_DataTypeNode = -1;
-gint ett_opcua_array_DataTypeNode = -1;
-gint ett_opcua_ReferenceNode = -1;
-gint ett_opcua_array_ReferenceNode = -1;
-gint ett_opcua_Argument = -1;
-gint ett_opcua_array_Argument = -1;
-gint ett_opcua_EnumValueType = -1;
-gint ett_opcua_array_EnumValueType = -1;
-gint ett_opcua_OptionSet = -1;
-gint ett_opcua_array_OptionSet = -1;
-gint ett_opcua_TimeZoneDataType = -1;
-gint ett_opcua_array_TimeZoneDataType = -1;
-gint ett_opcua_ApplicationDescription = -1;
-gint ett_opcua_array_ApplicationDescription = -1;
-gint ett_opcua_RequestHeader = -1;
-gint ett_opcua_array_RequestHeader = -1;
-gint ett_opcua_ResponseHeader = -1;
-gint ett_opcua_array_ResponseHeader = -1;
-gint ett_opcua_ServerOnNetwork = -1;
-gint ett_opcua_array_ServerOnNetwork = -1;
-gint ett_opcua_UserTokenPolicy = -1;
-gint ett_opcua_array_UserTokenPolicy = -1;
-gint ett_opcua_EndpointDescription = -1;
-gint ett_opcua_array_EndpointDescription = -1;
-gint ett_opcua_RegisteredServer = -1;
-gint ett_opcua_array_RegisteredServer = -1;
-gint ett_opcua_MdnsDiscoveryConfiguration = -1;
-gint ett_opcua_array_MdnsDiscoveryConfiguration = -1;
-gint ett_opcua_ChannelSecurityToken = -1;
-gint ett_opcua_array_ChannelSecurityToken = -1;
-gint ett_opcua_SignedSoftwareCertificate = -1;
-gint ett_opcua_array_SignedSoftwareCertificate = -1;
-gint ett_opcua_SignatureData = -1;
-gint ett_opcua_array_SignatureData = -1;
-gint ett_opcua_UserIdentityToken = -1;
-gint ett_opcua_array_UserIdentityToken = -1;
-gint ett_opcua_AnonymousIdentityToken = -1;
-gint ett_opcua_array_AnonymousIdentityToken = -1;
-gint ett_opcua_UserNameIdentityToken = -1;
-gint ett_opcua_array_UserNameIdentityToken = -1;
-gint ett_opcua_X509IdentityToken = -1;
-gint ett_opcua_array_X509IdentityToken = -1;
-gint ett_opcua_KerberosIdentityToken = -1;
-gint ett_opcua_array_KerberosIdentityToken = -1;
-gint ett_opcua_IssuedIdentityToken = -1;
-gint ett_opcua_array_IssuedIdentityToken = -1;
-gint ett_opcua_NodeAttributes = -1;
-gint ett_opcua_array_NodeAttributes = -1;
-gint ett_opcua_ObjectAttributes = -1;
-gint ett_opcua_array_ObjectAttributes = -1;
-gint ett_opcua_VariableAttributes = -1;
-gint ett_opcua_array_VariableAttributes = -1;
-gint ett_opcua_MethodAttributes = -1;
-gint ett_opcua_array_MethodAttributes = -1;
-gint ett_opcua_ObjectTypeAttributes = -1;
-gint ett_opcua_array_ObjectTypeAttributes = -1;
-gint ett_opcua_VariableTypeAttributes = -1;
-gint ett_opcua_array_VariableTypeAttributes = -1;
-gint ett_opcua_ReferenceTypeAttributes = -1;
-gint ett_opcua_array_ReferenceTypeAttributes = -1;
-gint ett_opcua_DataTypeAttributes = -1;
-gint ett_opcua_array_DataTypeAttributes = -1;
-gint ett_opcua_ViewAttributes = -1;
-gint ett_opcua_array_ViewAttributes = -1;
-gint ett_opcua_AddNodesItem = -1;
-gint ett_opcua_array_AddNodesItem = -1;
-gint ett_opcua_AddNodesResult = -1;
-gint ett_opcua_array_AddNodesResult = -1;
-gint ett_opcua_AddReferencesItem = -1;
-gint ett_opcua_array_AddReferencesItem = -1;
-gint ett_opcua_DeleteNodesItem = -1;
-gint ett_opcua_array_DeleteNodesItem = -1;
-gint ett_opcua_DeleteReferencesItem = -1;
-gint ett_opcua_array_DeleteReferencesItem = -1;
-gint ett_opcua_ViewDescription = -1;
-gint ett_opcua_array_ViewDescription = -1;
-gint ett_opcua_BrowseDescription = -1;
-gint ett_opcua_array_BrowseDescription = -1;
-gint ett_opcua_ReferenceDescription = -1;
-gint ett_opcua_array_ReferenceDescription = -1;
-gint ett_opcua_BrowseResult = -1;
-gint ett_opcua_array_BrowseResult = -1;
-gint ett_opcua_RelativePathElement = -1;
-gint ett_opcua_array_RelativePathElement = -1;
-gint ett_opcua_RelativePath = -1;
-gint ett_opcua_array_RelativePath = -1;
-gint ett_opcua_BrowsePath = -1;
-gint ett_opcua_array_BrowsePath = -1;
-gint ett_opcua_BrowsePathTarget = -1;
-gint ett_opcua_array_BrowsePathTarget = -1;
-gint ett_opcua_BrowsePathResult = -1;
-gint ett_opcua_array_BrowsePathResult = -1;
-gint ett_opcua_EndpointConfiguration = -1;
-gint ett_opcua_array_EndpointConfiguration = -1;
-gint ett_opcua_SupportedProfile = -1;
-gint ett_opcua_array_SupportedProfile = -1;
-gint ett_opcua_SoftwareCertificate = -1;
-gint ett_opcua_array_SoftwareCertificate = -1;
-gint ett_opcua_QueryDataDescription = -1;
-gint ett_opcua_array_QueryDataDescription = -1;
-gint ett_opcua_NodeTypeDescription = -1;
-gint ett_opcua_array_NodeTypeDescription = -1;
-gint ett_opcua_QueryDataSet = -1;
-gint ett_opcua_array_QueryDataSet = -1;
-gint ett_opcua_NodeReference = -1;
-gint ett_opcua_array_NodeReference = -1;
-gint ett_opcua_ContentFilterElement = -1;
-gint ett_opcua_array_ContentFilterElement = -1;
-gint ett_opcua_ContentFilter = -1;
-gint ett_opcua_array_ContentFilter = -1;
-gint ett_opcua_ElementOperand = -1;
-gint ett_opcua_array_ElementOperand = -1;
-gint ett_opcua_LiteralOperand = -1;
-gint ett_opcua_array_LiteralOperand = -1;
-gint ett_opcua_AttributeOperand = -1;
-gint ett_opcua_array_AttributeOperand = -1;
-gint ett_opcua_SimpleAttributeOperand = -1;
-gint ett_opcua_array_SimpleAttributeOperand = -1;
-gint ett_opcua_ContentFilterElementResult = -1;
-gint ett_opcua_array_ContentFilterElementResult = -1;
-gint ett_opcua_ContentFilterResult = -1;
-gint ett_opcua_array_ContentFilterResult = -1;
-gint ett_opcua_ParsingResult = -1;
-gint ett_opcua_array_ParsingResult = -1;
-gint ett_opcua_ReadValueId = -1;
-gint ett_opcua_array_ReadValueId = -1;
-gint ett_opcua_HistoryReadValueId = -1;
-gint ett_opcua_array_HistoryReadValueId = -1;
-gint ett_opcua_HistoryReadResult = -1;
-gint ett_opcua_array_HistoryReadResult = -1;
-gint ett_opcua_ReadEventDetails = -1;
-gint ett_opcua_array_ReadEventDetails = -1;
-gint ett_opcua_ReadRawModifiedDetails = -1;
-gint ett_opcua_array_ReadRawModifiedDetails = -1;
-gint ett_opcua_ReadProcessedDetails = -1;
-gint ett_opcua_array_ReadProcessedDetails = -1;
-gint ett_opcua_ReadAtTimeDetails = -1;
-gint ett_opcua_array_ReadAtTimeDetails = -1;
-gint ett_opcua_HistoryData = -1;
-gint ett_opcua_array_HistoryData = -1;
-gint ett_opcua_ModificationInfo = -1;
-gint ett_opcua_array_ModificationInfo = -1;
-gint ett_opcua_HistoryModifiedData = -1;
-gint ett_opcua_array_HistoryModifiedData = -1;
-gint ett_opcua_HistoryEvent = -1;
-gint ett_opcua_array_HistoryEvent = -1;
-gint ett_opcua_WriteValue = -1;
-gint ett_opcua_array_WriteValue = -1;
-gint ett_opcua_HistoryUpdateDetails = -1;
-gint ett_opcua_array_HistoryUpdateDetails = -1;
-gint ett_opcua_UpdateDataDetails = -1;
-gint ett_opcua_array_UpdateDataDetails = -1;
-gint ett_opcua_UpdateStructureDataDetails = -1;
-gint ett_opcua_array_UpdateStructureDataDetails = -1;
-gint ett_opcua_UpdateEventDetails = -1;
-gint ett_opcua_array_UpdateEventDetails = -1;
-gint ett_opcua_DeleteRawModifiedDetails = -1;
-gint ett_opcua_array_DeleteRawModifiedDetails = -1;
-gint ett_opcua_DeleteAtTimeDetails = -1;
-gint ett_opcua_array_DeleteAtTimeDetails = -1;
-gint ett_opcua_DeleteEventDetails = -1;
-gint ett_opcua_array_DeleteEventDetails = -1;
-gint ett_opcua_HistoryUpdateResult = -1;
-gint ett_opcua_array_HistoryUpdateResult = -1;
-gint ett_opcua_CallMethodRequest = -1;
-gint ett_opcua_array_CallMethodRequest = -1;
-gint ett_opcua_CallMethodResult = -1;
-gint ett_opcua_array_CallMethodResult = -1;
-gint ett_opcua_DataChangeFilter = -1;
-gint ett_opcua_array_DataChangeFilter = -1;
-gint ett_opcua_EventFilter = -1;
-gint ett_opcua_array_EventFilter = -1;
-gint ett_opcua_AggregateConfiguration = -1;
-gint ett_opcua_array_AggregateConfiguration = -1;
-gint ett_opcua_AggregateFilter = -1;
-gint ett_opcua_array_AggregateFilter = -1;
-gint ett_opcua_EventFilterResult = -1;
-gint ett_opcua_array_EventFilterResult = -1;
-gint ett_opcua_AggregateFilterResult = -1;
-gint ett_opcua_array_AggregateFilterResult = -1;
-gint ett_opcua_MonitoringParameters = -1;
-gint ett_opcua_array_MonitoringParameters = -1;
-gint ett_opcua_MonitoredItemCreateRequest = -1;
-gint ett_opcua_array_MonitoredItemCreateRequest = -1;
-gint ett_opcua_MonitoredItemCreateResult = -1;
-gint ett_opcua_array_MonitoredItemCreateResult = -1;
-gint ett_opcua_MonitoredItemModifyRequest = -1;
-gint ett_opcua_array_MonitoredItemModifyRequest = -1;
-gint ett_opcua_MonitoredItemModifyResult = -1;
-gint ett_opcua_array_MonitoredItemModifyResult = -1;
-gint ett_opcua_NotificationMessage = -1;
-gint ett_opcua_array_NotificationMessage = -1;
-gint ett_opcua_DataChangeNotification = -1;
-gint ett_opcua_array_DataChangeNotification = -1;
-gint ett_opcua_MonitoredItemNotification = -1;
-gint ett_opcua_array_MonitoredItemNotification = -1;
-gint ett_opcua_EventNotificationList = -1;
-gint ett_opcua_array_EventNotificationList = -1;
-gint ett_opcua_EventFieldList = -1;
-gint ett_opcua_array_EventFieldList = -1;
-gint ett_opcua_HistoryEventFieldList = -1;
-gint ett_opcua_array_HistoryEventFieldList = -1;
-gint ett_opcua_StatusChangeNotification = -1;
-gint ett_opcua_array_StatusChangeNotification = -1;
-gint ett_opcua_SubscriptionAcknowledgement = -1;
-gint ett_opcua_array_SubscriptionAcknowledgement = -1;
-gint ett_opcua_TransferResult = -1;
-gint ett_opcua_array_TransferResult = -1;
-gint ett_opcua_ScalarTestType = -1;
-gint ett_opcua_array_ScalarTestType = -1;
-gint ett_opcua_ArrayTestType = -1;
-gint ett_opcua_array_ArrayTestType = -1;
-gint ett_opcua_CompositeTestType = -1;
-gint ett_opcua_array_CompositeTestType = -1;
-gint ett_opcua_BuildInfo = -1;
-gint ett_opcua_array_BuildInfo = -1;
-gint ett_opcua_RedundantServerDataType = -1;
-gint ett_opcua_array_RedundantServerDataType = -1;
-gint ett_opcua_EndpointUrlListDataType = -1;
-gint ett_opcua_array_EndpointUrlListDataType = -1;
-gint ett_opcua_NetworkGroupDataType = -1;
-gint ett_opcua_array_NetworkGroupDataType = -1;
-gint ett_opcua_SamplingIntervalDiagnosticsDataType = -1;
-gint ett_opcua_array_SamplingIntervalDiagnosticsDataType = -1;
-gint ett_opcua_ServerDiagnosticsSummaryDataType = -1;
-gint ett_opcua_array_ServerDiagnosticsSummaryDataType = -1;
-gint ett_opcua_ServerStatusDataType = -1;
-gint ett_opcua_array_ServerStatusDataType = -1;
-gint ett_opcua_SessionDiagnosticsDataType = -1;
-gint ett_opcua_array_SessionDiagnosticsDataType = -1;
-gint ett_opcua_SessionSecurityDiagnosticsDataType = -1;
-gint ett_opcua_array_SessionSecurityDiagnosticsDataType = -1;
-gint ett_opcua_ServiceCounterDataType = -1;
-gint ett_opcua_array_ServiceCounterDataType = -1;
-gint ett_opcua_StatusResult = -1;
-gint ett_opcua_array_StatusResult = -1;
-gint ett_opcua_SubscriptionDiagnosticsDataType = -1;
-gint ett_opcua_array_SubscriptionDiagnosticsDataType = -1;
-gint ett_opcua_ModelChangeStructureDataType = -1;
-gint ett_opcua_array_ModelChangeStructureDataType = -1;
-gint ett_opcua_SemanticChangeStructureDataType = -1;
-gint ett_opcua_array_SemanticChangeStructureDataType = -1;
-gint ett_opcua_Range = -1;
-gint ett_opcua_array_Range = -1;
-gint ett_opcua_EUInformation = -1;
-gint ett_opcua_array_EUInformation = -1;
-gint ett_opcua_ComplexNumberType = -1;
-gint ett_opcua_array_ComplexNumberType = -1;
-gint ett_opcua_DoubleComplexNumberType = -1;
-gint ett_opcua_array_DoubleComplexNumberType = -1;
-gint ett_opcua_AxisInformation = -1;
-gint ett_opcua_array_AxisInformation = -1;
-gint ett_opcua_XVType = -1;
-gint ett_opcua_array_XVType = -1;
-gint ett_opcua_ProgramDiagnosticDataType = -1;
-gint ett_opcua_array_ProgramDiagnosticDataType = -1;
-gint ett_opcua_Annotation = -1;
-gint ett_opcua_array_Annotation = -1;
+int ett_opcua_TrustListDataType;
+int ett_opcua_array_TrustListDataType;
+int ett_opcua_Node;
+int ett_opcua_array_Node;
+int ett_opcua_InstanceNode;
+int ett_opcua_array_InstanceNode;
+int ett_opcua_TypeNode;
+int ett_opcua_array_TypeNode;
+int ett_opcua_ObjectNode;
+int ett_opcua_array_ObjectNode;
+int ett_opcua_ObjectTypeNode;
+int ett_opcua_array_ObjectTypeNode;
+int ett_opcua_VariableNode;
+int ett_opcua_array_VariableNode;
+int ett_opcua_VariableTypeNode;
+int ett_opcua_array_VariableTypeNode;
+int ett_opcua_ReferenceTypeNode;
+int ett_opcua_array_ReferenceTypeNode;
+int ett_opcua_MethodNode;
+int ett_opcua_array_MethodNode;
+int ett_opcua_ViewNode;
+int ett_opcua_array_ViewNode;
+int ett_opcua_DataTypeNode;
+int ett_opcua_array_DataTypeNode;
+int ett_opcua_ReferenceNode;
+int ett_opcua_array_ReferenceNode;
+int ett_opcua_Argument;
+int ett_opcua_array_Argument;
+int ett_opcua_EnumValueType;
+int ett_opcua_array_EnumValueType;
+int ett_opcua_OptionSet;
+int ett_opcua_array_OptionSet;
+int ett_opcua_TimeZoneDataType;
+int ett_opcua_array_TimeZoneDataType;
+int ett_opcua_ApplicationDescription;
+int ett_opcua_array_ApplicationDescription;
+int ett_opcua_RequestHeader;
+int ett_opcua_array_RequestHeader;
+int ett_opcua_ResponseHeader;
+int ett_opcua_array_ResponseHeader;
+int ett_opcua_ServerOnNetwork;
+int ett_opcua_array_ServerOnNetwork;
+int ett_opcua_UserTokenPolicy;
+int ett_opcua_array_UserTokenPolicy;
+int ett_opcua_EndpointDescription;
+int ett_opcua_array_EndpointDescription;
+int ett_opcua_RegisteredServer;
+int ett_opcua_array_RegisteredServer;
+int ett_opcua_MdnsDiscoveryConfiguration;
+int ett_opcua_array_MdnsDiscoveryConfiguration;
+int ett_opcua_ChannelSecurityToken;
+int ett_opcua_array_ChannelSecurityToken;
+int ett_opcua_SignedSoftwareCertificate;
+int ett_opcua_array_SignedSoftwareCertificate;
+int ett_opcua_SignatureData;
+int ett_opcua_array_SignatureData;
+int ett_opcua_UserIdentityToken;
+int ett_opcua_array_UserIdentityToken;
+int ett_opcua_AnonymousIdentityToken;
+int ett_opcua_array_AnonymousIdentityToken;
+int ett_opcua_UserNameIdentityToken;
+int ett_opcua_array_UserNameIdentityToken;
+int ett_opcua_X509IdentityToken;
+int ett_opcua_array_X509IdentityToken;
+int ett_opcua_KerberosIdentityToken;
+int ett_opcua_array_KerberosIdentityToken;
+int ett_opcua_IssuedIdentityToken;
+int ett_opcua_array_IssuedIdentityToken;
+int ett_opcua_NodeAttributes;
+int ett_opcua_array_NodeAttributes;
+int ett_opcua_ObjectAttributes;
+int ett_opcua_array_ObjectAttributes;
+int ett_opcua_VariableAttributes;
+int ett_opcua_array_VariableAttributes;
+int ett_opcua_MethodAttributes;
+int ett_opcua_array_MethodAttributes;
+int ett_opcua_ObjectTypeAttributes;
+int ett_opcua_array_ObjectTypeAttributes;
+int ett_opcua_VariableTypeAttributes;
+int ett_opcua_array_VariableTypeAttributes;
+int ett_opcua_ReferenceTypeAttributes;
+int ett_opcua_array_ReferenceTypeAttributes;
+int ett_opcua_DataTypeAttributes;
+int ett_opcua_array_DataTypeAttributes;
+int ett_opcua_ViewAttributes;
+int ett_opcua_array_ViewAttributes;
+int ett_opcua_AddNodesItem;
+int ett_opcua_array_AddNodesItem;
+int ett_opcua_AddNodesResult;
+int ett_opcua_array_AddNodesResult;
+int ett_opcua_AddReferencesItem;
+int ett_opcua_array_AddReferencesItem;
+int ett_opcua_DeleteNodesItem;
+int ett_opcua_array_DeleteNodesItem;
+int ett_opcua_DeleteReferencesItem;
+int ett_opcua_array_DeleteReferencesItem;
+int ett_opcua_ViewDescription;
+int ett_opcua_array_ViewDescription;
+int ett_opcua_BrowseDescription;
+int ett_opcua_array_BrowseDescription;
+int ett_opcua_ReferenceDescription;
+int ett_opcua_array_ReferenceDescription;
+int ett_opcua_BrowseResult;
+int ett_opcua_array_BrowseResult;
+int ett_opcua_RelativePathElement;
+int ett_opcua_array_RelativePathElement;
+int ett_opcua_RelativePath;
+int ett_opcua_array_RelativePath;
+int ett_opcua_BrowsePath;
+int ett_opcua_array_BrowsePath;
+int ett_opcua_BrowsePathTarget;
+int ett_opcua_array_BrowsePathTarget;
+int ett_opcua_BrowsePathResult;
+int ett_opcua_array_BrowsePathResult;
+int ett_opcua_EndpointConfiguration;
+int ett_opcua_array_EndpointConfiguration;
+int ett_opcua_SupportedProfile;
+int ett_opcua_array_SupportedProfile;
+int ett_opcua_SoftwareCertificate;
+int ett_opcua_array_SoftwareCertificate;
+int ett_opcua_QueryDataDescription;
+int ett_opcua_array_QueryDataDescription;
+int ett_opcua_NodeTypeDescription;
+int ett_opcua_array_NodeTypeDescription;
+int ett_opcua_QueryDataSet;
+int ett_opcua_array_QueryDataSet;
+int ett_opcua_NodeReference;
+int ett_opcua_array_NodeReference;
+int ett_opcua_ContentFilterElement;
+int ett_opcua_array_ContentFilterElement;
+int ett_opcua_ContentFilter;
+int ett_opcua_array_ContentFilter;
+int ett_opcua_ElementOperand;
+int ett_opcua_array_ElementOperand;
+int ett_opcua_LiteralOperand;
+int ett_opcua_array_LiteralOperand;
+int ett_opcua_AttributeOperand;
+int ett_opcua_array_AttributeOperand;
+int ett_opcua_SimpleAttributeOperand;
+int ett_opcua_array_SimpleAttributeOperand;
+int ett_opcua_ContentFilterElementResult;
+int ett_opcua_array_ContentFilterElementResult;
+int ett_opcua_ContentFilterResult;
+int ett_opcua_array_ContentFilterResult;
+int ett_opcua_ParsingResult;
+int ett_opcua_array_ParsingResult;
+int ett_opcua_ReadValueId;
+int ett_opcua_array_ReadValueId;
+int ett_opcua_HistoryReadValueId;
+int ett_opcua_array_HistoryReadValueId;
+int ett_opcua_HistoryReadResult;
+int ett_opcua_array_HistoryReadResult;
+int ett_opcua_ReadEventDetails;
+int ett_opcua_array_ReadEventDetails;
+int ett_opcua_ReadRawModifiedDetails;
+int ett_opcua_array_ReadRawModifiedDetails;
+int ett_opcua_ReadProcessedDetails;
+int ett_opcua_array_ReadProcessedDetails;
+int ett_opcua_ReadAtTimeDetails;
+int ett_opcua_array_ReadAtTimeDetails;
+int ett_opcua_HistoryData;
+int ett_opcua_array_HistoryData;
+int ett_opcua_ModificationInfo;
+int ett_opcua_array_ModificationInfo;
+int ett_opcua_HistoryModifiedData;
+int ett_opcua_array_HistoryModifiedData;
+int ett_opcua_HistoryEvent;
+int ett_opcua_array_HistoryEvent;
+int ett_opcua_WriteValue;
+int ett_opcua_array_WriteValue;
+int ett_opcua_HistoryUpdateDetails;
+int ett_opcua_array_HistoryUpdateDetails;
+int ett_opcua_UpdateDataDetails;
+int ett_opcua_array_UpdateDataDetails;
+int ett_opcua_UpdateStructureDataDetails;
+int ett_opcua_array_UpdateStructureDataDetails;
+int ett_opcua_UpdateEventDetails;
+int ett_opcua_array_UpdateEventDetails;
+int ett_opcua_DeleteRawModifiedDetails;
+int ett_opcua_array_DeleteRawModifiedDetails;
+int ett_opcua_DeleteAtTimeDetails;
+int ett_opcua_array_DeleteAtTimeDetails;
+int ett_opcua_DeleteEventDetails;
+int ett_opcua_array_DeleteEventDetails;
+int ett_opcua_HistoryUpdateResult;
+int ett_opcua_array_HistoryUpdateResult;
+int ett_opcua_CallMethodRequest;
+int ett_opcua_array_CallMethodRequest;
+int ett_opcua_CallMethodResult;
+int ett_opcua_array_CallMethodResult;
+int ett_opcua_DataChangeFilter;
+int ett_opcua_array_DataChangeFilter;
+int ett_opcua_EventFilter;
+int ett_opcua_array_EventFilter;
+int ett_opcua_AggregateConfiguration;
+int ett_opcua_array_AggregateConfiguration;
+int ett_opcua_AggregateFilter;
+int ett_opcua_array_AggregateFilter;
+int ett_opcua_EventFilterResult;
+int ett_opcua_array_EventFilterResult;
+int ett_opcua_AggregateFilterResult;
+int ett_opcua_array_AggregateFilterResult;
+int ett_opcua_MonitoringParameters;
+int ett_opcua_array_MonitoringParameters;
+int ett_opcua_MonitoredItemCreateRequest;
+int ett_opcua_array_MonitoredItemCreateRequest;
+int ett_opcua_MonitoredItemCreateResult;
+int ett_opcua_array_MonitoredItemCreateResult;
+int ett_opcua_MonitoredItemModifyRequest;
+int ett_opcua_array_MonitoredItemModifyRequest;
+int ett_opcua_MonitoredItemModifyResult;
+int ett_opcua_array_MonitoredItemModifyResult;
+int ett_opcua_NotificationMessage;
+int ett_opcua_array_NotificationMessage;
+int ett_opcua_DataChangeNotification;
+int ett_opcua_array_DataChangeNotification;
+int ett_opcua_MonitoredItemNotification;
+int ett_opcua_array_MonitoredItemNotification;
+int ett_opcua_EventNotificationList;
+int ett_opcua_array_EventNotificationList;
+int ett_opcua_EventFieldList;
+int ett_opcua_array_EventFieldList;
+int ett_opcua_HistoryEventFieldList;
+int ett_opcua_array_HistoryEventFieldList;
+int ett_opcua_StatusChangeNotification;
+int ett_opcua_array_StatusChangeNotification;
+int ett_opcua_SubscriptionAcknowledgement;
+int ett_opcua_array_SubscriptionAcknowledgement;
+int ett_opcua_TransferResult;
+int ett_opcua_array_TransferResult;
+int ett_opcua_ScalarTestType;
+int ett_opcua_array_ScalarTestType;
+int ett_opcua_ArrayTestType;
+int ett_opcua_array_ArrayTestType;
+int ett_opcua_CompositeTestType;
+int ett_opcua_array_CompositeTestType;
+int ett_opcua_BuildInfo;
+int ett_opcua_array_BuildInfo;
+int ett_opcua_RedundantServerDataType;
+int ett_opcua_array_RedundantServerDataType;
+int ett_opcua_EndpointUrlListDataType;
+int ett_opcua_array_EndpointUrlListDataType;
+int ett_opcua_NetworkGroupDataType;
+int ett_opcua_array_NetworkGroupDataType;
+int ett_opcua_SamplingIntervalDiagnosticsDataType;
+int ett_opcua_array_SamplingIntervalDiagnosticsDataType;
+int ett_opcua_ServerDiagnosticsSummaryDataType;
+int ett_opcua_array_ServerDiagnosticsSummaryDataType;
+int ett_opcua_ServerStatusDataType;
+int ett_opcua_array_ServerStatusDataType;
+int ett_opcua_SessionDiagnosticsDataType;
+int ett_opcua_array_SessionDiagnosticsDataType;
+int ett_opcua_SessionSecurityDiagnosticsDataType;
+int ett_opcua_array_SessionSecurityDiagnosticsDataType;
+int ett_opcua_ServiceCounterDataType;
+int ett_opcua_array_ServiceCounterDataType;
+int ett_opcua_StatusResult;
+int ett_opcua_array_StatusResult;
+int ett_opcua_SubscriptionDiagnosticsDataType;
+int ett_opcua_array_SubscriptionDiagnosticsDataType;
+int ett_opcua_ModelChangeStructureDataType;
+int ett_opcua_array_ModelChangeStructureDataType;
+int ett_opcua_SemanticChangeStructureDataType;
+int ett_opcua_array_SemanticChangeStructureDataType;
+int ett_opcua_Range;
+int ett_opcua_array_Range;
+int ett_opcua_EUInformation;
+int ett_opcua_array_EUInformation;
+int ett_opcua_ComplexNumberType;
+int ett_opcua_array_ComplexNumberType;
+int ett_opcua_DoubleComplexNumberType;
+int ett_opcua_array_DoubleComplexNumberType;
+int ett_opcua_AxisInformation;
+int ett_opcua_array_AxisInformation;
+int ett_opcua_XVType;
+int ett_opcua_array_XVType;
+int ett_opcua_ProgramDiagnosticDataType;
+int ett_opcua_array_ProgramDiagnosticDataType;
+int ett_opcua_Annotation;
+int ett_opcua_array_Annotation;
-void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TrustListDataType, &ti, "%s: TrustListDataType", szFieldName);
@@ -320,7 +320,7 @@ void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArraySimple(subtree, tvb, pinfo, pOffset, "IssuerCrls", "ByteString", hf_opcua_IssuerCrls, parseByteString, ett_opcua_array_ByteString);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Node, &ti, "%s: Node", szFieldName);
@@ -335,7 +335,7 @@ void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffse
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_InstanceNode, &ti, "%s: InstanceNode", szFieldName);
@@ -350,7 +350,7 @@ void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TypeNode, &ti, "%s: TypeNode", szFieldName);
@@ -365,7 +365,7 @@ void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pO
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceNode", parseReferenceNode, ett_opcua_array_ReferenceNode);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectNode, &ti, "%s: ObjectNode", szFieldName);
@@ -381,7 +381,7 @@ void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectTypeNode, &ti, "%s: ObjectTypeNode", szFieldName);
@@ -397,7 +397,7 @@ void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableNode, &ti, "%s: VariableNode", szFieldName);
@@ -421,7 +421,7 @@ void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Historizing);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableTypeNode, &ti, "%s: VariableTypeNode", szFieldName);
@@ -442,7 +442,7 @@ void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceTypeNode, &ti, "%s: ReferenceTypeNode", szFieldName);
@@ -460,7 +460,7 @@ void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseLocalizedText(subtree, tvb, pinfo, pOffset, "InverseName");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MethodNode, &ti, "%s: MethodNode", szFieldName);
@@ -477,7 +477,7 @@ void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UserExecutable);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewNode, &ti, "%s: ViewNode", szFieldName);
@@ -494,7 +494,7 @@ void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pO
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataTypeNode, &ti, "%s: DataTypeNode", szFieldName);
@@ -510,7 +510,7 @@ void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceNode, &ti, "%s: ReferenceNode", szFieldName);
@@ -519,7 +519,7 @@ void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TargetId");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Argument, &ti, "%s: Argument", szFieldName);
@@ -531,7 +531,7 @@ void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pO
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EnumValueType, &ti, "%s: EnumValueType", szFieldName);
@@ -540,7 +540,7 @@ void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_OptionSet, &ti, "%s: OptionSet", szFieldName);
@@ -548,7 +548,7 @@ void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *p
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ValidBits);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TimeZoneDataType, &ti, "%s: TimeZoneDataType", szFieldName);
@@ -556,7 +556,7 @@ void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DaylightSavingInOffset);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ApplicationDescription, &ti, "%s: ApplicationDescription", szFieldName);
@@ -570,7 +570,7 @@ void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseArraySimple(subtree, tvb, pinfo, pOffset, "DiscoveryUrls", "String", hf_opcua_DiscoveryUrls, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
static int * const returnDiagnostics_mask[] = {
&hf_opcua_returnDiag_mask_sl_symbolicId,
@@ -596,7 +596,7 @@ void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseExtensionObject(subtree, tvb, pinfo, pOffset, "AdditionalHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ResponseHeader, &ti, "%s: ResponseHeader", szFieldName);
@@ -609,7 +609,7 @@ void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseExtensionObject(subtree, tvb, pinfo, pOffset, "AdditionalHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerOnNetwork, &ti, "%s: ServerOnNetwork", szFieldName);
@@ -620,7 +620,7 @@ void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilities", "String", hf_opcua_ServerCapabilities, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserTokenPolicy, &ti, "%s: UserTokenPolicy", szFieldName);
@@ -631,13 +631,13 @@ void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointDescription, &ti, "%s: EndpointDescription", szFieldName);
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl);
parseApplicationDescription(subtree, tvb, pinfo, pOffset, "Server");
- parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate);
+ parseCertificate(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate);
parseMessageSecurityMode(subtree, tvb, pinfo, pOffset);
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
/* Array length field ignored: NoOfUserIdentityTokens */
@@ -646,7 +646,7 @@ void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityLevel);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RegisteredServer, &ti, "%s: RegisteredServer", szFieldName);
@@ -662,7 +662,7 @@ void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsOnline);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MdnsDiscoveryConfiguration, &ti, "%s: MdnsDiscoveryConfiguration", szFieldName);
@@ -671,7 +671,7 @@ void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilities", "String", hf_opcua_ServerCapabilities, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ChannelSecurityToken, &ti, "%s: ChannelSecurityToken", szFieldName);
@@ -681,7 +681,7 @@ void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedLifetime);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SignedSoftwareCertificate, &ti, "%s: SignedSoftwareCertificate", szFieldName);
@@ -689,7 +689,7 @@ void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Signature);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SignatureData, &ti, "%s: SignatureData", szFieldName);
@@ -697,21 +697,21 @@ void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_Signature);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserIdentityToken, &ti, "%s: UserIdentityToken", szFieldName);
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAnonymousIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAnonymousIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AnonymousIdentityToken, &ti, "%s: AnonymousIdentityToken", szFieldName);
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_PolicyId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UserNameIdentityToken, &ti, "%s: UserNameIdentityToken", szFieldName);
@@ -721,7 +721,7 @@ void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EncryptionAlgorithm);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_X509IdentityToken, &ti, "%s: X509IdentityToken", szFieldName);
@@ -729,7 +729,7 @@ void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_CertificateData);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_KerberosIdentityToken, &ti, "%s: KerberosIdentityToken", szFieldName);
@@ -737,7 +737,7 @@ void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_TicketData);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_IssuedIdentityToken, &ti, "%s: IssuedIdentityToken", szFieldName);
@@ -746,7 +746,7 @@ void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EncryptionAlgorithm);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeAttributes, &ti, "%s: NodeAttributes", szFieldName);
@@ -757,7 +757,7 @@ void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_UserWriteMask);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectAttributes, &ti, "%s: ObjectAttributes", szFieldName);
@@ -769,7 +769,7 @@ void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableAttributes, &ti, "%s: VariableAttributes", szFieldName);
@@ -789,7 +789,7 @@ void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_Historizing);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MethodAttributes, &ti, "%s: MethodAttributes", szFieldName);
@@ -802,7 +802,7 @@ void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UserExecutable);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ObjectTypeAttributes, &ti, "%s: ObjectTypeAttributes", szFieldName);
@@ -814,7 +814,7 @@ void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_VariableTypeAttributes, &ti, "%s: VariableTypeAttributes", szFieldName);
@@ -831,7 +831,7 @@ void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceTypeAttributes, &ti, "%s: ReferenceTypeAttributes", szFieldName);
@@ -845,7 +845,7 @@ void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseLocalizedText(subtree, tvb, pinfo, pOffset, "InverseName");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataTypeAttributes, &ti, "%s: DataTypeAttributes", szFieldName);
@@ -857,7 +857,7 @@ void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_IsAbstract);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewAttributes, &ti, "%s: ViewAttributes", szFieldName);
@@ -870,7 +870,7 @@ void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_EventNotifier);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddNodesItem, &ti, "%s: AddNodesItem", szFieldName);
@@ -883,7 +883,7 @@ void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinition");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddNodesResult, &ti, "%s: AddNodesResult", szFieldName);
@@ -891,7 +891,7 @@ void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseNodeId(subtree, tvb, pinfo, pOffset, "AddedNodeId");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesItem, &ti, "%s: AddReferencesItem", szFieldName);
@@ -903,7 +903,7 @@ void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseNodeClass(subtree, tvb, pinfo, pOffset);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesItem, &ti, "%s: DeleteNodesItem", szFieldName);
@@ -911,7 +911,7 @@ void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteTargetReferences);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesItem, &ti, "%s: DeleteReferencesItem", szFieldName);
@@ -922,7 +922,7 @@ void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteBidirectional);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ViewDescription, &ti, "%s: ViewDescription", szFieldName);
@@ -931,7 +931,7 @@ void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ViewVersion);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowseDescription, &ti, "%s: BrowseDescription", szFieldName);
@@ -943,7 +943,7 @@ void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseResultMask(subtree, tvb, pinfo, pOffset);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReferenceDescription, &ti, "%s: ReferenceDescription", szFieldName);
@@ -956,7 +956,7 @@ void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseExpandedNodeId(subtree, tvb, pinfo, pOffset, "TypeDefinition");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowseResult, &ti, "%s: BrowseResult", szFieldName);
@@ -966,7 +966,7 @@ void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "References", "ReferenceDescription", parseReferenceDescription, ett_opcua_array_ReferenceDescription);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RelativePathElement, &ti, "%s: RelativePathElement", szFieldName);
@@ -976,7 +976,7 @@ void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseQualifiedName(subtree, tvb, pinfo, pOffset, "TargetName");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RelativePath, &ti, "%s: RelativePath", szFieldName);
@@ -984,7 +984,7 @@ void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Elements", "RelativePathElement", parseRelativePathElement, ett_opcua_array_RelativePathElement);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePath, &ti, "%s: BrowsePath", szFieldName);
@@ -992,7 +992,7 @@ void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *
parseRelativePath(subtree, tvb, pinfo, pOffset, "RelativePath");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePathTarget, &ti, "%s: BrowsePathTarget", szFieldName);
@@ -1000,7 +1000,7 @@ void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RemainingPathIndex);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BrowsePathResult, &ti, "%s: BrowsePathResult", szFieldName);
@@ -1009,7 +1009,7 @@ void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Targets", "BrowsePathTarget", parseBrowsePathTarget, ett_opcua_array_BrowsePathTarget);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointConfiguration, &ti, "%s: EndpointConfiguration", szFieldName);
@@ -1024,7 +1024,7 @@ void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityTokenLifetime);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SupportedProfile, &ti, "%s: SupportedProfile", szFieldName);
@@ -1037,7 +1037,7 @@ void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArraySimple(subtree, tvb, pinfo, pOffset, "UnsupportedUnitIds", "String", hf_opcua_UnsupportedUnitIds, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SoftwareCertificate, &ti, "%s: SoftwareCertificate", szFieldName);
@@ -1054,7 +1054,7 @@ void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "SupportedProfiles", "SupportedProfile", parseSupportedProfile, ett_opcua_array_SupportedProfile);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_QueryDataDescription, &ti, "%s: QueryDataDescription", szFieldName);
@@ -1063,7 +1063,7 @@ void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeTypeDescription, &ti, "%s: NodeTypeDescription", szFieldName);
@@ -1073,7 +1073,7 @@ void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataToReturn", "QueryDataDescription", parseQueryDataDescription, ett_opcua_array_QueryDataDescription);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_QueryDataSet, &ti, "%s: QueryDataSet", szFieldName);
@@ -1083,7 +1083,7 @@ void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Values", "Variant", parseVariant, ett_opcua_array_Variant);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NodeReference, &ti, "%s: NodeReference", szFieldName);
@@ -1094,7 +1094,7 @@ void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencedNodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterElement, &ti, "%s: ContentFilterElement", szFieldName);
@@ -1103,7 +1103,7 @@ void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "FilterOperands", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilter, &ti, "%s: ContentFilter", szFieldName);
@@ -1111,21 +1111,21 @@ void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Elements", "ContentFilterElement", parseContentFilterElement, ett_opcua_array_ContentFilterElement);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ElementOperand, &ti, "%s: ElementOperand", szFieldName);
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_Index);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_LiteralOperand, &ti, "%s: LiteralOperand", szFieldName);
parseVariant(subtree, tvb, pinfo, pOffset, "Value");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AttributeOperand, &ti, "%s: AttributeOperand", szFieldName);
@@ -1136,7 +1136,7 @@ void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SimpleAttributeOperand, &ti, "%s: SimpleAttributeOperand", szFieldName);
@@ -1147,7 +1147,7 @@ void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_IndexRange);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterElementResult, &ti, "%s: ContentFilterElementResult", szFieldName);
@@ -1158,7 +1158,7 @@ void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "OperandDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ContentFilterResult, &ti, "%s: ContentFilterResult", szFieldName);
@@ -1168,7 +1168,7 @@ void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ElementDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ParsingResult, &ti, "%s: ParsingResult", szFieldName);
@@ -1179,7 +1179,7 @@ void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadValueId, &ti, "%s: ReadValueId", szFieldName);
@@ -1189,7 +1189,7 @@ void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseQualifiedName(subtree, tvb, pinfo, pOffset, "DataEncoding");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadValueId, &ti, "%s: HistoryReadValueId", szFieldName);
@@ -1199,7 +1199,7 @@ void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadResult, &ti, "%s: HistoryReadResult", szFieldName);
@@ -1208,7 +1208,7 @@ void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseExtensionObject(subtree, tvb, pinfo, pOffset, "HistoryData");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadEventDetails, &ti, "%s: ReadEventDetails", szFieldName);
@@ -1218,7 +1218,7 @@ void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseEventFilter(subtree, tvb, pinfo, pOffset, "Filter");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadRawModifiedDetails, &ti, "%s: ReadRawModifiedDetails", szFieldName);
@@ -1229,7 +1229,7 @@ void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_ReturnBounds);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadProcessedDetails, &ti, "%s: ReadProcessedDetails", szFieldName);
@@ -1241,7 +1241,7 @@ void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "AggregateConfiguration");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ReadAtTimeDetails, &ti, "%s: ReadAtTimeDetails", szFieldName);
@@ -1250,7 +1250,7 @@ void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseSimpleBounds);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryData, &ti, "%s: HistoryData", szFieldName);
@@ -1258,7 +1258,7 @@ void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DataValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ModificationInfo, &ti, "%s: ModificationInfo", szFieldName);
@@ -1267,7 +1267,7 @@ void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_UserName);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryModifiedData, &ti, "%s: HistoryModifiedData", szFieldName);
@@ -1277,7 +1277,7 @@ void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ModificationInfos", "ModificationInfo", parseModificationInfo, ett_opcua_array_ModificationInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryEvent, &ti, "%s: HistoryEvent", szFieldName);
@@ -1285,7 +1285,7 @@ void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Events", "HistoryEventFieldList", parseHistoryEventFieldList, ett_opcua_array_HistoryEventFieldList);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_WriteValue, &ti, "%s: WriteValue", szFieldName);
@@ -1295,14 +1295,14 @@ void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *
parseDataValue(subtree, tvb, pinfo, pOffset, "Value");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryUpdateDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryUpdateDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateDetails, &ti, "%s: HistoryUpdateDetails", szFieldName);
parseNodeId(subtree, tvb, pinfo, pOffset, "NodeId");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateDataDetails, &ti, "%s: UpdateDataDetails", szFieldName);
@@ -1312,7 +1312,7 @@ void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "UpdateValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateStructureDataDetails, &ti, "%s: UpdateStructureDataDetails", szFieldName);
@@ -1322,7 +1322,7 @@ void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "UpdateValues", "DataValue", parseDataValue, ett_opcua_array_DataValue);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_UpdateEventDetails, &ti, "%s: UpdateEventDetails", szFieldName);
@@ -1333,7 +1333,7 @@ void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventData", "HistoryEventFieldList", parseHistoryEventFieldList, ett_opcua_array_HistoryEventFieldList);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteRawModifiedDetails, &ti, "%s: DeleteRawModifiedDetails", szFieldName);
@@ -1343,7 +1343,7 @@ void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_EndTime);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteAtTimeDetails, &ti, "%s: DeleteAtTimeDetails", szFieldName);
@@ -1352,7 +1352,7 @@ void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArraySimple(subtree, tvb, pinfo, pOffset, "ReqTimes", "DateTime", hf_opcua_ReqTimes, parseDateTime, ett_opcua_array_DateTime);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DeleteEventDetails, &ti, "%s: DeleteEventDetails", szFieldName);
@@ -1361,7 +1361,7 @@ void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseArraySimple(subtree, tvb, pinfo, pOffset, "EventIds", "ByteString", hf_opcua_EventIds, parseByteString, ett_opcua_array_ByteString);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateResult, &ti, "%s: HistoryUpdateResult", szFieldName);
@@ -1372,7 +1372,7 @@ void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CallMethodRequest, &ti, "%s: CallMethodRequest", szFieldName);
@@ -1382,7 +1382,7 @@ void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "InputArguments", "Variant", parseVariant, ett_opcua_array_Variant);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CallMethodResult, &ti, "%s: CallMethodResult", szFieldName);
@@ -1395,7 +1395,7 @@ void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "OutputArguments", "Variant", parseVariant, ett_opcua_array_Variant);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataChangeFilter, &ti, "%s: DataChangeFilter", szFieldName);
@@ -1404,7 +1404,7 @@ void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_DeadbandValue);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFilter, &ti, "%s: EventFilter", szFieldName);
@@ -1413,7 +1413,7 @@ void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseContentFilter(subtree, tvb, pinfo, pOffset, "WhereClause");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateConfiguration, &ti, "%s: AggregateConfiguration", szFieldName);
@@ -1424,7 +1424,7 @@ void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_UseSlopedExtrapolation);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateFilter, &ti, "%s: AggregateFilter", szFieldName);
@@ -1434,7 +1434,7 @@ void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "AggregateConfiguration");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFilterResult, &ti, "%s: EventFilterResult", szFieldName);
@@ -1445,7 +1445,7 @@ void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseContentFilterResult(subtree, tvb, pinfo, pOffset, "WhereClauseResult");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AggregateFilterResult, &ti, "%s: AggregateFilterResult", szFieldName);
@@ -1454,7 +1454,7 @@ void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseAggregateConfiguration(subtree, tvb, pinfo, pOffset, "RevisedAggregateConfiguration");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoringParameters, &ti, "%s: MonitoringParameters", szFieldName);
@@ -1465,7 +1465,7 @@ void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DiscardOldest);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemCreateRequest, &ti, "%s: MonitoredItemCreateRequest", szFieldName);
@@ -1474,7 +1474,7 @@ void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseMonitoringParameters(subtree, tvb, pinfo, pOffset, "RequestedParameters");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemCreateResult, &ti, "%s: MonitoredItemCreateResult", szFieldName);
@@ -1485,7 +1485,7 @@ void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info
parseExtensionObject(subtree, tvb, pinfo, pOffset, "FilterResult");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemModifyRequest, &ti, "%s: MonitoredItemModifyRequest", szFieldName);
@@ -1493,7 +1493,7 @@ void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseMonitoringParameters(subtree, tvb, pinfo, pOffset, "RequestedParameters");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemModifyResult, &ti, "%s: MonitoredItemModifyResult", szFieldName);
@@ -1503,7 +1503,7 @@ void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info
parseExtensionObject(subtree, tvb, pinfo, pOffset, "FilterResult");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NotificationMessage, &ti, "%s: NotificationMessage", szFieldName);
@@ -1513,7 +1513,7 @@ void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NotificationData", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DataChangeNotification, &ti, "%s: DataChangeNotification", szFieldName);
@@ -1523,7 +1523,7 @@ void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_MonitoredItemNotification, &ti, "%s: MonitoredItemNotification", szFieldName);
@@ -1531,7 +1531,7 @@ void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info
parseDataValue(subtree, tvb, pinfo, pOffset, "Value");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventNotificationList, &ti, "%s: EventNotificationList", szFieldName);
@@ -1539,7 +1539,7 @@ void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Events", "EventFieldList", parseEventFieldList, ett_opcua_array_EventFieldList);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EventFieldList, &ti, "%s: EventFieldList", szFieldName);
@@ -1548,7 +1548,7 @@ void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventFields", "Variant", parseVariant, ett_opcua_array_Variant);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_HistoryEventFieldList, &ti, "%s: HistoryEventFieldList", szFieldName);
@@ -1556,7 +1556,7 @@ void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "EventFields", "Variant", parseVariant, ett_opcua_array_Variant);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_StatusChangeNotification, &ti, "%s: StatusChangeNotification", szFieldName);
@@ -1564,7 +1564,7 @@ void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info
parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SubscriptionAcknowledgement, &ti, "%s: SubscriptionAcknowledgement", szFieldName);
@@ -1572,7 +1572,7 @@ void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_in
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_SequenceNumber);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_TransferResult, &ti, "%s: TransferResult", szFieldName);
@@ -1581,7 +1581,7 @@ void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseArraySimple(subtree, tvb, pinfo, pOffset, "AvailableSequenceNumbers", "UInt32", hf_opcua_AvailableSequenceNumbers, parseUInt32, ett_opcua_array_UInt32);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ScalarTestType, &ti, "%s: ScalarTestType", szFieldName);
@@ -1612,7 +1612,7 @@ void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseEnumeratedTestType(subtree, tvb, pinfo, pOffset);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ArrayTestType, &ti, "%s: ArrayTestType", szFieldName);
@@ -1668,7 +1668,7 @@ void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseArrayEnum(subtree, tvb, pinfo, pOffset, "EnumeratedValues", "EnumeratedTestType", parseEnumeratedTestType, ett_opcua_array_EnumeratedTestType);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_CompositeTestType, &ti, "%s: CompositeTestType", szFieldName);
@@ -1676,7 +1676,7 @@ void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArrayTestType(subtree, tvb, pinfo, pOffset, "Field2");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_BuildInfo, &ti, "%s: BuildInfo", szFieldName);
@@ -1688,7 +1688,7 @@ void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *p
parseDateTime(subtree, tvb, pinfo, pOffset, hf_opcua_BuildDate);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_RedundantServerDataType, &ti, "%s: RedundantServerDataType", szFieldName);
@@ -1697,7 +1697,7 @@ void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseServerState(subtree, tvb, pinfo, pOffset);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EndpointUrlListDataType, &ti, "%s: EndpointUrlListDataType", szFieldName);
@@ -1705,7 +1705,7 @@ void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseArraySimple(subtree, tvb, pinfo, pOffset, "EndpointUrlList", "String", hf_opcua_EndpointUrlList, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_NetworkGroupDataType, &ti, "%s: NetworkGroupDataType", szFieldName);
@@ -1714,7 +1714,7 @@ void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NetworkPaths", "EndpointUrlListDataType", parseEndpointUrlListDataType, ett_opcua_array_EndpointUrlListDataType);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SamplingIntervalDiagnosticsDataType, &ti, "%s: SamplingIntervalDiagnosticsDataType", szFieldName);
@@ -1724,7 +1724,7 @@ void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, p
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_DisabledMonitoredItemCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerDiagnosticsSummaryDataType, &ti, "%s: ServerDiagnosticsSummaryDataType", szFieldName);
@@ -1742,7 +1742,7 @@ void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, pack
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RejectedRequestsCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServerStatusDataType, &ti, "%s: ServerStatusDataType", szFieldName);
@@ -1754,7 +1754,7 @@ void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseLocalizedText(subtree, tvb, pinfo, pOffset, "ShutdownReason");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SessionDiagnosticsDataType, &ti, "%s: SessionDiagnosticsDataType", szFieldName);
@@ -1804,7 +1804,7 @@ void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseServiceCounterDataType(subtree, tvb, pinfo, pOffset, "UnregisterNodesCount");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SessionSecurityDiagnosticsDataType, &ti, "%s: SessionSecurityDiagnosticsDataType", szFieldName);
@@ -1817,10 +1817,10 @@ void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, pa
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_TransportProtocol);
parseMessageSecurityMode(subtree, tvb, pinfo, pOffset);
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SecurityPolicyUri);
- parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate);
+ parseCertificate(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ServiceCounterDataType, &ti, "%s: ServiceCounterDataType", szFieldName);
@@ -1828,7 +1828,7 @@ void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_ErrorCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_StatusResult, &ti, "%s: StatusResult", szFieldName);
@@ -1836,7 +1836,7 @@ void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseDiagnosticInfo(subtree, tvb, pinfo, pOffset, "DiagnosticInfo");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SubscriptionDiagnosticsDataType, &ti, "%s: SubscriptionDiagnosticsDataType", szFieldName);
@@ -1873,7 +1873,7 @@ void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packe
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_EventQueueOverFlowCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ModelChangeStructureDataType, &ti, "%s: ModelChangeStructureDataType", szFieldName);
@@ -1882,7 +1882,7 @@ void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_i
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Verb);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_SemanticChangeStructureDataType, &ti, "%s: SemanticChangeStructureDataType", szFieldName);
@@ -1890,7 +1890,7 @@ void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packe
parseNodeId(subtree, tvb, pinfo, pOffset, "AffectedType");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Range, &ti, "%s: Range", szFieldName);
@@ -1898,7 +1898,7 @@ void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffs
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_High);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_EUInformation, &ti, "%s: EUInformation", szFieldName);
@@ -1908,7 +1908,7 @@ void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseLocalizedText(subtree, tvb, pinfo, pOffset, "Description");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ComplexNumberType, &ti, "%s: ComplexNumberType", szFieldName);
@@ -1916,7 +1916,7 @@ void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Imaginary);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_DoubleComplexNumberType, &ti, "%s: DoubleComplexNumberType", szFieldName);
@@ -1924,7 +1924,7 @@ void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_Imaginary);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_AxisInformation, &ti, "%s: AxisInformation", szFieldName);
@@ -1936,7 +1936,7 @@ void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseArraySimple(subtree, tvb, pinfo, pOffset, "AxisSteps", "Double", hf_opcua_AxisSteps, parseDouble, ett_opcua_array_Double);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_XVType, &ti, "%s: XVType", szFieldName);
@@ -1944,7 +1944,7 @@ void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOff
parseFloat(subtree, tvb, pinfo, pOffset, hf_opcua_Value);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_ProgramDiagnosticDataType, &ti, "%s: ProgramDiagnosticDataType", szFieldName);
@@ -1962,7 +1962,7 @@ void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info
parseStatusResult(subtree, tvb, pinfo, pOffset, "LastMethodReturnStatus");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_Annotation, &ti, "%s: Annotation", szFieldName);
@@ -1973,7 +1973,7 @@ void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *
}
/** Setup protocol subtree array */
-static gint *ett[] =
+static int *ett[] =
{
&ett_opcua_TrustListDataType,
&ett_opcua_array_TrustListDataType,
diff --git a/plugins/epan/opcua/opcua_complextypeparser.h b/plugins/epan/opcua/opcua_complextypeparser.h
index 48ef060f..3ceb066b 100644
--- a/plugins/epan/opcua/opcua_complextypeparser.h
+++ b/plugins/epan/opcua/opcua_complextypeparser.h
@@ -20,426 +20,426 @@
#include <glib.h>
#include <epan/packet.h>
-extern gint ett_opcua_TrustListDataType;
-extern gint ett_opcua_array_TrustListDataType;
-extern gint ett_opcua_Node;
-extern gint ett_opcua_array_Node;
-extern gint ett_opcua_InstanceNode;
-extern gint ett_opcua_array_InstanceNode;
-extern gint ett_opcua_TypeNode;
-extern gint ett_opcua_array_TypeNode;
-extern gint ett_opcua_ObjectNode;
-extern gint ett_opcua_array_ObjectNode;
-extern gint ett_opcua_ObjectTypeNode;
-extern gint ett_opcua_array_ObjectTypeNode;
-extern gint ett_opcua_VariableNode;
-extern gint ett_opcua_array_VariableNode;
-extern gint ett_opcua_VariableTypeNode;
-extern gint ett_opcua_array_VariableTypeNode;
-extern gint ett_opcua_ReferenceTypeNode;
-extern gint ett_opcua_array_ReferenceTypeNode;
-extern gint ett_opcua_MethodNode;
-extern gint ett_opcua_array_MethodNode;
-extern gint ett_opcua_ViewNode;
-extern gint ett_opcua_array_ViewNode;
-extern gint ett_opcua_DataTypeNode;
-extern gint ett_opcua_array_DataTypeNode;
-extern gint ett_opcua_ReferenceNode;
-extern gint ett_opcua_array_ReferenceNode;
-extern gint ett_opcua_Argument;
-extern gint ett_opcua_array_Argument;
-extern gint ett_opcua_EnumValueType;
-extern gint ett_opcua_array_EnumValueType;
-extern gint ett_opcua_OptionSet;
-extern gint ett_opcua_array_OptionSet;
-extern gint ett_opcua_TimeZoneDataType;
-extern gint ett_opcua_array_TimeZoneDataType;
-extern gint ett_opcua_ApplicationDescription;
-extern gint ett_opcua_array_ApplicationDescription;
-extern gint ett_opcua_RequestHeader;
-extern gint ett_opcua_array_RequestHeader;
-extern gint ett_opcua_ResponseHeader;
-extern gint ett_opcua_array_ResponseHeader;
-extern gint ett_opcua_ServerOnNetwork;
-extern gint ett_opcua_array_ServerOnNetwork;
-extern gint ett_opcua_UserTokenPolicy;
-extern gint ett_opcua_array_UserTokenPolicy;
-extern gint ett_opcua_EndpointDescription;
-extern gint ett_opcua_array_EndpointDescription;
-extern gint ett_opcua_RegisteredServer;
-extern gint ett_opcua_array_RegisteredServer;
-extern gint ett_opcua_MdnsDiscoveryConfiguration;
-extern gint ett_opcua_array_MdnsDiscoveryConfiguration;
-extern gint ett_opcua_ChannelSecurityToken;
-extern gint ett_opcua_array_ChannelSecurityToken;
-extern gint ett_opcua_SignedSoftwareCertificate;
-extern gint ett_opcua_array_SignedSoftwareCertificate;
-extern gint ett_opcua_SignatureData;
-extern gint ett_opcua_array_SignatureData;
-extern gint ett_opcua_UserIdentityToken;
-extern gint ett_opcua_array_UserIdentityToken;
-extern gint ett_opcua_AnonymousIdentityToken;
-extern gint ett_opcua_array_AnonymousIdentityToken;
-extern gint ett_opcua_UserNameIdentityToken;
-extern gint ett_opcua_array_UserNameIdentityToken;
-extern gint ett_opcua_X509IdentityToken;
-extern gint ett_opcua_array_X509IdentityToken;
-extern gint ett_opcua_KerberosIdentityToken;
-extern gint ett_opcua_array_KerberosIdentityToken;
-extern gint ett_opcua_IssuedIdentityToken;
-extern gint ett_opcua_array_IssuedIdentityToken;
-extern gint ett_opcua_NodeAttributes;
-extern gint ett_opcua_array_NodeAttributes;
-extern gint ett_opcua_ObjectAttributes;
-extern gint ett_opcua_array_ObjectAttributes;
-extern gint ett_opcua_VariableAttributes;
-extern gint ett_opcua_array_VariableAttributes;
-extern gint ett_opcua_MethodAttributes;
-extern gint ett_opcua_array_MethodAttributes;
-extern gint ett_opcua_ObjectTypeAttributes;
-extern gint ett_opcua_array_ObjectTypeAttributes;
-extern gint ett_opcua_VariableTypeAttributes;
-extern gint ett_opcua_array_VariableTypeAttributes;
-extern gint ett_opcua_ReferenceTypeAttributes;
-extern gint ett_opcua_array_ReferenceTypeAttributes;
-extern gint ett_opcua_DataTypeAttributes;
-extern gint ett_opcua_array_DataTypeAttributes;
-extern gint ett_opcua_ViewAttributes;
-extern gint ett_opcua_array_ViewAttributes;
-extern gint ett_opcua_AddNodesItem;
-extern gint ett_opcua_array_AddNodesItem;
-extern gint ett_opcua_AddNodesResult;
-extern gint ett_opcua_array_AddNodesResult;
-extern gint ett_opcua_AddReferencesItem;
-extern gint ett_opcua_array_AddReferencesItem;
-extern gint ett_opcua_DeleteNodesItem;
-extern gint ett_opcua_array_DeleteNodesItem;
-extern gint ett_opcua_DeleteReferencesItem;
-extern gint ett_opcua_array_DeleteReferencesItem;
-extern gint ett_opcua_ViewDescription;
-extern gint ett_opcua_array_ViewDescription;
-extern gint ett_opcua_BrowseDescription;
-extern gint ett_opcua_array_BrowseDescription;
-extern gint ett_opcua_ReferenceDescription;
-extern gint ett_opcua_array_ReferenceDescription;
-extern gint ett_opcua_BrowseResult;
-extern gint ett_opcua_array_BrowseResult;
-extern gint ett_opcua_RelativePathElement;
-extern gint ett_opcua_array_RelativePathElement;
-extern gint ett_opcua_RelativePath;
-extern gint ett_opcua_array_RelativePath;
-extern gint ett_opcua_BrowsePath;
-extern gint ett_opcua_array_BrowsePath;
-extern gint ett_opcua_BrowsePathTarget;
-extern gint ett_opcua_array_BrowsePathTarget;
-extern gint ett_opcua_BrowsePathResult;
-extern gint ett_opcua_array_BrowsePathResult;
-extern gint ett_opcua_EndpointConfiguration;
-extern gint ett_opcua_array_EndpointConfiguration;
-extern gint ett_opcua_SupportedProfile;
-extern gint ett_opcua_array_SupportedProfile;
-extern gint ett_opcua_SoftwareCertificate;
-extern gint ett_opcua_array_SoftwareCertificate;
-extern gint ett_opcua_QueryDataDescription;
-extern gint ett_opcua_array_QueryDataDescription;
-extern gint ett_opcua_NodeTypeDescription;
-extern gint ett_opcua_array_NodeTypeDescription;
-extern gint ett_opcua_QueryDataSet;
-extern gint ett_opcua_array_QueryDataSet;
-extern gint ett_opcua_NodeReference;
-extern gint ett_opcua_array_NodeReference;
-extern gint ett_opcua_ContentFilterElement;
-extern gint ett_opcua_array_ContentFilterElement;
-extern gint ett_opcua_ContentFilter;
-extern gint ett_opcua_array_ContentFilter;
-extern gint ett_opcua_ElementOperand;
-extern gint ett_opcua_array_ElementOperand;
-extern gint ett_opcua_LiteralOperand;
-extern gint ett_opcua_array_LiteralOperand;
-extern gint ett_opcua_AttributeOperand;
-extern gint ett_opcua_array_AttributeOperand;
-extern gint ett_opcua_SimpleAttributeOperand;
-extern gint ett_opcua_array_SimpleAttributeOperand;
-extern gint ett_opcua_ContentFilterElementResult;
-extern gint ett_opcua_array_ContentFilterElementResult;
-extern gint ett_opcua_ContentFilterResult;
-extern gint ett_opcua_array_ContentFilterResult;
-extern gint ett_opcua_ParsingResult;
-extern gint ett_opcua_array_ParsingResult;
-extern gint ett_opcua_ReadValueId;
-extern gint ett_opcua_array_ReadValueId;
-extern gint ett_opcua_HistoryReadValueId;
-extern gint ett_opcua_array_HistoryReadValueId;
-extern gint ett_opcua_HistoryReadResult;
-extern gint ett_opcua_array_HistoryReadResult;
-extern gint ett_opcua_ReadEventDetails;
-extern gint ett_opcua_array_ReadEventDetails;
-extern gint ett_opcua_ReadRawModifiedDetails;
-extern gint ett_opcua_array_ReadRawModifiedDetails;
-extern gint ett_opcua_ReadProcessedDetails;
-extern gint ett_opcua_array_ReadProcessedDetails;
-extern gint ett_opcua_ReadAtTimeDetails;
-extern gint ett_opcua_array_ReadAtTimeDetails;
-extern gint ett_opcua_HistoryData;
-extern gint ett_opcua_array_HistoryData;
-extern gint ett_opcua_ModificationInfo;
-extern gint ett_opcua_array_ModificationInfo;
-extern gint ett_opcua_HistoryModifiedData;
-extern gint ett_opcua_array_HistoryModifiedData;
-extern gint ett_opcua_HistoryEvent;
-extern gint ett_opcua_array_HistoryEvent;
-extern gint ett_opcua_WriteValue;
-extern gint ett_opcua_array_WriteValue;
-extern gint ett_opcua_HistoryUpdateDetails;
-extern gint ett_opcua_array_HistoryUpdateDetails;
-extern gint ett_opcua_UpdateDataDetails;
-extern gint ett_opcua_array_UpdateDataDetails;
-extern gint ett_opcua_UpdateStructureDataDetails;
-extern gint ett_opcua_array_UpdateStructureDataDetails;
-extern gint ett_opcua_UpdateEventDetails;
-extern gint ett_opcua_array_UpdateEventDetails;
-extern gint ett_opcua_DeleteRawModifiedDetails;
-extern gint ett_opcua_array_DeleteRawModifiedDetails;
-extern gint ett_opcua_DeleteAtTimeDetails;
-extern gint ett_opcua_array_DeleteAtTimeDetails;
-extern gint ett_opcua_DeleteEventDetails;
-extern gint ett_opcua_array_DeleteEventDetails;
-extern gint ett_opcua_HistoryUpdateResult;
-extern gint ett_opcua_array_HistoryUpdateResult;
-extern gint ett_opcua_CallMethodRequest;
-extern gint ett_opcua_array_CallMethodRequest;
-extern gint ett_opcua_CallMethodResult;
-extern gint ett_opcua_array_CallMethodResult;
-extern gint ett_opcua_DataChangeFilter;
-extern gint ett_opcua_array_DataChangeFilter;
-extern gint ett_opcua_EventFilter;
-extern gint ett_opcua_array_EventFilter;
-extern gint ett_opcua_AggregateConfiguration;
-extern gint ett_opcua_array_AggregateConfiguration;
-extern gint ett_opcua_AggregateFilter;
-extern gint ett_opcua_array_AggregateFilter;
-extern gint ett_opcua_EventFilterResult;
-extern gint ett_opcua_array_EventFilterResult;
-extern gint ett_opcua_AggregateFilterResult;
-extern gint ett_opcua_array_AggregateFilterResult;
-extern gint ett_opcua_MonitoringParameters;
-extern gint ett_opcua_array_MonitoringParameters;
-extern gint ett_opcua_MonitoredItemCreateRequest;
-extern gint ett_opcua_array_MonitoredItemCreateRequest;
-extern gint ett_opcua_MonitoredItemCreateResult;
-extern gint ett_opcua_array_MonitoredItemCreateResult;
-extern gint ett_opcua_MonitoredItemModifyRequest;
-extern gint ett_opcua_array_MonitoredItemModifyRequest;
-extern gint ett_opcua_MonitoredItemModifyResult;
-extern gint ett_opcua_array_MonitoredItemModifyResult;
-extern gint ett_opcua_NotificationMessage;
-extern gint ett_opcua_array_NotificationMessage;
-extern gint ett_opcua_DataChangeNotification;
-extern gint ett_opcua_array_DataChangeNotification;
-extern gint ett_opcua_MonitoredItemNotification;
-extern gint ett_opcua_array_MonitoredItemNotification;
-extern gint ett_opcua_EventNotificationList;
-extern gint ett_opcua_array_EventNotificationList;
-extern gint ett_opcua_EventFieldList;
-extern gint ett_opcua_array_EventFieldList;
-extern gint ett_opcua_HistoryEventFieldList;
-extern gint ett_opcua_array_HistoryEventFieldList;
-extern gint ett_opcua_StatusChangeNotification;
-extern gint ett_opcua_array_StatusChangeNotification;
-extern gint ett_opcua_SubscriptionAcknowledgement;
-extern gint ett_opcua_array_SubscriptionAcknowledgement;
-extern gint ett_opcua_TransferResult;
-extern gint ett_opcua_array_TransferResult;
-extern gint ett_opcua_ScalarTestType;
-extern gint ett_opcua_array_ScalarTestType;
-extern gint ett_opcua_ArrayTestType;
-extern gint ett_opcua_array_ArrayTestType;
-extern gint ett_opcua_CompositeTestType;
-extern gint ett_opcua_array_CompositeTestType;
-extern gint ett_opcua_BuildInfo;
-extern gint ett_opcua_array_BuildInfo;
-extern gint ett_opcua_RedundantServerDataType;
-extern gint ett_opcua_array_RedundantServerDataType;
-extern gint ett_opcua_EndpointUrlListDataType;
-extern gint ett_opcua_array_EndpointUrlListDataType;
-extern gint ett_opcua_NetworkGroupDataType;
-extern gint ett_opcua_array_NetworkGroupDataType;
-extern gint ett_opcua_SamplingIntervalDiagnosticsDataType;
-extern gint ett_opcua_array_SamplingIntervalDiagnosticsDataType;
-extern gint ett_opcua_ServerDiagnosticsSummaryDataType;
-extern gint ett_opcua_array_ServerDiagnosticsSummaryDataType;
-extern gint ett_opcua_ServerStatusDataType;
-extern gint ett_opcua_array_ServerStatusDataType;
-extern gint ett_opcua_SessionDiagnosticsDataType;
-extern gint ett_opcua_array_SessionDiagnosticsDataType;
-extern gint ett_opcua_SessionSecurityDiagnosticsDataType;
-extern gint ett_opcua_array_SessionSecurityDiagnosticsDataType;
-extern gint ett_opcua_ServiceCounterDataType;
-extern gint ett_opcua_array_ServiceCounterDataType;
-extern gint ett_opcua_StatusResult;
-extern gint ett_opcua_array_StatusResult;
-extern gint ett_opcua_SubscriptionDiagnosticsDataType;
-extern gint ett_opcua_array_SubscriptionDiagnosticsDataType;
-extern gint ett_opcua_ModelChangeStructureDataType;
-extern gint ett_opcua_array_ModelChangeStructureDataType;
-extern gint ett_opcua_SemanticChangeStructureDataType;
-extern gint ett_opcua_array_SemanticChangeStructureDataType;
-extern gint ett_opcua_Range;
-extern gint ett_opcua_array_Range;
-extern gint ett_opcua_EUInformation;
-extern gint ett_opcua_array_EUInformation;
-extern gint ett_opcua_ComplexNumberType;
-extern gint ett_opcua_array_ComplexNumberType;
-extern gint ett_opcua_DoubleComplexNumberType;
-extern gint ett_opcua_array_DoubleComplexNumberType;
-extern gint ett_opcua_AxisInformation;
-extern gint ett_opcua_array_AxisInformation;
-extern gint ett_opcua_XVType;
-extern gint ett_opcua_array_XVType;
-extern gint ett_opcua_ProgramDiagnosticDataType;
-extern gint ett_opcua_array_ProgramDiagnosticDataType;
-extern gint ett_opcua_Annotation;
-extern gint ett_opcua_array_Annotation;
+extern int ett_opcua_TrustListDataType;
+extern int ett_opcua_array_TrustListDataType;
+extern int ett_opcua_Node;
+extern int ett_opcua_array_Node;
+extern int ett_opcua_InstanceNode;
+extern int ett_opcua_array_InstanceNode;
+extern int ett_opcua_TypeNode;
+extern int ett_opcua_array_TypeNode;
+extern int ett_opcua_ObjectNode;
+extern int ett_opcua_array_ObjectNode;
+extern int ett_opcua_ObjectTypeNode;
+extern int ett_opcua_array_ObjectTypeNode;
+extern int ett_opcua_VariableNode;
+extern int ett_opcua_array_VariableNode;
+extern int ett_opcua_VariableTypeNode;
+extern int ett_opcua_array_VariableTypeNode;
+extern int ett_opcua_ReferenceTypeNode;
+extern int ett_opcua_array_ReferenceTypeNode;
+extern int ett_opcua_MethodNode;
+extern int ett_opcua_array_MethodNode;
+extern int ett_opcua_ViewNode;
+extern int ett_opcua_array_ViewNode;
+extern int ett_opcua_DataTypeNode;
+extern int ett_opcua_array_DataTypeNode;
+extern int ett_opcua_ReferenceNode;
+extern int ett_opcua_array_ReferenceNode;
+extern int ett_opcua_Argument;
+extern int ett_opcua_array_Argument;
+extern int ett_opcua_EnumValueType;
+extern int ett_opcua_array_EnumValueType;
+extern int ett_opcua_OptionSet;
+extern int ett_opcua_array_OptionSet;
+extern int ett_opcua_TimeZoneDataType;
+extern int ett_opcua_array_TimeZoneDataType;
+extern int ett_opcua_ApplicationDescription;
+extern int ett_opcua_array_ApplicationDescription;
+extern int ett_opcua_RequestHeader;
+extern int ett_opcua_array_RequestHeader;
+extern int ett_opcua_ResponseHeader;
+extern int ett_opcua_array_ResponseHeader;
+extern int ett_opcua_ServerOnNetwork;
+extern int ett_opcua_array_ServerOnNetwork;
+extern int ett_opcua_UserTokenPolicy;
+extern int ett_opcua_array_UserTokenPolicy;
+extern int ett_opcua_EndpointDescription;
+extern int ett_opcua_array_EndpointDescription;
+extern int ett_opcua_RegisteredServer;
+extern int ett_opcua_array_RegisteredServer;
+extern int ett_opcua_MdnsDiscoveryConfiguration;
+extern int ett_opcua_array_MdnsDiscoveryConfiguration;
+extern int ett_opcua_ChannelSecurityToken;
+extern int ett_opcua_array_ChannelSecurityToken;
+extern int ett_opcua_SignedSoftwareCertificate;
+extern int ett_opcua_array_SignedSoftwareCertificate;
+extern int ett_opcua_SignatureData;
+extern int ett_opcua_array_SignatureData;
+extern int ett_opcua_UserIdentityToken;
+extern int ett_opcua_array_UserIdentityToken;
+extern int ett_opcua_AnonymousIdentityToken;
+extern int ett_opcua_array_AnonymousIdentityToken;
+extern int ett_opcua_UserNameIdentityToken;
+extern int ett_opcua_array_UserNameIdentityToken;
+extern int ett_opcua_X509IdentityToken;
+extern int ett_opcua_array_X509IdentityToken;
+extern int ett_opcua_KerberosIdentityToken;
+extern int ett_opcua_array_KerberosIdentityToken;
+extern int ett_opcua_IssuedIdentityToken;
+extern int ett_opcua_array_IssuedIdentityToken;
+extern int ett_opcua_NodeAttributes;
+extern int ett_opcua_array_NodeAttributes;
+extern int ett_opcua_ObjectAttributes;
+extern int ett_opcua_array_ObjectAttributes;
+extern int ett_opcua_VariableAttributes;
+extern int ett_opcua_array_VariableAttributes;
+extern int ett_opcua_MethodAttributes;
+extern int ett_opcua_array_MethodAttributes;
+extern int ett_opcua_ObjectTypeAttributes;
+extern int ett_opcua_array_ObjectTypeAttributes;
+extern int ett_opcua_VariableTypeAttributes;
+extern int ett_opcua_array_VariableTypeAttributes;
+extern int ett_opcua_ReferenceTypeAttributes;
+extern int ett_opcua_array_ReferenceTypeAttributes;
+extern int ett_opcua_DataTypeAttributes;
+extern int ett_opcua_array_DataTypeAttributes;
+extern int ett_opcua_ViewAttributes;
+extern int ett_opcua_array_ViewAttributes;
+extern int ett_opcua_AddNodesItem;
+extern int ett_opcua_array_AddNodesItem;
+extern int ett_opcua_AddNodesResult;
+extern int ett_opcua_array_AddNodesResult;
+extern int ett_opcua_AddReferencesItem;
+extern int ett_opcua_array_AddReferencesItem;
+extern int ett_opcua_DeleteNodesItem;
+extern int ett_opcua_array_DeleteNodesItem;
+extern int ett_opcua_DeleteReferencesItem;
+extern int ett_opcua_array_DeleteReferencesItem;
+extern int ett_opcua_ViewDescription;
+extern int ett_opcua_array_ViewDescription;
+extern int ett_opcua_BrowseDescription;
+extern int ett_opcua_array_BrowseDescription;
+extern int ett_opcua_ReferenceDescription;
+extern int ett_opcua_array_ReferenceDescription;
+extern int ett_opcua_BrowseResult;
+extern int ett_opcua_array_BrowseResult;
+extern int ett_opcua_RelativePathElement;
+extern int ett_opcua_array_RelativePathElement;
+extern int ett_opcua_RelativePath;
+extern int ett_opcua_array_RelativePath;
+extern int ett_opcua_BrowsePath;
+extern int ett_opcua_array_BrowsePath;
+extern int ett_opcua_BrowsePathTarget;
+extern int ett_opcua_array_BrowsePathTarget;
+extern int ett_opcua_BrowsePathResult;
+extern int ett_opcua_array_BrowsePathResult;
+extern int ett_opcua_EndpointConfiguration;
+extern int ett_opcua_array_EndpointConfiguration;
+extern int ett_opcua_SupportedProfile;
+extern int ett_opcua_array_SupportedProfile;
+extern int ett_opcua_SoftwareCertificate;
+extern int ett_opcua_array_SoftwareCertificate;
+extern int ett_opcua_QueryDataDescription;
+extern int ett_opcua_array_QueryDataDescription;
+extern int ett_opcua_NodeTypeDescription;
+extern int ett_opcua_array_NodeTypeDescription;
+extern int ett_opcua_QueryDataSet;
+extern int ett_opcua_array_QueryDataSet;
+extern int ett_opcua_NodeReference;
+extern int ett_opcua_array_NodeReference;
+extern int ett_opcua_ContentFilterElement;
+extern int ett_opcua_array_ContentFilterElement;
+extern int ett_opcua_ContentFilter;
+extern int ett_opcua_array_ContentFilter;
+extern int ett_opcua_ElementOperand;
+extern int ett_opcua_array_ElementOperand;
+extern int ett_opcua_LiteralOperand;
+extern int ett_opcua_array_LiteralOperand;
+extern int ett_opcua_AttributeOperand;
+extern int ett_opcua_array_AttributeOperand;
+extern int ett_opcua_SimpleAttributeOperand;
+extern int ett_opcua_array_SimpleAttributeOperand;
+extern int ett_opcua_ContentFilterElementResult;
+extern int ett_opcua_array_ContentFilterElementResult;
+extern int ett_opcua_ContentFilterResult;
+extern int ett_opcua_array_ContentFilterResult;
+extern int ett_opcua_ParsingResult;
+extern int ett_opcua_array_ParsingResult;
+extern int ett_opcua_ReadValueId;
+extern int ett_opcua_array_ReadValueId;
+extern int ett_opcua_HistoryReadValueId;
+extern int ett_opcua_array_HistoryReadValueId;
+extern int ett_opcua_HistoryReadResult;
+extern int ett_opcua_array_HistoryReadResult;
+extern int ett_opcua_ReadEventDetails;
+extern int ett_opcua_array_ReadEventDetails;
+extern int ett_opcua_ReadRawModifiedDetails;
+extern int ett_opcua_array_ReadRawModifiedDetails;
+extern int ett_opcua_ReadProcessedDetails;
+extern int ett_opcua_array_ReadProcessedDetails;
+extern int ett_opcua_ReadAtTimeDetails;
+extern int ett_opcua_array_ReadAtTimeDetails;
+extern int ett_opcua_HistoryData;
+extern int ett_opcua_array_HistoryData;
+extern int ett_opcua_ModificationInfo;
+extern int ett_opcua_array_ModificationInfo;
+extern int ett_opcua_HistoryModifiedData;
+extern int ett_opcua_array_HistoryModifiedData;
+extern int ett_opcua_HistoryEvent;
+extern int ett_opcua_array_HistoryEvent;
+extern int ett_opcua_WriteValue;
+extern int ett_opcua_array_WriteValue;
+extern int ett_opcua_HistoryUpdateDetails;
+extern int ett_opcua_array_HistoryUpdateDetails;
+extern int ett_opcua_UpdateDataDetails;
+extern int ett_opcua_array_UpdateDataDetails;
+extern int ett_opcua_UpdateStructureDataDetails;
+extern int ett_opcua_array_UpdateStructureDataDetails;
+extern int ett_opcua_UpdateEventDetails;
+extern int ett_opcua_array_UpdateEventDetails;
+extern int ett_opcua_DeleteRawModifiedDetails;
+extern int ett_opcua_array_DeleteRawModifiedDetails;
+extern int ett_opcua_DeleteAtTimeDetails;
+extern int ett_opcua_array_DeleteAtTimeDetails;
+extern int ett_opcua_DeleteEventDetails;
+extern int ett_opcua_array_DeleteEventDetails;
+extern int ett_opcua_HistoryUpdateResult;
+extern int ett_opcua_array_HistoryUpdateResult;
+extern int ett_opcua_CallMethodRequest;
+extern int ett_opcua_array_CallMethodRequest;
+extern int ett_opcua_CallMethodResult;
+extern int ett_opcua_array_CallMethodResult;
+extern int ett_opcua_DataChangeFilter;
+extern int ett_opcua_array_DataChangeFilter;
+extern int ett_opcua_EventFilter;
+extern int ett_opcua_array_EventFilter;
+extern int ett_opcua_AggregateConfiguration;
+extern int ett_opcua_array_AggregateConfiguration;
+extern int ett_opcua_AggregateFilter;
+extern int ett_opcua_array_AggregateFilter;
+extern int ett_opcua_EventFilterResult;
+extern int ett_opcua_array_EventFilterResult;
+extern int ett_opcua_AggregateFilterResult;
+extern int ett_opcua_array_AggregateFilterResult;
+extern int ett_opcua_MonitoringParameters;
+extern int ett_opcua_array_MonitoringParameters;
+extern int ett_opcua_MonitoredItemCreateRequest;
+extern int ett_opcua_array_MonitoredItemCreateRequest;
+extern int ett_opcua_MonitoredItemCreateResult;
+extern int ett_opcua_array_MonitoredItemCreateResult;
+extern int ett_opcua_MonitoredItemModifyRequest;
+extern int ett_opcua_array_MonitoredItemModifyRequest;
+extern int ett_opcua_MonitoredItemModifyResult;
+extern int ett_opcua_array_MonitoredItemModifyResult;
+extern int ett_opcua_NotificationMessage;
+extern int ett_opcua_array_NotificationMessage;
+extern int ett_opcua_DataChangeNotification;
+extern int ett_opcua_array_DataChangeNotification;
+extern int ett_opcua_MonitoredItemNotification;
+extern int ett_opcua_array_MonitoredItemNotification;
+extern int ett_opcua_EventNotificationList;
+extern int ett_opcua_array_EventNotificationList;
+extern int ett_opcua_EventFieldList;
+extern int ett_opcua_array_EventFieldList;
+extern int ett_opcua_HistoryEventFieldList;
+extern int ett_opcua_array_HistoryEventFieldList;
+extern int ett_opcua_StatusChangeNotification;
+extern int ett_opcua_array_StatusChangeNotification;
+extern int ett_opcua_SubscriptionAcknowledgement;
+extern int ett_opcua_array_SubscriptionAcknowledgement;
+extern int ett_opcua_TransferResult;
+extern int ett_opcua_array_TransferResult;
+extern int ett_opcua_ScalarTestType;
+extern int ett_opcua_array_ScalarTestType;
+extern int ett_opcua_ArrayTestType;
+extern int ett_opcua_array_ArrayTestType;
+extern int ett_opcua_CompositeTestType;
+extern int ett_opcua_array_CompositeTestType;
+extern int ett_opcua_BuildInfo;
+extern int ett_opcua_array_BuildInfo;
+extern int ett_opcua_RedundantServerDataType;
+extern int ett_opcua_array_RedundantServerDataType;
+extern int ett_opcua_EndpointUrlListDataType;
+extern int ett_opcua_array_EndpointUrlListDataType;
+extern int ett_opcua_NetworkGroupDataType;
+extern int ett_opcua_array_NetworkGroupDataType;
+extern int ett_opcua_SamplingIntervalDiagnosticsDataType;
+extern int ett_opcua_array_SamplingIntervalDiagnosticsDataType;
+extern int ett_opcua_ServerDiagnosticsSummaryDataType;
+extern int ett_opcua_array_ServerDiagnosticsSummaryDataType;
+extern int ett_opcua_ServerStatusDataType;
+extern int ett_opcua_array_ServerStatusDataType;
+extern int ett_opcua_SessionDiagnosticsDataType;
+extern int ett_opcua_array_SessionDiagnosticsDataType;
+extern int ett_opcua_SessionSecurityDiagnosticsDataType;
+extern int ett_opcua_array_SessionSecurityDiagnosticsDataType;
+extern int ett_opcua_ServiceCounterDataType;
+extern int ett_opcua_array_ServiceCounterDataType;
+extern int ett_opcua_StatusResult;
+extern int ett_opcua_array_StatusResult;
+extern int ett_opcua_SubscriptionDiagnosticsDataType;
+extern int ett_opcua_array_SubscriptionDiagnosticsDataType;
+extern int ett_opcua_ModelChangeStructureDataType;
+extern int ett_opcua_array_ModelChangeStructureDataType;
+extern int ett_opcua_SemanticChangeStructureDataType;
+extern int ett_opcua_array_SemanticChangeStructureDataType;
+extern int ett_opcua_Range;
+extern int ett_opcua_array_Range;
+extern int ett_opcua_EUInformation;
+extern int ett_opcua_array_EUInformation;
+extern int ett_opcua_ComplexNumberType;
+extern int ett_opcua_array_ComplexNumberType;
+extern int ett_opcua_DoubleComplexNumberType;
+extern int ett_opcua_array_DoubleComplexNumberType;
+extern int ett_opcua_AxisInformation;
+extern int ett_opcua_array_AxisInformation;
+extern int ett_opcua_XVType;
+extern int ett_opcua_array_XVType;
+extern int ett_opcua_ProgramDiagnosticDataType;
+extern int ett_opcua_array_ProgramDiagnosticDataType;
+extern int ett_opcua_Annotation;
+extern int ett_opcua_array_Annotation;
-void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAnonymousIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryUpdateDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
+void parseTrustListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseInstanceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseObjectNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseObjectTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseVariableNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseVariableTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReferenceTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMethodNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseViewNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDataTypeNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReferenceNode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseArgument(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEnumValueType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseOptionSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseTimeZoneDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseApplicationDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseRequestHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseResponseHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseServerOnNetwork(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseUserTokenPolicy(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEndpointDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseRegisteredServer(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMdnsDiscoveryConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseChannelSecurityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSignedSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSignatureData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseUserIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAnonymousIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseUserNameIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseX509IdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseKerberosIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseIssuedIdentityToken(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNodeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseObjectAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseVariableAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMethodAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseObjectTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseVariableTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReferenceTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDataTypeAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseViewAttributes(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAddNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAddNodesResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAddReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDeleteNodesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDeleteReferencesItem(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseViewDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseBrowseDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReferenceDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseBrowseResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseRelativePathElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseRelativePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseBrowsePath(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseBrowsePathTarget(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseBrowsePathResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEndpointConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSupportedProfile(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSoftwareCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseQueryDataDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNodeTypeDescription(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseQueryDataSet(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNodeReference(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseContentFilterElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseContentFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseElementOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseLiteralOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSimpleAttributeOperand(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseContentFilterElementResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseContentFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseParsingResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryReadValueId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryReadResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReadEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReadRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReadProcessedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseReadAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseModificationInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryModifiedData(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryEvent(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseWriteValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryUpdateDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseUpdateDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseUpdateStructureDataDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseUpdateEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDeleteRawModifiedDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDeleteAtTimeDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDeleteEventDetails(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryUpdateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseCallMethodRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseCallMethodResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDataChangeFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEventFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAggregateConfiguration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAggregateFilter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEventFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAggregateFilterResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMonitoringParameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMonitoredItemCreateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMonitoredItemCreateResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMonitoredItemModifyRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMonitoredItemModifyResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNotificationMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDataChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseMonitoredItemNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEventNotificationList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseHistoryEventFieldList(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseStatusChangeNotification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSubscriptionAcknowledgement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseTransferResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseScalarTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseArrayTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseCompositeTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseBuildInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseRedundantServerDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEndpointUrlListDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNetworkGroupDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSamplingIntervalDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseServerDiagnosticsSummaryDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseServerStatusDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSessionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSessionSecurityDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseServiceCounterDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseStatusResult(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSubscriptionDiagnosticsDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseModelChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseSemanticChangeStructureDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseRange(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseEUInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDoubleComplexNumberType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAxisInformation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseXVType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseProgramDiagnosticDataType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseAnnotation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
void registerComplexTypes(void);
diff --git a/plugins/epan/opcua/opcua_enumparser.c b/plugins/epan/opcua/opcua_enumparser.c
index 0a93376e..37eb1a28 100644
--- a/plugins/epan/opcua/opcua_enumparser.c
+++ b/plugins/epan/opcua/opcua_enumparser.c
@@ -22,34 +22,34 @@
#include "opcua_enumparser.h"
-gint ett_opcua_array_NodeIdType = -1;
-gint ett_opcua_array_NamingRuleType = -1;
-gint ett_opcua_array_OpenFileMode = -1;
-gint ett_opcua_array_TrustListMasks = -1;
-gint ett_opcua_array_IdType = -1;
-gint ett_opcua_array_NodeClass = -1;
-gint ett_opcua_array_ApplicationType = -1;
-gint ett_opcua_array_MessageSecurityMode = -1;
-gint ett_opcua_array_UserTokenType = -1;
-gint ett_opcua_array_SecurityTokenRequestType = -1;
-gint ett_opcua_array_NodeAttributesMask = -1;
-gint ett_opcua_array_AttributeWriteMask = -1;
-gint ett_opcua_array_BrowseDirection = -1;
-gint ett_opcua_array_BrowseResultMask = -1;
-gint ett_opcua_array_ComplianceLevel = -1;
-gint ett_opcua_array_FilterOperator = -1;
-gint ett_opcua_array_TimestampsToReturn = -1;
-gint ett_opcua_array_HistoryUpdateType = -1;
-gint ett_opcua_array_PerformUpdateType = -1;
-gint ett_opcua_array_MonitoringMode = -1;
-gint ett_opcua_array_DataChangeTrigger = -1;
-gint ett_opcua_array_DeadbandType = -1;
-gint ett_opcua_array_EnumeratedTestType = -1;
-gint ett_opcua_array_RedundancySupport = -1;
-gint ett_opcua_array_ServerState = -1;
-gint ett_opcua_array_ModelChangeStructureVerbMask = -1;
-gint ett_opcua_array_AxisScaleEnumeration = -1;
-gint ett_opcua_array_ExceptionDeviationFormat = -1;
+int ett_opcua_array_NodeIdType;
+int ett_opcua_array_NamingRuleType;
+int ett_opcua_array_OpenFileMode;
+int ett_opcua_array_TrustListMasks;
+int ett_opcua_array_IdType;
+int ett_opcua_array_NodeClass;
+int ett_opcua_array_ApplicationType;
+int ett_opcua_array_MessageSecurityMode;
+int ett_opcua_array_UserTokenType;
+int ett_opcua_array_SecurityTokenRequestType;
+int ett_opcua_array_NodeAttributesMask;
+int ett_opcua_array_AttributeWriteMask;
+int ett_opcua_array_BrowseDirection;
+int ett_opcua_array_BrowseResultMask;
+int ett_opcua_array_ComplianceLevel;
+int ett_opcua_array_FilterOperator;
+int ett_opcua_array_TimestampsToReturn;
+int ett_opcua_array_HistoryUpdateType;
+int ett_opcua_array_PerformUpdateType;
+int ett_opcua_array_MonitoringMode;
+int ett_opcua_array_DataChangeTrigger;
+int ett_opcua_array_DeadbandType;
+int ett_opcua_array_EnumeratedTestType;
+int ett_opcua_array_RedundancySupport;
+int ett_opcua_array_ServerState;
+int ett_opcua_array_ModelChangeStructureVerbMask;
+int ett_opcua_array_AxisScaleEnumeration;
+int ett_opcua_array_ExceptionDeviationFormat;
/** NodeIdType enum table */
static const value_string g_NodeIdTypeTable[] = {
@@ -61,9 +61,9 @@ static const value_string g_NodeIdTypeTable[] = {
{ 5, "ByteString" },
{ 0, NULL }
};
-static int hf_opcua_NodeIdType = -1;
+static int hf_opcua_NodeIdType;
-void parseNodeIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseNodeIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_NodeIdType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -74,9 +74,9 @@ static const value_string g_NamingRuleTypeTable[] = {
{ 3, "Constraint" },
{ 0, NULL }
};
-static int hf_opcua_NamingRuleType = -1;
+static int hf_opcua_NamingRuleType;
-void parseNamingRuleType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseNamingRuleType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_NamingRuleType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -88,9 +88,9 @@ static const value_string g_OpenFileModeTable[] = {
{ 8, "Append" },
{ 0, NULL }
};
-static int hf_opcua_OpenFileMode = -1;
+static int hf_opcua_OpenFileMode;
-void parseOpenFileMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseOpenFileMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_OpenFileMode, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -104,9 +104,9 @@ static const value_string g_TrustListMasksTable[] = {
{ 15, "All" },
{ 0, NULL }
};
-static int hf_opcua_TrustListMasks = -1;
+static int hf_opcua_TrustListMasks;
-void parseTrustListMasks(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseTrustListMasks(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_TrustListMasks, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -118,9 +118,9 @@ static const value_string g_IdTypeTable[] = {
{ 3, "Opaque" },
{ 0, NULL }
};
-static int hf_opcua_IdType = -1;
+static int hf_opcua_IdType;
-void parseIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_IdType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -137,9 +137,9 @@ static const value_string g_NodeClassTable[] = {
{ 128, "View" },
{ 0, NULL }
};
-static int hf_opcua_NodeClass = -1;
+static int hf_opcua_NodeClass;
-void parseNodeClass(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseNodeClass(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_NodeClass, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -151,9 +151,9 @@ static const value_string g_ApplicationTypeTable[] = {
{ 3, "DiscoveryServer" },
{ 0, NULL }
};
-static int hf_opcua_ApplicationType = -1;
+static int hf_opcua_ApplicationType;
-void parseApplicationType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseApplicationType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_ApplicationType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -165,9 +165,9 @@ static const value_string g_MessageSecurityModeTable[] = {
{ 3, "SignAndEncrypt" },
{ 0, NULL }
};
-static int hf_opcua_MessageSecurityMode = -1;
+static int hf_opcua_MessageSecurityMode;
-void parseMessageSecurityMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseMessageSecurityMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_MessageSecurityMode, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -180,9 +180,9 @@ static const value_string g_UserTokenTypeTable[] = {
{ 4, "Kerberos" },
{ 0, NULL }
};
-static int hf_opcua_UserTokenType = -1;
+static int hf_opcua_UserTokenType;
-void parseUserTokenType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseUserTokenType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_UserTokenType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -192,9 +192,9 @@ static const value_string g_SecurityTokenRequestTypeTable[] = {
{ 1, "Renew" },
{ 0, NULL }
};
-static int hf_opcua_SecurityTokenRequestType = -1;
+static int hf_opcua_SecurityTokenRequestType;
-void parseSecurityTokenRequestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseSecurityTokenRequestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_SecurityTokenRequestType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -234,9 +234,9 @@ static const value_string g_NodeAttributesMaskTable[] = {
{ 1335532, "View" },
{ 0, NULL }
};
-static int hf_opcua_NodeAttributesMask = -1;
+static int hf_opcua_NodeAttributesMask;
-void parseNodeAttributesMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseNodeAttributesMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_NodeAttributesMask, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -271,9 +271,9 @@ static const value_string g_AttributeWriteMaskTable[] = {
{ 33554432, "AccessLevelEx" },
{ 0, NULL }
};
-static int hf_opcua_AttributeWriteMask = -1;
+static int hf_opcua_AttributeWriteMask;
-void parseAttributeWriteMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseAttributeWriteMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_AttributeWriteMask, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -285,9 +285,9 @@ static const value_string g_BrowseDirectionTable[] = {
{ 3, "Invalid" },
{ 0, NULL }
};
-static int hf_opcua_BrowseDirection = -1;
+static int hf_opcua_BrowseDirection;
-void parseBrowseDirection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseBrowseDirection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_BrowseDirection, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -300,9 +300,9 @@ static const value_string g_ComplianceLevelTable[] = {
{ 3, "Certified" },
{ 0, NULL }
};
-static int hf_opcua_ComplianceLevel = -1;
+static int hf_opcua_ComplianceLevel;
-void parseComplianceLevel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseComplianceLevel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_ComplianceLevel, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -328,9 +328,9 @@ static const value_string g_FilterOperatorTable[] = {
{ 17, "BitwiseOr" },
{ 0, NULL }
};
-static int hf_opcua_FilterOperator = -1;
+static int hf_opcua_FilterOperator;
-void parseFilterOperator(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseFilterOperator(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_FilterOperator, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -343,9 +343,9 @@ static const value_string g_TimestampsToReturnTable[] = {
{ 4, "Invalid" },
{ 0, NULL }
};
-static int hf_opcua_TimestampsToReturn = -1;
+static int hf_opcua_TimestampsToReturn;
-void parseTimestampsToReturn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseTimestampsToReturn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_TimestampsToReturn, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -357,9 +357,9 @@ static const value_string g_HistoryUpdateTypeTable[] = {
{ 4, "Delete" },
{ 0, NULL }
};
-static int hf_opcua_HistoryUpdateType = -1;
+static int hf_opcua_HistoryUpdateType;
-void parseHistoryUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseHistoryUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_HistoryUpdateType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -371,9 +371,9 @@ static const value_string g_PerformUpdateTypeTable[] = {
{ 4, "Remove" },
{ 0, NULL }
};
-static int hf_opcua_PerformUpdateType = -1;
+static int hf_opcua_PerformUpdateType;
-void parsePerformUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parsePerformUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_PerformUpdateType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -384,9 +384,9 @@ static const value_string g_MonitoringModeTable[] = {
{ 2, "Reporting" },
{ 0, NULL }
};
-static int hf_opcua_MonitoringMode = -1;
+static int hf_opcua_MonitoringMode;
-void parseMonitoringMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseMonitoringMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_MonitoringMode, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -397,9 +397,9 @@ static const value_string g_DataChangeTriggerTable[] = {
{ 2, "StatusValueTimestamp" },
{ 0, NULL }
};
-static int hf_opcua_DataChangeTrigger = -1;
+static int hf_opcua_DataChangeTrigger;
-void parseDataChangeTrigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseDataChangeTrigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_DataChangeTrigger, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -410,9 +410,9 @@ static const value_string g_DeadbandTypeTable[] = {
{ 2, "Percent" },
{ 0, NULL }
};
-static int hf_opcua_DeadbandType = -1;
+static int hf_opcua_DeadbandType;
-void parseDeadbandType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseDeadbandType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_DeadbandType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -423,9 +423,9 @@ static const value_string g_EnumeratedTestTypeTable[] = {
{ 5, "Green" },
{ 0, NULL }
};
-static int hf_opcua_EnumeratedTestType = -1;
+static int hf_opcua_EnumeratedTestType;
-void parseEnumeratedTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseEnumeratedTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_EnumeratedTestType, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -439,9 +439,9 @@ static const value_string g_RedundancySupportTable[] = {
{ 5, "HotAndMirrored" },
{ 0, NULL }
};
-static int hf_opcua_RedundancySupport = -1;
+static int hf_opcua_RedundancySupport;
-void parseRedundancySupport(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseRedundancySupport(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_RedundancySupport, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -457,9 +457,9 @@ static const value_string g_ServerStateTable[] = {
{ 7, "Unknown" },
{ 0, NULL }
};
-static int hf_opcua_ServerState = -1;
+static int hf_opcua_ServerState;
-void parseServerState(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseServerState(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_ServerState, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -472,9 +472,9 @@ static const value_string g_ModelChangeStructureVerbMaskTable[] = {
{ 16, "DataTypeChanged" },
{ 0, NULL }
};
-static int hf_opcua_ModelChangeStructureVerbMask = -1;
+static int hf_opcua_ModelChangeStructureVerbMask;
-void parseModelChangeStructureVerbMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseModelChangeStructureVerbMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_ModelChangeStructureVerbMask, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -485,9 +485,9 @@ static const value_string g_AxisScaleEnumerationTable[] = {
{ 2, "Ln" },
{ 0, NULL }
};
-static int hf_opcua_AxisScaleEnumeration = -1;
+static int hf_opcua_AxisScaleEnumeration;
-void parseAxisScaleEnumeration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseAxisScaleEnumeration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_AxisScaleEnumeration, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -500,9 +500,9 @@ static const value_string g_ExceptionDeviationFormatTable[] = {
{ 4, "Unknown" },
{ 0, NULL }
};
-static int hf_opcua_ExceptionDeviationFormat = -1;
+static int hf_opcua_ExceptionDeviationFormat;
-void parseExceptionDeviationFormat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseExceptionDeviationFormat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_ExceptionDeviationFormat, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
}
@@ -537,15 +537,15 @@ static const value_string g_AttributeIdTable[] = {
{27, "AccessLevelEx"},
{0, NULL}
};
-static int hf_opcua_AttributeId = -1;
+static int hf_opcua_AttributeId;
-void parseAttributeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseAttributeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
proto_tree_add_item(tree, hf_opcua_AttributeId, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset += 4;
}
/** Setup enum subtree array */
-static gint *ett[] =
+static int *ett[] =
{
&ett_opcua_array_NodeIdType,
&ett_opcua_array_NamingRuleType,
diff --git a/plugins/epan/opcua/opcua_enumparser.h b/plugins/epan/opcua/opcua_enumparser.h
index c52aa9a3..eecf6366 100644
--- a/plugins/epan/opcua/opcua_enumparser.h
+++ b/plugins/epan/opcua/opcua_enumparser.h
@@ -20,62 +20,62 @@
#include <glib.h>
#include <epan/packet.h>
-extern gint ett_opcua_array_NodeIdType;
-extern gint ett_opcua_array_NamingRuleType;
-extern gint ett_opcua_array_OpenFileMode;
-extern gint ett_opcua_array_TrustListMasks;
-extern gint ett_opcua_array_IdType;
-extern gint ett_opcua_array_NodeClass;
-extern gint ett_opcua_array_ApplicationType;
-extern gint ett_opcua_array_MessageSecurityMode;
-extern gint ett_opcua_array_UserTokenType;
-extern gint ett_opcua_array_SecurityTokenRequestType;
-extern gint ett_opcua_array_NodeAttributesMask;
-extern gint ett_opcua_array_AttributeWriteMask;
-extern gint ett_opcua_array_BrowseDirection;
-extern gint ett_opcua_array_BrowseResultMask;
-extern gint ett_opcua_array_ComplianceLevel;
-extern gint ett_opcua_array_FilterOperator;
-extern gint ett_opcua_array_TimestampsToReturn;
-extern gint ett_opcua_array_HistoryUpdateType;
-extern gint ett_opcua_array_PerformUpdateType;
-extern gint ett_opcua_array_MonitoringMode;
-extern gint ett_opcua_array_DataChangeTrigger;
-extern gint ett_opcua_array_DeadbandType;
-extern gint ett_opcua_array_EnumeratedTestType;
-extern gint ett_opcua_array_RedundancySupport;
-extern gint ett_opcua_array_ServerState;
-extern gint ett_opcua_array_ModelChangeStructureVerbMask;
-extern gint ett_opcua_array_AxisScaleEnumeration;
-extern gint ett_opcua_array_ExceptionDeviationFormat;
-extern gint ett_opcua_array_AttributeId;
+extern int ett_opcua_array_NodeIdType;
+extern int ett_opcua_array_NamingRuleType;
+extern int ett_opcua_array_OpenFileMode;
+extern int ett_opcua_array_TrustListMasks;
+extern int ett_opcua_array_IdType;
+extern int ett_opcua_array_NodeClass;
+extern int ett_opcua_array_ApplicationType;
+extern int ett_opcua_array_MessageSecurityMode;
+extern int ett_opcua_array_UserTokenType;
+extern int ett_opcua_array_SecurityTokenRequestType;
+extern int ett_opcua_array_NodeAttributesMask;
+extern int ett_opcua_array_AttributeWriteMask;
+extern int ett_opcua_array_BrowseDirection;
+extern int ett_opcua_array_BrowseResultMask;
+extern int ett_opcua_array_ComplianceLevel;
+extern int ett_opcua_array_FilterOperator;
+extern int ett_opcua_array_TimestampsToReturn;
+extern int ett_opcua_array_HistoryUpdateType;
+extern int ett_opcua_array_PerformUpdateType;
+extern int ett_opcua_array_MonitoringMode;
+extern int ett_opcua_array_DataChangeTrigger;
+extern int ett_opcua_array_DeadbandType;
+extern int ett_opcua_array_EnumeratedTestType;
+extern int ett_opcua_array_RedundancySupport;
+extern int ett_opcua_array_ServerState;
+extern int ett_opcua_array_ModelChangeStructureVerbMask;
+extern int ett_opcua_array_AxisScaleEnumeration;
+extern int ett_opcua_array_ExceptionDeviationFormat;
+extern int ett_opcua_array_AttributeId;
-void parseNodeIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseNamingRuleType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseOpenFileMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTrustListMasks(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseNodeClass(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseApplicationType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseMessageSecurityMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseUserTokenType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSecurityTokenRequestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseNodeAttributesMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAttributeWriteMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseBrowseDirection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseComplianceLevel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseFilterOperator(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTimestampsToReturn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseHistoryUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parsePerformUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseMonitoringMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDataChangeTrigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeadbandType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseEnumeratedTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRedundancySupport(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseServerState(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseModelChangeStructureVerbMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAxisScaleEnumeration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseExceptionDeviationFormat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAttributeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+void parseNodeIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseNamingRuleType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseOpenFileMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTrustListMasks(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseIdType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseNodeClass(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseApplicationType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseMessageSecurityMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseUserTokenType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSecurityTokenRequestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseNodeAttributesMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAttributeWriteMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseBrowseDirection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseComplianceLevel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseFilterOperator(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTimestampsToReturn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseHistoryUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parsePerformUpdateType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseMonitoringMode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDataChangeTrigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeadbandType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseEnumeratedTestType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRedundancySupport(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseServerState(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseModelChangeStructureVerbMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAxisScaleEnumeration(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseExceptionDeviationFormat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAttributeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
void registerEnumTypes(int proto);
diff --git a/plugins/epan/opcua/opcua_extensionobjecttable.c b/plugins/epan/opcua/opcua_extensionobjecttable.c
index 2b9ae3c9..e2d4e2db 100644
--- a/plugins/epan/opcua/opcua_extensionobjecttable.c
+++ b/plugins/epan/opcua/opcua_extensionobjecttable.c
@@ -167,21 +167,20 @@ ExtensionObjectParserEntry g_arExtensionObjectParserTable[] = {
{ OpcUaId_ProgramDiagnosticDataType_Encoding_DefaultBinary, parseProgramDiagnosticDataType, "ProgramDiagnosticDataType" },
{ OpcUaId_Annotation_Encoding_DefaultBinary, parseAnnotation, "Annotation" },
};
-const int g_NumTypes = sizeof(g_arExtensionObjectParserTable) / sizeof(ExtensionObjectParserEntry);
/** Dispatch all extension objects to a special parser function. */
-void dispatchExtensionObjectType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int TypeId)
+void dispatchExtensionObjectType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int TypeId)
{
- gint iOffset = *pOffset;
- int indx = 0;
- int bFound = 0;
- gint32 iLen = 0;
+ int iOffset = *pOffset;
+ unsigned indx = 0;
+ int bFound = 0;
+ int32_t iLen = 0;
/* get the length of the body */
iLen = tvb_get_letohl(tvb, iOffset);
iOffset += 4;
- while (indx < g_NumTypes)
+ while (indx < array_length(g_arExtensionObjectParserTable))
{
if (g_arExtensionObjectParserTable[indx].iRequestId == TypeId)
{
diff --git a/plugins/epan/opcua/opcua_hfindeces.c b/plugins/epan/opcua/opcua_hfindeces.c
index 255927f9..99821549 100644
--- a/plugins/epan/opcua/opcua_hfindeces.c
+++ b/plugins/epan/opcua/opcua_hfindeces.c
@@ -22,302 +22,302 @@
#include "opcua_hfindeces.h"
-int hf_opcua_AccessLevel = -1;
-int hf_opcua_ActualSessionTimeout = -1;
-int hf_opcua_AddResults = -1;
-int hf_opcua_Algorithm = -1;
-int hf_opcua_Alias = -1;
-int hf_opcua_AnnotationTime = -1;
-int hf_opcua_ApplicationUri = -1;
-int hf_opcua_ArrayDimensions = -1;
-int hf_opcua_AuditEntryId = -1;
-int hf_opcua_AuthenticationMechanism = -1;
-int hf_opcua_AvailableSequenceNumbers = -1;
-int hf_opcua_AxisSteps = -1;
-int hf_opcua_Boolean = -1;
-int hf_opcua_Booleans = -1;
-int hf_opcua_BuildDate = -1;
-int hf_opcua_BuildNumber = -1;
-int hf_opcua_Byte = -1;
-int hf_opcua_ByteString = -1;
-int hf_opcua_ByteStrings = -1;
-int hf_opcua_CancelCount = -1;
-int hf_opcua_CertificateData = -1;
-int hf_opcua_ChannelId = -1;
-int hf_opcua_ChannelLifetime = -1;
-int hf_opcua_ClientCertificate = -1;
-int hf_opcua_ClientConnectionTime = -1;
-int hf_opcua_ClientHandle = -1;
-int hf_opcua_ClientLastContactTime = -1;
-int hf_opcua_ClientNonce = -1;
-int hf_opcua_ClientProtocolVersion = -1;
-int hf_opcua_ClientUserIdHistory = -1;
-int hf_opcua_ClientUserIdOfSession = -1;
-int hf_opcua_ComplianceDate = -1;
-int hf_opcua_ComplianceTool = -1;
-int hf_opcua_ConfigurationResults = -1;
-int hf_opcua_ContainsNoLoops = -1;
-int hf_opcua_ContinuationPoint = -1;
-int hf_opcua_ContinuationPoints = -1;
-int hf_opcua_CreateClientName = -1;
-int hf_opcua_CreatedAt = -1;
-int hf_opcua_CumulatedSessionCount = -1;
-int hf_opcua_CumulatedSubscriptionCount = -1;
-int hf_opcua_CurrentKeepAliveCount = -1;
-int hf_opcua_CurrentLifetimeCount = -1;
-int hf_opcua_CurrentMonitoredItemsCount = -1;
-int hf_opcua_CurrentPublishRequestsInQueue = -1;
-int hf_opcua_CurrentSessionCount = -1;
-int hf_opcua_CurrentSubscriptionCount = -1;
-int hf_opcua_CurrentSubscriptionsCount = -1;
-int hf_opcua_CurrentTime = -1;
-int hf_opcua_DataChangeNotificationsCount = -1;
-int hf_opcua_DataStatusCodes = -1;
-int hf_opcua_DateTime = -1;
-int hf_opcua_DateTimes = -1;
-int hf_opcua_DaylightSavingInOffset = -1;
-int hf_opcua_DeadbandType = -1;
-int hf_opcua_DeadbandValue = -1;
-int hf_opcua_DeleteBidirectional = -1;
-int hf_opcua_DeleteSubscriptions = -1;
-int hf_opcua_DeleteTargetReferences = -1;
-int hf_opcua_DisableCount = -1;
-int hf_opcua_DisabledMonitoredItemCount = -1;
-int hf_opcua_DiscardOldest = -1;
-int hf_opcua_DiscardedMessageCount = -1;
-int hf_opcua_DiscoveryProfileUri = -1;
-int hf_opcua_DiscoveryUrl = -1;
-int hf_opcua_DiscoveryUrls = -1;
-int hf_opcua_Double = -1;
-int hf_opcua_Doubles = -1;
-int hf_opcua_EnableCount = -1;
-int hf_opcua_Encoding = -1;
-int hf_opcua_EncryptionAlgorithm = -1;
-int hf_opcua_EndTime = -1;
-int hf_opcua_EndpointUrl = -1;
-int hf_opcua_EndpointUrlList = -1;
-int hf_opcua_ErrorCount = -1;
-int hf_opcua_EventIds = -1;
-int hf_opcua_EventNotificationsCount = -1;
-int hf_opcua_EventNotifier = -1;
-int hf_opcua_EventQueueOverFlowCount = -1;
-int hf_opcua_Executable = -1;
-int hf_opcua_Float = -1;
-int hf_opcua_Floats = -1;
-int hf_opcua_GatewayServerUri = -1;
-int hf_opcua_Guid = -1;
-int hf_opcua_Guids = -1;
-int hf_opcua_High = -1;
-int hf_opcua_Historizing = -1;
-int hf_opcua_Imaginary = -1;
-int hf_opcua_IncludeSubTypes = -1;
-int hf_opcua_IncludeSubtypes = -1;
-int hf_opcua_Index = -1;
-int hf_opcua_IndexRange = -1;
-int hf_opcua_InputArgumentResults = -1;
-int hf_opcua_Int16 = -1;
-int hf_opcua_Int16s = -1;
-int hf_opcua_Int32 = -1;
-int hf_opcua_Int32s = -1;
-int hf_opcua_Int64 = -1;
-int hf_opcua_Int64s = -1;
-int hf_opcua_InvocationCreationTime = -1;
-int hf_opcua_IsAbstract = -1;
-int hf_opcua_IsDeleteModified = -1;
-int hf_opcua_IsForward = -1;
-int hf_opcua_IsInverse = -1;
-int hf_opcua_IsOnline = -1;
-int hf_opcua_IsReadModified = -1;
-int hf_opcua_IssueDate = -1;
-int hf_opcua_IssuedBy = -1;
-int hf_opcua_IssuedTokenType = -1;
-int hf_opcua_IssuerCertificates = -1;
-int hf_opcua_IssuerCrls = -1;
-int hf_opcua_IssuerEndpointUrl = -1;
-int hf_opcua_Iteration = -1;
-int hf_opcua_LastCounterResetTime = -1;
-int hf_opcua_LastMethodCall = -1;
-int hf_opcua_LastMethodCallTime = -1;
-int hf_opcua_LastTransitionTime = -1;
-int hf_opcua_LatePublishRequestCount = -1;
-int hf_opcua_LinksToAdd = -1;
-int hf_opcua_LinksToRemove = -1;
-int hf_opcua_LocaleIds = -1;
-int hf_opcua_Low = -1;
-int hf_opcua_ManufacturerName = -1;
-int hf_opcua_MaxAge = -1;
-int hf_opcua_MaxArrayLength = -1;
-int hf_opcua_MaxBufferSize = -1;
-int hf_opcua_MaxByteStringLength = -1;
-int hf_opcua_MaxDataSetsToReturn = -1;
-int hf_opcua_MaxKeepAliveCount = -1;
-int hf_opcua_MaxLifetimeCount = -1;
-int hf_opcua_MaxMessageSize = -1;
-int hf_opcua_MaxMonitoredItemCount = -1;
-int hf_opcua_MaxNotificationsPerPublish = -1;
-int hf_opcua_MaxRecordsToReturn = -1;
-int hf_opcua_MaxReferencesToReturn = -1;
-int hf_opcua_MaxRequestMessageSize = -1;
-int hf_opcua_MaxResponseMessageSize = -1;
-int hf_opcua_MaxStringLength = -1;
-int hf_opcua_MdnsServerName = -1;
-int hf_opcua_Message = -1;
-int hf_opcua_MinimumSamplingInterval = -1;
-int hf_opcua_ModificationTime = -1;
-int hf_opcua_ModifyCount = -1;
-int hf_opcua_MonitoredItemCount = -1;
-int hf_opcua_MonitoredItemId = -1;
-int hf_opcua_MonitoredItemIds = -1;
-int hf_opcua_MonitoringQueueOverflowCount = -1;
-int hf_opcua_MoreNotifications = -1;
-int hf_opcua_Name = -1;
-int hf_opcua_NamespaceUri = -1;
-int hf_opcua_NextSequenceNumber = -1;
-int hf_opcua_NotificationsCount = -1;
-int hf_opcua_NumValuesPerNode = -1;
-int hf_opcua_Offset = -1;
-int hf_opcua_OperandStatusCodes = -1;
-int hf_opcua_OperationResults = -1;
-int hf_opcua_OperationTimeout = -1;
-int hf_opcua_OrganizationUri = -1;
-int hf_opcua_Password = -1;
-int hf_opcua_PercentDataBad = -1;
-int hf_opcua_PercentDataGood = -1;
-int hf_opcua_PolicyId = -1;
-int hf_opcua_Priority = -1;
-int hf_opcua_ProcessingInterval = -1;
-int hf_opcua_ProductName = -1;
-int hf_opcua_ProductUri = -1;
-int hf_opcua_ProfileId = -1;
-int hf_opcua_ProfileUris = -1;
-int hf_opcua_PublishRequestCount = -1;
-int hf_opcua_PublishTime = -1;
-int hf_opcua_PublishingEnabled = -1;
-int hf_opcua_PublishingInterval = -1;
-int hf_opcua_PublishingIntervalCount = -1;
-int hf_opcua_QueueSize = -1;
-int hf_opcua_Real = -1;
-int hf_opcua_RecordId = -1;
-int hf_opcua_RejectedRequestsCount = -1;
-int hf_opcua_RejectedSessionCount = -1;
-int hf_opcua_ReleaseContinuationPoint = -1;
-int hf_opcua_ReleaseContinuationPoints = -1;
-int hf_opcua_RemainingPathIndex = -1;
-int hf_opcua_RemoveResults = -1;
-int hf_opcua_RepublishMessageCount = -1;
-int hf_opcua_RepublishMessageRequestCount = -1;
-int hf_opcua_RepublishRequestCount = -1;
-int hf_opcua_ReqTimes = -1;
-int hf_opcua_RequestHandle = -1;
-int hf_opcua_RequestedLifetime = -1;
-int hf_opcua_RequestedLifetimeCount = -1;
-int hf_opcua_RequestedMaxKeepAliveCount = -1;
-int hf_opcua_RequestedMaxReferencesPerNode = -1;
-int hf_opcua_RequestedPublishingInterval = -1;
-int hf_opcua_RequestedSessionTimeout = -1;
-int hf_opcua_Results = -1;
-int hf_opcua_RetransmitSequenceNumber = -1;
-int hf_opcua_ReturnBounds = -1;
-int hf_opcua_ReturnDiagnostics = -1;
-int hf_opcua_RevisedContinuationPoint = -1;
-int hf_opcua_RevisedLifetime = -1;
-int hf_opcua_RevisedLifetimeCount = -1;
-int hf_opcua_RevisedMaxKeepAliveCount = -1;
-int hf_opcua_RevisedProcessingInterval = -1;
-int hf_opcua_RevisedPublishingInterval = -1;
-int hf_opcua_RevisedQueueSize = -1;
-int hf_opcua_RevisedSamplingInterval = -1;
-int hf_opcua_RevisedSessionTimeout = -1;
-int hf_opcua_RevisedStartTime = -1;
-int hf_opcua_SByte = -1;
-int hf_opcua_SBytes = -1;
-int hf_opcua_SamplingInterval = -1;
-int hf_opcua_SecondsTillShutdown = -1;
-int hf_opcua_SecurityLevel = -1;
-int hf_opcua_SecurityPolicyUri = -1;
-int hf_opcua_SecurityRejectedRequestsCount = -1;
-int hf_opcua_SecurityRejectedSessionCount = -1;
-int hf_opcua_SecurityTokenLifetime = -1;
-int hf_opcua_SelectClauseResults = -1;
-int hf_opcua_SemaphoreFilePath = -1;
-int hf_opcua_SendInitialValues = -1;
-int hf_opcua_SequenceNumber = -1;
-int hf_opcua_ServerCapabilities = -1;
-int hf_opcua_ServerCapabilityFilter = -1;
-int hf_opcua_ServerCertificate = -1;
-int hf_opcua_ServerId = -1;
-int hf_opcua_ServerName = -1;
-int hf_opcua_ServerNonce = -1;
-int hf_opcua_ServerProtocolVersion = -1;
-int hf_opcua_ServerUri = -1;
-int hf_opcua_ServerUris = -1;
-int hf_opcua_ServerViewCount = -1;
-int hf_opcua_ServiceLevel = -1;
-int hf_opcua_ServiceResult = -1;
-int hf_opcua_SessionAbortCount = -1;
-int hf_opcua_SessionName = -1;
-int hf_opcua_SessionTimeoutCount = -1;
-int hf_opcua_Signature = -1;
-int hf_opcua_SoftwareVersion = -1;
-int hf_opcua_SpecifiedAttributes = -1;
-int hf_opcua_SpecifiedLists = -1;
-int hf_opcua_StartTime = -1;
-int hf_opcua_StartingRecordId = -1;
-int hf_opcua_Status = -1;
-int hf_opcua_StatusCode = -1;
-int hf_opcua_StatusCodes = -1;
-int hf_opcua_String = -1;
-int hf_opcua_StringTable = -1;
-int hf_opcua_Strings = -1;
-int hf_opcua_SubscriptionId = -1;
-int hf_opcua_SubscriptionIds = -1;
-int hf_opcua_Symmetric = -1;
-int hf_opcua_TargetServerUri = -1;
-int hf_opcua_TestId = -1;
-int hf_opcua_TicketData = -1;
-int hf_opcua_TimeoutHint = -1;
-int hf_opcua_Timestamp = -1;
-int hf_opcua_TokenData = -1;
-int hf_opcua_TokenId = -1;
-int hf_opcua_TotalCount = -1;
-int hf_opcua_TransferRequestCount = -1;
-int hf_opcua_TransferredToAltClientCount = -1;
-int hf_opcua_TransferredToSameClientCount = -1;
-int hf_opcua_TransportProfileUri = -1;
-int hf_opcua_TransportProtocol = -1;
-int hf_opcua_TreatUncertainAsBad = -1;
-int hf_opcua_TriggeringItemId = -1;
-int hf_opcua_TrustedCertificates = -1;
-int hf_opcua_TrustedCrls = -1;
-int hf_opcua_UInt16 = -1;
-int hf_opcua_UInt16s = -1;
-int hf_opcua_UInt32 = -1;
-int hf_opcua_UInt32s = -1;
-int hf_opcua_UInt64 = -1;
-int hf_opcua_UInt64s = -1;
-int hf_opcua_UnacknowledgedMessageCount = -1;
-int hf_opcua_UnauthorizedRequestCount = -1;
-int hf_opcua_UnitId = -1;
-int hf_opcua_UnsupportedUnitIds = -1;
-int hf_opcua_UseBinaryEncoding = -1;
-int hf_opcua_UseServerCapabilitiesDefaults = -1;
-int hf_opcua_UseSimpleBounds = -1;
-int hf_opcua_UseSlopedExtrapolation = -1;
-int hf_opcua_UserAccessLevel = -1;
-int hf_opcua_UserExecutable = -1;
-int hf_opcua_UserName = -1;
-int hf_opcua_UserWriteMask = -1;
-int hf_opcua_ValidBits = -1;
-int hf_opcua_Value = -1;
-int hf_opcua_ValueRank = -1;
-int hf_opcua_VendorName = -1;
-int hf_opcua_VendorProductCertificate = -1;
-int hf_opcua_Verb = -1;
-int hf_opcua_ViewVersion = -1;
-int hf_opcua_WriteMask = -1;
-int hf_opcua_X = -1;
-int hf_opcua_XmlElement = -1;
-int hf_opcua_XmlElements = -1;
+int hf_opcua_AccessLevel;
+int hf_opcua_ActualSessionTimeout;
+int hf_opcua_AddResults;
+int hf_opcua_Algorithm;
+int hf_opcua_Alias;
+int hf_opcua_AnnotationTime;
+int hf_opcua_ApplicationUri;
+int hf_opcua_ArrayDimensions;
+int hf_opcua_AuditEntryId;
+int hf_opcua_AuthenticationMechanism;
+int hf_opcua_AvailableSequenceNumbers;
+int hf_opcua_AxisSteps;
+int hf_opcua_Boolean;
+int hf_opcua_Booleans;
+int hf_opcua_BuildDate;
+int hf_opcua_BuildNumber;
+int hf_opcua_Byte;
+int hf_opcua_ByteString;
+int hf_opcua_ByteStrings;
+int hf_opcua_CancelCount;
+int hf_opcua_CertificateData;
+int hf_opcua_ChannelId;
+int hf_opcua_ChannelLifetime;
+int hf_opcua_ClientCertificate;
+int hf_opcua_ClientConnectionTime;
+int hf_opcua_ClientHandle;
+int hf_opcua_ClientLastContactTime;
+int hf_opcua_ClientNonce;
+int hf_opcua_ClientProtocolVersion;
+int hf_opcua_ClientUserIdHistory;
+int hf_opcua_ClientUserIdOfSession;
+int hf_opcua_ComplianceDate;
+int hf_opcua_ComplianceTool;
+int hf_opcua_ConfigurationResults;
+int hf_opcua_ContainsNoLoops;
+int hf_opcua_ContinuationPoint;
+int hf_opcua_ContinuationPoints;
+int hf_opcua_CreateClientName;
+int hf_opcua_CreatedAt;
+int hf_opcua_CumulatedSessionCount;
+int hf_opcua_CumulatedSubscriptionCount;
+int hf_opcua_CurrentKeepAliveCount;
+int hf_opcua_CurrentLifetimeCount;
+int hf_opcua_CurrentMonitoredItemsCount;
+int hf_opcua_CurrentPublishRequestsInQueue;
+int hf_opcua_CurrentSessionCount;
+int hf_opcua_CurrentSubscriptionCount;
+int hf_opcua_CurrentSubscriptionsCount;
+int hf_opcua_CurrentTime;
+int hf_opcua_DataChangeNotificationsCount;
+int hf_opcua_DataStatusCodes;
+int hf_opcua_DateTime;
+int hf_opcua_DateTimes;
+int hf_opcua_DaylightSavingInOffset;
+int hf_opcua_DeadbandType;
+int hf_opcua_DeadbandValue;
+int hf_opcua_DeleteBidirectional;
+int hf_opcua_DeleteSubscriptions;
+int hf_opcua_DeleteTargetReferences;
+int hf_opcua_DisableCount;
+int hf_opcua_DisabledMonitoredItemCount;
+int hf_opcua_DiscardOldest;
+int hf_opcua_DiscardedMessageCount;
+int hf_opcua_DiscoveryProfileUri;
+int hf_opcua_DiscoveryUrl;
+int hf_opcua_DiscoveryUrls;
+int hf_opcua_Double;
+int hf_opcua_Doubles;
+int hf_opcua_EnableCount;
+int hf_opcua_Encoding;
+int hf_opcua_EncryptionAlgorithm;
+int hf_opcua_EndTime;
+int hf_opcua_EndpointUrl;
+int hf_opcua_EndpointUrlList;
+int hf_opcua_ErrorCount;
+int hf_opcua_EventIds;
+int hf_opcua_EventNotificationsCount;
+int hf_opcua_EventNotifier;
+int hf_opcua_EventQueueOverFlowCount;
+int hf_opcua_Executable;
+int hf_opcua_Float;
+int hf_opcua_Floats;
+int hf_opcua_GatewayServerUri;
+int hf_opcua_Guid;
+int hf_opcua_Guids;
+int hf_opcua_High;
+int hf_opcua_Historizing;
+int hf_opcua_Imaginary;
+int hf_opcua_IncludeSubTypes;
+int hf_opcua_IncludeSubtypes;
+int hf_opcua_Index;
+int hf_opcua_IndexRange;
+int hf_opcua_InputArgumentResults;
+int hf_opcua_Int16;
+int hf_opcua_Int16s;
+int hf_opcua_Int32;
+int hf_opcua_Int32s;
+int hf_opcua_Int64;
+int hf_opcua_Int64s;
+int hf_opcua_InvocationCreationTime;
+int hf_opcua_IsAbstract;
+int hf_opcua_IsDeleteModified;
+int hf_opcua_IsForward;
+int hf_opcua_IsInverse;
+int hf_opcua_IsOnline;
+int hf_opcua_IsReadModified;
+int hf_opcua_IssueDate;
+int hf_opcua_IssuedBy;
+int hf_opcua_IssuedTokenType;
+int hf_opcua_IssuerCertificates;
+int hf_opcua_IssuerCrls;
+int hf_opcua_IssuerEndpointUrl;
+int hf_opcua_Iteration;
+int hf_opcua_LastCounterResetTime;
+int hf_opcua_LastMethodCall;
+int hf_opcua_LastMethodCallTime;
+int hf_opcua_LastTransitionTime;
+int hf_opcua_LatePublishRequestCount;
+int hf_opcua_LinksToAdd;
+int hf_opcua_LinksToRemove;
+int hf_opcua_LocaleIds;
+int hf_opcua_Low;
+int hf_opcua_ManufacturerName;
+int hf_opcua_MaxAge;
+int hf_opcua_MaxArrayLength;
+int hf_opcua_MaxBufferSize;
+int hf_opcua_MaxByteStringLength;
+int hf_opcua_MaxDataSetsToReturn;
+int hf_opcua_MaxKeepAliveCount;
+int hf_opcua_MaxLifetimeCount;
+int hf_opcua_MaxMessageSize;
+int hf_opcua_MaxMonitoredItemCount;
+int hf_opcua_MaxNotificationsPerPublish;
+int hf_opcua_MaxRecordsToReturn;
+int hf_opcua_MaxReferencesToReturn;
+int hf_opcua_MaxRequestMessageSize;
+int hf_opcua_MaxResponseMessageSize;
+int hf_opcua_MaxStringLength;
+int hf_opcua_MdnsServerName;
+int hf_opcua_Message;
+int hf_opcua_MinimumSamplingInterval;
+int hf_opcua_ModificationTime;
+int hf_opcua_ModifyCount;
+int hf_opcua_MonitoredItemCount;
+int hf_opcua_MonitoredItemId;
+int hf_opcua_MonitoredItemIds;
+int hf_opcua_MonitoringQueueOverflowCount;
+int hf_opcua_MoreNotifications;
+int hf_opcua_Name;
+int hf_opcua_NamespaceUri;
+int hf_opcua_NextSequenceNumber;
+int hf_opcua_NotificationsCount;
+int hf_opcua_NumValuesPerNode;
+int hf_opcua_Offset;
+int hf_opcua_OperandStatusCodes;
+int hf_opcua_OperationResults;
+int hf_opcua_OperationTimeout;
+int hf_opcua_OrganizationUri;
+int hf_opcua_Password;
+int hf_opcua_PercentDataBad;
+int hf_opcua_PercentDataGood;
+int hf_opcua_PolicyId;
+int hf_opcua_Priority;
+int hf_opcua_ProcessingInterval;
+int hf_opcua_ProductName;
+int hf_opcua_ProductUri;
+int hf_opcua_ProfileId;
+int hf_opcua_ProfileUris;
+int hf_opcua_PublishRequestCount;
+int hf_opcua_PublishTime;
+int hf_opcua_PublishingEnabled;
+int hf_opcua_PublishingInterval;
+int hf_opcua_PublishingIntervalCount;
+int hf_opcua_QueueSize;
+int hf_opcua_Real;
+int hf_opcua_RecordId;
+int hf_opcua_RejectedRequestsCount;
+int hf_opcua_RejectedSessionCount;
+int hf_opcua_ReleaseContinuationPoint;
+int hf_opcua_ReleaseContinuationPoints;
+int hf_opcua_RemainingPathIndex;
+int hf_opcua_RemoveResults;
+int hf_opcua_RepublishMessageCount;
+int hf_opcua_RepublishMessageRequestCount;
+int hf_opcua_RepublishRequestCount;
+int hf_opcua_ReqTimes;
+int hf_opcua_RequestHandle;
+int hf_opcua_RequestedLifetime;
+int hf_opcua_RequestedLifetimeCount;
+int hf_opcua_RequestedMaxKeepAliveCount;
+int hf_opcua_RequestedMaxReferencesPerNode;
+int hf_opcua_RequestedPublishingInterval;
+int hf_opcua_RequestedSessionTimeout;
+int hf_opcua_Results;
+int hf_opcua_RetransmitSequenceNumber;
+int hf_opcua_ReturnBounds;
+int hf_opcua_ReturnDiagnostics;
+int hf_opcua_RevisedContinuationPoint;
+int hf_opcua_RevisedLifetime;
+int hf_opcua_RevisedLifetimeCount;
+int hf_opcua_RevisedMaxKeepAliveCount;
+int hf_opcua_RevisedProcessingInterval;
+int hf_opcua_RevisedPublishingInterval;
+int hf_opcua_RevisedQueueSize;
+int hf_opcua_RevisedSamplingInterval;
+int hf_opcua_RevisedSessionTimeout;
+int hf_opcua_RevisedStartTime;
+int hf_opcua_SByte;
+int hf_opcua_SBytes;
+int hf_opcua_SamplingInterval;
+int hf_opcua_SecondsTillShutdown;
+int hf_opcua_SecurityLevel;
+int hf_opcua_SecurityPolicyUri;
+int hf_opcua_SecurityRejectedRequestsCount;
+int hf_opcua_SecurityRejectedSessionCount;
+int hf_opcua_SecurityTokenLifetime;
+int hf_opcua_SelectClauseResults;
+int hf_opcua_SemaphoreFilePath;
+int hf_opcua_SendInitialValues;
+int hf_opcua_SequenceNumber;
+int hf_opcua_ServerCapabilities;
+int hf_opcua_ServerCapabilityFilter;
+int hf_opcua_ServerCertificate;
+int hf_opcua_ServerId;
+int hf_opcua_ServerName;
+int hf_opcua_ServerNonce;
+int hf_opcua_ServerProtocolVersion;
+int hf_opcua_ServerUri;
+int hf_opcua_ServerUris;
+int hf_opcua_ServerViewCount;
+int hf_opcua_ServiceLevel;
+int hf_opcua_ServiceResult;
+int hf_opcua_SessionAbortCount;
+int hf_opcua_SessionName;
+int hf_opcua_SessionTimeoutCount;
+int hf_opcua_Signature;
+int hf_opcua_SoftwareVersion;
+int hf_opcua_SpecifiedAttributes;
+int hf_opcua_SpecifiedLists;
+int hf_opcua_StartTime;
+int hf_opcua_StartingRecordId;
+int hf_opcua_Status;
+int hf_opcua_StatusCode;
+int hf_opcua_StatusCodes;
+int hf_opcua_String;
+int hf_opcua_StringTable;
+int hf_opcua_Strings;
+int hf_opcua_SubscriptionId;
+int hf_opcua_SubscriptionIds;
+int hf_opcua_Symmetric;
+int hf_opcua_TargetServerUri;
+int hf_opcua_TestId;
+int hf_opcua_TicketData;
+int hf_opcua_TimeoutHint;
+int hf_opcua_Timestamp;
+int hf_opcua_TokenData;
+int hf_opcua_TokenId;
+int hf_opcua_TotalCount;
+int hf_opcua_TransferRequestCount;
+int hf_opcua_TransferredToAltClientCount;
+int hf_opcua_TransferredToSameClientCount;
+int hf_opcua_TransportProfileUri;
+int hf_opcua_TransportProtocol;
+int hf_opcua_TreatUncertainAsBad;
+int hf_opcua_TriggeringItemId;
+int hf_opcua_TrustedCertificates;
+int hf_opcua_TrustedCrls;
+int hf_opcua_UInt16;
+int hf_opcua_UInt16s;
+int hf_opcua_UInt32;
+int hf_opcua_UInt32s;
+int hf_opcua_UInt64;
+int hf_opcua_UInt64s;
+int hf_opcua_UnacknowledgedMessageCount;
+int hf_opcua_UnauthorizedRequestCount;
+int hf_opcua_UnitId;
+int hf_opcua_UnsupportedUnitIds;
+int hf_opcua_UseBinaryEncoding;
+int hf_opcua_UseServerCapabilitiesDefaults;
+int hf_opcua_UseSimpleBounds;
+int hf_opcua_UseSlopedExtrapolation;
+int hf_opcua_UserAccessLevel;
+int hf_opcua_UserExecutable;
+int hf_opcua_UserName;
+int hf_opcua_UserWriteMask;
+int hf_opcua_ValidBits;
+int hf_opcua_Value;
+int hf_opcua_ValueRank;
+int hf_opcua_VendorName;
+int hf_opcua_VendorProductCertificate;
+int hf_opcua_Verb;
+int hf_opcua_ViewVersion;
+int hf_opcua_WriteMask;
+int hf_opcua_X;
+int hf_opcua_XmlElement;
+int hf_opcua_XmlElements;
/** Register field types. */
void registerFieldTypes(int proto)
diff --git a/plugins/epan/opcua/opcua_identifiers.h b/plugins/epan/opcua/opcua_identifiers.h
index 2cff1b29..aaad89ec 100644
--- a/plugins/epan/opcua/opcua_identifiers.h
+++ b/plugins/epan/opcua/opcua_identifiers.h
@@ -21,13 +21,13 @@
#include <epan/packet.h>
/* declare service parser function prototype */
-typedef void (*fctServiceParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+typedef void (*fctServiceParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
/* declare enum parser function prototype */
-typedef void (*fctEnumParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+typedef void (*fctEnumParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
/* declare type parser function prototype */
-typedef void (*fctComplexTypeParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
+typedef void (*fctComplexTypeParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
/* declare type parser function prototype */
-typedef proto_item* (*fctSimpleTypeParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
+typedef proto_item* (*fctSimpleTypeParser)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
typedef struct _ParserEntry
{
@@ -39,5 +39,5 @@ typedef struct _ExtensionObjectParserEntry
{
int iRequestId;
fctComplexTypeParser pParser;
- const gchar *typeName;
+ const char *typeName;
} ExtensionObjectParserEntry;
diff --git a/plugins/epan/opcua/opcua_keyset.c b/plugins/epan/opcua/opcua_keyset.c
new file mode 100644
index 00000000..eba1d2de
--- /dev/null
+++ b/plugins/epan/opcua/opcua_keyset.c
@@ -0,0 +1,156 @@
+/******************************************************************************
+** Copyright (C) 2006-2023 ascolab GmbH. All Rights Reserved.
+** Web: http://www.ascolab.com
+**
+** SPDX-License-Identifier: GPL-2.0-or-later
+**
+** 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: OpcUa Protocol Decoder.
+**
+** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
+******************************************************************************/
+
+#include "opcua_keyset.h"
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <epan/packet.h>
+
+static struct ua_keyset *g_keysets;
+static unsigned int g_num_keysets;
+static bool g_sorted;
+
+int ua_keysets_init(void)
+{
+ g_keysets = NULL;
+ g_num_keysets = 0;
+ g_sorted = false;
+ return 0;
+}
+
+int ua_keysets_clear(void)
+{
+ if (g_keysets) {
+ g_free(g_keysets);
+ g_keysets = NULL;
+ }
+ g_num_keysets = 0;
+ g_sorted = false;
+ return 0;
+}
+
+/**
+ * Allocates a new keyset entry.
+ *
+ * @return Returns pointer to new empty keyset.
+ * NULL would indicate an out of memory situation.
+ */
+struct ua_keyset *ua_keysets_add(void)
+{
+ struct ua_keyset *tmp = g_realloc(g_keysets, sizeof(*g_keysets) * (g_num_keysets + 1));
+ if (tmp == NULL) return NULL; /* out of mem */
+ /* realloc succeeded, assign new pointer */
+ g_keysets = tmp;
+ /* return new element */
+ tmp = &g_keysets[g_num_keysets++];
+ memset(tmp, 0, sizeof(*tmp));
+ /* default to 32 byte sig_len if missing.
+ * This is the most likely length for SHA256 based signatures,
+ * SHA1 based signatures with 16 bytes are deprecated.
+ */
+ tmp->client_sig_len = 32;
+ tmp->server_sig_len = 32;
+ return tmp;
+}
+
+/**
+ * Compare function for bsearch/qsort.
+ * Sorts by keyset->id.
+ */
+static int keyset_compare(const void *a, const void *b)
+{
+ const struct ua_keyset *keyset_a = a;
+ const struct ua_keyset *keyset_b = b;
+
+ if (keyset_a->id == keyset_b->id) return 0;
+ if (keyset_a->id < keyset_b->id) return -1;
+ return 1;
+}
+
+/**
+ * Sorts the keyset to be able to use bsearch.
+ */
+void ua_keysets_sort(void)
+{
+ if (g_num_keysets >= 2) {
+ qsort(g_keysets, g_num_keysets, sizeof(struct ua_keyset), keyset_compare);
+ }
+
+ g_sorted = true;
+}
+
+/**
+ * Looks up a keyset by id.
+ *
+ * @param id The id is 64bit value which contains the combined securechannel_id and token_id.
+ *
+ * @return Keyset if found, NULL if not found.
+ */
+struct ua_keyset *ua_keysets_lookup(uint64_t id)
+{
+ struct ua_keyset *tmp, key;
+
+ if (!g_sorted) return NULL;
+
+ key.id = id;
+ tmp = bsearch(&key, g_keysets, g_num_keysets, sizeof(struct ua_keyset), keyset_compare);
+
+ return tmp;
+}
+
+static void print_hex(unsigned char *data, unsigned int data_len)
+{
+ unsigned int i;
+
+ for (i = 0; i < data_len; ++i) {
+ printf("%02X", data[i]);
+ }
+ printf("\n");
+}
+
+/**
+ * For debugging purposes only.
+ */
+void ua_keysets_dump(void)
+{
+ struct ua_keyset *tmp;
+ unsigned int i;
+ uint32_t channel_id, token_id;
+
+ printf("Number of keysets: %u\n", g_num_keysets);
+
+ for (i = 0; i < g_num_keysets; ++i) {
+ tmp = &g_keysets[i];
+ channel_id = (uint32_t)(tmp->id >> 32);
+ token_id = (uint32_t)(tmp->id & 0xffffffff);
+
+ printf("%u: id=%" PRIu64 ", channel_id=%u, token_id=%u\n", i, tmp->id, channel_id, token_id);
+
+ printf("%u: client IV: ", i);
+ print_hex(tmp->client_iv, sizeof(tmp->client_iv));
+ printf("%u: client key(%u): ", i, tmp->client_key_len);
+ print_hex(tmp->client_key, tmp->client_key_len);
+ printf("%u: client sig_len(%u): ", i, tmp->client_sig_len);
+
+ printf("%u: server IV: ", i);
+ print_hex(tmp->server_iv, sizeof(tmp->server_iv));
+ printf("%u: server key(%u): ", i, tmp->server_key_len);
+ print_hex(tmp->server_key, tmp->server_key_len);
+ printf("%u: server sig_len(%u): ", i, tmp->server_sig_len);
+ }
+}
+
diff --git a/plugins/epan/opcua/opcua_keyset.h b/plugins/epan/opcua/opcua_keyset.h
new file mode 100644
index 00000000..faa1bea6
--- /dev/null
+++ b/plugins/epan/opcua/opcua_keyset.h
@@ -0,0 +1,59 @@
+/******************************************************************************
+** Copyright (C) 2006-2023 ascolab GmbH. All Rights Reserved.
+** Web: http://www.ascolab.com
+**
+** SPDX-License-Identifier: GPL-2.0-or-later
+**
+** 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: OpcUa Protocol Decoder.
+**
+** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
+******************************************************************************/
+
+#ifndef __OPCUA_KEYSET_H__
+#define __OPCUA_KEYSET_H__
+
+#include <stdint.h>
+
+/** symmetric encryption keyset */
+struct ua_keyset {
+ uint64_t id; /** keyset identifier: combination of securechannel_id and token_id */
+ unsigned char client_iv[16]; /**< Client side IV. Always 128 bit. */
+ unsigned char server_iv[16]; /**< Server side IV. Always 128 bit. */
+ unsigned char client_key[32]; /**< client encryption key */
+ unsigned char server_key[32]; /**< server encryption key */
+ unsigned int client_key_len; /**< AES key length: 16 (AES-128) or 32 (AES-256) */
+ unsigned int server_key_len; /**< AES key length: 16 (AES-128) or 32 (AES-256) */
+ unsigned int client_sig_len; /**< Client side symmetric signature length. */
+ unsigned int server_sig_len; /**< Server side symmetric signature length. */
+};
+
+int ua_keysets_init(void);
+int ua_keysets_clear(void);
+
+/**
+ * Creates a unique keyset id from securechannel_id and token_id.
+ *
+ * @param securechannel_id Identifies the secure channel to be able to distinguish
+ * different connections. This is a randomly generated id.
+ * @param token_id Identifies the keyset of a channel. This number normally starts with
+ * 1 and gets incremented with every secure channel renew.
+ *
+ * @return 64bit Id.
+ */
+static inline uint64_t ua_keyset_id(uint32_t securechannel_id, uint32_t token_id)
+{
+ return ((uint64_t)securechannel_id << 32) | token_id;
+}
+
+struct ua_keyset *ua_keysets_add(void);
+void ua_keysets_sort(void);
+struct ua_keyset *ua_keysets_lookup(uint64_t id);
+void ua_keysets_dump(void);
+
+#endif /* __OPCUA_KEYSET_H__ */
+
diff --git a/plugins/epan/opcua/opcua_security_layer.c b/plugins/epan/opcua/opcua_security_layer.c
index 933fd981..4b5a6303 100644
--- a/plugins/epan/opcua/opcua_security_layer.c
+++ b/plugins/epan/opcua/opcua_security_layer.c
@@ -18,32 +18,65 @@
#include <epan/packet.h>
#include "opcua_security_layer.h"
+#include "opcua_transport_layer.h"
-static int hf_opcua_security_tokenid = -1;
-static int hf_opcua_security_seq = -1;
-static int hf_opcua_security_rqid = -1;
+static int hf_opcua_security_tokenid;
+static int hf_opcua_security_padding;
+static int hf_opcua_security_signature;
+static int hf_opcua_sequence_seqno;
+static int hf_opcua_sequence_rqid;
-/** Register security layer types. */
+/** Register symmetric security layer types. */
void registerSecurityLayerTypes(int proto)
{
static hf_register_info hf[] =
{
- /* id full name abbreviation type display strings bitmask blurb HFILL */
- {&hf_opcua_security_tokenid, {"Security Token Id", "opcua.security.tokenid", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
- {&hf_opcua_security_seq, {"Security Sequence Number", "opcua.security.seq", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
- {&hf_opcua_security_rqid, {"Security RequestId", "opcua.security.rqid", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}
+ /* id full name abbreviation type display strings bitmask blurb HFILL */
+ {&hf_opcua_security_tokenid, {"Security Token Id", "opcua.security.tokenid", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_opcua_security_padding, {"Security Padding", "opcua.security.padding", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
+ {&hf_opcua_security_signature, {"Security Signature", "opcua.security.signature", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}},
};
proto_register_field_array(proto, hf, array_length(hf));
}
-/* Security Layer: message parsers
- * Only works for Security Policy "NoSecurity" at the moment.
- */
-void parseSecurityLayer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
+/** Register sequence header types. */
+void registerSequenceLayerTypes(int proto)
+{
+ static hf_register_info hf[] =
+ {
+ /* id full name abbreviation type display strings bitmask blurb HFILL */
+ {&hf_opcua_sequence_seqno, {"Sequence Number", "opcua.sequence.seq", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_opcua_sequence_rqid, {"RequestId", "opcua.sequence.rqid", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}
+ };
+ proto_register_field_array(proto, hf, array_length(hf));
+}
+
+/* The symmetric security header consists only of one field. */
+void parseSecurityHeader(proto_tree *tree, tvbuff_t *tvb, int *pOffset, struct ua_metadata *data _U_)
{
proto_tree_add_item(tree, hf_opcua_security_tokenid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- proto_tree_add_item(tree, hf_opcua_security_seq, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- proto_tree_add_item(tree, hf_opcua_security_rqid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+}
+
+/* Sequence header can optionally be encrypted. */
+void parseSequenceHeader(proto_tree *tree, tvbuff_t *tvb, int *pOffset, struct ua_metadata *data)
+{
+ if (!data->encrypted) {
+ proto_tree_add_item(tree, hf_opcua_sequence_seqno, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ proto_tree_add_item(tree, hf_opcua_sequence_rqid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ }
+}
+
+/* Parse symmetric security footer (signed only) */
+void parseSecurityFooterSO(proto_tree *tree, tvbuff_t *tvb, int offset, unsigned sig_len)
+{
+ proto_tree_add_item(tree, hf_opcua_security_signature, tvb, offset, sig_len, ENC_NA);
+}
+
+/* Parse symmetric security footer (signed and encrypted) */
+void parseSecurityFooterSAE(proto_tree *tree, tvbuff_t *tvb, int offset, unsigned pad_len, unsigned sig_len)
+{
+ proto_tree_add_item(tree, hf_opcua_security_padding, tvb, offset, pad_len + 1, ENC_NA);
+ proto_tree_add_item(tree, hf_opcua_security_signature, tvb, offset + pad_len + 1, sig_len, ENC_NA);
}
/*
diff --git a/plugins/epan/opcua/opcua_security_layer.h b/plugins/epan/opcua/opcua_security_layer.h
index d5b36ce0..c4dc2fe6 100644
--- a/plugins/epan/opcua/opcua_security_layer.h
+++ b/plugins/epan/opcua/opcua_security_layer.h
@@ -14,5 +14,11 @@
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
******************************************************************************/
+struct ua_metadata;
+
void registerSecurityLayerTypes(int proto);
-void parseSecurityLayer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
+void registerSequenceLayerTypes(int proto);
+void parseSecurityHeader(proto_tree *tree, tvbuff_t *tvb, int *pOffset, struct ua_metadata *data);
+void parseSequenceHeader(proto_tree *tree, tvbuff_t *tvb, int *pOffset, struct ua_metadata *data);
+void parseSecurityFooterSO(proto_tree *tree, tvbuff_t *tvb, int offset, unsigned sig_len);
+void parseSecurityFooterSAE(proto_tree *tree, tvbuff_t *tvb, int offset, unsigned pad_len, unsigned sig_len);
diff --git a/plugins/epan/opcua/opcua_serviceparser.c b/plugins/epan/opcua/opcua_serviceparser.c
index d71b6781..408cb3ed 100644
--- a/plugins/epan/opcua/opcua_serviceparser.c
+++ b/plugins/epan/opcua/opcua_serviceparser.c
@@ -25,174 +25,174 @@
#include "opcua_hfindeces.h"
#include "opcua_serviceparser.h"
-gint ett_opcua_ServiceFault = -1;
-gint ett_opcua_array_ServiceFault = -1;
-gint ett_opcua_FindServersRequest = -1;
-gint ett_opcua_array_FindServersRequest = -1;
-gint ett_opcua_FindServersResponse = -1;
-gint ett_opcua_array_FindServersResponse = -1;
-gint ett_opcua_FindServersOnNetworkRequest = -1;
-gint ett_opcua_array_FindServersOnNetworkRequest = -1;
-gint ett_opcua_FindServersOnNetworkResponse = -1;
-gint ett_opcua_array_FindServersOnNetworkResponse = -1;
-gint ett_opcua_GetEndpointsRequest = -1;
-gint ett_opcua_array_GetEndpointsRequest = -1;
-gint ett_opcua_GetEndpointsResponse = -1;
-gint ett_opcua_array_GetEndpointsResponse = -1;
-gint ett_opcua_RegisterServerRequest = -1;
-gint ett_opcua_array_RegisterServerRequest = -1;
-gint ett_opcua_RegisterServerResponse = -1;
-gint ett_opcua_array_RegisterServerResponse = -1;
-gint ett_opcua_RegisterServer2Request = -1;
-gint ett_opcua_array_RegisterServer2Request = -1;
-gint ett_opcua_RegisterServer2Response = -1;
-gint ett_opcua_array_RegisterServer2Response = -1;
-gint ett_opcua_OpenSecureChannelRequest = -1;
-gint ett_opcua_array_OpenSecureChannelRequest = -1;
-gint ett_opcua_OpenSecureChannelResponse = -1;
-gint ett_opcua_array_OpenSecureChannelResponse = -1;
-gint ett_opcua_CloseSecureChannelRequest = -1;
-gint ett_opcua_array_CloseSecureChannelRequest = -1;
-gint ett_opcua_CloseSecureChannelResponse = -1;
-gint ett_opcua_array_CloseSecureChannelResponse = -1;
-gint ett_opcua_CreateSessionRequest = -1;
-gint ett_opcua_array_CreateSessionRequest = -1;
-gint ett_opcua_CreateSessionResponse = -1;
-gint ett_opcua_array_CreateSessionResponse = -1;
-gint ett_opcua_ActivateSessionRequest = -1;
-gint ett_opcua_array_ActivateSessionRequest = -1;
-gint ett_opcua_ActivateSessionResponse = -1;
-gint ett_opcua_array_ActivateSessionResponse = -1;
-gint ett_opcua_CloseSessionRequest = -1;
-gint ett_opcua_array_CloseSessionRequest = -1;
-gint ett_opcua_CloseSessionResponse = -1;
-gint ett_opcua_array_CloseSessionResponse = -1;
-gint ett_opcua_CancelRequest = -1;
-gint ett_opcua_array_CancelRequest = -1;
-gint ett_opcua_CancelResponse = -1;
-gint ett_opcua_array_CancelResponse = -1;
-gint ett_opcua_AddNodesRequest = -1;
-gint ett_opcua_array_AddNodesRequest = -1;
-gint ett_opcua_AddNodesResponse = -1;
-gint ett_opcua_array_AddNodesResponse = -1;
-gint ett_opcua_AddReferencesRequest = -1;
-gint ett_opcua_array_AddReferencesRequest = -1;
-gint ett_opcua_AddReferencesResponse = -1;
-gint ett_opcua_array_AddReferencesResponse = -1;
-gint ett_opcua_DeleteNodesRequest = -1;
-gint ett_opcua_array_DeleteNodesRequest = -1;
-gint ett_opcua_DeleteNodesResponse = -1;
-gint ett_opcua_array_DeleteNodesResponse = -1;
-gint ett_opcua_DeleteReferencesRequest = -1;
-gint ett_opcua_array_DeleteReferencesRequest = -1;
-gint ett_opcua_DeleteReferencesResponse = -1;
-gint ett_opcua_array_DeleteReferencesResponse = -1;
-gint ett_opcua_BrowseRequest = -1;
-gint ett_opcua_array_BrowseRequest = -1;
-gint ett_opcua_BrowseResponse = -1;
-gint ett_opcua_array_BrowseResponse = -1;
-gint ett_opcua_BrowseNextRequest = -1;
-gint ett_opcua_array_BrowseNextRequest = -1;
-gint ett_opcua_BrowseNextResponse = -1;
-gint ett_opcua_array_BrowseNextResponse = -1;
-gint ett_opcua_TranslateBrowsePathsToNodeIdsRequest = -1;
-gint ett_opcua_array_TranslateBrowsePathsToNodeIdsRequest = -1;
-gint ett_opcua_TranslateBrowsePathsToNodeIdsResponse = -1;
-gint ett_opcua_array_TranslateBrowsePathsToNodeIdsResponse = -1;
-gint ett_opcua_RegisterNodesRequest = -1;
-gint ett_opcua_array_RegisterNodesRequest = -1;
-gint ett_opcua_RegisterNodesResponse = -1;
-gint ett_opcua_array_RegisterNodesResponse = -1;
-gint ett_opcua_UnregisterNodesRequest = -1;
-gint ett_opcua_array_UnregisterNodesRequest = -1;
-gint ett_opcua_UnregisterNodesResponse = -1;
-gint ett_opcua_array_UnregisterNodesResponse = -1;
-gint ett_opcua_QueryFirstRequest = -1;
-gint ett_opcua_array_QueryFirstRequest = -1;
-gint ett_opcua_QueryFirstResponse = -1;
-gint ett_opcua_array_QueryFirstResponse = -1;
-gint ett_opcua_QueryNextRequest = -1;
-gint ett_opcua_array_QueryNextRequest = -1;
-gint ett_opcua_QueryNextResponse = -1;
-gint ett_opcua_array_QueryNextResponse = -1;
-gint ett_opcua_ReadRequest = -1;
-gint ett_opcua_array_ReadRequest = -1;
-gint ett_opcua_ReadResponse = -1;
-gint ett_opcua_array_ReadResponse = -1;
-gint ett_opcua_HistoryReadRequest = -1;
-gint ett_opcua_array_HistoryReadRequest = -1;
-gint ett_opcua_HistoryReadResponse = -1;
-gint ett_opcua_array_HistoryReadResponse = -1;
-gint ett_opcua_WriteRequest = -1;
-gint ett_opcua_array_WriteRequest = -1;
-gint ett_opcua_WriteResponse = -1;
-gint ett_opcua_array_WriteResponse = -1;
-gint ett_opcua_HistoryUpdateRequest = -1;
-gint ett_opcua_array_HistoryUpdateRequest = -1;
-gint ett_opcua_HistoryUpdateResponse = -1;
-gint ett_opcua_array_HistoryUpdateResponse = -1;
-gint ett_opcua_CallRequest = -1;
-gint ett_opcua_array_CallRequest = -1;
-gint ett_opcua_CallResponse = -1;
-gint ett_opcua_array_CallResponse = -1;
-gint ett_opcua_CreateMonitoredItemsRequest = -1;
-gint ett_opcua_array_CreateMonitoredItemsRequest = -1;
-gint ett_opcua_CreateMonitoredItemsResponse = -1;
-gint ett_opcua_array_CreateMonitoredItemsResponse = -1;
-gint ett_opcua_ModifyMonitoredItemsRequest = -1;
-gint ett_opcua_array_ModifyMonitoredItemsRequest = -1;
-gint ett_opcua_ModifyMonitoredItemsResponse = -1;
-gint ett_opcua_array_ModifyMonitoredItemsResponse = -1;
-gint ett_opcua_SetMonitoringModeRequest = -1;
-gint ett_opcua_array_SetMonitoringModeRequest = -1;
-gint ett_opcua_SetMonitoringModeResponse = -1;
-gint ett_opcua_array_SetMonitoringModeResponse = -1;
-gint ett_opcua_SetTriggeringRequest = -1;
-gint ett_opcua_array_SetTriggeringRequest = -1;
-gint ett_opcua_SetTriggeringResponse = -1;
-gint ett_opcua_array_SetTriggeringResponse = -1;
-gint ett_opcua_DeleteMonitoredItemsRequest = -1;
-gint ett_opcua_array_DeleteMonitoredItemsRequest = -1;
-gint ett_opcua_DeleteMonitoredItemsResponse = -1;
-gint ett_opcua_array_DeleteMonitoredItemsResponse = -1;
-gint ett_opcua_CreateSubscriptionRequest = -1;
-gint ett_opcua_array_CreateSubscriptionRequest = -1;
-gint ett_opcua_CreateSubscriptionResponse = -1;
-gint ett_opcua_array_CreateSubscriptionResponse = -1;
-gint ett_opcua_ModifySubscriptionRequest = -1;
-gint ett_opcua_array_ModifySubscriptionRequest = -1;
-gint ett_opcua_ModifySubscriptionResponse = -1;
-gint ett_opcua_array_ModifySubscriptionResponse = -1;
-gint ett_opcua_SetPublishingModeRequest = -1;
-gint ett_opcua_array_SetPublishingModeRequest = -1;
-gint ett_opcua_SetPublishingModeResponse = -1;
-gint ett_opcua_array_SetPublishingModeResponse = -1;
-gint ett_opcua_PublishRequest = -1;
-gint ett_opcua_array_PublishRequest = -1;
-gint ett_opcua_PublishResponse = -1;
-gint ett_opcua_array_PublishResponse = -1;
-gint ett_opcua_RepublishRequest = -1;
-gint ett_opcua_array_RepublishRequest = -1;
-gint ett_opcua_RepublishResponse = -1;
-gint ett_opcua_array_RepublishResponse = -1;
-gint ett_opcua_TransferSubscriptionsRequest = -1;
-gint ett_opcua_array_TransferSubscriptionsRequest = -1;
-gint ett_opcua_TransferSubscriptionsResponse = -1;
-gint ett_opcua_array_TransferSubscriptionsResponse = -1;
-gint ett_opcua_DeleteSubscriptionsRequest = -1;
-gint ett_opcua_array_DeleteSubscriptionsRequest = -1;
-gint ett_opcua_DeleteSubscriptionsResponse = -1;
-gint ett_opcua_array_DeleteSubscriptionsResponse = -1;
-gint ett_opcua_TestStackRequest = -1;
-gint ett_opcua_array_TestStackRequest = -1;
-gint ett_opcua_TestStackResponse = -1;
-gint ett_opcua_array_TestStackResponse = -1;
-gint ett_opcua_TestStackExRequest = -1;
-gint ett_opcua_array_TestStackExRequest = -1;
-gint ett_opcua_TestStackExResponse = -1;
-gint ett_opcua_array_TestStackExResponse = -1;
-
-void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+int ett_opcua_ServiceFault;
+int ett_opcua_array_ServiceFault;
+int ett_opcua_FindServersRequest;
+int ett_opcua_array_FindServersRequest;
+int ett_opcua_FindServersResponse;
+int ett_opcua_array_FindServersResponse;
+int ett_opcua_FindServersOnNetworkRequest;
+int ett_opcua_array_FindServersOnNetworkRequest;
+int ett_opcua_FindServersOnNetworkResponse;
+int ett_opcua_array_FindServersOnNetworkResponse;
+int ett_opcua_GetEndpointsRequest;
+int ett_opcua_array_GetEndpointsRequest;
+int ett_opcua_GetEndpointsResponse;
+int ett_opcua_array_GetEndpointsResponse;
+int ett_opcua_RegisterServerRequest;
+int ett_opcua_array_RegisterServerRequest;
+int ett_opcua_RegisterServerResponse;
+int ett_opcua_array_RegisterServerResponse;
+int ett_opcua_RegisterServer2Request;
+int ett_opcua_array_RegisterServer2Request;
+int ett_opcua_RegisterServer2Response;
+int ett_opcua_array_RegisterServer2Response;
+int ett_opcua_OpenSecureChannelRequest;
+int ett_opcua_array_OpenSecureChannelRequest;
+int ett_opcua_OpenSecureChannelResponse;
+int ett_opcua_array_OpenSecureChannelResponse;
+int ett_opcua_CloseSecureChannelRequest;
+int ett_opcua_array_CloseSecureChannelRequest;
+int ett_opcua_CloseSecureChannelResponse;
+int ett_opcua_array_CloseSecureChannelResponse;
+int ett_opcua_CreateSessionRequest;
+int ett_opcua_array_CreateSessionRequest;
+int ett_opcua_CreateSessionResponse;
+int ett_opcua_array_CreateSessionResponse;
+int ett_opcua_ActivateSessionRequest;
+int ett_opcua_array_ActivateSessionRequest;
+int ett_opcua_ActivateSessionResponse;
+int ett_opcua_array_ActivateSessionResponse;
+int ett_opcua_CloseSessionRequest;
+int ett_opcua_array_CloseSessionRequest;
+int ett_opcua_CloseSessionResponse;
+int ett_opcua_array_CloseSessionResponse;
+int ett_opcua_CancelRequest;
+int ett_opcua_array_CancelRequest;
+int ett_opcua_CancelResponse;
+int ett_opcua_array_CancelResponse;
+int ett_opcua_AddNodesRequest;
+int ett_opcua_array_AddNodesRequest;
+int ett_opcua_AddNodesResponse;
+int ett_opcua_array_AddNodesResponse;
+int ett_opcua_AddReferencesRequest;
+int ett_opcua_array_AddReferencesRequest;
+int ett_opcua_AddReferencesResponse;
+int ett_opcua_array_AddReferencesResponse;
+int ett_opcua_DeleteNodesRequest;
+int ett_opcua_array_DeleteNodesRequest;
+int ett_opcua_DeleteNodesResponse;
+int ett_opcua_array_DeleteNodesResponse;
+int ett_opcua_DeleteReferencesRequest;
+int ett_opcua_array_DeleteReferencesRequest;
+int ett_opcua_DeleteReferencesResponse;
+int ett_opcua_array_DeleteReferencesResponse;
+int ett_opcua_BrowseRequest;
+int ett_opcua_array_BrowseRequest;
+int ett_opcua_BrowseResponse;
+int ett_opcua_array_BrowseResponse;
+int ett_opcua_BrowseNextRequest;
+int ett_opcua_array_BrowseNextRequest;
+int ett_opcua_BrowseNextResponse;
+int ett_opcua_array_BrowseNextResponse;
+int ett_opcua_TranslateBrowsePathsToNodeIdsRequest;
+int ett_opcua_array_TranslateBrowsePathsToNodeIdsRequest;
+int ett_opcua_TranslateBrowsePathsToNodeIdsResponse;
+int ett_opcua_array_TranslateBrowsePathsToNodeIdsResponse;
+int ett_opcua_RegisterNodesRequest;
+int ett_opcua_array_RegisterNodesRequest;
+int ett_opcua_RegisterNodesResponse;
+int ett_opcua_array_RegisterNodesResponse;
+int ett_opcua_UnregisterNodesRequest;
+int ett_opcua_array_UnregisterNodesRequest;
+int ett_opcua_UnregisterNodesResponse;
+int ett_opcua_array_UnregisterNodesResponse;
+int ett_opcua_QueryFirstRequest;
+int ett_opcua_array_QueryFirstRequest;
+int ett_opcua_QueryFirstResponse;
+int ett_opcua_array_QueryFirstResponse;
+int ett_opcua_QueryNextRequest;
+int ett_opcua_array_QueryNextRequest;
+int ett_opcua_QueryNextResponse;
+int ett_opcua_array_QueryNextResponse;
+int ett_opcua_ReadRequest;
+int ett_opcua_array_ReadRequest;
+int ett_opcua_ReadResponse;
+int ett_opcua_array_ReadResponse;
+int ett_opcua_HistoryReadRequest;
+int ett_opcua_array_HistoryReadRequest;
+int ett_opcua_HistoryReadResponse;
+int ett_opcua_array_HistoryReadResponse;
+int ett_opcua_WriteRequest;
+int ett_opcua_array_WriteRequest;
+int ett_opcua_WriteResponse;
+int ett_opcua_array_WriteResponse;
+int ett_opcua_HistoryUpdateRequest;
+int ett_opcua_array_HistoryUpdateRequest;
+int ett_opcua_HistoryUpdateResponse;
+int ett_opcua_array_HistoryUpdateResponse;
+int ett_opcua_CallRequest;
+int ett_opcua_array_CallRequest;
+int ett_opcua_CallResponse;
+int ett_opcua_array_CallResponse;
+int ett_opcua_CreateMonitoredItemsRequest;
+int ett_opcua_array_CreateMonitoredItemsRequest;
+int ett_opcua_CreateMonitoredItemsResponse;
+int ett_opcua_array_CreateMonitoredItemsResponse;
+int ett_opcua_ModifyMonitoredItemsRequest;
+int ett_opcua_array_ModifyMonitoredItemsRequest;
+int ett_opcua_ModifyMonitoredItemsResponse;
+int ett_opcua_array_ModifyMonitoredItemsResponse;
+int ett_opcua_SetMonitoringModeRequest;
+int ett_opcua_array_SetMonitoringModeRequest;
+int ett_opcua_SetMonitoringModeResponse;
+int ett_opcua_array_SetMonitoringModeResponse;
+int ett_opcua_SetTriggeringRequest;
+int ett_opcua_array_SetTriggeringRequest;
+int ett_opcua_SetTriggeringResponse;
+int ett_opcua_array_SetTriggeringResponse;
+int ett_opcua_DeleteMonitoredItemsRequest;
+int ett_opcua_array_DeleteMonitoredItemsRequest;
+int ett_opcua_DeleteMonitoredItemsResponse;
+int ett_opcua_array_DeleteMonitoredItemsResponse;
+int ett_opcua_CreateSubscriptionRequest;
+int ett_opcua_array_CreateSubscriptionRequest;
+int ett_opcua_CreateSubscriptionResponse;
+int ett_opcua_array_CreateSubscriptionResponse;
+int ett_opcua_ModifySubscriptionRequest;
+int ett_opcua_array_ModifySubscriptionRequest;
+int ett_opcua_ModifySubscriptionResponse;
+int ett_opcua_array_ModifySubscriptionResponse;
+int ett_opcua_SetPublishingModeRequest;
+int ett_opcua_array_SetPublishingModeRequest;
+int ett_opcua_SetPublishingModeResponse;
+int ett_opcua_array_SetPublishingModeResponse;
+int ett_opcua_PublishRequest;
+int ett_opcua_array_PublishRequest;
+int ett_opcua_PublishResponse;
+int ett_opcua_array_PublishResponse;
+int ett_opcua_RepublishRequest;
+int ett_opcua_array_RepublishRequest;
+int ett_opcua_RepublishResponse;
+int ett_opcua_array_RepublishResponse;
+int ett_opcua_TransferSubscriptionsRequest;
+int ett_opcua_array_TransferSubscriptionsRequest;
+int ett_opcua_TransferSubscriptionsResponse;
+int ett_opcua_array_TransferSubscriptionsResponse;
+int ett_opcua_DeleteSubscriptionsRequest;
+int ett_opcua_array_DeleteSubscriptionsRequest;
+int ett_opcua_DeleteSubscriptionsResponse;
+int ett_opcua_array_DeleteSubscriptionsResponse;
+int ett_opcua_TestStackRequest;
+int ett_opcua_array_TestStackRequest;
+int ett_opcua_TestStackResponse;
+int ett_opcua_array_TestStackResponse;
+int ett_opcua_TestStackExRequest;
+int ett_opcua_array_TestStackExRequest;
+int ett_opcua_TestStackExResponse;
+int ett_opcua_array_TestStackExResponse;
+
+void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ServiceFault, &ti, "ServiceFault");
@@ -200,7 +200,7 @@ void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersRequest, &ti, "FindServersRequest");
@@ -213,7 +213,7 @@ void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerUris", "String", hf_opcua_ServerUris, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersResponse, &ti, "FindServersResponse");
@@ -223,7 +223,7 @@ void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Servers", "ApplicationDescription", parseApplicationDescription, ett_opcua_array_ApplicationDescription);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseFindServersOnNetworkRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseFindServersOnNetworkRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersOnNetworkRequest, &ti, "FindServersOnNetworkRequest");
@@ -235,7 +235,7 @@ void parseFindServersOnNetworkRequest(proto_tree *tree, tvbuff_t *tvb, packet_in
parseArraySimple(subtree, tvb, pinfo, pOffset, "ServerCapabilityFilter", "String", hf_opcua_ServerCapabilityFilter, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseFindServersOnNetworkResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseFindServersOnNetworkResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_FindServersOnNetworkResponse, &ti, "FindServersOnNetworkResponse");
@@ -246,7 +246,7 @@ void parseFindServersOnNetworkResponse(proto_tree *tree, tvbuff_t *tvb, packet_i
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Servers", "ServerOnNetwork", parseServerOnNetwork, ett_opcua_array_ServerOnNetwork);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_GetEndpointsRequest, &ti, "GetEndpointsRequest");
@@ -259,7 +259,7 @@ void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArraySimple(subtree, tvb, pinfo, pOffset, "ProfileUris", "String", hf_opcua_ProfileUris, parseString, ett_opcua_array_String);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_GetEndpointsResponse, &ti, "GetEndpointsResponse");
@@ -269,7 +269,7 @@ void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "Endpoints", "EndpointDescription", parseEndpointDescription, ett_opcua_array_EndpointDescription);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServerRequest, &ti, "RegisterServerRequest");
@@ -278,7 +278,7 @@ void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseRegisteredServer(subtree, tvb, pinfo, pOffset, "Server");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServerResponse, &ti, "RegisterServerResponse");
@@ -286,7 +286,7 @@ void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisterServer2Request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRegisterServer2Request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServer2Request, &ti, "RegisterServer2Request");
@@ -297,7 +297,7 @@ void parseRegisterServer2Request(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiscoveryConfiguration", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisterServer2Response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRegisterServer2Response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterServer2Response, &ti, "RegisterServer2Response");
@@ -309,7 +309,7 @@ void parseRegisterServer2Response(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_OpenSecureChannelRequest, &ti, "OpenSecureChannelRequest");
@@ -322,7 +322,7 @@ void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedLifetime);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_OpenSecureChannelResponse, &ti, "OpenSecureChannelResponse");
@@ -333,7 +333,7 @@ void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerNonce);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSecureChannelRequest, &ti, "CloseSecureChannelRequest");
@@ -341,7 +341,7 @@ void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info
parseRequestHeader(subtree, tvb, pinfo, pOffset, "RequestHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSecureChannelResponse, &ti, "CloseSecureChannelResponse");
@@ -349,7 +349,7 @@ void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSessionRequest, &ti, "CreateSessionRequest");
@@ -360,12 +360,12 @@ void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_EndpointUrl);
parseString(subtree, tvb, pinfo, pOffset, hf_opcua_SessionName);
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientNonce);
- parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate);
+ parseCertificate(subtree, tvb, pinfo, pOffset, hf_opcua_ClientCertificate);
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RequestedSessionTimeout);
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxResponseMessageSize);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSessionResponse, &ti, "CreateSessionResponse");
@@ -375,7 +375,7 @@ void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseNodeId(subtree, tvb, pinfo, pOffset, "AuthenticationToken");
parseDouble(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedSessionTimeout);
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerNonce);
- parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate);
+ parseCertificate(subtree, tvb, pinfo, pOffset, hf_opcua_ServerCertificate);
/* Array length field ignored: NoOfServerEndpoints */
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ServerEndpoints", "EndpointDescription", parseEndpointDescription, ett_opcua_array_EndpointDescription);
/* Array length field ignored: NoOfServerSoftwareCertificates */
@@ -384,7 +384,7 @@ void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxRequestMessageSize);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ActivateSessionRequest, &ti, "ActivateSessionRequest");
@@ -399,7 +399,7 @@ void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseSignatureData(subtree, tvb, pinfo, pOffset, "UserTokenSignature");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ActivateSessionResponse, &ti, "ActivateSessionResponse");
@@ -412,7 +412,7 @@ void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSessionRequest, &ti, "CloseSessionRequest");
@@ -421,7 +421,7 @@ void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_DeleteSubscriptions);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CloseSessionResponse, &ti, "CloseSessionResponse");
@@ -429,7 +429,7 @@ void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CancelRequest, &ti, "CancelRequest");
@@ -438,7 +438,7 @@ void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RequestHandle);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CancelResponse, &ti, "CancelResponse");
@@ -447,7 +447,7 @@ void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_CancelCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddNodesRequest, &ti, "AddNodesRequest");
@@ -457,7 +457,7 @@ void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToAdd", "AddNodesItem", parseAddNodesItem, ett_opcua_array_AddNodesItem);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddNodesResponse, &ti, "AddNodesResponse");
@@ -469,7 +469,7 @@ void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesRequest, &ti, "AddReferencesRequest");
@@ -479,7 +479,7 @@ void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencesToAdd", "AddReferencesItem", parseAddReferencesItem, ett_opcua_array_AddReferencesItem);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_AddReferencesResponse, &ti, "AddReferencesResponse");
@@ -491,7 +491,7 @@ void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesRequest, &ti, "DeleteNodesRequest");
@@ -501,7 +501,7 @@ void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToDelete", "DeleteNodesItem", parseDeleteNodesItem, ett_opcua_array_DeleteNodesItem);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteNodesResponse, &ti, "DeleteNodesResponse");
@@ -513,7 +513,7 @@ void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesRequest, &ti, "DeleteReferencesRequest");
@@ -523,7 +523,7 @@ void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ReferencesToDelete", "DeleteReferencesItem", parseDeleteReferencesItem, ett_opcua_array_DeleteReferencesItem);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteReferencesResponse, &ti, "DeleteReferencesResponse");
@@ -535,7 +535,7 @@ void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseRequest, &ti, "BrowseRequest");
@@ -547,7 +547,7 @@ void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToBrowse", "BrowseDescription", parseBrowseDescription, ett_opcua_array_BrowseDescription);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseResponse, &ti, "BrowseResponse");
@@ -559,7 +559,7 @@ void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseNextRequest, &ti, "BrowseNextRequest");
@@ -570,7 +570,7 @@ void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseArraySimple(subtree, tvb, pinfo, pOffset, "ContinuationPoints", "ByteString", hf_opcua_ContinuationPoints, parseByteString, ett_opcua_array_ByteString);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_BrowseNextResponse, &ti, "BrowseNextResponse");
@@ -582,7 +582,7 @@ void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TranslateBrowsePathsToNodeIdsRequest, &ti, "TranslateBrowsePathsToNodeIdsRequest");
@@ -592,7 +592,7 @@ void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "BrowsePaths", "BrowsePath", parseBrowsePath, ett_opcua_array_BrowsePath);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TranslateBrowsePathsToNodeIdsResponse, &ti, "TranslateBrowsePathsToNodeIdsResponse");
@@ -604,7 +604,7 @@ void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb,
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterNodesRequest, &ti, "RegisterNodesRequest");
@@ -614,7 +614,7 @@ void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToRegister", "NodeId", parseNodeId, ett_opcua_array_NodeId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RegisterNodesResponse, &ti, "RegisterNodesResponse");
@@ -624,7 +624,7 @@ void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "RegisteredNodeIds", "NodeId", parseNodeId, ett_opcua_array_NodeId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_UnregisterNodesRequest, &ti, "UnregisterNodesRequest");
@@ -634,7 +634,7 @@ void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *p
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToUnregister", "NodeId", parseNodeId, ett_opcua_array_NodeId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_UnregisterNodesResponse, &ti, "UnregisterNodesResponse");
@@ -642,7 +642,7 @@ void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *
parseResponseHeader(subtree, tvb, pinfo, pOffset, "ResponseHeader");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryFirstRequest, &ti, "QueryFirstRequest");
@@ -656,7 +656,7 @@ void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_MaxReferencesToReturn);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryFirstResponse, &ti, "QueryFirstResponse");
@@ -672,7 +672,7 @@ void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseContentFilterResult(subtree, tvb, pinfo, pOffset, "FilterResult");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryNextRequest, &ti, "QueryNextRequest");
@@ -682,7 +682,7 @@ void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_ContinuationPoint);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_QueryNextResponse, &ti, "QueryNextResponse");
@@ -693,7 +693,7 @@ void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseByteString(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedContinuationPoint);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ReadRequest, &ti, "ReadRequest");
@@ -705,7 +705,7 @@ void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToRead", "ReadValueId", parseReadValueId, ett_opcua_array_ReadValueId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ReadResponse, &ti, "ReadResponse");
@@ -717,7 +717,7 @@ void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadRequest, &ti, "HistoryReadRequest");
@@ -730,7 +730,7 @@ void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToRead", "HistoryReadValueId", parseHistoryReadValueId, ett_opcua_array_HistoryReadValueId);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryReadResponse, &ti, "HistoryReadResponse");
@@ -742,7 +742,7 @@ void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_WriteRequest, &ti, "WriteRequest");
@@ -752,7 +752,7 @@ void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "NodesToWrite", "WriteValue", parseWriteValue, ett_opcua_array_WriteValue);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_WriteResponse, &ti, "WriteResponse");
@@ -764,7 +764,7 @@ void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateRequest, &ti, "HistoryUpdateRequest");
@@ -774,7 +774,7 @@ void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArrayComplex(subtree, tvb, pinfo, pOffset, "HistoryUpdateDetails", "ExtensionObject", parseExtensionObject, ett_opcua_array_ExtensionObject);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_HistoryUpdateResponse, &ti, "HistoryUpdateResponse");
@@ -786,7 +786,7 @@ void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CallRequest, &ti, "CallRequest");
@@ -796,7 +796,7 @@ void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "MethodsToCall", "CallMethodRequest", parseCallMethodRequest, ett_opcua_array_CallMethodRequest);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CallResponse, &ti, "CallResponse");
@@ -808,7 +808,7 @@ void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateMonitoredItemsRequest, &ti, "CreateMonitoredItemsRequest");
@@ -820,7 +820,7 @@ void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_in
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ItemsToCreate", "MonitoredItemCreateRequest", parseMonitoredItemCreateRequest, ett_opcua_array_MonitoredItemCreateRequest);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateMonitoredItemsResponse, &ti, "CreateMonitoredItemsResponse");
@@ -832,7 +832,7 @@ void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_i
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifyMonitoredItemsRequest, &ti, "ModifyMonitoredItemsRequest");
@@ -844,7 +844,7 @@ void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_in
parseArrayComplex(subtree, tvb, pinfo, pOffset, "ItemsToModify", "MonitoredItemModifyRequest", parseMonitoredItemModifyRequest, ett_opcua_array_MonitoredItemModifyRequest);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifyMonitoredItemsResponse, &ti, "ModifyMonitoredItemsResponse");
@@ -856,7 +856,7 @@ void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_i
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetMonitoringModeRequest, &ti, "SetMonitoringModeRequest");
@@ -868,7 +868,7 @@ void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info
parseArraySimple(subtree, tvb, pinfo, pOffset, "MonitoredItemIds", "UInt32", hf_opcua_MonitoredItemIds, parseUInt32, ett_opcua_array_UInt32);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetMonitoringModeResponse, &ti, "SetMonitoringModeResponse");
@@ -880,7 +880,7 @@ void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetTriggeringRequest, &ti, "SetTriggeringRequest");
@@ -894,7 +894,7 @@ void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pin
parseArraySimple(subtree, tvb, pinfo, pOffset, "LinksToRemove", "UInt32", hf_opcua_LinksToRemove, parseUInt32, ett_opcua_array_UInt32);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetTriggeringResponse, &ti, "SetTriggeringResponse");
@@ -910,7 +910,7 @@ void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "RemoveDiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteMonitoredItemsRequest, &ti, "DeleteMonitoredItemsRequest");
@@ -921,7 +921,7 @@ void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_in
parseArraySimple(subtree, tvb, pinfo, pOffset, "MonitoredItemIds", "UInt32", hf_opcua_MonitoredItemIds, parseUInt32, ett_opcua_array_UInt32);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteMonitoredItemsResponse, &ti, "DeleteMonitoredItemsResponse");
@@ -933,7 +933,7 @@ void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_i
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSubscriptionRequest, &ti, "CreateSubscriptionRequest");
@@ -947,7 +947,7 @@ void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Priority);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_CreateSubscriptionResponse, &ti, "CreateSubscriptionResponse");
@@ -959,7 +959,7 @@ void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedMaxKeepAliveCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifySubscriptionRequest, &ti, "ModifySubscriptionRequest");
@@ -973,7 +973,7 @@ void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info
parseByte(subtree, tvb, pinfo, pOffset, hf_opcua_Priority);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_ModifySubscriptionResponse, &ti, "ModifySubscriptionResponse");
@@ -984,7 +984,7 @@ void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RevisedMaxKeepAliveCount);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetPublishingModeRequest, &ti, "SetPublishingModeRequest");
@@ -995,7 +995,7 @@ void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info
parseArraySimple(subtree, tvb, pinfo, pOffset, "SubscriptionIds", "UInt32", hf_opcua_SubscriptionIds, parseUInt32, ett_opcua_array_UInt32);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_SetPublishingModeResponse, &ti, "SetPublishingModeResponse");
@@ -1007,7 +1007,7 @@ void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_PublishRequest, &ti, "PublishRequest");
@@ -1017,7 +1017,7 @@ void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
parseArrayComplex(subtree, tvb, pinfo, pOffset, "SubscriptionAcknowledgements", "SubscriptionAcknowledgement", parseSubscriptionAcknowledgement, ett_opcua_array_SubscriptionAcknowledgement);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_PublishResponse, &ti, "PublishResponse");
@@ -1034,7 +1034,7 @@ void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RepublishRequest, &ti, "RepublishRequest");
@@ -1044,7 +1044,7 @@ void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseUInt32(subtree, tvb, pinfo, pOffset, hf_opcua_RetransmitSequenceNumber);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_RepublishResponse, &ti, "RepublishResponse");
@@ -1053,7 +1053,7 @@ void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseNotificationMessage(subtree, tvb, pinfo, pOffset, "NotificationMessage");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TransferSubscriptionsRequest, &ti, "TransferSubscriptionsRequest");
@@ -1064,7 +1064,7 @@ void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_i
parseBoolean(subtree, tvb, pinfo, pOffset, hf_opcua_SendInitialValues);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TransferSubscriptionsResponse, &ti, "TransferSubscriptionsResponse");
@@ -1076,7 +1076,7 @@ void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteSubscriptionsRequest, &ti, "DeleteSubscriptionsRequest");
@@ -1086,7 +1086,7 @@ void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_inf
parseArraySimple(subtree, tvb, pinfo, pOffset, "SubscriptionIds", "UInt32", hf_opcua_SubscriptionIds, parseUInt32, ett_opcua_array_UInt32);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_DeleteSubscriptionsResponse, &ti, "DeleteSubscriptionsResponse");
@@ -1098,7 +1098,7 @@ void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_in
parseArrayComplex(subtree, tvb, pinfo, pOffset, "DiagnosticInfos", "DiagnosticInfo", parseDiagnosticInfo, ett_opcua_array_DiagnosticInfo);
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackRequest, &ti, "TestStackRequest");
@@ -1109,7 +1109,7 @@ void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseVariant(subtree, tvb, pinfo, pOffset, "Input");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackResponse, &ti, "TestStackResponse");
@@ -1118,7 +1118,7 @@ void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
parseVariant(subtree, tvb, pinfo, pOffset, "Output");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackExRequest, &ti, "TestStackExRequest");
@@ -1129,7 +1129,7 @@ void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
parseCompositeTestType(subtree, tvb, pinfo, pOffset, "Input");
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_TestStackExResponse, &ti, "TestStackExResponse");
@@ -1140,7 +1140,7 @@ void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf
}
/** Setup protocol subtree array */
-static gint *ett[] =
+static int *ett[] =
{
&ett_opcua_ServiceFault,
&ett_opcua_array_ServiceFault,
diff --git a/plugins/epan/opcua/opcua_serviceparser.h b/plugins/epan/opcua/opcua_serviceparser.h
index db8e6c42..86dfe3d5 100644
--- a/plugins/epan/opcua/opcua_serviceparser.h
+++ b/plugins/epan/opcua/opcua_serviceparser.h
@@ -20,254 +20,254 @@
#include <glib.h>
#include <epan/packet.h>
-extern gint ett_opcua_ServiceFault;
-extern gint ett_opcua_array_ServiceFault;
-extern gint ett_opcua_FindServersRequest;
-extern gint ett_opcua_array_FindServersRequest;
-extern gint ett_opcua_FindServersResponse;
-extern gint ett_opcua_array_FindServersResponse;
-extern gint ett_opcua_FindServersOnNetworkRequest;
-extern gint ett_opcua_array_FindServersOnNetworkRequest;
-extern gint ett_opcua_FindServersOnNetworkResponse;
-extern gint ett_opcua_array_FindServersOnNetworkResponse;
-extern gint ett_opcua_GetEndpointsRequest;
-extern gint ett_opcua_array_GetEndpointsRequest;
-extern gint ett_opcua_GetEndpointsResponse;
-extern gint ett_opcua_array_GetEndpointsResponse;
-extern gint ett_opcua_RegisterServerRequest;
-extern gint ett_opcua_array_RegisterServerRequest;
-extern gint ett_opcua_RegisterServerResponse;
-extern gint ett_opcua_array_RegisterServerResponse;
-extern gint ett_opcua_RegisterServer2Request;
-extern gint ett_opcua_array_RegisterServer2Request;
-extern gint ett_opcua_RegisterServer2Response;
-extern gint ett_opcua_array_RegisterServer2Response;
-extern gint ett_opcua_OpenSecureChannelRequest;
-extern gint ett_opcua_array_OpenSecureChannelRequest;
-extern gint ett_opcua_OpenSecureChannelResponse;
-extern gint ett_opcua_array_OpenSecureChannelResponse;
-extern gint ett_opcua_CloseSecureChannelRequest;
-extern gint ett_opcua_array_CloseSecureChannelRequest;
-extern gint ett_opcua_CloseSecureChannelResponse;
-extern gint ett_opcua_array_CloseSecureChannelResponse;
-extern gint ett_opcua_CreateSessionRequest;
-extern gint ett_opcua_array_CreateSessionRequest;
-extern gint ett_opcua_CreateSessionResponse;
-extern gint ett_opcua_array_CreateSessionResponse;
-extern gint ett_opcua_ActivateSessionRequest;
-extern gint ett_opcua_array_ActivateSessionRequest;
-extern gint ett_opcua_ActivateSessionResponse;
-extern gint ett_opcua_array_ActivateSessionResponse;
-extern gint ett_opcua_CloseSessionRequest;
-extern gint ett_opcua_array_CloseSessionRequest;
-extern gint ett_opcua_CloseSessionResponse;
-extern gint ett_opcua_array_CloseSessionResponse;
-extern gint ett_opcua_CancelRequest;
-extern gint ett_opcua_array_CancelRequest;
-extern gint ett_opcua_CancelResponse;
-extern gint ett_opcua_array_CancelResponse;
-extern gint ett_opcua_AddNodesRequest;
-extern gint ett_opcua_array_AddNodesRequest;
-extern gint ett_opcua_AddNodesResponse;
-extern gint ett_opcua_array_AddNodesResponse;
-extern gint ett_opcua_AddReferencesRequest;
-extern gint ett_opcua_array_AddReferencesRequest;
-extern gint ett_opcua_AddReferencesResponse;
-extern gint ett_opcua_array_AddReferencesResponse;
-extern gint ett_opcua_DeleteNodesRequest;
-extern gint ett_opcua_array_DeleteNodesRequest;
-extern gint ett_opcua_DeleteNodesResponse;
-extern gint ett_opcua_array_DeleteNodesResponse;
-extern gint ett_opcua_DeleteReferencesRequest;
-extern gint ett_opcua_array_DeleteReferencesRequest;
-extern gint ett_opcua_DeleteReferencesResponse;
-extern gint ett_opcua_array_DeleteReferencesResponse;
-extern gint ett_opcua_BrowseRequest;
-extern gint ett_opcua_array_BrowseRequest;
-extern gint ett_opcua_BrowseResponse;
-extern gint ett_opcua_array_BrowseResponse;
-extern gint ett_opcua_BrowseNextRequest;
-extern gint ett_opcua_array_BrowseNextRequest;
-extern gint ett_opcua_BrowseNextResponse;
-extern gint ett_opcua_array_BrowseNextResponse;
-extern gint ett_opcua_TranslateBrowsePathsToNodeIdsRequest;
-extern gint ett_opcua_array_TranslateBrowsePathsToNodeIdsRequest;
-extern gint ett_opcua_TranslateBrowsePathsToNodeIdsResponse;
-extern gint ett_opcua_array_TranslateBrowsePathsToNodeIdsResponse;
-extern gint ett_opcua_RegisterNodesRequest;
-extern gint ett_opcua_array_RegisterNodesRequest;
-extern gint ett_opcua_RegisterNodesResponse;
-extern gint ett_opcua_array_RegisterNodesResponse;
-extern gint ett_opcua_UnregisterNodesRequest;
-extern gint ett_opcua_array_UnregisterNodesRequest;
-extern gint ett_opcua_UnregisterNodesResponse;
-extern gint ett_opcua_array_UnregisterNodesResponse;
-extern gint ett_opcua_QueryFirstRequest;
-extern gint ett_opcua_array_QueryFirstRequest;
-extern gint ett_opcua_QueryFirstResponse;
-extern gint ett_opcua_array_QueryFirstResponse;
-extern gint ett_opcua_QueryNextRequest;
-extern gint ett_opcua_array_QueryNextRequest;
-extern gint ett_opcua_QueryNextResponse;
-extern gint ett_opcua_array_QueryNextResponse;
-extern gint ett_opcua_ReadRequest;
-extern gint ett_opcua_array_ReadRequest;
-extern gint ett_opcua_ReadResponse;
-extern gint ett_opcua_array_ReadResponse;
-extern gint ett_opcua_HistoryReadRequest;
-extern gint ett_opcua_array_HistoryReadRequest;
-extern gint ett_opcua_HistoryReadResponse;
-extern gint ett_opcua_array_HistoryReadResponse;
-extern gint ett_opcua_WriteRequest;
-extern gint ett_opcua_array_WriteRequest;
-extern gint ett_opcua_WriteResponse;
-extern gint ett_opcua_array_WriteResponse;
-extern gint ett_opcua_HistoryUpdateRequest;
-extern gint ett_opcua_array_HistoryUpdateRequest;
-extern gint ett_opcua_HistoryUpdateResponse;
-extern gint ett_opcua_array_HistoryUpdateResponse;
-extern gint ett_opcua_CallRequest;
-extern gint ett_opcua_array_CallRequest;
-extern gint ett_opcua_CallResponse;
-extern gint ett_opcua_array_CallResponse;
-extern gint ett_opcua_CreateMonitoredItemsRequest;
-extern gint ett_opcua_array_CreateMonitoredItemsRequest;
-extern gint ett_opcua_CreateMonitoredItemsResponse;
-extern gint ett_opcua_array_CreateMonitoredItemsResponse;
-extern gint ett_opcua_ModifyMonitoredItemsRequest;
-extern gint ett_opcua_array_ModifyMonitoredItemsRequest;
-extern gint ett_opcua_ModifyMonitoredItemsResponse;
-extern gint ett_opcua_array_ModifyMonitoredItemsResponse;
-extern gint ett_opcua_SetMonitoringModeRequest;
-extern gint ett_opcua_array_SetMonitoringModeRequest;
-extern gint ett_opcua_SetMonitoringModeResponse;
-extern gint ett_opcua_array_SetMonitoringModeResponse;
-extern gint ett_opcua_SetTriggeringRequest;
-extern gint ett_opcua_array_SetTriggeringRequest;
-extern gint ett_opcua_SetTriggeringResponse;
-extern gint ett_opcua_array_SetTriggeringResponse;
-extern gint ett_opcua_DeleteMonitoredItemsRequest;
-extern gint ett_opcua_array_DeleteMonitoredItemsRequest;
-extern gint ett_opcua_DeleteMonitoredItemsResponse;
-extern gint ett_opcua_array_DeleteMonitoredItemsResponse;
-extern gint ett_opcua_CreateSubscriptionRequest;
-extern gint ett_opcua_array_CreateSubscriptionRequest;
-extern gint ett_opcua_CreateSubscriptionResponse;
-extern gint ett_opcua_array_CreateSubscriptionResponse;
-extern gint ett_opcua_ModifySubscriptionRequest;
-extern gint ett_opcua_array_ModifySubscriptionRequest;
-extern gint ett_opcua_ModifySubscriptionResponse;
-extern gint ett_opcua_array_ModifySubscriptionResponse;
-extern gint ett_opcua_SetPublishingModeRequest;
-extern gint ett_opcua_array_SetPublishingModeRequest;
-extern gint ett_opcua_SetPublishingModeResponse;
-extern gint ett_opcua_array_SetPublishingModeResponse;
-extern gint ett_opcua_PublishRequest;
-extern gint ett_opcua_array_PublishRequest;
-extern gint ett_opcua_PublishResponse;
-extern gint ett_opcua_array_PublishResponse;
-extern gint ett_opcua_RepublishRequest;
-extern gint ett_opcua_array_RepublishRequest;
-extern gint ett_opcua_RepublishResponse;
-extern gint ett_opcua_array_RepublishResponse;
-extern gint ett_opcua_TransferSubscriptionsRequest;
-extern gint ett_opcua_array_TransferSubscriptionsRequest;
-extern gint ett_opcua_TransferSubscriptionsResponse;
-extern gint ett_opcua_array_TransferSubscriptionsResponse;
-extern gint ett_opcua_DeleteSubscriptionsRequest;
-extern gint ett_opcua_array_DeleteSubscriptionsRequest;
-extern gint ett_opcua_DeleteSubscriptionsResponse;
-extern gint ett_opcua_array_DeleteSubscriptionsResponse;
-extern gint ett_opcua_TestStackRequest;
-extern gint ett_opcua_array_TestStackRequest;
-extern gint ett_opcua_TestStackResponse;
-extern gint ett_opcua_array_TestStackResponse;
-extern gint ett_opcua_TestStackExRequest;
-extern gint ett_opcua_array_TestStackExRequest;
-extern gint ett_opcua_TestStackExResponse;
-extern gint ett_opcua_array_TestStackExResponse;
+extern int ett_opcua_ServiceFault;
+extern int ett_opcua_array_ServiceFault;
+extern int ett_opcua_FindServersRequest;
+extern int ett_opcua_array_FindServersRequest;
+extern int ett_opcua_FindServersResponse;
+extern int ett_opcua_array_FindServersResponse;
+extern int ett_opcua_FindServersOnNetworkRequest;
+extern int ett_opcua_array_FindServersOnNetworkRequest;
+extern int ett_opcua_FindServersOnNetworkResponse;
+extern int ett_opcua_array_FindServersOnNetworkResponse;
+extern int ett_opcua_GetEndpointsRequest;
+extern int ett_opcua_array_GetEndpointsRequest;
+extern int ett_opcua_GetEndpointsResponse;
+extern int ett_opcua_array_GetEndpointsResponse;
+extern int ett_opcua_RegisterServerRequest;
+extern int ett_opcua_array_RegisterServerRequest;
+extern int ett_opcua_RegisterServerResponse;
+extern int ett_opcua_array_RegisterServerResponse;
+extern int ett_opcua_RegisterServer2Request;
+extern int ett_opcua_array_RegisterServer2Request;
+extern int ett_opcua_RegisterServer2Response;
+extern int ett_opcua_array_RegisterServer2Response;
+extern int ett_opcua_OpenSecureChannelRequest;
+extern int ett_opcua_array_OpenSecureChannelRequest;
+extern int ett_opcua_OpenSecureChannelResponse;
+extern int ett_opcua_array_OpenSecureChannelResponse;
+extern int ett_opcua_CloseSecureChannelRequest;
+extern int ett_opcua_array_CloseSecureChannelRequest;
+extern int ett_opcua_CloseSecureChannelResponse;
+extern int ett_opcua_array_CloseSecureChannelResponse;
+extern int ett_opcua_CreateSessionRequest;
+extern int ett_opcua_array_CreateSessionRequest;
+extern int ett_opcua_CreateSessionResponse;
+extern int ett_opcua_array_CreateSessionResponse;
+extern int ett_opcua_ActivateSessionRequest;
+extern int ett_opcua_array_ActivateSessionRequest;
+extern int ett_opcua_ActivateSessionResponse;
+extern int ett_opcua_array_ActivateSessionResponse;
+extern int ett_opcua_CloseSessionRequest;
+extern int ett_opcua_array_CloseSessionRequest;
+extern int ett_opcua_CloseSessionResponse;
+extern int ett_opcua_array_CloseSessionResponse;
+extern int ett_opcua_CancelRequest;
+extern int ett_opcua_array_CancelRequest;
+extern int ett_opcua_CancelResponse;
+extern int ett_opcua_array_CancelResponse;
+extern int ett_opcua_AddNodesRequest;
+extern int ett_opcua_array_AddNodesRequest;
+extern int ett_opcua_AddNodesResponse;
+extern int ett_opcua_array_AddNodesResponse;
+extern int ett_opcua_AddReferencesRequest;
+extern int ett_opcua_array_AddReferencesRequest;
+extern int ett_opcua_AddReferencesResponse;
+extern int ett_opcua_array_AddReferencesResponse;
+extern int ett_opcua_DeleteNodesRequest;
+extern int ett_opcua_array_DeleteNodesRequest;
+extern int ett_opcua_DeleteNodesResponse;
+extern int ett_opcua_array_DeleteNodesResponse;
+extern int ett_opcua_DeleteReferencesRequest;
+extern int ett_opcua_array_DeleteReferencesRequest;
+extern int ett_opcua_DeleteReferencesResponse;
+extern int ett_opcua_array_DeleteReferencesResponse;
+extern int ett_opcua_BrowseRequest;
+extern int ett_opcua_array_BrowseRequest;
+extern int ett_opcua_BrowseResponse;
+extern int ett_opcua_array_BrowseResponse;
+extern int ett_opcua_BrowseNextRequest;
+extern int ett_opcua_array_BrowseNextRequest;
+extern int ett_opcua_BrowseNextResponse;
+extern int ett_opcua_array_BrowseNextResponse;
+extern int ett_opcua_TranslateBrowsePathsToNodeIdsRequest;
+extern int ett_opcua_array_TranslateBrowsePathsToNodeIdsRequest;
+extern int ett_opcua_TranslateBrowsePathsToNodeIdsResponse;
+extern int ett_opcua_array_TranslateBrowsePathsToNodeIdsResponse;
+extern int ett_opcua_RegisterNodesRequest;
+extern int ett_opcua_array_RegisterNodesRequest;
+extern int ett_opcua_RegisterNodesResponse;
+extern int ett_opcua_array_RegisterNodesResponse;
+extern int ett_opcua_UnregisterNodesRequest;
+extern int ett_opcua_array_UnregisterNodesRequest;
+extern int ett_opcua_UnregisterNodesResponse;
+extern int ett_opcua_array_UnregisterNodesResponse;
+extern int ett_opcua_QueryFirstRequest;
+extern int ett_opcua_array_QueryFirstRequest;
+extern int ett_opcua_QueryFirstResponse;
+extern int ett_opcua_array_QueryFirstResponse;
+extern int ett_opcua_QueryNextRequest;
+extern int ett_opcua_array_QueryNextRequest;
+extern int ett_opcua_QueryNextResponse;
+extern int ett_opcua_array_QueryNextResponse;
+extern int ett_opcua_ReadRequest;
+extern int ett_opcua_array_ReadRequest;
+extern int ett_opcua_ReadResponse;
+extern int ett_opcua_array_ReadResponse;
+extern int ett_opcua_HistoryReadRequest;
+extern int ett_opcua_array_HistoryReadRequest;
+extern int ett_opcua_HistoryReadResponse;
+extern int ett_opcua_array_HistoryReadResponse;
+extern int ett_opcua_WriteRequest;
+extern int ett_opcua_array_WriteRequest;
+extern int ett_opcua_WriteResponse;
+extern int ett_opcua_array_WriteResponse;
+extern int ett_opcua_HistoryUpdateRequest;
+extern int ett_opcua_array_HistoryUpdateRequest;
+extern int ett_opcua_HistoryUpdateResponse;
+extern int ett_opcua_array_HistoryUpdateResponse;
+extern int ett_opcua_CallRequest;
+extern int ett_opcua_array_CallRequest;
+extern int ett_opcua_CallResponse;
+extern int ett_opcua_array_CallResponse;
+extern int ett_opcua_CreateMonitoredItemsRequest;
+extern int ett_opcua_array_CreateMonitoredItemsRequest;
+extern int ett_opcua_CreateMonitoredItemsResponse;
+extern int ett_opcua_array_CreateMonitoredItemsResponse;
+extern int ett_opcua_ModifyMonitoredItemsRequest;
+extern int ett_opcua_array_ModifyMonitoredItemsRequest;
+extern int ett_opcua_ModifyMonitoredItemsResponse;
+extern int ett_opcua_array_ModifyMonitoredItemsResponse;
+extern int ett_opcua_SetMonitoringModeRequest;
+extern int ett_opcua_array_SetMonitoringModeRequest;
+extern int ett_opcua_SetMonitoringModeResponse;
+extern int ett_opcua_array_SetMonitoringModeResponse;
+extern int ett_opcua_SetTriggeringRequest;
+extern int ett_opcua_array_SetTriggeringRequest;
+extern int ett_opcua_SetTriggeringResponse;
+extern int ett_opcua_array_SetTriggeringResponse;
+extern int ett_opcua_DeleteMonitoredItemsRequest;
+extern int ett_opcua_array_DeleteMonitoredItemsRequest;
+extern int ett_opcua_DeleteMonitoredItemsResponse;
+extern int ett_opcua_array_DeleteMonitoredItemsResponse;
+extern int ett_opcua_CreateSubscriptionRequest;
+extern int ett_opcua_array_CreateSubscriptionRequest;
+extern int ett_opcua_CreateSubscriptionResponse;
+extern int ett_opcua_array_CreateSubscriptionResponse;
+extern int ett_opcua_ModifySubscriptionRequest;
+extern int ett_opcua_array_ModifySubscriptionRequest;
+extern int ett_opcua_ModifySubscriptionResponse;
+extern int ett_opcua_array_ModifySubscriptionResponse;
+extern int ett_opcua_SetPublishingModeRequest;
+extern int ett_opcua_array_SetPublishingModeRequest;
+extern int ett_opcua_SetPublishingModeResponse;
+extern int ett_opcua_array_SetPublishingModeResponse;
+extern int ett_opcua_PublishRequest;
+extern int ett_opcua_array_PublishRequest;
+extern int ett_opcua_PublishResponse;
+extern int ett_opcua_array_PublishResponse;
+extern int ett_opcua_RepublishRequest;
+extern int ett_opcua_array_RepublishRequest;
+extern int ett_opcua_RepublishResponse;
+extern int ett_opcua_array_RepublishResponse;
+extern int ett_opcua_TransferSubscriptionsRequest;
+extern int ett_opcua_array_TransferSubscriptionsRequest;
+extern int ett_opcua_TransferSubscriptionsResponse;
+extern int ett_opcua_array_TransferSubscriptionsResponse;
+extern int ett_opcua_DeleteSubscriptionsRequest;
+extern int ett_opcua_array_DeleteSubscriptionsRequest;
+extern int ett_opcua_DeleteSubscriptionsResponse;
+extern int ett_opcua_array_DeleteSubscriptionsResponse;
+extern int ett_opcua_TestStackRequest;
+extern int ett_opcua_array_TestStackRequest;
+extern int ett_opcua_TestStackResponse;
+extern int ett_opcua_array_TestStackResponse;
+extern int ett_opcua_TestStackExRequest;
+extern int ett_opcua_array_TestStackExRequest;
+extern int ett_opcua_TestStackExResponse;
+extern int ett_opcua_array_TestStackExResponse;
-void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseFindServersOnNetworkRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseFindServersOnNetworkResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRegisterServer2Request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRegisterServer2Response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+void parseServiceFault(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseFindServersOnNetworkRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseFindServersOnNetworkResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRegisterServer2Request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRegisterServer2Response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
void registerServiceTypes(void);
diff --git a/plugins/epan/opcua/opcua_servicetable.c b/plugins/epan/opcua/opcua_servicetable.c
index b800da92..0559c476 100644
--- a/plugins/epan/opcua/opcua_servicetable.c
+++ b/plugins/epan/opcua/opcua_servicetable.c
@@ -109,7 +109,6 @@ ParserEntry g_arParserTable[] = {
{ OpcUaId_TestStackExRequest_Encoding_DefaultBinary, parseTestStackExRequest },
{ OpcUaId_TestStackExResponse_Encoding_DefaultBinary, parseTestStackExResponse },
};
-const int g_NumServices = sizeof(g_arParserTable) / sizeof(ParserEntry);
/** Service type table */
const value_string g_requesttypes[] = {
@@ -283,11 +282,11 @@ const value_string g_requesttypes[] = {
};
/** Dispatch all services to a special parser function. */
-void dispatchService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int ServiceId)
+void dispatchService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int ServiceId)
{
- int indx = 0;
+ unsigned indx = 0;
- while (indx < g_NumServices)
+ while (indx < array_length(g_arParserTable))
{
if (g_arParserTable[indx].iRequestId == ServiceId)
{
diff --git a/plugins/epan/opcua/opcua_servicetable.h b/plugins/epan/opcua/opcua_servicetable.h
index 0b614ae6..8b4881b8 100644
--- a/plugins/epan/opcua/opcua_servicetable.h
+++ b/plugins/epan/opcua/opcua_servicetable.h
@@ -13,5 +13,5 @@
**
******************************************************************************/
-void dispatchService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int ServiceId);
+void dispatchService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int ServiceId);
diff --git a/plugins/epan/opcua/opcua_simpletypes.c b/plugins/epan/opcua/opcua_simpletypes.c
index 24bcbbce..7f440147 100644
--- a/plugins/epan/opcua/opcua_simpletypes.c
+++ b/plugins/epan/opcua/opcua_simpletypes.c
@@ -19,8 +19,11 @@
#include <epan/packet.h>
#include <epan/expert.h>
-#include <epan/dissectors/packet-windows-common.h>
+#include <epan/proto.h>
#include <epan/proto_data.h>
+#include <epan/asn1.h>
+#include <epan/dissectors/packet-windows-common.h>
+#include <epan/dissectors/packet-x509af.h>
#include "opcua_simpletypes.h"
#include "opcua_hfindeces.h"
#include "opcua_statuscode.h"
@@ -83,94 +86,94 @@
#define MAX_ARRAY_LEN 10000
#define MAX_NESTING_DEPTH 100
-static int hf_opcua_diag_mask = -1;
-static int hf_opcua_diag_mask_symbolicflag = -1;
-static int hf_opcua_diag_mask_namespaceflag = -1;
-static int hf_opcua_diag_mask_localizedtextflag = -1;
-static int hf_opcua_diag_mask_localeflag = -1;
-static int hf_opcua_diag_mask_additionalinfoflag = -1;
-static int hf_opcua_diag_mask_innerstatuscodeflag = -1;
-static int hf_opcua_diag_mask_innerdiaginfoflag = -1;
-static int hf_opcua_loctext_mask = -1;
-static int hf_opcua_loctext_mask_localeflag = -1;
-static int hf_opcua_loctext_mask_textflag = -1;
-static int hf_opcua_datavalue_mask = -1;
-static int hf_opcua_datavalue_mask_valueflag = -1;
-static int hf_opcua_datavalue_mask_statuscodeflag = -1;
-static int hf_opcua_datavalue_mask_sourcetimestampflag = -1;
-static int hf_opcua_datavalue_mask_servertimestampflag = -1;
-static int hf_opcua_datavalue_mask_sourcepicoseconds = -1;
-static int hf_opcua_datavalue_mask_serverpicoseconds = -1;
-static int hf_opcua_nodeid_encodingmask = -1;
-static int hf_opcua_expandednodeid_mask = -1;
-static int hf_opcua_expandednodeid_mask_namespaceuri = -1;
-static int hf_opcua_expandednodeid_mask_serverindex = -1;
-static int hf_opcua_variant_encodingmask = -1;
-static int hf_opcua_nodeid_nsindex = -1;
-static int hf_opcua_nodeid_numeric = -1;
-static int hf_opcua_nodeid_string = -1;
-static int hf_opcua_nodeid_guid = -1;
-static int hf_opcua_nodeid_bytestring = -1;
-static int hf_opcua_localizedtext_locale = -1;
-static int hf_opcua_localizedtext_text = -1;
-static int hf_opcua_qualifiedname_id = -1;
-static int hf_opcua_qualifiedname_name = -1;
-static int hf_opcua_SourceTimestamp = -1;
-static int hf_opcua_SourcePicoseconds = -1;
-static int hf_opcua_ServerTimestamp = -1;
-static int hf_opcua_ServerPicoseconds = -1;
-static int hf_opcua_diag_symbolicid = -1;
-static int hf_opcua_diag_namespace = -1;
-static int hf_opcua_diag_localizedtext = -1;
-static int hf_opcua_diag_locale = -1;
-static int hf_opcua_diag_additionalinfo = -1;
-static int hf_opcua_diag_innerstatuscode = -1;
-static int hf_opcua_extobj_mask = -1;
-static int hf_opcua_extobj_mask_binbodyflag = -1;
-static int hf_opcua_extobj_mask_xmlbodyflag = -1;
-static int hf_opcua_ArraySize = -1;
-static int hf_opcua_ServerIndex = -1;
-static int hf_opcua_status_StructureChanged = -1;
-static int hf_opcua_status_SemanticsChanged = -1;
-static int hf_opcua_status_InfoBit_Limit_Overflow = -1;
-static int hf_opcua_status_InfoBit_Historian_Partial = -1;
-static int hf_opcua_status_InfoBit_Historian_ExtraData = -1;
-static int hf_opcua_status_InfoBit_Historian_MultiValue = -1;
-static int hf_opcua_status_InfoType = -1;
-static int hf_opcua_status_Limit = -1;
-static int hf_opcua_status_Historian = -1;
-int hf_opcua_returnDiag = -1;
-int hf_opcua_returnDiag_mask_sl_symbolicId = -1;
-int hf_opcua_returnDiag_mask_sl_localizedText = -1;
-int hf_opcua_returnDiag_mask_sl_additionalinfo = -1;
-int hf_opcua_returnDiag_mask_sl_innerstatuscode = -1;
-int hf_opcua_returnDiag_mask_sl_innerdiagnostics = -1;
-int hf_opcua_returnDiag_mask_ol_symbolicId = -1;
-int hf_opcua_returnDiag_mask_ol_localizedText = -1;
-int hf_opcua_returnDiag_mask_ol_additionalinfo = -1;
-int hf_opcua_returnDiag_mask_ol_innerstatuscode = -1;
-int hf_opcua_returnDiag_mask_ol_innerdiagnostics = -1;
-int hf_opcua_nodeClassMask = -1;
-int hf_opcua_nodeClassMask_all = -1;
-int hf_opcua_nodeClassMask_object = -1;
-int hf_opcua_nodeClassMask_variable = -1;
-int hf_opcua_nodeClassMask_method = -1;
-int hf_opcua_nodeClassMask_objecttype = -1;
-int hf_opcua_nodeClassMask_variabletype = -1;
-int hf_opcua_nodeClassMask_referencetype = -1;
-int hf_opcua_nodeClassMask_datatype = -1;
-int hf_opcua_nodeClassMask_view = -1;
-int hf_opcua_resultMask = -1;
-int hf_opcua_resultMask_all = -1;
-int hf_opcua_resultMask_referencetype = -1;
-int hf_opcua_resultMask_isforward = -1;
-int hf_opcua_resultMask_nodeclass = -1;
-int hf_opcua_resultMask_browsename = -1;
-int hf_opcua_resultMask_displayname = -1;
-int hf_opcua_resultMask_typedefinition = -1;
-
-static expert_field ei_array_length = EI_INIT;
-static expert_field ei_nesting_depth = EI_INIT;
+static int hf_opcua_diag_mask;
+static int hf_opcua_diag_mask_symbolicflag;
+static int hf_opcua_diag_mask_namespaceflag;
+static int hf_opcua_diag_mask_localizedtextflag;
+static int hf_opcua_diag_mask_localeflag;
+static int hf_opcua_diag_mask_additionalinfoflag;
+static int hf_opcua_diag_mask_innerstatuscodeflag;
+static int hf_opcua_diag_mask_innerdiaginfoflag;
+static int hf_opcua_loctext_mask;
+static int hf_opcua_loctext_mask_localeflag;
+static int hf_opcua_loctext_mask_textflag;
+static int hf_opcua_datavalue_mask;
+static int hf_opcua_datavalue_mask_valueflag;
+static int hf_opcua_datavalue_mask_statuscodeflag;
+static int hf_opcua_datavalue_mask_sourcetimestampflag;
+static int hf_opcua_datavalue_mask_servertimestampflag;
+static int hf_opcua_datavalue_mask_sourcepicoseconds;
+static int hf_opcua_datavalue_mask_serverpicoseconds;
+static int hf_opcua_nodeid_encodingmask;
+static int hf_opcua_expandednodeid_mask;
+static int hf_opcua_expandednodeid_mask_namespaceuri;
+static int hf_opcua_expandednodeid_mask_serverindex;
+static int hf_opcua_variant_encodingmask;
+static int hf_opcua_nodeid_nsindex;
+static int hf_opcua_nodeid_numeric;
+static int hf_opcua_nodeid_string;
+static int hf_opcua_nodeid_guid;
+static int hf_opcua_nodeid_bytestring;
+static int hf_opcua_localizedtext_locale;
+static int hf_opcua_localizedtext_text;
+static int hf_opcua_qualifiedname_id;
+static int hf_opcua_qualifiedname_name;
+static int hf_opcua_SourceTimestamp;
+static int hf_opcua_SourcePicoseconds;
+static int hf_opcua_ServerTimestamp;
+static int hf_opcua_ServerPicoseconds;
+static int hf_opcua_diag_symbolicid;
+static int hf_opcua_diag_namespace;
+static int hf_opcua_diag_localizedtext;
+static int hf_opcua_diag_locale;
+static int hf_opcua_diag_additionalinfo;
+static int hf_opcua_diag_innerstatuscode;
+static int hf_opcua_extobj_mask;
+static int hf_opcua_extobj_mask_binbodyflag;
+static int hf_opcua_extobj_mask_xmlbodyflag;
+static int hf_opcua_ArraySize;
+static int hf_opcua_ServerIndex;
+static int hf_opcua_status_StructureChanged;
+static int hf_opcua_status_SemanticsChanged;
+static int hf_opcua_status_InfoBit_Limit_Overflow;
+static int hf_opcua_status_InfoBit_Historian_Partial;
+static int hf_opcua_status_InfoBit_Historian_ExtraData;
+static int hf_opcua_status_InfoBit_Historian_MultiValue;
+static int hf_opcua_status_InfoType;
+static int hf_opcua_status_Limit;
+static int hf_opcua_status_Historian;
+int hf_opcua_returnDiag;
+int hf_opcua_returnDiag_mask_sl_symbolicId;
+int hf_opcua_returnDiag_mask_sl_localizedText;
+int hf_opcua_returnDiag_mask_sl_additionalinfo;
+int hf_opcua_returnDiag_mask_sl_innerstatuscode;
+int hf_opcua_returnDiag_mask_sl_innerdiagnostics;
+int hf_opcua_returnDiag_mask_ol_symbolicId;
+int hf_opcua_returnDiag_mask_ol_localizedText;
+int hf_opcua_returnDiag_mask_ol_additionalinfo;
+int hf_opcua_returnDiag_mask_ol_innerstatuscode;
+int hf_opcua_returnDiag_mask_ol_innerdiagnostics;
+int hf_opcua_nodeClassMask;
+int hf_opcua_nodeClassMask_all;
+int hf_opcua_nodeClassMask_object;
+int hf_opcua_nodeClassMask_variable;
+int hf_opcua_nodeClassMask_method;
+int hf_opcua_nodeClassMask_objecttype;
+int hf_opcua_nodeClassMask_variabletype;
+int hf_opcua_nodeClassMask_referencetype;
+int hf_opcua_nodeClassMask_datatype;
+int hf_opcua_nodeClassMask_view;
+int hf_opcua_resultMask;
+int hf_opcua_resultMask_all;
+int hf_opcua_resultMask_referencetype;
+int hf_opcua_resultMask_isforward;
+int hf_opcua_resultMask_nodeclass;
+int hf_opcua_resultMask_browsename;
+int hf_opcua_resultMask_displayname;
+int hf_opcua_resultMask_typedefinition;
+
+static expert_field ei_array_length;
+static expert_field ei_nesting_depth;
extern int proto_opcua;
@@ -342,52 +345,52 @@ static const value_string g_ResultMask[] = {
};
/* trees */
-static gint ett_opcua_diagnosticinfo = -1;
-static gint ett_opcua_diagnosticinfo_encodingmask = -1;
-static gint ett_opcua_nodeid = -1;
-static gint ett_opcua_expandednodeid = -1;
-static gint ett_opcua_expandednodeid_encodingmask = -1;
-static gint ett_opcua_localizedtext = -1;
-static gint ett_opcua_localizedtext_encodingmask = -1;
-static gint ett_opcua_qualifiedname = -1;
-static gint ett_opcua_datavalue = -1;
-static gint ett_opcua_datavalue_encodingmask = -1;
-static gint ett_opcua_variant = -1;
-static gint ett_opcua_variant_arraydims = -1;
-static gint ett_opcua_extensionobject = -1;
-static gint ett_opcua_extensionobject_encodingmask = -1;
-static gint ett_opcua_statuscode = -1;
-static gint ett_opcua_statuscode_info = -1;
-gint ett_opcua_array_Boolean = -1;
-gint ett_opcua_array_SByte = -1;
-gint ett_opcua_array_Byte = -1;
-gint ett_opcua_array_Int16 = -1;
-gint ett_opcua_array_UInt16 = -1;
-gint ett_opcua_array_Int32 = -1;
-gint ett_opcua_array_UInt32 = -1;
-gint ett_opcua_array_Int64 = -1;
-gint ett_opcua_array_UInt64 = -1;
-gint ett_opcua_array_Float = -1;
-gint ett_opcua_array_Double = -1;
-gint ett_opcua_array_String = -1;
-gint ett_opcua_array_DateTime = -1;
-gint ett_opcua_array_Guid = -1;
-gint ett_opcua_array_ByteString = -1;
-gint ett_opcua_array_XmlElement = -1;
-gint ett_opcua_array_NodeId = -1;
-gint ett_opcua_array_ExpandedNodeId = -1;
-gint ett_opcua_array_StatusCode = -1;
-gint ett_opcua_array_DiagnosticInfo = -1;
-gint ett_opcua_array_QualifiedName = -1;
-gint ett_opcua_array_LocalizedText = -1;
-gint ett_opcua_array_ExtensionObject = -1;
-gint ett_opcua_array_DataValue = -1;
-gint ett_opcua_array_Variant = -1;
-gint ett_opcua_returnDiagnostics = -1;
-gint ett_opcua_nodeClassMask = -1;
-gint ett_opcua_resultMask = -1;
-
-static gint *ett[] =
+static int ett_opcua_diagnosticinfo;
+static int ett_opcua_diagnosticinfo_encodingmask;
+static int ett_opcua_nodeid;
+static int ett_opcua_expandednodeid;
+static int ett_opcua_expandednodeid_encodingmask;
+static int ett_opcua_localizedtext;
+static int ett_opcua_localizedtext_encodingmask;
+static int ett_opcua_qualifiedname;
+static int ett_opcua_datavalue;
+static int ett_opcua_datavalue_encodingmask;
+static int ett_opcua_variant;
+static int ett_opcua_variant_arraydims;
+static int ett_opcua_extensionobject;
+static int ett_opcua_extensionobject_encodingmask;
+static int ett_opcua_statuscode;
+static int ett_opcua_statuscode_info;
+int ett_opcua_array_Boolean;
+int ett_opcua_array_SByte;
+int ett_opcua_array_Byte;
+int ett_opcua_array_Int16;
+int ett_opcua_array_UInt16;
+int ett_opcua_array_Int32;
+int ett_opcua_array_UInt32;
+int ett_opcua_array_Int64;
+int ett_opcua_array_UInt64;
+int ett_opcua_array_Float;
+int ett_opcua_array_Double;
+int ett_opcua_array_String;
+int ett_opcua_array_DateTime;
+int ett_opcua_array_Guid;
+int ett_opcua_array_ByteString;
+int ett_opcua_array_XmlElement;
+int ett_opcua_array_NodeId;
+int ett_opcua_array_ExpandedNodeId;
+int ett_opcua_array_StatusCode;
+int ett_opcua_array_DiagnosticInfo;
+int ett_opcua_array_QualifiedName;
+int ett_opcua_array_LocalizedText;
+int ett_opcua_array_ExtensionObject;
+int ett_opcua_array_DataValue;
+int ett_opcua_array_Variant;
+int ett_opcua_returnDiagnostics;
+int ett_opcua_nodeClassMask;
+int ett_opcua_resultMask;
+
+static int *ett[] =
{
&ett_opcua_diagnosticinfo,
&ett_opcua_diagnosticinfo_encodingmask,
@@ -541,75 +544,75 @@ void registerSimpleTypes(int proto)
expert_register_field_array(expert_proto, ei, array_length(ei));
}
-proto_item* parseBoolean(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseBoolean(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 1, ENC_LITTLE_ENDIAN);
*pOffset+=1;
return item;
}
-proto_item* parseByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 1, ENC_LITTLE_ENDIAN);
*pOffset+=1;
return item;
}
-proto_item* parseSByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseSByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 1, ENC_LITTLE_ENDIAN);
*pOffset+=1;
return item;
}
-proto_item* parseUInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseUInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 2, ENC_LITTLE_ENDIAN);
*pOffset+=2;
return item;
}
-proto_item* parseInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 2, ENC_LITTLE_ENDIAN);
*pOffset+=2;
return item;
}
-proto_item* parseUInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseUInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN);
*pOffset+=4;
return item;
}
-proto_item* parseInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN);
*pOffset+=4;
return item;
}
-proto_item* parseUInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseUInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 8, ENC_LITTLE_ENDIAN);
*pOffset+=8;
return item;
}
-proto_item* parseInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 8, ENC_LITTLE_ENDIAN);
*pOffset+=8;
return item;
}
-proto_item* parseString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = NULL;
char *szValue;
- gint iOffset = *pOffset;
- gint32 iLen = tvb_get_letohl(tvb, *pOffset);
+ int iOffset = *pOffset;
+ int32_t iLen = tvb_get_letohl(tvb, *pOffset);
iOffset+=4;
if (iLen == -1)
@@ -641,11 +644,55 @@ proto_item* parseString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
return item;
}
-proto_item* parseStatusCode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseString_ret_string_and_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex, const uint8_t **retval, int *lenretval)
+{
+ proto_item *item = NULL;
+ char *szValue;
+ int iOffset = *pOffset;
+ int32_t iLen = tvb_get_letohl(tvb, *pOffset);
+ iOffset+=4;
+
+ if (retval) {
+ *retval = "";
+ }
+ if (lenretval) {
+ *lenretval = iLen;
+ }
+
+ if (iLen == -1)
+ {
+ item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 0, ENC_NA);
+ proto_item_append_text(item, "[OpcUa Null String]");
+ proto_item_set_end(item, tvb, *pOffset + 4);
+ }
+ else if (iLen == 0)
+ {
+ item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 0, ENC_NA);
+ proto_item_append_text(item, "[OpcUa Empty String]");
+ proto_item_set_end(item, tvb, *pOffset + 4);
+ }
+ else if (iLen > 0)
+ {
+ item = proto_tree_add_item_ret_string_and_length(tree, hfIndex, tvb, iOffset, iLen, ENC_UTF_8|ENC_NA, NULL, retval, lenretval);
+ iOffset += iLen; /* eat the whole string */
+ }
+ else
+ {
+ item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 0, ENC_NA);
+ szValue = wmem_strdup_printf(pinfo->pool, "[Invalid String] Invalid length: %d", iLen);
+ proto_item_append_text(item, "%s", szValue);
+ proto_item_set_end(item, tvb, *pOffset + 4);
+ }
+
+ *pOffset = iOffset;
+ return item;
+}
+
+proto_item* parseStatusCode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = NULL;
- guint32 uStatusCode = 0;
- const gchar *szStatusCode = NULL;
+ uint32_t uStatusCode = 0;
+ const char *szStatusCode = NULL;
item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN);
@@ -656,7 +703,7 @@ proto_item* parseStatusCode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
/* check for status code info flags */
if (uStatusCode & 0x0000FFFF)
{
- gint iOffset = *pOffset;
+ int iOffset = *pOffset;
proto_tree *flags_tree;
proto_item *ti_inner;
@@ -691,21 +738,21 @@ proto_item* parseStatusCode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
return item;
}
-void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
static int * const loctext_mask[] = {&hf_opcua_loctext_mask_localeflag,
&hf_opcua_loctext_mask_textflag,
NULL};
- gint iOffset = *pOffset;
- guint8 EncodingMask;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
proto_tree *subtree;
proto_item *ti;
subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_localizedtext, &ti, "%s: LocalizedText", szFieldName);
/* parse encoding mask */
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_bitmask(subtree, tvb, iOffset, hf_opcua_loctext_mask, ett_opcua_localizedtext_encodingmask, loctext_mask, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -723,19 +770,19 @@ void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
*pOffset = iOffset;
}
-proto_item* parseGuid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseGuid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, GUID_LEN, ENC_LITTLE_ENDIAN);
*pOffset+=GUID_LEN;
return item;
}
-proto_item* parseByteString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseByteString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
proto_item *item = NULL;
char *szValue;
int iOffset = *pOffset;
- gint32 iLen = tvb_get_letohl(tvb, iOffset);
+ int32_t iLen = tvb_get_letohl(tvb, iOffset);
iOffset += 4;
if (iLen == -1)
@@ -767,34 +814,34 @@ proto_item* parseByteString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo
return item;
}
-proto_item* parseXmlElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex)
+proto_item* parseXmlElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex)
{
return parseByteString(tree, tvb, pinfo, pOffset, hfIndex);
}
-proto_item* parseFloat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseFloat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
- proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, (int)sizeof(gfloat), ENC_LITTLE_ENDIAN);
- *pOffset += (int)sizeof(gfloat);
+ proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, (int)sizeof(float), ENC_LITTLE_ENDIAN);
+ *pOffset += (int)sizeof(float);
return item;
}
-proto_item* parseDouble(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseDouble(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
- proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, (int)sizeof(gdouble), ENC_LITTLE_ENDIAN);
- *pOffset += (int)sizeof(gdouble);
+ proto_item *item = proto_tree_add_item(tree, hfIndex, tvb, *pOffset, (int)sizeof(double), ENC_LITTLE_ENDIAN);
+ *pOffset += (int)sizeof(double);
return item;
}
-proto_item* parseDateTime(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset, int hfIndex)
+proto_item* parseDateTime(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex)
{
- proto_item *item = NULL;
- *pOffset = dissect_nt_64bit_time_ex(tvb, tree, *pOffset, hfIndex, &item, FALSE);
+ proto_item *item = dissect_nttime(tvb, tree, *pOffset, hfIndex, ENC_LITTLE_ENDIAN);
+ *pOffset += 8;
return item;
}
// NOLINTNEXTLINE(misc-no-recursion)
-void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
static int * const diag_mask[] = {&hf_opcua_diag_mask_symbolicflag,
&hf_opcua_diag_mask_namespaceflag,
@@ -805,11 +852,11 @@ void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
&hf_opcua_diag_mask_innerdiaginfoflag,
NULL};
- gint iOffset = *pOffset;
- guint8 EncodingMask;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
proto_tree *subtree;
proto_item *ti;
- guint opcua_nested_count;
+ unsigned opcua_nested_count;
subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_diagnosticinfo, &ti, "%s: DiagnosticInfo", szFieldName);
@@ -824,7 +871,7 @@ void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
p_add_proto_data(pinfo->pool, pinfo, proto_opcua, 0, GUINT_TO_POINTER(opcua_nested_count));
/* parse encoding mask */
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_bitmask(subtree, tvb, iOffset, hf_opcua_diag_mask, ett_opcua_diagnosticinfo_encodingmask, diag_mask, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -866,7 +913,7 @@ void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
p_add_proto_data(pinfo->pool, pinfo, proto_opcua, 0, GUINT_TO_POINTER(opcua_nested_count));
}
-void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1,
@@ -878,8 +925,43 @@ void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gin
proto_item_set_end(ti, tvb, *pOffset);
}
+void parseCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex)
+{
+ proto_item *item = NULL;
+ char *szValue;
+ int iOffset = *pOffset;
+ int32_t iLen = tvb_get_letohl(tvb, iOffset);
+ iOffset += 4;
+
+ if (iLen == -1)
+ {
+ item = proto_tree_add_bytes_with_length(tree, hfIndex, tvb, *pOffset, 4, NULL, 0);
+ proto_item_append_text(item, "[OpcUa Null ByteString]");
+ }
+ else if (iLen == 0)
+ {
+ item = proto_tree_add_bytes_with_length(tree, hfIndex, tvb, *pOffset, 4, NULL, 0);
+ proto_item_append_text(item, "[OpcUa Empty ByteString]");
+ }
+ else if (iLen > 0)
+ {
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
+ dissect_x509af_Certificate(false, tvb, iOffset, &asn1_ctx, tree, hfIndex);
+ iOffset += iLen; /* eat the whole bytestring */
+ }
+ else
+ {
+ item = proto_tree_add_bytes_with_length(tree, hfIndex, tvb, *pOffset, 4, NULL, 0);
+ szValue = wmem_strdup_printf(pinfo->pool, "[Invalid ByteString] Invalid length: %d", iLen);
+ proto_item_append_text(item, "%s", szValue);
+ }
+
+ *pOffset = iOffset;
+}
+
// NOLINTNEXTLINE(misc-no-recursion)
-void parseDataValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseDataValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
static int * const datavalue_mask[] = {&hf_opcua_datavalue_mask_valueflag,
&hf_opcua_datavalue_mask_statuscodeflag,
@@ -892,10 +974,10 @@ void parseDataValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *p
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1,
ett_opcua_datavalue, &ti, "%s: DataValue", szFieldName);
- gint iOffset = *pOffset;
- guint8 EncodingMask;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_bitmask(subtree, tvb, iOffset, hf_opcua_datavalue_mask, ett_opcua_datavalue_encodingmask, datavalue_mask, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -931,15 +1013,15 @@ void parseDataValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *p
}
// NOLINTNEXTLINE(misc-no-recursion)
-void parseVariant(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseVariant(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1,
ett_opcua_variant, &ti, "%s: Variant", szFieldName);
- gint iOffset = *pOffset;
- guint8 EncodingMask;
- gint32 ArrayDimensions = 0;
- guint opcua_nested_count;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
+ int32_t ArrayDimensions = 0;
+ unsigned opcua_nested_count;
/* prevent a too high nesting depth */
opcua_nested_count = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_opcua, 0));
@@ -951,7 +1033,7 @@ void parseVariant(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOf
opcua_nested_count++;
p_add_proto_data(pinfo->pool, pinfo, proto_opcua, 0, GUINT_TO_POINTER(opcua_nested_count));
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_item(subtree, hf_opcua_variant_encodingmask, tvb, iOffset, 1, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -1062,12 +1144,12 @@ void parseVariant(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOf
* All arrays have one 4 byte signed integer length information,
* followed by n data elements.
*/
-void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName, const char *szTypeName, int hfIndex, fctSimpleTypeParser pParserFunction, const gint idx)
+void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName, const char *szTypeName, int hfIndex, fctSimpleTypeParser pParserFunction, const int idx)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, idx, &ti, "%s: Array of %s", szFieldName, szTypeName);
int i;
- gint32 iLen;
+ int32_t iLen;
/* read array length */
iLen = tvb_get_letohl(tvb, *pOffset);
@@ -1095,12 +1177,12 @@ void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
* All arrays have one 4 byte signed integer length information,
* followed by n data elements.
*/
-void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName, const char *szTypeName, fctEnumParser pParserFunction, const gint idx)
+void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName, const char *szTypeName, fctEnumParser pParserFunction, const int idx)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, idx, &ti, "%s: Array of %s", szFieldName, szTypeName);
int i;
- gint32 iLen;
+ int32_t iLen;
/* read array length */
iLen = tvb_get_letohl(tvb, *pOffset);
@@ -1124,12 +1206,12 @@ void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *p
* All arrays have one 4 byte signed integer length information,
* followed by n data elements.
*/
-void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName, const char *szTypeName, fctComplexTypeParser pParserFunction, const gint idx)
+void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName, const char *szTypeName, fctComplexTypeParser pParserFunction, const int idx)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, idx, &ti, "%s: Array of %s", szFieldName, szTypeName);
int i;
- gint32 iLen;
+ int32_t iLen;
/* read array length */
iLen = tvb_get_letohl(tvb, *pOffset);
@@ -1151,14 +1233,14 @@ void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint
proto_item_set_end(ti, tvb, *pOffset);
}
-void parseNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_nodeid, &ti, "%s: NodeId", szFieldName);
- gint iOffset = *pOffset;
- guint8 EncodingMask;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_item(subtree, hf_opcua_nodeid_encodingmask, tvb, iOffset, 1, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -1201,18 +1283,18 @@ void parseNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOff
*pOffset = iOffset;
}
-void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
static int * const extobj_mask[] = {&hf_opcua_extobj_mask_binbodyflag,
&hf_opcua_extobj_mask_xmlbodyflag,
NULL};
- gint iOffset = *pOffset;
- guint8 EncodingMask;
- guint32 TypeId;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
+ uint32_t TypeId;
proto_tree *extobj_tree;
proto_item *ti;
- guint opcua_nested_count;
+ unsigned opcua_nested_count;
/* add extension object subtree */
extobj_tree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1, ett_opcua_extensionobject, &ti, "%s: ExtensionObject", szFieldName);
@@ -1232,7 +1314,7 @@ void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
parseNodeId(extobj_tree, tvb, pinfo, &iOffset, "TypeId");
/* parse encoding mask */
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_bitmask(extobj_tree, tvb, iOffset, hf_opcua_extobj_mask, ett_opcua_extensionobject_encodingmask, extobj_mask, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -1248,7 +1330,7 @@ void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, g
p_add_proto_data(pinfo->pool, pinfo, proto_opcua, 0, GUINT_TO_POINTER(opcua_nested_count));
}
-void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName)
+void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName)
{
static int * const expandednodeid_mask[] = {&hf_opcua_nodeid_encodingmask,
&hf_opcua_expandednodeid_mask_serverindex,
@@ -1258,10 +1340,10 @@ void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
proto_item *ti;
proto_tree *subtree = proto_tree_add_subtree_format(tree, tvb, *pOffset, -1,
ett_opcua_expandednodeid, &ti, "%s: ExpandedNodeId", szFieldName);
- gint iOffset = *pOffset;
- guint8 EncodingMask;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
proto_tree_add_bitmask(subtree, tvb, iOffset, hf_opcua_expandednodeid_mask, ett_opcua_expandednodeid_encodingmask, expandednodeid_mask, ENC_LITTLE_ENDIAN);
iOffset++;
@@ -1313,19 +1395,19 @@ void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gi
*pOffset = iOffset;
}
-guint32 getExtensionObjectType(tvbuff_t *tvb, gint *pOffset)
+uint32_t getExtensionObjectType(tvbuff_t *tvb, int *pOffset)
{
- gint iOffset = *pOffset;
- guint8 EncodingMask;
- guint32 Numeric = 0;
+ int iOffset = *pOffset;
+ uint8_t EncodingMask;
+ uint32_t Numeric = 0;
- EncodingMask = tvb_get_guint8(tvb, iOffset);
+ EncodingMask = tvb_get_uint8(tvb, iOffset);
iOffset++;
switch(EncodingMask)
{
case 0x00: /* two byte node id */
- Numeric = tvb_get_guint8(tvb, iOffset);
+ Numeric = tvb_get_uint8(tvb, iOffset);
/*iOffset+=1;*/
break;
case 0x01: /* four byte node id */
@@ -1347,7 +1429,7 @@ guint32 getExtensionObjectType(tvbuff_t *tvb, gint *pOffset)
return Numeric;
}
-void parseNodeClassMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseNodeClassMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
static int * const nodeclass_mask[] = {
&hf_opcua_nodeClassMask_object,
@@ -1360,7 +1442,7 @@ void parseNodeClassMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
&hf_opcua_nodeClassMask_view,
NULL};
- guint8 NodeClassMask = tvb_get_guint8(tvb, *pOffset);
+ uint8_t NodeClassMask = tvb_get_uint8(tvb, *pOffset);
if(NodeClassMask == NODECLASSMASK_ALL)
{
proto_tree_add_item(tree, hf_opcua_nodeClassMask_all, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN);
@@ -1372,7 +1454,7 @@ void parseNodeClassMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
*pOffset+=4;
}
-void parseResultMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+void parseResultMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset)
{
static int * const browseresult_mask[] = {
&hf_opcua_resultMask_referencetype,
@@ -1383,7 +1465,7 @@ void parseResultMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gi
&hf_opcua_resultMask_typedefinition,
NULL};
- guint8 ResultMask = tvb_get_guint8(tvb, *pOffset);
+ uint8_t ResultMask = tvb_get_uint8(tvb, *pOffset);
if(ResultMask == RESULTMASK_ALL)
{
proto_tree_add_item(tree, hf_opcua_resultMask_all, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN);
diff --git a/plugins/epan/opcua/opcua_simpletypes.h b/plugins/epan/opcua/opcua_simpletypes.h
index 9d88983b..6f5336da 100644
--- a/plugins/epan/opcua/opcua_simpletypes.h
+++ b/plugins/epan/opcua/opcua_simpletypes.h
@@ -39,67 +39,77 @@ extern int hf_opcua_nodeClassMask_datatype;
extern int hf_opcua_nodeClassMask_view;
/* simple types trees */
-extern gint ett_opcua_array_Boolean;
-extern gint ett_opcua_array_SByte;
-extern gint ett_opcua_array_Byte;
-extern gint ett_opcua_array_Int16;
-extern gint ett_opcua_array_UInt16;
-extern gint ett_opcua_array_Int32;
-extern gint ett_opcua_array_UInt32;
-extern gint ett_opcua_array_Int64;
-extern gint ett_opcua_array_UInt64;
-extern gint ett_opcua_array_Float;
-extern gint ett_opcua_array_Double;
-extern gint ett_opcua_array_String;
-extern gint ett_opcua_array_DateTime;
-extern gint ett_opcua_array_Guid;
-extern gint ett_opcua_array_ByteString;
-extern gint ett_opcua_array_XmlElement;
-extern gint ett_opcua_array_NodeId;
-extern gint ett_opcua_array_ExpandedNodeId;
-extern gint ett_opcua_array_StatusCode;
-extern gint ett_opcua_array_DiagnosticInfo;
-extern gint ett_opcua_array_QualifiedName;
-extern gint ett_opcua_array_LocalizedText;
-extern gint ett_opcua_array_ExtensionObject;
-extern gint ett_opcua_array_DataValue;
-extern gint ett_opcua_array_Variant;
-extern gint ett_opcua_returnDiagnostics;
+extern int ett_opcua_array_Boolean;
+extern int ett_opcua_array_SByte;
+extern int ett_opcua_array_Byte;
+extern int ett_opcua_array_Int16;
+extern int ett_opcua_array_UInt16;
+extern int ett_opcua_array_Int32;
+extern int ett_opcua_array_UInt32;
+extern int ett_opcua_array_Int64;
+extern int ett_opcua_array_UInt64;
+extern int ett_opcua_array_Float;
+extern int ett_opcua_array_Double;
+extern int ett_opcua_array_String;
+extern int ett_opcua_array_DateTime;
+extern int ett_opcua_array_Guid;
+extern int ett_opcua_array_ByteString;
+extern int ett_opcua_array_XmlElement;
+extern int ett_opcua_array_NodeId;
+extern int ett_opcua_array_ExpandedNodeId;
+extern int ett_opcua_array_StatusCode;
+extern int ett_opcua_array_DiagnosticInfo;
+extern int ett_opcua_array_QualifiedName;
+extern int ett_opcua_array_LocalizedText;
+extern int ett_opcua_array_ExtensionObject;
+extern int ett_opcua_array_DataValue;
+extern int ett_opcua_array_Variant;
+extern int ett_opcua_returnDiagnostics;
+
+enum ua_message_mode {
+ UA_MessageMode_Unknown = 0,
+ UA_MessageMode_None,
+ UA_MessageMode_Sign,
+ UA_MessageMode_SignAndEncrypt,
+ UA_MessageMode_MaybeEncrypted
+};
/* simple types */
-proto_item* parseBoolean(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseSByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseUInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseUInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseUInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseGuid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseByteString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseXmlElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseFloat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseDouble(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseDateTime(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
-proto_item* parseStatusCode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int hfIndex);
+proto_item* parseBoolean(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseSByte(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseUInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseInt16(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseUInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseInt32(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseUInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseInt64(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseString_ret_string_and_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, int hfIndex, const uint8_t **retval, int *lenretval);
+proto_item* parseGuid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseByteString(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseXmlElement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseFloat(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseDouble(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseDateTime(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+proto_item* parseStatusCode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
/* complex types */
-void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseDataValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseVariant(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName);
-void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName, const char *szTypeName, int hfIndex, fctSimpleTypeParser pParserFunction, const gint idx);
-void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName, const char *szTypeName, fctEnumParser pParserFunction, const gint idx);
-void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, const char *szFieldName, const char *szTypeName, fctComplexTypeParser pParserFunction, const gint idx);
+void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseCertificate(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int hfIndex);
+void parseDataValue(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseVariant(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName);
+void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName, const char *szTypeName, int hfIndex, fctSimpleTypeParser pParserFunction, const int idx);
+void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName, const char *szTypeName, fctEnumParser pParserFunction, const int idx);
+void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, const char *szFieldName, const char *szTypeName, fctComplexTypeParser pParserFunction, const int idx);
void registerSimpleTypes(int proto);
-guint32 getExtensionObjectType(tvbuff_t *tvb, gint *pOffset);
-void parseNodeClassMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-void parseResultMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+uint32_t getExtensionObjectType(tvbuff_t *tvb, int *pOffset);
+void parseNodeClassMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
+void parseResultMask(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset);
-void dispatchExtensionObjectType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset, int TypeId);
+void dispatchExtensionObjectType(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, int TypeId);
diff --git a/plugins/epan/opcua/opcua_transport_layer.c b/plugins/epan/opcua/opcua_transport_layer.c
index 31fdca3b..64867c92 100644
--- a/plugins/epan/opcua/opcua_transport_layer.c
+++ b/plugins/epan/opcua/opcua_transport_layer.c
@@ -17,34 +17,51 @@
#include "config.h"
#include <epan/packet.h>
+#include <epan/conversation.h>
+#include "epan/column-utils.h"
+
#include "opcua_security_layer.h"
#include "opcua_application_layer.h"
#include "opcua_simpletypes.h"
#include "opcua_transport_layer.h"
#include "opcua_servicetable.h"
-static int hf_opcua_transport_type = -1;
-static int hf_opcua_transport_chunk = -1;
-static int hf_opcua_transport_size = -1;
-static int hf_opcua_transport_ver = -1;
-static int hf_opcua_transport_scid = -1;
-static int hf_opcua_transport_rbs = -1;
-static int hf_opcua_transport_sbs = -1;
-static int hf_opcua_transport_mms = -1;
-static int hf_opcua_transport_mcc = -1;
-static int hf_opcua_transport_endpoint = -1;
-static int hf_opcua_transport_suri = -1;
-static int hf_opcua_transport_error = -1;
-static int hf_opcua_transport_reason = -1;
-static int hf_opcua_transport_spu = -1;
-static int hf_opcua_transport_scert = -1;
-static int hf_opcua_transport_rcthumb = -1;
-static int hf_opcua_transport_seq = -1;
-static int hf_opcua_transport_rqid = -1;
+static int hf_opcua_transport_type;
+static int hf_opcua_transport_chunk;
+static int hf_opcua_transport_size;
+static int hf_opcua_transport_ver;
+static int hf_opcua_transport_scid;
+static int hf_opcua_transport_rbs;
+static int hf_opcua_transport_sbs;
+static int hf_opcua_transport_mms;
+static int hf_opcua_transport_mcc;
+static int hf_opcua_transport_endpoint;
+static int hf_opcua_transport_suri;
+static int hf_opcua_transport_error;
+static int hf_opcua_transport_reason;
+static int hf_opcua_transport_spu;
+static int hf_opcua_transport_scert;
+static int hf_opcua_transport_rcthumb;
+static int hf_opcua_transport_seq;
+static int hf_opcua_transport_rqid;
/** subtree types */
-extern gint ett_opcua_nodeid;
-extern gint ett_opcua_extensionobject;
+extern int ett_opcua_nodeid;
+extern int ett_opcua_extensionobject;
+extern int proto_opcua;
+
+/** Defined security policy URL from Part 7 OPC UA Specification. */
+#define UA_SECURITY_POLICY_NONE_STRING "http://opcfoundation.org/UA/SecurityPolicy#None"
+/** Defined security policy URL from Part 7 OPC UA Specification. */
+#define UA_SECURITY_POLICY_BASIC128RSA15_STRING "http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15"
+/** Defined security policy URL from Part 7 OPC UA Specification. */
+#define UA_SECURITY_POLICY_BASIC256_STRING "http://opcfoundation.org/UA/SecurityPolicy#Basic256"
+/** Defined security policy URL from Part 7 OPC UA Specification. */
+#define UA_SECURITY_POLICY_BASIC256SHA256_STRING "http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256"
+/** Defined security policy URL from Part 7 OPC UA Specification. */
+#define UA_SECURITY_POLICY_AES128_SHA256_RSAOAEP_STRING "http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep"
+/** Defined security policy URL from Part 7 OPC UA Specification. */
+#define UA_SECURITY_POLICY_AES256_SHA256_RSAPSS_STRING "http://opcfoundation.org/UA/SecurityPolicy#Aes256_Sha256_RsaPss"
/** Register transport layer types. */
void registerTransportLayerTypes(int proto)
@@ -75,12 +92,17 @@ void registerTransportLayerTypes(int proto)
proto_register_field_array(proto, hf, array_length(hf));
}
-/* Transport Layer: message parsers */
-int parseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+void parseMessageHeader(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, struct ua_metadata *data _U_)
{
proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+}
+
+/* Transport Layer: message parsers */
+int parseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data _U_)
+{
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
proto_tree_add_item(tree, hf_opcua_transport_ver, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
proto_tree_add_item(tree, hf_opcua_transport_rbs, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
proto_tree_add_item(tree, hf_opcua_transport_sbs, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
@@ -90,11 +112,9 @@ int parseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffse
return -1;
}
-int parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+int parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, struct ua_metadata *data _U_)
{
- proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
- proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
- proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
proto_tree_add_item(tree, hf_opcua_transport_ver, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
proto_tree_add_item(tree, hf_opcua_transport_rbs, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
proto_tree_add_item(tree, hf_opcua_transport_sbs, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
@@ -103,48 +123,40 @@ int parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gi
return -1;
}
-int parseError(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+int parseError(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data _U_)
{
- proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
- proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
- proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
parseStatusCode(tree, tvb, pinfo, pOffset, hf_opcua_transport_error);
parseString(tree, tvb, pinfo, pOffset, hf_opcua_transport_reason);
return -1;
}
-int parseReverseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+int parseReverseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data _U_)
{
- proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
- proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
- proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
parseString(tree, tvb, pinfo, pOffset, hf_opcua_transport_suri);
parseString(tree, tvb, pinfo, pOffset, hf_opcua_transport_endpoint);
return -1;
}
-int parseMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+int parseMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, struct ua_metadata *data _U_)
{
- proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
- proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
- proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
proto_tree_add_item(tree, hf_opcua_transport_scid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- /* message data contains the security layer */
- parseSecurityLayer(tree, tvb, pOffset);
-
return -1;
}
-int parseAbort(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, gint *pOffset)
+int parseAbort(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int *pOffset, struct ua_metadata *data _U_)
{
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
parseStatusCode(tree, tvb, pinfo, pOffset, hf_opcua_transport_error);
parseString(tree, tvb, pinfo, pOffset, hf_opcua_transport_reason);
return -1;
}
-int parseService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+int parseService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data _U_)
{
proto_item *ti;
proto_item *ti_inner;
@@ -152,83 +164,125 @@ int parseService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOff
proto_tree *nodeid_tree;
int ServiceId = 0;
- /* AT THE MOMENT NO SECURITY IS IMPLEMENTED IN UA.
- * WE CAN JUST JUMP INTO THE APPLICATION LAYER DATA.
- * THIS WILL CHAHNGE IN THE FUTURE. */
-
/* add encodeable object subtree */
- encobj_tree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_extensionobject, &ti, "OpcUa Service : Encodeable Object");
+ encobj_tree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_extensionobject, &ti, "Message: Encodeable Object");
/* add nodeid subtree */
- nodeid_tree = proto_tree_add_subtree(encobj_tree, tvb, *pOffset, -1, ett_opcua_nodeid, &ti_inner, "TypeId : ExpandedNodeId");
+ nodeid_tree = proto_tree_add_subtree(encobj_tree, tvb, *pOffset, -1, ett_opcua_nodeid, &ti_inner, "TypeId: ExpandedNodeId");
ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset);
proto_item_set_end(ti_inner, tvb, *pOffset);
- dispatchService(encobj_tree, tvb, pinfo, pOffset, ServiceId);
+ if (ServiceId >= 0) {
+ dispatchService(encobj_tree, tvb, pinfo, pOffset, ServiceId);
+ }
proto_item_set_end(ti, tvb, *pOffset);
return ServiceId;
}
-int parseOpenSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+/**
+ * Stores the messages mode and signature length for this TCP connection.
+ * We need to know this mode in the following message to decide if decryption is required or not.
+ */
+void store_encryption_info(packet_info *pinfo, enum ua_message_mode mode, uint8_t sig_len)
{
- proto_item *ti;
- proto_item *ti_inner;
- proto_tree *encobj_tree;
- proto_tree *nodeid_tree;
- int ServiceId = 0;
-
- proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
- proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
- proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- proto_tree_add_item(tree, hf_opcua_transport_scid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- parseString(tree, tvb, pinfo, pOffset, hf_opcua_transport_spu);
- parseByteString(tree, tvb, pinfo, pOffset, hf_opcua_transport_scert);
- parseByteString(tree, tvb, pinfo, pOffset, hf_opcua_transport_rcthumb);
- proto_tree_add_item(tree, hf_opcua_transport_seq, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
-
- /* add encodeable object subtree */
- encobj_tree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_extensionobject, &ti, "Message : Encodeable Object");
+ conversation_t *conv = find_conversation_pinfo(pinfo, 0);
+ if (conv) {
+ uintptr_t data = (uintptr_t)mode;
+ data |= ((uintptr_t)sig_len << 8);
+ conversation_add_proto_data(conv, proto_opcua, (void *)data);
+ }
+}
- /* add nodeid subtree */
- nodeid_tree = proto_tree_add_subtree(encobj_tree, tvb, *pOffset, -1, ett_opcua_nodeid, &ti_inner, "TypeId : ExpandedNodeId");
- ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset);
- proto_item_set_end(ti_inner, tvb, *pOffset);
+/** Returns the message mode and signature length for current TCP connection. */
+void get_encryption_info(packet_info *pinfo, enum ua_message_mode *mode, uint8_t *sig_len)
+{
+ conversation_t *conv = find_conversation_pinfo(pinfo, 0);
+ if (conv) {
+ uintptr_t data = (uintptr_t)conversation_get_proto_data(conv, proto_opcua);
+ if (data == 0) {
+ *mode = g_opcua_default_sig_len ? UA_MessageMode_MaybeEncrypted : UA_MessageMode_None;
+ *sig_len = g_opcua_default_sig_len;
+ } else {
+ *mode = (enum ua_message_mode)(data & 0xff);
+ *sig_len = (uintptr_t)(data >> 8);
+ }
+ }
+}
- dispatchService(encobj_tree, tvb, pinfo, pOffset, ServiceId);
+/**
+ * Compares an unterminated string of a string constant.
+ *
+ * @param text Unterminated string to compare.
+ * @param text_len String data.
+ * @param ref_text Zero terminated string constant to compare with.
+ *
+ * @return 0 if equal, -1 if not.
+ */
+static int opcua_string_compare(const char *text, int text_len, const char *ref_text)
+{
+ int len = (int)strlen(ref_text);
+ if (text_len == len && memcmp(text, ref_text, len) == 0) return 0;
- proto_item_set_end(ti, tvb, *pOffset);
- return ServiceId;
+ return -1;
}
-int parseCloseSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset)
+int parseOpenSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data)
{
- proto_item *ti;
- proto_item *ti_inner;
- proto_tree *encobj_tree;
- proto_tree *nodeid_tree;
- int ServiceId = 0;
+ const uint8_t *sec_policy = NULL;
+ int sec_policy_len = 0;
+ int ServiceId = -1;
+ bool encrypted = false;
+ // Message Header
proto_tree_add_item(tree, hf_opcua_transport_type, tvb, *pOffset, 3, ENC_ASCII|ENC_NA); *pOffset+=3;
proto_tree_add_item(tree, hf_opcua_transport_chunk, tvb, *pOffset, 1, ENC_ASCII|ENC_NA); *pOffset+=1;
proto_tree_add_item(tree, hf_opcua_transport_size, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
proto_tree_add_item(tree, hf_opcua_transport_scid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
+ // Asym Security Header
+ parseString_ret_string_and_length(tree, tvb, pinfo, pOffset, hf_opcua_transport_spu, &sec_policy, &sec_policy_len);
+ parseCertificate(tree, tvb, pinfo, pOffset, hf_opcua_transport_scert);
+ parseByteString(tree, tvb, pinfo, pOffset, hf_opcua_transport_rcthumb);
- parseSecurityLayer(tree, tvb, pOffset);
-
- /* add encodeable object subtree */
- encobj_tree = proto_tree_add_subtree(tree, tvb, *pOffset, -1, ett_opcua_extensionobject, &ti, "Message : Encodeable Object");
+ if (opcua_string_compare(sec_policy, sec_policy_len, UA_SECURITY_POLICY_NONE_STRING ) == 0) {
+ store_encryption_info(pinfo, UA_MessageMode_None, 0);
+ } else {
+ uint8_t sig_len = 0;
+ // OPN is always encrypted for Policies != None, for both message modes Sign and SignAndEncrypted
+ encrypted = true;
+ // determine signature length based on security policy
+ if (opcua_string_compare(sec_policy, sec_policy_len, UA_SECURITY_POLICY_BASIC128RSA15_STRING ) == 0) {
+ sig_len = 20;
+ } else if (opcua_string_compare(sec_policy, sec_policy_len, UA_SECURITY_POLICY_BASIC256_STRING ) == 0) {
+ sig_len = 20;
+ } else if (opcua_string_compare(sec_policy, sec_policy_len, UA_SECURITY_POLICY_BASIC256SHA256_STRING ) == 0) {
+ sig_len = 32;
+ } else if (opcua_string_compare(sec_policy, sec_policy_len, UA_SECURITY_POLICY_AES128_SHA256_RSAOAEP_STRING ) == 0) {
+ sig_len = 32;
+ } else if (opcua_string_compare(sec_policy, sec_policy_len, UA_SECURITY_POLICY_AES256_SHA256_RSAPSS_STRING ) == 0) {
+ sig_len = 32;
+ }
+ // We don't know the messagemode without decrypting the OPN, so we assume it is SignAndEncrypt,
+ // we will try to decode the next service (CreateSession) and if it succeeds we change the mode to Sign
+ // or SignAndEncrypt accordingly
+ store_encryption_info(pinfo, UA_MessageMode_MaybeEncrypted, sig_len);
+ }
+
+ data->encrypted = encrypted;
+ if (!encrypted) {
+ parseSequenceHeader(tree, tvb, pOffset, data);
+ ServiceId = parseService(tree, tvb, pinfo,pOffset, data);
+ }
- /* add nodeid subtree */
- nodeid_tree = proto_tree_add_subtree(encobj_tree, tvb, *pOffset, -1, ett_opcua_nodeid, &ti_inner, "TypeId : ExpandedNodeId");
- ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset);
- proto_item_set_end(ti_inner, tvb, *pOffset);
+ return ServiceId;
+}
- dispatchService(encobj_tree, tvb, pinfo, pOffset, ServiceId);
+int parseCloseSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data _U_)
+{
+ parseMessageHeader(tree, tvb, pinfo, pOffset, data);
+ proto_tree_add_item(tree, hf_opcua_transport_scid, tvb, *pOffset, 4, ENC_LITTLE_ENDIAN); *pOffset+=4;
- proto_item_set_end(ti, tvb, *pOffset);
- return ServiceId;
+ return -1;
}
/*
diff --git a/plugins/epan/opcua/opcua_transport_layer.h b/plugins/epan/opcua/opcua_transport_layer.h
index 4e63aa5a..ce30cfbd 100644
--- a/plugins/epan/opcua/opcua_transport_layer.h
+++ b/plugins/epan/opcua/opcua_transport_layer.h
@@ -14,14 +14,25 @@
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
******************************************************************************/
+/* This struct is used to pass meta data down to decoding functions. */
+struct ua_metadata {
+ bool encrypted; /* true if payload is encrypted, false if no encryption was used or it was successfully decrypted. */
+};
+
+extern int g_opcua_default_sig_len;
+
/* Transport Layer: message parsers */
-int parseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseError(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseReverseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseAbort(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseOpenSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
-int parseCloseSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, gint *pOffset);
+int parseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseError(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseReverseHello(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseMessage(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseAbort(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseService(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseOpenSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
+int parseCloseSecureChannel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int *pOffset, struct ua_metadata *data);
void registerTransportLayerTypes(int proto);
+
+enum ua_message_mode;
+void store_encryption_info(packet_info *pinfo, enum ua_message_mode mode, uint8_t sig_len);
+void get_encryption_info(packet_info *pinfo, enum ua_message_mode *mode, uint8_t *sig_len);