from Gerhard Gappmeier (ascolab):
[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 <gmodule.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 \r
37 gint ett_opcua_TestStackRequest = -1;\r
38 void parseTestStackRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
39 {\r
40   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackRequest");\r
41   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackRequest);\r
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");\r
47 }\r
48 \r
49 gint ett_opcua_TestStackResponse = -1;\r
50 void parseTestStackResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
51 {\r
52   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackResponse");\r
53   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackResponse);\r
54
55   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
56   parseVariant(subtree, tvb, pOffset, "Output");\r
57 }\r
58 \r
59 gint ett_opcua_TestStackExRequest = -1;\r
60 void parseTestStackExRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
61 {\r
62   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackExRequest");\r
63   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackExRequest);\r
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");\r
69 }\r
70 \r
71 gint ett_opcua_TestStackExResponse = -1;\r
72 void parseTestStackExResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
73 {\r
74   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TestStackExResponse");\r
75   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TestStackExResponse);\r
76
77   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
78   parseExtensionObject(subtree, tvb, pOffset, "Output");\r
79 }\r
80 \r
81 gint ett_opcua_FindServersRequest = -1;\r
82 void parseFindServersRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
83 {\r
84   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "FindServersRequest");\r
85   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FindServersRequest);\r
86
87   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
88   parseArrayComplex(subtree, tvb, pOffset, "LocaleIds", parseLocalizedText);
89   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ServerUris, parseString);\r
90 }\r
91 \r
92 gint ett_opcua_FindServersResponse = -1;\r
93 void parseFindServersResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
94 {\r
95   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "FindServersResponse");\r
96   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_FindServersResponse);\r
97
98   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
99   parseArrayComplex(subtree, tvb, pOffset, "Servers", parseServerDescription);\r
100 }\r
101 \r
102 gint ett_opcua_GetEndpointsRequest = -1;\r
103 void parseGetEndpointsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
104 {\r
105   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "GetEndpointsRequest");\r
106   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_GetEndpointsRequest);\r
107
108   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
109   parseArrayComplex(subtree, tvb, pOffset, "LocaleIds", parseLocalizedText);
110   parseArraySimple(subtree, tvb, pOffset, hf_opcua_ProfileUris, parseString);\r
111 }\r
112 \r
113 gint ett_opcua_GetEndpointsResponse = -1;\r
114 void parseGetEndpointsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
115 {\r
116   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "GetEndpointsResponse");\r
117   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_GetEndpointsResponse);\r
118
119   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
120   parseArrayComplex(subtree, tvb, pOffset, "Endpoints", parseEndpointDescription);\r
121 }\r
122 \r
123 gint ett_opcua_RegisterServerRequest = -1;\r
124 void parseRegisterServerRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
125 {\r
126   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RegisterServerRequest");\r
127   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterServerRequest);\r
128
129   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
130   parseRegisteredServer(subtree, tvb, pOffset, "Server");\r
131 }\r
132 \r
133 gint ett_opcua_RegisterServerResponse = -1;\r
134 void parseRegisterServerResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
135 {\r
136   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RegisterServerResponse");\r
137   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RegisterServerResponse);\r
138
139   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");\r
140 }\r
141 \r
142 gint ett_opcua_OpenSecureChannelRequest = -1;\r
143 void parseOpenSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
144 {\r
145   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "OpenSecureChannelRequest");\r
146   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_OpenSecureChannelRequest);\r
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);\r
157 }\r
158 \r
159 gint ett_opcua_OpenSecureChannelResponse = -1;\r
160 void parseOpenSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
161 {\r
162   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "OpenSecureChannelResponse");\r
163   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_OpenSecureChannelResponse);\r
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);\r
169 }\r
170 \r
171 gint ett_opcua_CloseSecureChannelRequest = -1;\r
172 void parseCloseSecureChannelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
173 {\r
174   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSecureChannelRequest");\r
175   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSecureChannelRequest);\r
176
177   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
178   parseGuid(subtree, tvb, pOffset, hf_opcua_SecureChannelId);\r
179 }\r
180 \r
181 gint ett_opcua_CloseSecureChannelResponse = -1;\r
182 void parseCloseSecureChannelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
183 {\r
184   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSecureChannelResponse");\r
185   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSecureChannelResponse);\r
186
187   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");\r
188 }\r
189 \r
190 gint ett_opcua_CreateSessionRequest = -1;\r
191 void parseCreateSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
192 {\r
193   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSessionRequest");\r
194   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSessionRequest);\r
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);\r
201 }\r
202 \r
203 gint ett_opcua_CreateSessionResponse = -1;\r
204 void parseCreateSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
205 {\r
206   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSessionResponse");\r
207   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSessionResponse);\r
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");\r
216 }\r
217 \r
218 gint ett_opcua_ActivateSessionRequest = -1;\r
219 void parseActivateSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
220 {\r
221   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ActivateSessionRequest");\r
222   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ActivateSessionRequest);\r
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");\r
230 }\r
231 \r
232 gint ett_opcua_ActivateSessionResponse = -1;\r
233 void parseActivateSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
234 {\r
235   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ActivateSessionResponse");\r
236   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ActivateSessionResponse);\r
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);\r
242 }\r
243 \r
244 gint ett_opcua_CloseSessionRequest = -1;\r
245 void parseCloseSessionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
246 {\r
247   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSessionRequest");\r
248   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSessionRequest);\r
249
250   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");\r
251 }\r
252 \r
253 gint ett_opcua_CloseSessionResponse = -1;\r
254 void parseCloseSessionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
255 {\r
256   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CloseSessionResponse");\r
257   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CloseSessionResponse);\r
258
259   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");\r
260 }\r
261 \r
262 gint ett_opcua_CancelRequest = -1;\r
263 void parseCancelRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
264 {\r
265   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CancelRequest");\r
266   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CancelRequest);\r
267
268   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
269   parseUInt32(subtree, tvb, pOffset, hf_opcua_SequenceNumber);\r
270 }\r
271 \r
272 gint ett_opcua_CancelResponse = -1;\r
273 void parseCancelResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
274 {\r
275   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CancelResponse");\r
276   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CancelResponse);\r
277
278   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");\r
279 }\r
280 \r
281 gint ett_opcua_AddNodesRequest = -1;\r
282 void parseAddNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
283 {\r
284   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddNodesRequest");\r
285   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesRequest);\r
286
287   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
288   parseArrayComplex(subtree, tvb, pOffset, "NodesToAdd", parseAddNodesItem);\r
289 }\r
290 \r
291 gint ett_opcua_AddNodesResponse = -1;\r
292 void parseAddNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
293 {\r
294   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddNodesResponse");\r
295   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddNodesResponse);\r
296
297   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
298   parseArrayComplex(subtree, tvb, pOffset, "Results", parseAddNodesResult);
299   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
300 }\r
301 \r
302 gint ett_opcua_AddReferencesRequest = -1;\r
303 void parseAddReferencesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
304 {\r
305   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddReferencesRequest");\r
306   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesRequest);\r
307
308   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
309   parseArrayComplex(subtree, tvb, pOffset, "ReferencesToAdd", parseAddReferencesItem);\r
310 }\r
311 \r
312 gint ett_opcua_AddReferencesResponse = -1;\r
313 void parseAddReferencesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
314 {\r
315   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "AddReferencesResponse");\r
316   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_AddReferencesResponse);\r
317
318   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
319   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
320   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
321 }\r
322 \r
323 gint ett_opcua_DeleteNodesRequest = -1;\r
324 void parseDeleteNodesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
325 {\r
326   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteNodesRequest");\r
327   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesRequest);\r
328
329   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
330   parseArrayComplex(subtree, tvb, pOffset, "NodesToDelete", parseDeleteNodesItem);\r
331 }\r
332 \r
333 gint ett_opcua_DeleteNodesResponse = -1;\r
334 void parseDeleteNodesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
335 {\r
336   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteNodesResponse");\r
337   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteNodesResponse);\r
338
339   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
340   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
341   parseArrayComplex(subtree, tvb, pOffset, "Diagnostics", parseDiagnosticInfo);\r
342 }\r
343 \r
344 gint ett_opcua_DeleteReferencesRequest = -1;\r
345 void parseDeleteReferencesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
346 {\r
347   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteReferencesRequest");\r
348   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesRequest);\r
349
350   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
351   parseArrayComplex(subtree, tvb, pOffset, "ReferencesToDelete", parseDeleteReferencesItem);\r
352 }\r
353 \r
354 gint ett_opcua_DeleteReferencesResponse = -1;\r
355 void parseDeleteReferencesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
356 {\r
357   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteReferencesResponse");\r
358   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteReferencesResponse);\r
359
360   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
361   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
362   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
363 }\r
364 \r
365 gint ett_opcua_BrowsePropertiesRequest = -1;\r
366 void parseBrowsePropertiesRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
367 {\r
368   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowsePropertiesRequest");\r
369   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePropertiesRequest);\r
370
371   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
372   parseArrayComplex(subtree, tvb, pOffset, "NodesToAccess", parseNodeId);
373   parseArrayComplex(subtree, tvb, pOffset, "Properties", parseQualifiedName);\r
374 }\r
375 \r
376 gint ett_opcua_BrowsePropertiesResponse = -1;\r
377 void parseBrowsePropertiesResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
378 {\r
379   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowsePropertiesResponse");\r
380   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowsePropertiesResponse);\r
381
382   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
383   parseArrayComplex(subtree, tvb, pOffset, "NodeResults", parseBrowsePropertiesResult);
384   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
385 }\r
386 \r
387 gint ett_opcua_BrowseRequest = -1;\r
388 void parseBrowseRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
389 {\r
390   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseRequest");\r
391   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseRequest);\r
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);\r
401 }\r
402 \r
403 gint ett_opcua_BrowseResponse = -1;\r
404 void parseBrowseResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
405 {\r
406   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseResponse");\r
407   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseResponse);\r
408
409   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
410   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);
411   parseArrayComplex(subtree, tvb, pOffset, "References", parseReferenceDescription);\r
412 }\r
413 \r
414 gint ett_opcua_BrowseNextRequest = -1;\r
415 void parseBrowseNextRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
416 {\r
417   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseNextRequest");\r
418   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseNextRequest);\r
419
420   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
421   parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoint);
422   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);\r
423 }\r
424 \r
425 gint ett_opcua_BrowseNextResponse = -1;\r
426 void parseBrowseNextResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
427 {\r
428   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "BrowseNextResponse");\r
429   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_BrowseNextResponse);\r
430
431   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
432   parseByteString(subtree, tvb, pOffset, hf_opcua_RevisedContinuationPoint);
433   parseArrayComplex(subtree, tvb, pOffset, "References", parseReferenceDescription);\r
434 }\r
435 \r
436 gint ett_opcua_TranslateBrowsePathsToNodeIdsRequest = -1;\r
437 void parseTranslateBrowsePathsToNodeIdsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
438 {\r
439   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TranslateBrowsePathsToNodeIdsRequest");\r
440   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathsToNodeIdsRequest);\r
441
442   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
443   parseArrayComplex(subtree, tvb, pOffset, "BrowsePaths", parseBrowsePath);\r
444 }\r
445 \r
446 gint ett_opcua_TranslateBrowsePathsToNodeIdsResponse = -1;\r
447 void parseTranslateBrowsePathsToNodeIdsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
448 {\r
449   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TranslateBrowsePathsToNodeIdsResponse");\r
450   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TranslateBrowsePathsToNodeIdsResponse);\r
451
452   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
453   parseArrayComplex(subtree, tvb, pOffset, "Results", parseTranslateBrowsePathResult);
454   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
455 }\r
456 \r
457 gint ett_opcua_QueryFirstRequest = -1;\r
458 void parseQueryFirstRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
459 {\r
460   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryFirstRequest");\r
461   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryFirstRequest);\r
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);\r
471 }\r
472 \r
473 gint ett_opcua_QueryFirstResponse = -1;\r
474 void parseQueryFirstResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
475 {\r
476   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryFirstResponse");\r
477   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryFirstResponse);\r
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");\r
485 }\r
486 \r
487 gint ett_opcua_QueryNextRequest = -1;\r
488 void parseQueryNextRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
489 {\r
490   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryNextRequest");\r
491   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryNextRequest);\r
492
493   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
494   parseBoolean(subtree, tvb, pOffset, hf_opcua_ReleaseContinuationPoint);
495   parseByteString(subtree, tvb, pOffset, hf_opcua_ContinuationPoint);\r
496 }\r
497 \r
498 gint ett_opcua_QueryNextResponse = -1;\r
499 void parseQueryNextResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
500 {\r
501   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "QueryNextResponse");\r
502   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_QueryNextResponse);\r
503
504   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
505   parseArrayComplex(subtree, tvb, pOffset, "QueryDataSets", parseQueryDataSet);
506   parseByteString(subtree, tvb, pOffset, hf_opcua_RevisedContinuationPoint);\r
507 }\r
508 \r
509 gint ett_opcua_ReadRequest = -1;\r
510 void parseReadRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
511 {\r
512   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ReadRequest");\r
513   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadRequest);\r
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);\r
519 }\r
520 \r
521 gint ett_opcua_ReadResponse = -1;\r
522 void parseReadResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
523 {\r
524   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ReadResponse");\r
525   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ReadResponse);\r
526
527   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
528   parseArrayComplex(subtree, tvb, pOffset, "Results", parseDataValue);
529   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
530 }\r
531 \r
532 gint ett_opcua_HistoryReadRequest = -1;\r
533 void parseHistoryReadRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
534 {\r
535   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryReadRequest");\r
536   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadRequest);\r
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);\r
543 }\r
544 \r
545 gint ett_opcua_HistoryReadResponse = -1;\r
546 void parseHistoryReadResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
547 {\r
548   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryReadResponse");\r
549   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryReadResponse);\r
550
551   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
552   parseArrayComplex(subtree, tvb, pOffset, "Results", parseHistoryReadResult);
553   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
554 }\r
555 \r
556 gint ett_opcua_WriteRequest = -1;\r
557 void parseWriteRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
558 {\r
559   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "WriteRequest");\r
560   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteRequest);\r
561
562   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
563   parseArrayComplex(subtree, tvb, pOffset, "NodesToWrite", parseWriteValue);\r
564 }\r
565 \r
566 gint ett_opcua_WriteResponse = -1;\r
567 void parseWriteResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
568 {\r
569   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "WriteResponse");\r
570   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_WriteResponse);\r
571
572   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
573   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
574   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
575 }\r
576 \r
577 gint ett_opcua_HistoryUpdateRequest = -1;\r
578 void parseHistoryUpdateRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
579 {\r
580   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryUpdateRequest");\r
581   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateRequest);\r
582
583   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
584   parseArrayComplex(subtree, tvb, pOffset, "HistoryUpdateDetails", parseExtensionObject);\r
585 }\r
586 \r
587 gint ett_opcua_HistoryUpdateResponse = -1;\r
588 void parseHistoryUpdateResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
589 {\r
590   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "HistoryUpdateResponse");\r
591   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_HistoryUpdateResponse);\r
592
593   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
594   parseArrayComplex(subtree, tvb, pOffset, "Results", parseHistoryUpdateResult);
595   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
596 }\r
597 \r
598 gint ett_opcua_CallRequest = -1;\r
599 void parseCallRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
600 {\r
601   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CallRequest");\r
602   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallRequest);\r
603
604   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
605   parseArrayComplex(subtree, tvb, pOffset, "MethodsToCall", parseCallRequestItem);\r
606 }\r
607 \r
608 gint ett_opcua_CallResponse = -1;\r
609 void parseCallResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
610 {\r
611   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CallResponse");\r
612   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CallResponse);\r
613
614   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
615   parseArrayComplex(subtree, tvb, pOffset, "Results", parseCallResultItem);
616   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
617 }\r
618 \r
619 gint ett_opcua_CreateMonitoredItemsRequest = -1;\r
620 void parseCreateMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
621 {\r
622   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateMonitoredItemsRequest");\r
623   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateMonitoredItemsRequest);\r
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);\r
629 }\r
630 \r
631 gint ett_opcua_CreateMonitoredItemsResponse = -1;\r
632 void parseCreateMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
633 {\r
634   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateMonitoredItemsResponse");\r
635   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateMonitoredItemsResponse);\r
636
637   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
638   parseArrayComplex(subtree, tvb, pOffset, "Results", parseMonitoredItemCreateResult);
639   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
640 }\r
641 \r
642 gint ett_opcua_ModifyMonitoredItemsRequest = -1;\r
643 void parseModifyMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
644 {\r
645   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifyMonitoredItemsRequest");\r
646   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifyMonitoredItemsRequest);\r
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);\r
652 }\r
653 \r
654 gint ett_opcua_ModifyMonitoredItemsResponse = -1;\r
655 void parseModifyMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
656 {\r
657   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifyMonitoredItemsResponse");\r
658   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifyMonitoredItemsResponse);\r
659
660   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
661   parseArrayComplex(subtree, tvb, pOffset, "Results", parseMonitoredItemModifyResult);
662   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
663 }\r
664 \r
665 gint ett_opcua_SetMonitoringModeRequest = -1;\r
666 void parseSetMonitoringModeRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
667 {\r
668   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetMonitoringModeRequest");\r
669   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetMonitoringModeRequest);\r
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);\r
675 }\r
676 \r
677 gint ett_opcua_SetMonitoringModeResponse = -1;\r
678 void parseSetMonitoringModeResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
679 {\r
680   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetMonitoringModeResponse");\r
681   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetMonitoringModeResponse);\r
682
683   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
684   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
685   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
686 }\r
687 \r
688 gint ett_opcua_SetTriggeringRequest = -1;\r
689 void parseSetTriggeringRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
690 {\r
691   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetTriggeringRequest");\r
692   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetTriggeringRequest);\r
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);\r
699 }\r
700 \r
701 gint ett_opcua_SetTriggeringResponse = -1;\r
702 void parseSetTriggeringResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
703 {\r
704   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetTriggeringResponse");\r
705   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetTriggeringResponse);\r
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);\r
712 }\r
713 \r
714 gint ett_opcua_DeleteMonitoredItemsRequest = -1;\r
715 void parseDeleteMonitoredItemsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
716 {\r
717   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteMonitoredItemsRequest");\r
718   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteMonitoredItemsRequest);\r
719
720   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
721   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
722   parseArraySimple(subtree, tvb, pOffset, hf_opcua_MonitoredItemIds, parseUInt32);\r
723 }\r
724 \r
725 gint ett_opcua_DeleteMonitoredItemsResponse = -1;\r
726 void parseDeleteMonitoredItemsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
727 {\r
728   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteMonitoredItemsResponse");\r
729   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteMonitoredItemsResponse);\r
730
731   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
732   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
733   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
734 }\r
735 \r
736 gint ett_opcua_CreateSubscriptionRequest = -1;\r
737 void parseCreateSubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
738 {\r
739   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSubscriptionRequest");\r
740   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSubscriptionRequest);\r
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);\r
748 }\r
749 \r
750 gint ett_opcua_CreateSubscriptionResponse = -1;\r
751 void parseCreateSubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
752 {\r
753   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "CreateSubscriptionResponse");\r
754   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_CreateSubscriptionResponse);\r
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);\r
761 }\r
762 \r
763 gint ett_opcua_ModifySubscriptionRequest = -1;\r
764 void parseModifySubscriptionRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
765 {\r
766   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifySubscriptionRequest");\r
767   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifySubscriptionRequest);\r
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);\r
775 }\r
776 \r
777 gint ett_opcua_ModifySubscriptionResponse = -1;\r
778 void parseModifySubscriptionResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
779 {\r
780   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "ModifySubscriptionResponse");\r
781   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_ModifySubscriptionResponse);\r
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);\r
787 }\r
788 \r
789 gint ett_opcua_SetPublishingModeRequest = -1;\r
790 void parseSetPublishingModeRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
791 {\r
792   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetPublishingModeRequest");\r
793   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetPublishingModeRequest);\r
794
795   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
796   parseBoolean(subtree, tvb, pOffset, hf_opcua_PublishingEnabled);
797   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SubscriptionIds, parseUInt32);\r
798 }\r
799 \r
800 gint ett_opcua_SetPublishingModeResponse = -1;\r
801 void parseSetPublishingModeResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
802 {\r
803   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "SetPublishingModeResponse");\r
804   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_SetPublishingModeResponse);\r
805
806   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
807   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
808   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
809 }\r
810 \r
811 gint ett_opcua_PublishRequest = -1;\r
812 void parsePublishRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
813 {\r
814   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "PublishRequest");\r
815   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PublishRequest);\r
816
817   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
818   parseArrayComplex(subtree, tvb, pOffset, "SubscriptionAcknowledgements", parseSubscriptionAcknowledgement);\r
819 }\r
820 \r
821 gint ett_opcua_PublishResponse = -1;\r
822 void parsePublishResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
823 {\r
824   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "PublishResponse");\r
825   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_PublishResponse);\r
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);\r
834 }\r
835 \r
836 gint ett_opcua_RepublishRequest = -1;\r
837 void parseRepublishRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
838 {\r
839   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RepublishRequest");\r
840   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RepublishRequest);\r
841
842   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
843   parseUInt32(subtree, tvb, pOffset, hf_opcua_SubscriptionId);
844   parseUInt32(subtree, tvb, pOffset, hf_opcua_RetransmitSequenceNumber);\r
845 }\r
846 \r
847 gint ett_opcua_RepublishResponse = -1;\r
848 void parseRepublishResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
849 {\r
850   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "RepublishResponse");\r
851   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_RepublishResponse);\r
852
853   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
854   parseNotificationMessage(subtree, tvb, pOffset, "NotificationMessage");\r
855 }\r
856 \r
857 gint ett_opcua_TransferSubscriptionsRequest = -1;\r
858 void parseTransferSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
859 {\r
860   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TransferSubscriptionsRequest");\r
861   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferSubscriptionsRequest);\r
862
863   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
864   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SubscriptionIds, parseUInt32);\r
865 }\r
866 \r
867 gint ett_opcua_TransferSubscriptionsResponse = -1;\r
868 void parseTransferSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
869 {\r
870   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "TransferSubscriptionsResponse");\r
871   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_TransferSubscriptionsResponse);\r
872
873   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
874   parseArrayComplex(subtree, tvb, pOffset, "Results", parseTransferResult);
875   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
876 }\r
877 \r
878 gint ett_opcua_DeleteSubscriptionsRequest = -1;\r
879 void parseDeleteSubscriptionsRequest(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
880 {\r
881   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteSubscriptionsRequest");\r
882   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteSubscriptionsRequest);\r
883
884   parseRequestHeader(subtree, tvb, pOffset, "RequestHeader");
885   parseArraySimple(subtree, tvb, pOffset, hf_opcua_SubscriptionIds, parseUInt32);\r
886 }\r
887 \r
888 gint ett_opcua_DeleteSubscriptionsResponse = -1;\r
889 void parseDeleteSubscriptionsResponse(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)\r
890 {\r
891   proto_item *ti = proto_tree_add_text(tree, tvb, 0, -1, "DeleteSubscriptionsResponse");\r
892   proto_tree *subtree = proto_item_add_subtree(ti, ett_opcua_DeleteSubscriptionsResponse);\r
893
894   parseResponseHeader(subtree, tvb, pOffset, "ResponseHeader");
895   parseArraySimple(subtree, tvb, pOffset, hf_opcua_Results, parseStatusCode);
896   parseArrayComplex(subtree, tvb, pOffset, "DiagnosticInfos", parseDiagnosticInfo);\r
897 }\r
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