Use register_dissector_files in the plugins dissectors
[obnox/wireshark/wip.git] / plugins / opcua / opcua_serviceparser.c
1 /******************************************************************************
2 ** $Id$
3 **
4 ** Copyright (C) 2006-2009 ascolab GmbH. All Rights Reserved.
5 ** Web: http://www.ascolab.com
6 ** 
7 ** This program is free software; you can redistribute it and/or
8 ** modify it under the terms of the GNU General Public License
9 ** as published by the Free Software Foundation; either version 2
10 ** of the License, or (at your option) any later version.
11 ** 
12 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14 ** 
15 ** Project: OpcUa Wireshark Plugin
16 **
17 ** Description: OpcUa Complex Type Parser
18 **
19 ** This file was autogenerated on 01.04.2009.
20 ** DON'T MODIFY THIS FILE!
21 **
22 ******************************************************************************/
23
24 #ifdef HAVE_CONFIG_H
25 # include "config.h"
26 #endif
27
28 #include <glib.h>
29 #include <epan/packet.h>
30 #include "opcua_complextypeparser.h"
31 #include "opcua_enumparser.h"
32 #include "opcua_simpletypes.h"
33 #include "opcua_hfindeces.h"
34
35 gint ett_opcua_TestStackRequest = -1;
36 void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
37 {
38   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackRequest");
39   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackRequest);
40
41   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
42   parseUInt32(subtree, tvb, pOffset, hf_opcua_TestId);
43   parseInt32(subtree, tvb, pOffset, hf_opcua_Iteration);
44   parseVariant(subtree, tvb, pOffset, "Input");
45 }
46 gint ett_opcua_TestStackResponse = -1;
47 void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
48 {
49   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackResponse");
50   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackResponse);
51
52   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
53   parseVariant(subtree, tvb, pOffset, "Output");
54 }
55 gint ett_opcua_TestStackExRequest = -1;
56 void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
57 {
58   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackExRequest");
59   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackExRequest);
60
61   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
62   parseUInt32(subtree, tvb, pOffset, hf_opcua_TestId);
63   parseInt32(subtree, tvb, pOffset, hf_opcua_Iteration);
64   parseCompositeTestType(subtree, tvb, pOffset, "Input");
65 }
66 gint ett_opcua_TestStackExResponse = -1;
67 void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
68 {
69   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackExResponse");
70   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackExResponse);
71
72   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
73   parseCompositeTestType(subtree, tvb, pOffset, "Output");
74 }
75 gint ett_opcua_FindServersRequest = -1;
76 void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
77 {
78   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "FindServersRequest");
79   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FindServersRequest);
80
81   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
82   parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
83   /* Array length field ignored: NoOfLocaleIds */
84   parseArraySimple(subtree, tvb, pOffset, hf_opcua_LocaleIds, parseString);
85   /* Array length field ignored: NoOfServerUris */
86   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ServerUris, parseString);
87 }
88 gint ett_opcua_FindServersResponse = -1;
89 void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
90 {
91   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "FindServersResponse");
92   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FindServersResponse);
93
94   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
95   /* Array length field ignored: NoOfServers */
96   parseArrayComplex(subtree, tvb, pOffset, "Servers", parseApplicationDescription);
97 }
98 gint ett_opcua_GetEndpointsRequest = -1;
99 void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
100 {
101   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "GetEndpointsRequest");
102   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_GetEndpointsRequest);
103
104   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
105   parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
106   /* Array length field ignored: NoOfLocaleIds */
107   parseArraySimple(subtree, tvb, pOffset, hf_opcua_LocaleIds, parseString);
108   /* Array length field ignored: NoOfProfileUris */
109   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ProfileUris, parseString);
110 }
111 gint ett_opcua_GetEndpointsResponse = -1;
112 void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
113 {
114   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "GetEndpointsResponse");
115   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_GetEndpointsResponse);
116
117   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
118   /* Array length field ignored: NoOfEndpoints */
119   parseArrayComplex(subtree, tvb, pOffset, "Endpoints", parseEndpointDescription);
120 }
121 gint ett_opcua_RegisterServerRequest = -1;
122 void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
123 {
124   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RegisterServerRequest");
125   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterServerRequest);
126
127   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
128   parseRegisteredServer(subtree, tvb, pOffset, "Server");
129 }
130 gint ett_opcua_RegisterServerResponse = -1;
131 void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
132 {
133   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RegisterServerResponse");
134   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterServerResponse);
135
136   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
137 }
138 gint ett_opcua_OpenSecureChannelRequest = -1;
139 void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
140 {
141   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "OpenSecureChannelRequest");
142   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_OpenSecureChannelRequest);
143
144   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
145   parseUInt32(subtree, tvb, pOffset, hf_opcua_ClientProtocolVersion);
146   parseSecurityTokenRequestType(subtree, tvb, pOffset);
147   parseMessageSecurityMode(subtree, tvb, pOffset);
148   parseByteString(subtree, tvb, pOffset, hf_opcua_ClientNonce);
149   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedLifetime);
150 }
151 gint ett_opcua_OpenSecureChannelResponse = -1;
152 void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
153 {
154   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "OpenSecureChannelResponse");
155   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_OpenSecureChannelResponse);
156
157   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
158   parseUInt32(subtree, tvb, pOffset, hf_opcua_ServerProtocolVersion);
159   parseChannelSecurityToken(subtree, tvb, pOffset, "SecurityToken");
160   parseByteString(subtree, tvb, pOffset, hf_opcua_ServerNonce);
161 }
162 gint ett_opcua_CloseSecureChannelRequest = -1;
163 void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
164 {
165   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSecureChannelRequest");
166   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSecureChannelRequest);
167
168   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
169 }
170 gint ett_opcua_CloseSecureChannelResponse = -1;
171 void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
172 {
173   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSecureChannelResponse");
174   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSecureChannelResponse);
175
176   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
177 }
178 gint ett_opcua_CreateSessionRequest = -1;
179 void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
180 {
181   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSessionRequest");
182   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSessionRequest);
183
184   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
185   parseApplicationDescription(subtree, tvb, pOffset, "ClientDescription");
186   parseString(subtree, tvb, pOffset, hf_opcua_ServerUri);
187   parseString(subtree, tvb, pOffset, hf_opcua_EndpointUrl);
188   parseString(subtree, tvb, pOffset, hf_opcua_SessionName);
189   parseByteString(subtree, tvb, pOffset, hf_opcua_ClientNonce);
190   parseByteString(subtree, tvb, pOffset, hf_opcua_ClientCertificate);
191   parseDouble(subtree, tvb, pOffset, hf_opcua_RequestedSessionTimeout);
192   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxResponseMessageSize);
193 }
194 gint ett_opcua_CreateSessionResponse = -1;
195 void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
196 {
197   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSessionResponse");
198   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSessionResponse);
199
200   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
201   parseNodeId(subtree, tvb, pOffset, "SessionId");
202   parseNodeId(subtree, tvb, pOffset, "AuthenticationToken");
203   parseDouble(subtree, tvb, pOffset, hf_opcua_RevisedSessionTimeout);
204   parseByteString(subtree, tvb, pOffset, hf_opcua_ServerNonce);
205   parseByteString(subtree, tvb, pOffset, hf_opcua_ServerCertificate);
206   /* Array length field ignored: NoOfServerEndpoints */
207   parseArrayComplex(subtree, tvb, pOffset, "ServerEndpoints", parseEndpointDescription);
208   /* Array length field ignored: NoOfServerSoftwareCertificates */
209   parseArrayComplex(subtree, tvb, pOffset, "ServerSoftwareCertificates", parseSignedSoftwareCertificate);
210   parseSignatureData(subtree, tvb, pOffset, "ServerSignature");
211   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxRequestMessageSize);
212 }
213 gint ett_opcua_ActivateSessionRequest = -1;
214 void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
215 {
216   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ActivateSessionRequest");
217   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ActivateSessionRequest);
218
219   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
220   parseSignatureData(subtree, tvb, pOffset, "ClientSignature");
221   /* Array length field ignored: NoOfClientSoftwareCertificates */
222   parseArrayComplex(subtree, tvb, pOffset, "ClientSoftwareCertificates", parseSignedSoftwareCertificate);
223   /* Array length field ignored: NoOfLocaleIds */
224   parseArraySimple(subtree, tvb, pOffset, hf_opcua_LocaleIds, parseString);
225   parseExtensionObject(subtree, tvb, pOffset, "UserIdentityToken");
226   parseSignatureData(subtree, tvb, pOffset, "UserTokenSignature");
227 }
228 gint ett_opcua_ActivateSessionResponse = -1;
229 void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
230 {
231   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ActivateSessionResponse");
232   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ActivateSessionResponse);
233
234   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
235   parseByteString(subtree, tvb, pOffset, hf_opcua_ServerNonce);
236   /* Array length field ignored: NoOfResults */
237   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
238   /* Array length field ignored: NoOfDiagnosticInfos */
239   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
240 }
241 gint ett_opcua_CloseSessionRequest = -1;
242 void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
243 {
244   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSessionRequest");
245   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSessionRequest);
246
247   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
248   parseBoolean(subtree, tvb, pOffset, hf_opcua_DeleteSubscriptions);
249 }
250 gint ett_opcua_CloseSessionResponse = -1;
251 void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
252 {
253   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSessionResponse");
254   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSessionResponse);
255
256   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
257 }
258 gint ett_opcua_CancelRequest = -1;
259 void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
260 {
261   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CancelRequest");
262   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CancelRequest);
263
264   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
265   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestHandle);
266 }
267 gint ett_opcua_CancelResponse = -1;
268 void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
269 {
270   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CancelResponse");
271   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CancelResponse);
272
273   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
274   parseUInt32(subtree, tvb, pOffset, hf_opcua_CancelCount);
275 }
276 gint ett_opcua_AddNodesRequest = -1;
277 void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
278 {
279   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddNodesRequest");
280   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesRequest);
281
282   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
283   /* Array length field ignored: NoOfNodesToAdd */
284   parseArrayComplex(subtree, tvb, pOffset, "NodesToAdd", parseAddNodesItem);
285 }
286 gint ett_opcua_AddNodesResponse = -1;
287 void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
288 {
289   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddNodesResponse");
290   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesResponse);
291
292   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
293   /* Array length field ignored: NoOfResults */
294   parseArrayComplex(subtree, tvb, pOffset, "Results", parseAddNodesResult);
295   /* Array length field ignored: NoOfDiagnosticInfos */
296   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
297 }
298 gint ett_opcua_AddReferencesRequest = -1;
299 void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
300 {
301   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddReferencesRequest");
302   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesRequest);
303
304   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
305   /* Array length field ignored: NoOfReferencesToAdd */
306   parseArrayComplex(subtree, tvb, pOffset, "ReferencesToAdd", parseAddReferencesItem);
307 }
308 gint ett_opcua_AddReferencesResponse = -1;
309 void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
310 {
311   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddReferencesResponse");
312   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesResponse);
313
314   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
315   /* Array length field ignored: NoOfResults */
316   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
317   /* Array length field ignored: NoOfDiagnosticInfos */
318   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
319 }
320 gint ett_opcua_DeleteNodesRequest = -1;
321 void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
322 {
323   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteNodesRequest");
324   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesRequest);
325
326   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
327   /* Array length field ignored: NoOfNodesToDelete */
328   parseArrayComplex(subtree, tvb, pOffset, "NodesToDelete", parseDeleteNodesItem);
329 }
330 gint ett_opcua_DeleteNodesResponse = -1;
331 void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
332 {
333   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteNodesResponse");
334   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesResponse);
335
336   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
337   /* Array length field ignored: NoOfResults */
338   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
339   /* Array length field ignored: NoOfDiagnosticInfos */
340   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
341 }
342 gint ett_opcua_DeleteReferencesRequest = -1;
343 void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
344 {
345   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteReferencesRequest");
346   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesRequest);
347
348   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
349   /* Array length field ignored: NoOfReferencesToDelete */
350   parseArrayComplex(subtree, tvb, pOffset, "ReferencesToDelete", parseDeleteReferencesItem);
351 }
352 gint ett_opcua_DeleteReferencesResponse = -1;
353 void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
354 {
355   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteReferencesResponse");
356   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesResponse);
357
358   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
359   /* Array length field ignored: NoOfResults */
360   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
361   /* Array length field ignored: NoOfDiagnosticInfos */
362   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
363 }
364 gint ett_opcua_BrowseRequest = -1;
365 void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
366 {
367   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseRequest");
368   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseRequest);
369
370   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
371   parseViewDescription(subtree, tvb, pOffset, "View");
372   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedMaxReferencesPerNode);
373   /* Array length field ignored: NoOfNodesToBrowse */
374   parseArrayComplex(subtree, tvb, pOffset, "NodesToBrowse", parseBrowseDescription);
375 }
376 gint ett_opcua_BrowseResponse = -1;
377 void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
378 {
379   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseResponse");
380   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseResponse);
381
382   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
383   /* Array length field ignored: NoOfResults */
384   parseArrayComplex(subtree, tvb, pOffset, "Results", parseBrowseResult);
385   /* Array length field ignored: NoOfDiagnosticInfos */
386   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
387 }
388 gint ett_opcua_BrowseNextRequest = -1;
389 void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
390 {
391   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseNextRequest");
392   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseNextRequest);
393
394   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
395   parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoints);
396   /* Array length field ignored: NoOfContinuationPoints */
397   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ContinuationPoints, parseByteString);
398 }
399 gint ett_opcua_BrowseNextResponse = -1;
400 void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
401 {
402   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseNextResponse");
403   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseNextResponse);
404
405   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
406   /* Array length field ignored: NoOfResults */
407   parseArrayComplex(subtree, tvb, pOffset, "Results", parseBrowseResult);
408   /* Array length field ignored: NoOfDiagnosticInfos */
409   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
410 }
411 gint ett_opcua_TranslateBrowsePathsToNodeIdsRequest = -1;
412 void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
413 {
414   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TranslateBrowsePathsToNodeIdsRequest");
415   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathsToNodeIdsRequest);
416
417   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
418   /* Array length field ignored: NoOfBrowsePaths */
419   parseArrayComplex(subtree, tvb, pOffset, "BrowsePaths", parseBrowsePath);
420 }
421 gint ett_opcua_TranslateBrowsePathsToNodeIdsResponse = -1;
422 void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
423 {
424   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TranslateBrowsePathsToNodeIdsResponse");
425   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathsToNodeIdsResponse);
426
427   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
428   /* Array length field ignored: NoOfResults */
429   parseArrayComplex(subtree, tvb, pOffset, "Results", parseBrowsePathResult);
430   /* Array length field ignored: NoOfDiagnosticInfos */
431   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
432 }
433 gint ett_opcua_RegisterNodesRequest = -1;
434 void parseRegisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
435 {
436   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RegisterNodesRequest");
437   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterNodesRequest);
438
439   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
440   /* Array length field ignored: NoOfNodesToRegister */
441   parseArrayComplex(subtree, tvb, pOffset, "NodesToRegister", parseNodeId);
442 }
443 gint ett_opcua_RegisterNodesResponse = -1;
444 void parseRegisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
445 {
446   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RegisterNodesResponse");
447   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterNodesResponse);
448
449   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
450   /* Array length field ignored: NoOfRegisteredNodeIds */
451   parseArrayComplex(subtree, tvb, pOffset, "RegisteredNodeIds", parseNodeId);
452 }
453 gint ett_opcua_UnregisterNodesRequest = -1;
454 void parseUnregisterNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
455 {
456   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "UnregisterNodesRequest");
457   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UnregisterNodesRequest);
458
459   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
460   /* Array length field ignored: NoOfNodesToUnregister */
461   parseArrayComplex(subtree, tvb, pOffset, "NodesToUnregister", parseNodeId);
462 }
463 gint ett_opcua_UnregisterNodesResponse = -1;
464 void parseUnregisterNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
465 {
466   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "UnregisterNodesResponse");
467   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_UnregisterNodesResponse);
468
469   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
470 }
471 gint ett_opcua_QueryFirstRequest = -1;
472 void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
473 {
474   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryFirstRequest");
475   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryFirstRequest);
476
477   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
478   parseViewDescription(subtree, tvb, pOffset, "View");
479   /* Array length field ignored: NoOfNodeTypes */
480   parseArrayComplex(subtree, tvb, pOffset, "NodeTypes", parseNodeTypeDescription);
481   parseContentFilter(subtree, tvb, pOffset, "Filter");
482   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxDataSetsToReturn);
483   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxReferencesToReturn);
484 }
485 gint ett_opcua_QueryFirstResponse = -1;
486 void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
487 {
488   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryFirstResponse");
489   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryFirstResponse);
490
491   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
492   /* Array length field ignored: NoOfQueryDataSets */
493   parseArrayComplex(subtree, tvb, pOffset, "QueryDataSets", parseQueryDataSet);
494   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
495   /* Array length field ignored: NoOfParsingResults */
496   parseArrayComplex(subtree, tvb, pOffset, "ParsingResults", parseParsingResult);
497   /* Array length field ignored: NoOfDiagnosticInfos */
498   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
499   parseContentFilterResult(subtree, tvb, pOffset, "FilterResult");
500 }
501 gint ett_opcua_QueryNextRequest = -1;
502 void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
503 {
504   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryNextRequest");
505   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryNextRequest);
506
507   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
508   parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoint);
509   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
510 }
511 gint ett_opcua_QueryNextResponse = -1;
512 void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
513 {
514   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryNextResponse");
515   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryNextResponse);
516
517   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
518   /* Array length field ignored: NoOfQueryDataSets */
519   parseArrayComplex(subtree, tvb, pOffset, "QueryDataSets", parseQueryDataSet);
520   parseByteString(subtree, tvb, pOffset, hf_opcua_RevisedContinuationPoint);
521 }
522 gint ett_opcua_ReadRequest = -1;
523 void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
524 {
525   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ReadRequest");
526   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadRequest);
527
528   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
529   parseDouble(subtree, tvb, pOffset, hf_opcua_MaxAge);
530   parseTimestampsToReturn(subtree, tvb, pOffset);
531   /* Array length field ignored: NoOfNodesToRead */
532   parseArrayComplex(subtree, tvb, pOffset, "NodesToRead", parseReadValueId);
533 }
534 gint ett_opcua_ReadResponse = -1;
535 void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
536 {
537   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ReadResponse");
538   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadResponse);
539
540   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
541   /* Array length field ignored: NoOfResults */
542   parseArrayComplex(subtree, tvb, pOffset, "Results", parseDataValue);
543   /* Array length field ignored: NoOfDiagnosticInfos */
544   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
545 }
546 gint ett_opcua_HistoryReadRequest = -1;
547 void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
548 {
549   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryReadRequest");
550   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadRequest);
551
552   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
553   parseExtensionObject(subtree, tvb, pOffset, "HistoryReadDetails");
554   parseTimestampsToReturn(subtree, tvb, pOffset);
555   parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoints);
556   /* Array length field ignored: NoOfNodesToRead */
557   parseArrayComplex(subtree, tvb, pOffset, "NodesToRead", parseHistoryReadValueId);
558 }
559 gint ett_opcua_HistoryReadResponse = -1;
560 void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
561 {
562   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryReadResponse");
563   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadResponse);
564
565   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
566   /* Array length field ignored: NoOfResults */
567   parseArrayComplex(subtree, tvb, pOffset, "Results", parseHistoryReadResult);
568   /* Array length field ignored: NoOfDiagnosticInfos */
569   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
570 }
571 gint ett_opcua_WriteRequest = -1;
572 void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
573 {
574   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "WriteRequest");
575   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteRequest);
576
577   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
578   /* Array length field ignored: NoOfNodesToWrite */
579   parseArrayComplex(subtree, tvb, pOffset, "NodesToWrite", parseWriteValue);
580 }
581 gint ett_opcua_WriteResponse = -1;
582 void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
583 {
584   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "WriteResponse");
585   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteResponse);
586
587   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
588   /* Array length field ignored: NoOfResults */
589   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
590   /* Array length field ignored: NoOfDiagnosticInfos */
591   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
592 }
593 gint ett_opcua_HistoryUpdateRequest = -1;
594 void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
595 {
596   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryUpdateRequest");
597   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateRequest);
598
599   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
600   /* Array length field ignored: NoOfHistoryUpdateDetails */
601   parseArrayComplex(subtree, tvb, pOffset, "HistoryUpdateDetails", parseExtensionObject);
602 }
603 gint ett_opcua_HistoryUpdateResponse = -1;
604 void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
605 {
606   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryUpdateResponse");
607   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateResponse);
608
609   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
610   /* Array length field ignored: NoOfResults */
611   parseArrayComplex(subtree, tvb, pOffset, "Results", parseHistoryUpdateResult);
612   /* Array length field ignored: NoOfDiagnosticInfos */
613   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
614 }
615 gint ett_opcua_CallRequest = -1;
616 void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
617 {
618   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CallRequest");
619   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallRequest);
620
621   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
622   /* Array length field ignored: NoOfMethodsToCall */
623   parseArrayComplex(subtree, tvb, pOffset, "MethodsToCall", parseCallMethodRequest);
624 }
625 gint ett_opcua_CallResponse = -1;
626 void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
627 {
628   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CallResponse");
629   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallResponse);
630
631   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
632   /* Array length field ignored: NoOfResults */
633   parseArrayComplex(subtree, tvb, pOffset, "Results", parseCallMethodResult);
634   /* Array length field ignored: NoOfDiagnosticInfos */
635   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
636 }
637 gint ett_opcua_CreateMonitoredItemsRequest = -1;
638 void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
639 {
640   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateMonitoredItemsRequest");
641   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateMonitoredItemsRequest);
642
643   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
644   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
645   parseTimestampsToReturn(subtree, tvb, pOffset);
646   /* Array length field ignored: NoOfItemsToCreate */
647   parseArrayComplex(subtree, tvb, pOffset, "ItemsToCreate", parseMonitoredItemCreateRequest);
648 }
649 gint ett_opcua_CreateMonitoredItemsResponse = -1;
650 void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
651 {
652   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateMonitoredItemsResponse");
653   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateMonitoredItemsResponse);
654
655   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
656   /* Array length field ignored: NoOfResults */
657   parseArrayComplex(subtree, tvb, pOffset, "Results", parseMonitoredItemCreateResult);
658   /* Array length field ignored: NoOfDiagnosticInfos */
659   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
660 }
661 gint ett_opcua_ModifyMonitoredItemsRequest = -1;
662 void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
663 {
664   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifyMonitoredItemsRequest");
665   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifyMonitoredItemsRequest);
666
667   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
668   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
669   parseTimestampsToReturn(subtree, tvb, pOffset);
670   /* Array length field ignored: NoOfItemsToModify */
671   parseArrayComplex(subtree, tvb, pOffset, "ItemsToModify", parseMonitoredItemModifyRequest);
672 }
673 gint ett_opcua_ModifyMonitoredItemsResponse = -1;
674 void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
675 {
676   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifyMonitoredItemsResponse");
677   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifyMonitoredItemsResponse);
678
679   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
680   /* Array length field ignored: NoOfResults */
681   parseArrayComplex(subtree, tvb, pOffset, "Results", parseMonitoredItemModifyResult);
682   /* Array length field ignored: NoOfDiagnosticInfos */
683   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
684 }
685 gint ett_opcua_SetMonitoringModeRequest = -1;
686 void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
687 {
688   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetMonitoringModeRequest");
689   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetMonitoringModeRequest);
690
691   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
692   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
693   parseMonitoringMode(subtree, tvb, pOffset);
694   /* Array length field ignored: NoOfMonitoredItemIds */
695   parseArraySimple(subtree, tvb, pOffset, hf_opcua_MonitoredItemIds, parseUInt32);
696 }
697 gint ett_opcua_SetMonitoringModeResponse = -1;
698 void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
699 {
700   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetMonitoringModeResponse");
701   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetMonitoringModeResponse);
702
703   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
704   /* Array length field ignored: NoOfResults */
705   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
706   /* Array length field ignored: NoOfDiagnosticInfos */
707   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
708 }
709 gint ett_opcua_SetTriggeringRequest = -1;
710 void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
711 {
712   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetTriggeringRequest");
713   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetTriggeringRequest);
714
715   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
716   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
717   parseUInt32(subtree, tvb, pOffset, hf_opcua_TriggeringItemId);
718   /* Array length field ignored: NoOfLinksToAdd */
719   parseArraySimple(subtree, tvb, pOffset, hf_opcua_LinksToAdd, parseUInt32);
720   /* Array length field ignored: NoOfLinksToRemove */
721   parseArraySimple(subtree, tvb, pOffset, hf_opcua_LinksToRemove, parseUInt32);
722 }
723 gint ett_opcua_SetTriggeringResponse = -1;
724 void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
725 {
726   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetTriggeringResponse");
727   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetTriggeringResponse);
728
729   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
730   /* Array length field ignored: NoOfAddResults */
731   parseArraySimple(subtree, tvb, pOffset, hf_opcua_AddResults, parseStatusCode);
732   /* Array length field ignored: NoOfAddDiagnosticInfos */
733   parseArrayComplex(subtree, tvb, pOffset, "AddDiagnosticInfos", parseDiagnosticInfo);
734   /* Array length field ignored: NoOfRemoveResults */
735   parseArraySimple(subtree, tvb, pOffset, hf_opcua_RemoveResults, parseStatusCode);
736   /* Array length field ignored: NoOfRemoveDiagnosticInfos */
737   parseArrayComplex(subtree, tvb, pOffset, "RemoveDiagnosticInfos", parseDiagnosticInfo);
738 }
739 gint ett_opcua_DeleteMonitoredItemsRequest = -1;
740 void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
741 {
742   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteMonitoredItemsRequest");
743   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteMonitoredItemsRequest);
744
745   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
746   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
747   /* Array length field ignored: NoOfMonitoredItemIds */
748   parseArraySimple(subtree, tvb, pOffset, hf_opcua_MonitoredItemIds, parseUInt32);
749 }
750 gint ett_opcua_DeleteMonitoredItemsResponse = -1;
751 void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
752 {
753   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteMonitoredItemsResponse");
754   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteMonitoredItemsResponse);
755
756   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
757   /* Array length field ignored: NoOfResults */
758   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
759   /* Array length field ignored: NoOfDiagnosticInfos */
760   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
761 }
762 gint ett_opcua_CreateSubscriptionRequest = -1;
763 void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
764 {
765   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSubscriptionRequest");
766   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSubscriptionRequest);
767
768   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
769   parseDouble(subtree, tvb, pOffset, hf_opcua_RequestedPublishingInterval);
770   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedLifetimeCount);
771   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedMaxKeepAliveCount);
772   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxNotificationsPerPublish);
773   parseBoolean(subtree, tvb, pOffset, hf_opcua_PublishingEnabled);
774   parseByte(subtree, tvb, pOffset, hf_opcua_Priority);
775 }
776 gint ett_opcua_CreateSubscriptionResponse = -1;
777 void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
778 {
779   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSubscriptionResponse");
780   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSubscriptionResponse);
781
782   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
783   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
784   parseDouble(subtree, tvb, pOffset, hf_opcua_RevisedPublishingInterval);
785   parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedLifetimeCount);
786   parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedMaxKeepAliveCount);
787 }
788 gint ett_opcua_ModifySubscriptionRequest = -1;
789 void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
790 {
791   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifySubscriptionRequest");
792   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifySubscriptionRequest);
793
794   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
795   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
796   parseDouble(subtree, tvb, pOffset, hf_opcua_RequestedPublishingInterval);
797   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedLifetimeCount);
798   parseUInt32(subtree, tvb, pOffset, hf_opcua_RequestedMaxKeepAliveCount);
799   parseUInt32(subtree, tvb, pOffset, hf_opcua_MaxNotificationsPerPublish);
800   parseByte(subtree, tvb, pOffset, hf_opcua_Priority);
801 }
802 gint ett_opcua_ModifySubscriptionResponse = -1;
803 void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
804 {
805   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifySubscriptionResponse");
806   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifySubscriptionResponse);
807
808   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
809   parseDouble(subtree, tvb, pOffset, hf_opcua_RevisedPublishingInterval);
810   parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedLifetimeCount);
811   parseUInt32(subtree, tvb, pOffset, hf_opcua_RevisedMaxKeepAliveCount);
812 }
813 gint ett_opcua_SetPublishingModeRequest = -1;
814 void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
815 {
816   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetPublishingModeRequest");
817   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetPublishingModeRequest);
818
819   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
820   parseBoolean(subtree, tvb, pOffset, hf_opcua_PublishingEnabled);
821   /* Array length field ignored: NoOfSubscriptionIds */
822   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SubscriptionIds, parseUInt32);
823 }
824 gint ett_opcua_SetPublishingModeResponse = -1;
825 void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
826 {
827   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetPublishingModeResponse");
828   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetPublishingModeResponse);
829
830   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
831   /* Array length field ignored: NoOfResults */
832   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
833   /* Array length field ignored: NoOfDiagnosticInfos */
834   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
835 }
836 gint ett_opcua_PublishRequest = -1;
837 void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
838 {
839   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "PublishRequest");
840   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PublishRequest);
841
842   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
843   /* Array length field ignored: NoOfSubscriptionAcknowledgements */
844   parseArrayComplex(subtree, tvb, pOffset, "SubscriptionAcknowledgements", parseSubscriptionAcknowledgement);
845 }
846 gint ett_opcua_PublishResponse = -1;
847 void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
848 {
849   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "PublishResponse");
850   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PublishResponse);
851
852   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
853   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
854   /* Array length field ignored: NoOfAvailableSequenceNumbers */
855   parseArraySimple(subtree, tvb, pOffset, hf_opcua_AvailableSequenceNumbers, parseUInt32);
856   parseBoolean(subtree, tvb, pOffset, hf_opcua_MoreNotifications);
857   parseNotificationMessage(subtree, tvb, pOffset, "NotificationMessage");
858   /* Array length field ignored: NoOfResults */
859   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
860   /* Array length field ignored: NoOfDiagnosticInfos */
861   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
862 }
863 gint ett_opcua_RepublishRequest = -1;
864 void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
865 {
866   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RepublishRequest");
867   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RepublishRequest);
868
869   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
870   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
871   parseUInt32(subtree, tvb, pOffset, hf_opcua_RetransmitSequenceNumber);
872 }
873 gint ett_opcua_RepublishResponse = -1;
874 void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
875 {
876   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RepublishResponse");
877   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RepublishResponse);
878
879   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
880   parseNotificationMessage(subtree, tvb, pOffset, "NotificationMessage");
881 }
882 gint ett_opcua_TransferSubscriptionsRequest = -1;
883 void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
884 {
885   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TransferSubscriptionsRequest");
886   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferSubscriptionsRequest);
887
888   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
889   /* Array length field ignored: NoOfSubscriptionIds */
890   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SubscriptionIds, parseUInt32);
891   parseBoolean(subtree, tvb, pOffset, hf_opcua_SendInitialValues);
892 }
893 gint ett_opcua_TransferSubscriptionsResponse = -1;
894 void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
895 {
896   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TransferSubscriptionsResponse");
897   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferSubscriptionsResponse);
898
899   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
900   /* Array length field ignored: NoOfResults */
901   parseArrayComplex(subtree, tvb, pOffset, "Results", parseTransferResult);
902   /* Array length field ignored: NoOfDiagnosticInfos */
903   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
904 }
905 gint ett_opcua_DeleteSubscriptionsRequest = -1;
906 void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
907 {
908   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteSubscriptionsRequest");
909   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteSubscriptionsRequest);
910
911   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
912   /* Array length field ignored: NoOfSubscriptionIds */
913   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SubscriptionIds, parseUInt32);
914 }
915 gint ett_opcua_DeleteSubscriptionsResponse = -1;
916 void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
917 {
918   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteSubscriptionsResponse");
919   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteSubscriptionsResponse);
920
921   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
922   /* Array length field ignored: NoOfResults */
923   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
924   /* Array length field ignored: NoOfDiagnosticInfos */
925   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);
926 }
927
928 /** Setup protocol subtree array */
929 static gint *ett[] =
930 {
931   &ett_opcua_TestStackRequest,
932   &ett_opcua_TestStackResponse,
933   &ett_opcua_TestStackExRequest,
934   &ett_opcua_TestStackExResponse,
935   &ett_opcua_FindServersRequest,
936   &ett_opcua_FindServersResponse,
937   &ett_opcua_GetEndpointsRequest,
938   &ett_opcua_GetEndpointsResponse,
939   &ett_opcua_RegisterServerRequest,
940   &ett_opcua_RegisterServerResponse,
941   &ett_opcua_OpenSecureChannelRequest,
942   &ett_opcua_OpenSecureChannelResponse,
943   &ett_opcua_CloseSecureChannelRequest,
944   &ett_opcua_CloseSecureChannelResponse,
945   &ett_opcua_CreateSessionRequest,
946   &ett_opcua_CreateSessionResponse,
947   &ett_opcua_ActivateSessionRequest,
948   &ett_opcua_ActivateSessionResponse,
949   &ett_opcua_CloseSessionRequest,
950   &ett_opcua_CloseSessionResponse,
951   &ett_opcua_CancelRequest,
952   &ett_opcua_CancelResponse,
953   &ett_opcua_AddNodesRequest,
954   &ett_opcua_AddNodesResponse,
955   &ett_opcua_AddReferencesRequest,
956   &ett_opcua_AddReferencesResponse,
957   &ett_opcua_DeleteNodesRequest,
958   &ett_opcua_DeleteNodesResponse,
959   &ett_opcua_DeleteReferencesRequest,
960   &ett_opcua_DeleteReferencesResponse,
961   &ett_opcua_BrowseRequest,
962   &ett_opcua_BrowseResponse,
963   &ett_opcua_BrowseNextRequest,
964   &ett_opcua_BrowseNextResponse,
965   &ett_opcua_TranslateBrowsePathsToNodeIdsRequest,
966   &ett_opcua_TranslateBrowsePathsToNodeIdsResponse,
967   &ett_opcua_RegisterNodesRequest,
968   &ett_opcua_RegisterNodesResponse,
969   &ett_opcua_UnregisterNodesRequest,
970   &ett_opcua_UnregisterNodesResponse,
971   &ett_opcua_QueryFirstRequest,
972   &ett_opcua_QueryFirstResponse,
973   &ett_opcua_QueryNextRequest,
974   &ett_opcua_QueryNextResponse,
975   &ett_opcua_ReadRequest,
976   &ett_opcua_ReadResponse,
977   &ett_opcua_HistoryReadRequest,
978   &ett_opcua_HistoryReadResponse,
979   &ett_opcua_WriteRequest,
980   &ett_opcua_WriteResponse,
981   &ett_opcua_HistoryUpdateRequest,
982   &ett_opcua_HistoryUpdateResponse,
983   &ett_opcua_CallRequest,
984   &ett_opcua_CallResponse,
985   &ett_opcua_CreateMonitoredItemsRequest,
986   &ett_opcua_CreateMonitoredItemsResponse,
987   &ett_opcua_ModifyMonitoredItemsRequest,
988   &ett_opcua_ModifyMonitoredItemsResponse,
989   &ett_opcua_SetMonitoringModeRequest,
990   &ett_opcua_SetMonitoringModeResponse,
991   &ett_opcua_SetTriggeringRequest,
992   &ett_opcua_SetTriggeringResponse,
993   &ett_opcua_DeleteMonitoredItemsRequest,
994   &ett_opcua_DeleteMonitoredItemsResponse,
995   &ett_opcua_CreateSubscriptionRequest,
996   &ett_opcua_CreateSubscriptionResponse,
997   &ett_opcua_ModifySubscriptionRequest,
998   &ett_opcua_ModifySubscriptionResponse,
999   &ett_opcua_SetPublishingModeRequest,
1000   &ett_opcua_SetPublishingModeResponse,
1001   &ett_opcua_PublishRequest,
1002   &ett_opcua_PublishResponse,
1003   &ett_opcua_RepublishRequest,
1004   &ett_opcua_RepublishResponse,
1005   &ett_opcua_TransferSubscriptionsRequest,
1006   &ett_opcua_TransferSubscriptionsResponse,
1007   &ett_opcua_DeleteSubscriptionsRequest,
1008   &ett_opcua_DeleteSubscriptionsResponse,
1009 };
1010
1011 void registerServiceTypes(void)
1012 {
1013   proto_register_subtree_array(ett, array_length(ett));
1014 }
1015