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