open62541 1.3.12
Open source implementation of OPC UA
Loading...
Searching...
No Matches
server.h
Go to the documentation of this file.
1/** This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
4 *
5 * Copyright 2014-2020 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
6 * Copyright 2015-2016 (c) Sten GrĂ¼ner
7 * Copyright 2014-2015, 2017 (c) Florian Palm
8 * Copyright 2015-2016 (c) Chris Iatrou
9 * Copyright 2015-2016 (c) Oleksiy Vasylyev
10 * Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
11 * Copyright 2017 (c) Henrik Norrman
12 * Copyright 2018 (c) Fabian Arndt, Root-Core
13 * Copyright 2017-2020 (c) HMS Industrial Networks AB (Author: Jonas Green)
14 * Copyright 2020-2021 (c) Christian von Arnim, ISW University of Stuttgart (for VDW and umati)
15 */
16
17#ifndef UA_SERVER_H_
18#define UA_SERVER_H_
19
20#include <open62541/util.h>
21#include <open62541/types.h>
22#include <open62541/common.h>
23#include <open62541/nodeids.h>
26
33
34#ifdef UA_ENABLE_PUBSUB
37#endif
38
39#ifdef UA_ENABLE_HISTORIZING
41#endif
42
44
45/** Forward declarations */
48
50
55
60
61
62
65 void *context; /* Used to attach custom data to a server config. This can
66 * then be retrieved e.g. in a callback that forwards a
67 * pointer to the server. */
68
69
73
74
75 /* Delay in ms from the shutdown signal (ctrl-c) until the actual shutdown.
76 * Clients need to be able to get a notification ahead of time. */
78
79
80
81 /* Verify that the server sends a timestamp in the request header */
83
84 /* Variables (that don't have a DataType of BaseDataType) must not have an
85 * empty variant value. The default behaviour is to auto-create a matching
86 * zeroed-out value for empty VariableNodes when they are added. */
88
89
91
92
96
97
100
103
104 /* Only allow the following discovery services to be executed on a
105 * SecureChannel with SecurityPolicyNone: GetEndpointsRequest,
106 * FindServersRequest and FindServersOnNetworkRequest.
107 *
108 * Only enable this option if there is no endpoint with SecurityPolicy#None
109 * in the endpoints list. The SecurityPolicy#None must be present in the
110 * securityPolicies list. */
112
114
115
117
118
121
122
124
125
126 /* Limits for SecureChannels */
129
130 /* Limits for Sessions */
133
134 /* Operation limits */
143
144 /* Limits for Requests */
146
147
148#if UA_MULTITHREADING >= 100
149 UA_Double asyncOperationTimeout; /* in ms, 0 => unlimited */
150 size_t maxAsyncOperationQueueSize; /* 0 => unlimited */
151 /* Notify workers when an async operation was enqueued */
152 UA_Server_AsyncOperationNotifyCallback asyncOperationNotifyCallback;
153#endif
154
155
156#ifdef UA_ENABLE_DISCOVERY
157 /* Timeout in seconds when to automatically remove a registered server from
158 * the list, if it doesn't re-register within the given time frame. A value
159 * of 0 disables automatic removal. Default is 60 Minutes (60*60). Must be
160 * bigger than 10 seconds, because cleanup is only triggered approximately
161 * every 10 seconds. The server will still be removed depending on the
162 * state of the semaphore file. */
164
165# ifdef UA_ENABLE_DISCOVERY_MULTICAST
166 UA_Boolean mdnsEnabled;
167 UA_MdnsDiscoveryConfiguration mdnsConfig;
168 UA_String mdnsInterfaceIP;
169# if !defined(UA_HAS_GETIFADDR)
170 size_t mdnsIpAddressListSize;
171 UA_UInt32 *mdnsIpAddressList;
172# endif
173# endif
174#endif
175
176
177#ifdef UA_ENABLE_SUBSCRIPTIONS
178 /* Limits for Subscriptions */
181 UA_DurationRange publishingIntervalLimits; /* in ms (must not be less than 5) */
186 UA_UInt32 maxRetransmissionQueueSize; /* 0 -> unlimited size */
187# ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
188 UA_UInt32 maxEventsPerNode; /* 0 -> unlimited size */
189# endif
190
191 /* Limits for MonitoredItems */
194 UA_DurationRange samplingIntervalLimits; /* in ms (must not be less than 5) */
195 UA_UInt32Range queueSizeLimits; /* Negotiated with the client */
196
197 /* Limits for PublishRequests */
199
200 /* Register MonitoredItem in Userland
201 *
202 * @param server Allows the access to the server object
203 * @param sessionId The session id, represented as an node id
204 * @param sessionContext An optional pointer to user-defined data for the
205 * specific data source
206 * @param nodeid Id of the node in question
207 * @param nodeidContext An optional pointer to user-defined data, associated
208 * with the node in the nodestore. Note that, if the node has already
209 * been removed, this value contains a NULL pointer.
210 * @param attributeId Identifies which attribute (value, data type etc.) is
211 * monitored
212 * @param removed Determines if the MonitoredItem was removed or created. */
214 const UA_NodeId *sessionId,
215 void *sessionContext,
216 const UA_NodeId *nodeId,
217 void *nodeContext,
218 UA_UInt32 attibuteId,
219 UA_Boolean removed);
220#endif
221
222
223#ifdef UA_ENABLE_PUBSUB
225#endif
226
227
228#ifdef UA_ENABLE_HISTORIZING
230
232 UA_UInt32 maxReturnDataValues; /* 0 -> unlimited size */
233
235 UA_UInt32 maxReturnEventValues; /* 0 -> unlimited size */
236
240
243
246
250#endif
251};
252
253void
255
256
257
258/** The method UA_Server_new is defined in server_config_default.h. So default
259 * plugins outside of the core library (for logging, etc) are already available
260 * during the initialization.
261 *
262 * UA_Server * UA_Server_new(void);
263 */
264
265/** Creates a new server. Moves the config into the server with a shallow copy.
266 * The config content is cleared together with the server. */
267UA_Server *
269
271
274
275/** Runs the main loop of the server. In each iteration, this calls into the
276 * networklayers to see if messages have arrived.
277 *
278 * @param server The server object.
279 * @param running The loop is run as long as *running is true.
280 * Otherwise, the server shuts down.
281 * @return Returns the statuscode of the UA_Server_run_shutdown method */
283UA_Server_run(UA_Server *server, const volatile UA_Boolean *running);
284
285/** The prologue part of UA_Server_run (no need to use if you call
286 * UA_Server_run) */
289
290/** Executes a single iteration of the server's main loop.
291 *
292 * @param server The server object.
293 * @param waitInternal Should we wait for messages in the networklayer?
294 * Otherwise, the timouts for the networklayers are set to zero.
295 * The default max wait time is 50millisec.
296 * @return Returns how long we can wait until the next scheduled
297 * callback (in ms) */
300
301/** The epilogue part of UA_Server_run (no need to use if you call
302 * UA_Server_run) */
305
306
307
308/** Add a callback for execution at a specified time. If the indicated time lies
309 * in the past, then the callback is executed at the next iteration of the
310 * server's main loop.
311 *
312 * @param server The server object.
313 * @param callback The callback that shall be added.
314 * @param data Data that is forwarded to the callback.
315 * @param date The timestamp for the execution time.
316 * @param callbackId Set to the identifier of the repeated callback . This can
317 * be used to cancel the callback later on. If the pointer is null, the
318 * identifier is not set.
319 * @return Upon success, ``UA_STATUSCODE_GOOD`` is returned. An error code
320 * otherwise. */
323 void *data, UA_DateTime date, UA_UInt64 *callbackId);
324
325/** Add a callback for cyclic repetition to the server.
326 *
327 * @param server The server object.
328 * @param callback The callback that shall be added.
329 * @param data Data that is forwarded to the callback.
330 * @param interval_ms The callback shall be repeatedly executed with the given
331 * interval (in ms). The interval must be positive. The first execution
332 * occurs at now() + interval at the latest.
333 * @param callbackId Set to the identifier of the repeated callback . This can
334 * be used to cancel the callback later on. If the pointer is null, the
335 * identifier is not set.
336 * @return Upon success, ``UA_STATUSCODE_GOOD`` is returned. An error code
337 * otherwise. */
340 void *data, UA_Double interval_ms,
341 UA_UInt64 *callbackId);
342
345 UA_Double interval_ms);
346
347/** Remove a repeated callback. Does nothing if the callback is not found.
348 *
349 * @param server The server object.
350 * @param callbackId The id of the callback */
351void UA_THREADSAFE
353
354#define UA_Server_removeRepeatedCallback(server, callbackId) \
355 UA_Server_removeCallback(server, callbackId);
356
357
358
359/** Manually close a session */
361UA_Server_closeSession(UA_Server *server, const UA_NodeId *sessionId);
362
363/** Session Parameters: Besides the user-definable session context pointer,
364 * so-called session parameters are a way to attach key-value parameters to a
365 * session. This enables "plugins" to attach data to a session without impacting
366 * the user-definedable session context pointer. */
367
370 const char *name, const UA_Variant *parameter);
371
372UA_EXPORT void UA_THREADSAFE
374 const char *name);
375
376/** Returns NULL if the session or the parameter are not defined. Returns a deep
377 * copy otherwise */
380 const char *name, UA_Variant *outParameter);
381
382/** Returns NULL if the parameter is not defined or not of the right datatype */
385 const char *name, const UA_DataType *type,
386 UA_Variant *outParameter);
387
390 const char *name, const UA_DataType *type,
391 UA_Variant *outParameter);
392
393
394/** Read an attribute of a node. The specialized functions below provide a more
395 * concise syntax.
396 *
397 * @param server The server object.
398 * @param item ReadValueIds contain the NodeId of the target node, the id of the
399 * attribute to read and (optionally) an index range to read parts
400 * of an array only. See the section on NumericRange for the format
401 * used for array ranges.
402 * @param timestamps Which timestamps to return for the attribute.
403 * @return Returns a DataValue that contains either an error code, or a variant
404 * with the attribute value and the timestamps. */
407 UA_TimestampsToReturn timestamps);
408
409/** Don't use this function. There are typed versions for every supported
410 * attribute. */
412__UA_Server_read(UA_Server *server, const UA_NodeId *nodeId,
413 UA_AttributeId attributeId, void *v);
414
416UA_Server_readNodeId(UA_Server *server, const UA_NodeId nodeId,
417 UA_NodeId *outNodeId) {
418 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODEID, outNodeId);
419}
420
422UA_Server_readNodeClass(UA_Server *server, const UA_NodeId nodeId,
423 UA_NodeClass *outNodeClass) {
424 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODECLASS,
425 outNodeClass);
426}
427
429UA_Server_readBrowseName(UA_Server *server, const UA_NodeId nodeId,
430 UA_QualifiedName *outBrowseName) {
431 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
432 outBrowseName);
433}
434
436UA_Server_readDisplayName(UA_Server *server, const UA_NodeId nodeId,
437 UA_LocalizedText *outDisplayName) {
438 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
439 outDisplayName);
440}
441
443UA_Server_readDescription(UA_Server *server, const UA_NodeId nodeId,
444 UA_LocalizedText *outDescription) {
445 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
446 outDescription);
447}
448
450UA_Server_readWriteMask(UA_Server *server, const UA_NodeId nodeId,
451 UA_UInt32 *outWriteMask) {
452 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
453 outWriteMask);
454}
455
457UA_Server_readIsAbstract(UA_Server *server, const UA_NodeId nodeId,
458 UA_Boolean *outIsAbstract) {
459 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
460 outIsAbstract);
461}
462
464UA_Server_readSymmetric(UA_Server *server, const UA_NodeId nodeId,
465 UA_Boolean *outSymmetric) {
466 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
467 outSymmetric);
468}
469
471UA_Server_readInverseName(UA_Server *server, const UA_NodeId nodeId,
472 UA_LocalizedText *outInverseName) {
473 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
474 outInverseName);
475}
476
478UA_Server_readContainsNoLoops(UA_Server *server, const UA_NodeId nodeId,
479 UA_Boolean *outContainsNoLoops) {
480 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS,
481 outContainsNoLoops);
482}
483
485UA_Server_readEventNotifier(UA_Server *server, const UA_NodeId nodeId,
486 UA_Byte *outEventNotifier) {
487 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
488 outEventNotifier);
489}
490
492UA_Server_readValue(UA_Server *server, const UA_NodeId nodeId,
493 UA_Variant *outValue) {
494 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUE, outValue);
495}
496
498UA_Server_readDataType(UA_Server *server, const UA_NodeId nodeId,
499 UA_NodeId *outDataType) {
500 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
501 outDataType);
502}
503
505UA_Server_readValueRank(UA_Server *server, const UA_NodeId nodeId,
506 UA_Int32 *outValueRank) {
507 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
508 outValueRank);
509}
510
511/** Returns a variant with an int32 array */
513UA_Server_readArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
514 UA_Variant *outArrayDimensions) {
515 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
516 outArrayDimensions);
517}
518
520UA_Server_readAccessLevel(UA_Server *server, const UA_NodeId nodeId,
521 UA_Byte *outAccessLevel) {
522 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
523 outAccessLevel);
524}
525
527UA_Server_readMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
528 UA_Double *outMinimumSamplingInterval) {
529 return __UA_Server_read(server, &nodeId,
531 outMinimumSamplingInterval);
532}
533
535UA_Server_readHistorizing(UA_Server *server, const UA_NodeId nodeId,
536 UA_Boolean *outHistorizing) {
537 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
538 outHistorizing);
539}
540
542UA_Server_readExecutable(UA_Server *server, const UA_NodeId nodeId,
543 UA_Boolean *outExecutable) {
544 return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
545 outExecutable);
546}
547
548
549
550/** Overwrite an attribute of a node. The specialized functions below provide a
551 * more concise syntax.
552 *
553 * @param server The server object.
554 * @param value WriteValues contain the NodeId of the target node, the id of the
555 * attribute to overwritten, the actual value and (optionally) an
556 * index range to replace parts of an array only. of an array only.
557 * See the section on NumericRange for the format used for array
558 * ranges.
559 * @return Returns a status code. */
562
563/** Don't use this function. There are typed versions with no additional
564 * overhead. */
566__UA_Server_write(UA_Server *server, const UA_NodeId *nodeId,
567 const UA_AttributeId attributeId,
568 const UA_DataType *attr_type, const void *attr);
569
571UA_Server_writeBrowseName(UA_Server *server, const UA_NodeId nodeId,
572 const UA_QualifiedName browseName) {
573 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
574 &UA_TYPES[UA_TYPES_QUALIFIEDNAME], &browseName);
575}
576
578UA_Server_writeDisplayName(UA_Server *server, const UA_NodeId nodeId,
579 const UA_LocalizedText displayName) {
580 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
581 &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &displayName);
582}
583
585UA_Server_writeDescription(UA_Server *server, const UA_NodeId nodeId,
586 const UA_LocalizedText description) {
587 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
588 &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &description);
589}
590
592UA_Server_writeWriteMask(UA_Server *server, const UA_NodeId nodeId,
593 const UA_UInt32 writeMask) {
594 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
595 &UA_TYPES[UA_TYPES_UINT32], &writeMask);
596}
597
599UA_Server_writeIsAbstract(UA_Server *server, const UA_NodeId nodeId,
600 const UA_Boolean isAbstract) {
601 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
602 &UA_TYPES[UA_TYPES_BOOLEAN], &isAbstract);
603}
604
606UA_Server_writeInverseName(UA_Server *server, const UA_NodeId nodeId,
607 const UA_LocalizedText inverseName) {
608 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
609 &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &inverseName);
610}
611
613UA_Server_writeEventNotifier(UA_Server *server, const UA_NodeId nodeId,
614 const UA_Byte eventNotifier) {
615 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
616 &UA_TYPES[UA_TYPES_BYTE], &eventNotifier);
617}
618
619
621UA_Server_writeValue(UA_Server *server, const UA_NodeId nodeId,
622 const UA_Variant value) {
623 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
624 &UA_TYPES[UA_TYPES_VARIANT], &value);
625}
626
627
629UA_Server_writeDataValue(UA_Server *server, const UA_NodeId nodeId,
630 const UA_DataValue value) {
631 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
632 &UA_TYPES[UA_TYPES_DATAVALUE], &value);
633}
634
636UA_Server_writeDataType(UA_Server *server, const UA_NodeId nodeId,
637 const UA_NodeId dataType) {
638 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
639 &UA_TYPES[UA_TYPES_NODEID], &dataType);
640}
641
643UA_Server_writeValueRank(UA_Server *server, const UA_NodeId nodeId,
644 const UA_Int32 valueRank) {
645 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
646 &UA_TYPES[UA_TYPES_INT32], &valueRank);
647}
648
650UA_Server_writeArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
651 const UA_Variant arrayDimensions) {
653 &UA_TYPES[UA_TYPES_VARIANT], &arrayDimensions);
654}
655
657UA_Server_writeAccessLevel(UA_Server *server, const UA_NodeId nodeId,
658 const UA_Byte accessLevel) {
659 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
660 &UA_TYPES[UA_TYPES_BYTE], &accessLevel);
661}
662
664UA_Server_writeMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
665 const UA_Double miniumSamplingInterval) {
666 return __UA_Server_write(server, &nodeId,
669 &miniumSamplingInterval);
670}
671
673UA_Server_writeHistorizing(UA_Server *server, const UA_NodeId nodeId,
674 const UA_Boolean historizing) {
675 return __UA_Server_write(server, &nodeId,
678 &historizing);
679}
680
682UA_Server_writeExecutable(UA_Server *server, const UA_NodeId nodeId,
683 const UA_Boolean executable) {
684 return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
685 &UA_TYPES[UA_TYPES_BOOLEAN], &executable); }
686
687
688
689/** Browse the references of a particular node. See the definition of
690 * BrowseDescription structure for details. */
692UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences,
693 const UA_BrowseDescription *bd);
694
696UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint,
697 const UA_ByteString *continuationPoint);
698
699/** Non-standard version of the Browse service that recurses into child nodes.
700 *
701 * Possible loops (that can occur for non-hierarchical references) are handled
702 * internally. Every node is added at most once to the results array.
703 *
704 * Nodes are only added if they match the NodeClassMask in the
705 * BrowseDescription. However, child nodes are still recursed into if the
706 * NodeClass does not match. So it is possible, for example, to get all
707 * VariableNodes below a certain ObjectNode, with additional objects in the
708 * hierarchy below. */
711 size_t *resultsSize, UA_ExpandedNodeId **results);
712
715 const UA_BrowsePath *browsePath);
716
717/** A simplified TranslateBrowsePathsToNodeIds based on the
718 * SimpleAttributeOperand type (Part 4, 7.4.4.5).
719 *
720 * This specifies a relative path using a list of BrowseNames instead of the
721 * RelativePath structure. The list of BrowseNames is equivalent to a
722 * RelativePath that specifies forward references which are subtypes of the
723 * HierarchicalReferences ReferenceType. All Nodes followed by the browsePath
724 * shall be of the NodeClass Object or Variable. */
727 size_t browsePathSize,
728 const UA_QualifiedName *browsePath);
729
730#ifndef HAVE_NODEITER_CALLBACK
731#define HAVE_NODEITER_CALLBACK
732/** Iterate over all nodes referenced by parentNodeId by calling the callback
733 * function for each child node (in ifdef because GCC/CLANG handle include order
734 * differently) */
736(*UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse,
737 UA_NodeId referenceTypeId, void *handle);
738#endif
739
742 UA_NodeIteratorCallback callback, void *handle);
743
744#ifdef UA_ENABLE_DISCOVERY
745
746
747/** Register the given server instance at the discovery server.
748 * This should be called periodically.
749 * The semaphoreFilePath is optional. If the given file is deleted,
750 * the server will automatically be unregistered. This could be
751 * for example a pid file which is deleted if the server crashes.
752 *
753 * When the server shuts down you need to call unregister.
754 *
755 * @param server
756 * @param client the client which is used to call the RegisterServer. It must
757 * already be connected to the correct endpoint
758 * @param semaphoreFilePath optional parameter pointing to semaphore file. */
761 const char* semaphoreFilePath);
762
763/** Unregister the given server instance from the discovery server.
764 * This should only be called when the server is shutting down.
765 * @param server
766 * @param client the client which is used to call the RegisterServer. It must
767 * already be connected to the correct endpoint */
770
771 /* Adds a periodic callback to register the server with the LDS (local
772 * discovery server) periodically. The interval between each register call is
773 * given as second parameter. It should be 10 minutes by default (=
774 * 10*60*1000).
775 *
776 * The delayFirstRegisterMs parameter indicates the delay for the first
777 * register call. If it is 0, the first register call will be after intervalMs
778 * milliseconds, otherwise the server's first register will be after
779 * delayFirstRegisterMs.
780 *
781 * When you manually unregister the server, you also need to cancel the
782 * periodic callback, otherwise it will be automatically be registered again.
783 *
784 * If you call this method multiple times for the same discoveryServerUrl, the
785 * older periodic callback will be removed.
786 *
787 * @param server
788 * @param client the client which is used to call the RegisterServer. It must
789 * not yet be connected and will be connected for every register call
790 * to the given discoveryServerUrl.
791 * @param discoveryServerUrl where this server should register itself. The
792 * string will be copied internally. Therefore you can free it after
793 * calling this method.
794 * @param intervalMs
795 * @param delayFirstRegisterMs
796 * @param periodicCallbackId */
799 struct UA_Client *client,
800 const char* discoveryServerUrl,
801 UA_Double intervalMs,
802 UA_Double delayFirstRegisterMs,
803 UA_UInt64 *periodicCallbackId);
804
805/** Callback for RegisterServer. Data is passed from the register call */
806typedef void
807(*UA_Server_registerServerCallback)(const UA_RegisteredServer *registeredServer,
808 void* data);
809
810/** Set the callback which is called if another server registeres or unregisters
811 * with this instance. This callback is called every time the server gets a
812 * register call. This especially means that for every periodic server register
813 * the callback will be called.
814 *
815 * @param server
816 * @param cb the callback
817 * @param data data passed to the callback
818 * @return ``UA_STATUSCODE_SUCCESS`` on success */
819void UA_THREADSAFE
821 UA_Server_registerServerCallback cb, void* data);
822
823#ifdef UA_ENABLE_DISCOVERY_MULTICAST
824
825/** Callback for server detected through mDNS. Data is passed from the register
826 * call
827 *
828 * @param isServerAnnounce indicates if the server has just been detected. If
829 * set to false, this means the server is shutting down.
830 * @param isTxtReceived indicates if we already received the corresponding TXT
831 * record with the path and caps data */
832typedef void
833(*UA_Server_serverOnNetworkCallback)(const UA_ServerOnNetwork *serverOnNetwork,
834 UA_Boolean isServerAnnounce,
835 UA_Boolean isTxtReceived, void* data);
836
837/** Set the callback which is called if another server is found through mDNS or
838 * deleted. It will be called for any mDNS message from the remote server, thus
839 * it may be called multiple times for the same instance. Also the SRV and TXT
840 * records may arrive later, therefore for the first call the server
841 * capabilities may not be set yet. If called multiple times, previous data will
842 * be overwritten.
843 *
844 * @param server
845 * @param cb the callback
846 * @param data data passed to the callback
847 * @return ``UA_STATUSCODE_SUCCESS`` on success */
848void UA_THREADSAFE
849UA_Server_setServerOnNetworkCallback(UA_Server *server,
850 UA_Server_serverOnNetworkCallback cb,
851 void* data);
852
853#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
854
855#endif /* UA_ENABLE_DISCOVERY */
856
857
858
859void
861 void *context);
862
865 UA_NodeTypeLifecycle lifecycle);
866
869 void **nodeContext);
870
871/** Careful! The user has to ensure that the destructor callbacks still work. */
874 void *nodeContext);
875
876
877
880 const UA_DataSource dataSource);
881
884 const UA_NodeId nodeId,
885 const UA_ValueCallback callback);
886
889 const UA_NodeId nodeId,
890 const UA_ValueBackend valueBackend);
891
892
893
894#ifdef UA_ENABLE_SUBSCRIPTIONS
895
897 (UA_Server *server, UA_UInt32 monitoredItemId, void *monitoredItemContext,
898 const UA_NodeId *nodeId, void *nodeContext, UA_UInt32 attributeId,
899 const UA_DataValue *value);
900
902 (UA_Server *server, UA_UInt32 monId, void *monContext,
903 size_t nEventFields, const UA_Variant *eventFields);
904
905/** Create a local MonitoredItem with a sampling interval that detects data
906 * changes.
907 *
908 * @param server The server executing the MonitoredItem
909 * @timestampsToReturn Shall timestamps be added to the value for the callback?
910 * @item The parameters of the new MonitoredItem. Note that the attribute of the
911 * ReadValueId (the node that is monitored) can not be
912 * ``UA_ATTRIBUTEID_EVENTNOTIFIER``. A different callback type needs to be
913 * registered for event notifications.
914 * @monitoredItemContext A pointer that is forwarded with the callback
915 * @callback The callback that is executed on detected data changes
916 *
917 * @return Returns a description of the created MonitoredItem. The structure
918 * also contains a StatusCode (in case of an error) and the identifier of the
919 * new MonitoredItem. */
922 UA_TimestampsToReturn timestampsToReturn,
924 void *monitoredItemContext,
926
927/** UA_MonitoredItemCreateResult */
928/** UA_Server_createEventMonitoredItem(UA_Server *server, */
929/** UA_TimestampsToReturn timestampsToReturn, */
930/** const UA_MonitoredItemCreateRequest item, void *context, */
931/** UA_Server_EventNotificationCallback callback); */
932
935
936#endif
937
938
939
940#ifdef UA_ENABLE_METHODCALLS
943 const UA_NodeId methodNodeId,
944 UA_MethodCallback methodCallback);
945
946/** Backwards compatibility definition */
947#define UA_Server_setMethodNode_callback(server, methodNodeId, methodCallback) \
948 UA_Server_setMethodNodeCallback(server, methodNodeId, methodCallback)
949
952 const UA_NodeId methodNodeId,
953 UA_MethodCallback *outMethodCallback);
954
957#endif
958
959
960
961/** Write an object property. The property is represented as a VariableNode with
962 * a ``HasProperty`` reference from the ObjectNode. The VariableNode is
963 * identified by its BrowseName. Writing the property sets the value attribute
964 * of the VariableNode.
965 *
966 * @param server The server object
967 * @param objectId The identifier of the object (node)
968 * @param propertyName The name of the property
969 * @param value The value to be set for the event attribute
970 * @return The StatusCode for setting the event attribute */
973 const UA_QualifiedName propertyName,
974 const UA_Variant value);
975
976/** Directly point to the scalar value instead of a variant */
979 const UA_QualifiedName propertyName,
980 const void *value, const UA_DataType *type);
981
982/** Read an object property.
983 *
984 * @param server The server object
985 * @param objectId The identifier of the object (node)
986 * @param propertyName The name of the property
987 * @param value Contains the property value after reading. Must not be NULL.
988 * @return The StatusCode for setting the event attribute */
991 const UA_QualifiedName propertyName,
992 UA_Variant *value);
993
994
995
996/** Protect against redundant definitions for server/client */
997#ifndef UA_DEFAULT_ATTRIBUTES_DEFINED
998#define UA_DEFAULT_ATTRIBUTES_DEFINED
999/** The default for variables is "BaseDataType" for the datatype, -2 for the
1000 * valuerank and a read-accesslevel. */
1003/** Methods are executable by default */
1005/** The remaining attribute definitions are currently all zeroed out */
1010UA_EXPORT extern const UA_ViewAttributes UA_ViewAttributes_default;
1011#endif
1012
1013/** Don't use this function. There are typed versions as inline functions. */
1016 const UA_NodeId *requestedNewNodeId,
1017 const UA_NodeId *parentNodeId,
1018 const UA_NodeId *referenceTypeId,
1019 const UA_QualifiedName browseName,
1020 const UA_NodeId *typeDefinition,
1021 const UA_NodeAttributes *attr,
1022 const UA_DataType *attributeType,
1023 void *nodeContext, UA_NodeId *outNewNodeId);
1024
1026UA_Server_addVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
1027 const UA_NodeId parentNodeId,
1028 const UA_NodeId referenceTypeId,
1029 const UA_QualifiedName browseName,
1030 const UA_NodeId typeDefinition,
1031 const UA_VariableAttributes attr,
1032 void *nodeContext, UA_NodeId *outNewNodeId) {
1033 return __UA_Server_addNode(server, UA_NODECLASS_VARIABLE, &requestedNewNodeId,
1034 &parentNodeId, &referenceTypeId, browseName,
1035 &typeDefinition, (const UA_NodeAttributes*)&attr,
1037 nodeContext, outNewNodeId);
1038}
1039
1041UA_Server_addVariableTypeNode(UA_Server *server,
1042 const UA_NodeId requestedNewNodeId,
1043 const UA_NodeId parentNodeId,
1044 const UA_NodeId referenceTypeId,
1045 const UA_QualifiedName browseName,
1046 const UA_NodeId typeDefinition,
1047 const UA_VariableTypeAttributes attr,
1048 void *nodeContext, UA_NodeId *outNewNodeId) {
1050 &requestedNewNodeId, &parentNodeId, &referenceTypeId,
1051 browseName, &typeDefinition,
1052 (const UA_NodeAttributes*)&attr,
1054 nodeContext, outNewNodeId);
1055}
1056
1058UA_Server_addObjectNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
1059 const UA_NodeId parentNodeId,
1060 const UA_NodeId referenceTypeId,
1061 const UA_QualifiedName browseName,
1062 const UA_NodeId typeDefinition,
1063 const UA_ObjectAttributes attr,
1064 void *nodeContext, UA_NodeId *outNewNodeId) {
1065 return __UA_Server_addNode(server, UA_NODECLASS_OBJECT, &requestedNewNodeId,
1066 &parentNodeId, &referenceTypeId, browseName,
1067 &typeDefinition, (const UA_NodeAttributes*)&attr,
1069 nodeContext, outNewNodeId);
1070}
1071
1073UA_Server_addObjectTypeNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
1074 const UA_NodeId parentNodeId,
1075 const UA_NodeId referenceTypeId,
1076 const UA_QualifiedName browseName,
1077 const UA_ObjectTypeAttributes attr,
1078 void *nodeContext, UA_NodeId *outNewNodeId) {
1079 return __UA_Server_addNode(server, UA_NODECLASS_OBJECTTYPE, &requestedNewNodeId,
1080 &parentNodeId, &referenceTypeId, browseName,
1081 &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
1083 nodeContext, outNewNodeId);
1084}
1085
1087UA_Server_addViewNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
1088 const UA_NodeId parentNodeId,
1089 const UA_NodeId referenceTypeId,
1090 const UA_QualifiedName browseName,
1091 const UA_ViewAttributes attr,
1092 void *nodeContext, UA_NodeId *outNewNodeId) {
1093 return __UA_Server_addNode(server, UA_NODECLASS_VIEW, &requestedNewNodeId,
1094 &parentNodeId, &referenceTypeId, browseName,
1095 &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
1097 nodeContext, outNewNodeId);
1098}
1099
1101UA_Server_addReferenceTypeNode(UA_Server *server,
1102 const UA_NodeId requestedNewNodeId,
1103 const UA_NodeId parentNodeId,
1104 const UA_NodeId referenceTypeId,
1105 const UA_QualifiedName browseName,
1106 const UA_ReferenceTypeAttributes attr,
1107 void *nodeContext, UA_NodeId *outNewNodeId) {
1109 &requestedNewNodeId, &parentNodeId, &referenceTypeId,
1110 browseName, &UA_NODEID_NULL,
1111 (const UA_NodeAttributes*)&attr,
1113 nodeContext, outNewNodeId);
1114}
1115
1117UA_Server_addDataTypeNode(UA_Server *server,
1118 const UA_NodeId requestedNewNodeId,
1119 const UA_NodeId parentNodeId,
1120 const UA_NodeId referenceTypeId,
1121 const UA_QualifiedName browseName,
1122 const UA_DataTypeAttributes attr,
1123 void *nodeContext, UA_NodeId *outNewNodeId) {
1124 return __UA_Server_addNode(server, UA_NODECLASS_DATATYPE, &requestedNewNodeId,
1125 &parentNodeId, &referenceTypeId, browseName,
1126 &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
1128 nodeContext, outNewNodeId);
1129}
1130
1133 const UA_NodeId requestedNewNodeId,
1134 const UA_NodeId parentNodeId,
1135 const UA_NodeId referenceTypeId,
1136 const UA_QualifiedName browseName,
1137 const UA_NodeId typeDefinition,
1138 const UA_VariableAttributes attr,
1139 const UA_DataSource dataSource,
1140 void *nodeContext, UA_NodeId *outNewNodeId);
1141
1142#ifdef UA_ENABLE_METHODCALLS
1143
1145UA_Server_addMethodNodeEx(UA_Server *server, const UA_NodeId requestedNewNodeId,
1146 const UA_NodeId parentNodeId,
1147 const UA_NodeId referenceTypeId,
1148 const UA_QualifiedName browseName,
1149 const UA_MethodAttributes attr, UA_MethodCallback method,
1150 size_t inputArgumentsSize, const UA_Argument *inputArguments,
1151 const UA_NodeId inputArgumentsRequestedNewNodeId,
1152 UA_NodeId *inputArgumentsOutNewNodeId,
1153 size_t outputArgumentsSize, const UA_Argument *outputArguments,
1154 const UA_NodeId outputArgumentsRequestedNewNodeId,
1155 UA_NodeId *outputArgumentsOutNewNodeId,
1156 void *nodeContext, UA_NodeId *outNewNodeId);
1157
1159UA_Server_addMethodNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
1160 const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
1161 const UA_QualifiedName browseName, const UA_MethodAttributes attr,
1162 UA_MethodCallback method,
1163 size_t inputArgumentsSize, const UA_Argument *inputArguments,
1164 size_t outputArgumentsSize, const UA_Argument *outputArguments,
1165 void *nodeContext, UA_NodeId *outNewNodeId) {
1166 return UA_Server_addMethodNodeEx(server, requestedNewNodeId, parentNodeId,
1167 referenceTypeId, browseName, attr, method,
1168 inputArgumentsSize, inputArguments,
1169 UA_NODEID_NULL, NULL,
1170 outputArgumentsSize, outputArguments,
1171 UA_NODEID_NULL, NULL,
1172 nodeContext, outNewNodeId);
1173}
1174
1175#endif
1176
1177
1178
1179
1180/** The ``attr`` argument must have a type according to the NodeClass.
1181 * ``VariableAttributes`` for variables, ``ObjectAttributes`` for objects, and
1182 * so on. Missing attributes are taken from the TypeDefinition node if
1183 * applicable. */
1186 const UA_NodeId requestedNewNodeId,
1187 const UA_NodeId parentNodeId,
1188 const UA_NodeId referenceTypeId,
1189 const UA_QualifiedName browseName,
1190 const UA_NodeId typeDefinition,
1191 const void *attr, const UA_DataType *attributeType,
1192 void *nodeContext, UA_NodeId *outNewNodeId);
1193
1196
1197#ifdef UA_ENABLE_METHODCALLS
1198
1201 UA_MethodCallback method,
1202 size_t inputArgumentsSize, const UA_Argument *inputArguments,
1203 size_t outputArgumentsSize, const UA_Argument *outputArguments);
1204
1205#endif
1206
1207/** Deletes a node and optionally all references leading to the node. */
1210 UA_Boolean deleteReferences);
1211
1212
1215 const UA_NodeId refTypeId,
1216 const UA_ExpandedNodeId targetId, UA_Boolean isForward);
1217
1220 const UA_NodeId referenceTypeId, UA_Boolean isForward,
1221 const UA_ExpandedNodeId targetNodeId,
1222 UA_Boolean deleteBidirectional);
1223
1224
1225
1226#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
1227
1228/** Creates a node representation of an event
1229 *
1230 * @param server The server object
1231 * @param eventType The type of the event for which a node should be created
1232 * @param outNodeId The NodeId of the newly created node for the event
1233 * @return The StatusCode of the UA_Server_createEvent method */
1236 UA_NodeId *outNodeId);
1237
1238/** Triggers a node representation of an event by applying EventFilters and
1239 * adding the event to the appropriate queues.
1240 *
1241 * @param server The server object
1242 * @param eventNodeId The NodeId of the node representation of the event which
1243 * should be triggered
1244 * @param outEvent the EventId of the new event
1245 * @param deleteEventNode Specifies whether the node representation of the event
1246 * should be deleted
1247 * @return The StatusCode of the UA_Server_triggerEvent method */
1249UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId,
1250 const UA_NodeId originId, UA_ByteString *outEventId,
1251 const UA_Boolean deleteEventNode);
1252
1253#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
1254
1255#ifdef UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS
1256typedef enum UA_TwoStateVariableCallbackType {
1257 UA_ENTERING_ENABLEDSTATE,
1258 UA_ENTERING_ACKEDSTATE,
1259 UA_ENTERING_CONFIRMEDSTATE,
1260 UA_ENTERING_ACTIVESTATE
1261} UA_TwoStateVariableCallbackType;
1262
1263/** Callback prototype to set user specific callbacks */
1264typedef UA_StatusCode
1265(*UA_TwoStateVariableChangeCallback)(UA_Server *server, const UA_NodeId *condition);
1266
1267/** Create condition instance. The function checks first whether the passed
1268 * conditionType is a subType of ConditionType. Then checks whether the
1269 * condition source has HasEventSource reference to its parent. If not, a
1270 * HasEventSource reference will be created between condition source and server
1271 * object. To expose the condition in address space, a hierarchical
1272 * ReferenceType should be passed to create the reference to condition source.
1273 * Otherwise, UA_NODEID_NULL should be passed to make the condition not exposed.
1274 *
1275 * @param server The server object
1276 * @param conditionId The NodeId of the requested Condition Object. When passing
1277 * UA_NODEID_NUMERIC(X,0) an unused nodeid in namespace X will be used.
1278 * E.g. passing UA_NODEID_NULL will result in a NodeId in namespace 0.
1279 * @param conditionType The NodeId of the node representation of the ConditionType
1280 * @param conditionName The name of the condition to be created
1281 * @param conditionSource The NodeId of the Condition Source (Parent of the Condition)
1282 * @param hierarchialReferenceType The NodeId of Hierarchical ReferenceType
1283 * between Condition and its source
1284 * @param outConditionId The NodeId of the created Condition
1285 * @return The StatusCode of the UA_Server_createCondition method */
1287UA_Server_createCondition(UA_Server *server,
1288 const UA_NodeId conditionId,
1289 const UA_NodeId conditionType,
1290 const UA_QualifiedName conditionName,
1291 const UA_NodeId conditionSource,
1292 const UA_NodeId hierarchialReferenceType,
1293 UA_NodeId *outConditionId);
1294
1295/** Set the value of condition field.
1296 *
1297 * @param server The server object
1298 * @param condition The NodeId of the node representation of the Condition Instance
1299 * @param value Variant Value to be written to the Field
1300 * @param fieldName Name of the Field in which the value should be written
1301 * @return The StatusCode of the UA_Server_setConditionField method*/
1303UA_Server_setConditionField(UA_Server *server,
1304 const UA_NodeId condition,
1305 const UA_Variant *value,
1306 const UA_QualifiedName fieldName);
1307
1308/** Set the value of property of condition field.
1309 *
1310 * @param server The server object
1311 * @param condition The NodeId of the node representation of the Condition
1312 * Instance
1313 * @param value Variant Value to be written to the Field
1314 * @param variableFieldName Name of the Field which has a property
1315 * @param variablePropertyName Name of the Field Property in which the value
1316 * should be written
1317 * @return The StatusCode of the UA_Server_setConditionVariableFieldProperty*/
1319UA_Server_setConditionVariableFieldProperty(UA_Server *server,
1320 const UA_NodeId condition,
1321 const UA_Variant *value,
1322 const UA_QualifiedName variableFieldName,
1323 const UA_QualifiedName variablePropertyName);
1324
1325/** Triggers an event only for an enabled condition. The condition list is
1326 * updated then with the last generated EventId.
1327 *
1328 * @param server The server object
1329 * @param condition The NodeId of the node representation of the Condition Instance
1330 * @param conditionSource The NodeId of the node representation of the Condition Source
1331 * @param outEventId last generated EventId
1332 * @return The StatusCode of the UA_Server_triggerConditionEvent method */
1334UA_Server_triggerConditionEvent(UA_Server *server,
1335 const UA_NodeId condition,
1336 const UA_NodeId conditionSource,
1337 UA_ByteString *outEventId);
1338
1339/** Add an optional condition field using its name. (TODO Adding optional methods
1340 * is not implemented yet)
1341 *
1342 * @param server The server object
1343 * @param condition The NodeId of the node representation of the Condition Instance
1344 * @param conditionType The NodeId of the node representation of the Condition Type
1345 * from which the optional field comes
1346 * @param fieldName Name of the optional field
1347 * @param outOptionalVariable The NodeId of the created field (Variable Node)
1348 * @return The StatusCode of the UA_Server_addConditionOptionalField method */
1350UA_Server_addConditionOptionalField(UA_Server *server,
1351 const UA_NodeId condition,
1352 const UA_NodeId conditionType,
1353 const UA_QualifiedName fieldName,
1354 UA_NodeId *outOptionalVariable);
1355
1356/** Function used to set a user specific callback to TwoStateVariable Fields of a
1357 * condition. The callbacks will be called before triggering the events when
1358 * transition to true State of EnabledState/Id, AckedState/Id, ConfirmedState/Id
1359 * and ActiveState/Id occurs.
1360 *
1361 * @param server The server object
1362 * @param condition The NodeId of the node representation of the Condition Instance
1363 * @param conditionSource The NodeId of the node representation of the Condition Source
1364 * @param removeBranch (Not Implemented yet)
1365 * @param callback User specific callback function
1366 * @param callbackType Callback function type, indicates where it should be called
1367 * @return The StatusCode of the UA_Server_setConditionTwoStateVariableCallback method */
1369UA_Server_setConditionTwoStateVariableCallback(UA_Server *server,
1370 const UA_NodeId condition,
1371 const UA_NodeId conditionSource,
1372 UA_Boolean removeBranch,
1373 UA_TwoStateVariableChangeCallback callback,
1374 UA_TwoStateVariableCallbackType callbackType);
1375
1376/** Delete a condition from the address space and the internal lists.
1377 *
1378 * @param server The server object
1379 * @param condition The NodeId of the node representation of the Condition Instance
1380 * @param conditionSource The NodeId of the node representation of the Condition Source
1381 * @return ``UA_STATUSCODE_GOOD`` on success */
1383UA_Server_deleteCondition(UA_Server *server,
1384 const UA_NodeId condition,
1385 const UA_NodeId conditionSource);
1386
1387#endif /* UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS */
1388
1389
1392 const UA_ByteString *oldCertificate,
1393 const UA_ByteString *newCertificate,
1394 const UA_ByteString *newPrivateKey,
1395 UA_Boolean closeSessions,
1396 UA_Boolean closeSecureChannels);
1397
1398
1399/** Lookup a datatype by its NodeId. Takes the custom types in the server
1400 * configuration into account. Return NULL if none found. */
1401UA_EXPORT const UA_DataType *
1403
1404/** Add a new namespace to the server. Returns the index of the new namespace */
1406UA_Server_addNamespace(UA_Server *server, const char* name);
1407
1408/** Get namespace by name from the server. */
1411 size_t* foundIndex);
1412
1413/** Get namespace by id from the server. */
1415UA_Server_getNamespaceByIndex(UA_Server *server, const size_t namespaceIndex,
1416 UA_String *foundUri);
1417
1418
1419
1420#if UA_MULTITHREADING >= 100
1421
1422/** Set the async flag in a method node */
1424UA_Server_setMethodNodeAsync(UA_Server *server, const UA_NodeId id,
1425 UA_Boolean isAsync);
1426
1427typedef enum {
1428 UA_ASYNCOPERATIONTYPE_INVALID, /* 0, the default */
1429 UA_ASYNCOPERATIONTYPE_CALL
1430 /* UA_ASYNCOPERATIONTYPE_READ, */
1431 /* UA_ASYNCOPERATIONTYPE_WRITE, */
1432} UA_AsyncOperationType;
1433
1434typedef union {
1435 UA_CallMethodRequest callMethodRequest;
1436 /* UA_ReadValueId readValueId; */
1437 /* UA_WriteValue writeValue; */
1438} UA_AsyncOperationRequest;
1439
1440typedef union {
1441 UA_CallMethodResult callMethodResult;
1442 /* UA_DataValue readResult; */
1443 /* UA_StatusCode writeResult; */
1444} UA_AsyncOperationResponse;
1445
1446/** Get the next async operation without blocking
1447 *
1448 * @param server The server object
1449 * @param type The type of the async operation
1450 * @param request Receives pointer to the operation
1451 * @param context Receives the pointer to the operation context
1452 * @param timeout The timestamp when the operation times out and can
1453 * no longer be returned to the client. The response has to
1454 * be set in UA_Server_setAsyncOperationResult in any case.
1455 * @return false if queue is empty, true else */
1457UA_Server_getAsyncOperationNonBlocking(UA_Server *server, UA_AsyncOperationType *type,
1458 const UA_AsyncOperationRequest **request,
1459 void **context, UA_DateTime *timeout);
1460
1461/** UA_Boolean */
1462/** UA_Server_getAsyncOperationBlocking(UA_Server *server, UA_AsyncOperationType *type, */
1463/** const UA_AsyncOperationRequest **request, */
1464/** void **context, UA_DateTime *timeout); */
1465
1466/** Submit an async operation result
1467 *
1468 * @param server The server object
1469 * @param response Pointer to the operation result
1470 * @param context Pointer to the operation context */
1471void
1472UA_Server_setAsyncOperationResult(UA_Server *server,
1473 const UA_AsyncOperationResponse *response,
1474 void *context);
1475
1476#endif /* !UA_MULTITHREADING >= 100 */
1477
1478
1479
1485
1488
1490
1491#ifdef UA_ENABLE_PUBSUB
1493#endif
1494
1495#endif /* UA_SERVER_H_ */
#define UA_THREADSAFE
UA_AttributeId
This Source Code Form is subject to the terms of the Mozilla Public License, v.
Definition common.h:21
@ UA_ATTRIBUTEID_NODEID
Definition common.h:22
@ UA_ATTRIBUTEID_VALUERANK
Definition common.h:36
@ UA_ATTRIBUTEID_EXECUTABLE
Definition common.h:42
@ UA_ATTRIBUTEID_ACCESSLEVEL
Definition common.h:38
@ UA_ATTRIBUTEID_ISABSTRACT
Definition common.h:29
@ UA_ATTRIBUTEID_SYMMETRIC
Definition common.h:30
@ UA_ATTRIBUTEID_HISTORIZING
Definition common.h:41
@ UA_ATTRIBUTEID_CONTAINSNOLOOPS
Definition common.h:32
@ UA_ATTRIBUTEID_DESCRIPTION
Definition common.h:26
@ UA_ATTRIBUTEID_WRITEMASK
Definition common.h:27
@ UA_ATTRIBUTEID_VALUE
Definition common.h:34
@ UA_ATTRIBUTEID_ARRAYDIMENSIONS
Definition common.h:37
@ UA_ATTRIBUTEID_BROWSENAME
Definition common.h:24
@ UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL
Definition common.h:40
@ UA_ATTRIBUTEID_DATATYPE
Definition common.h:35
@ UA_ATTRIBUTEID_INVERSENAME
Definition common.h:31
@ UA_ATTRIBUTEID_EVENTNOTIFIER
Definition common.h:33
@ UA_ATTRIBUTEID_DISPLAYNAME
Definition common.h:25
@ UA_ATTRIBUTEID_NODECLASS
Definition common.h:23
UA_RuleHandling
Definition common.h:103
#define _UA_BEGIN_DECLS
#undef UA_DEBUG_DUMP_PKGS
Definition config.h:89
#define _UA_END_DECLS
Definition config.h:96
UA_StatusCode(* UA_MethodCallback)(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
Definition nodestore.h:506
UA_EXPORT const UA_ObjectTypeAttributes UA_ObjectTypeAttributes_default
UA_StatusCode UA_THREADSAFE UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
UA_StatusCode UA_THREADSAFE UA_Server_setMethodNodeCallback(UA_Server *server, const UA_NodeId methodNodeId, UA_MethodCallback methodCallback)
UA_CallMethodResult UA_THREADSAFE UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request)
UA_EXPORT const UA_VariableAttributes UA_VariableAttributes_default
The default for variables is "BaseDataType" for the datatype, -2 for the valuerank and a read-accessl...
UA_StatusCode(* UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle)
Iterate over all nodes referenced by parentNodeId by calling the callback function for each child nod...
Definition server.h:736
UA_StatusCode UA_THREADSAFE UA_Server_getNodeContext(UA_Server *server, UA_NodeId nodeId, void **nodeContext)
UA_StatusCode UA_THREADSAFE UA_Server_register_discovery(UA_Server *server, struct UA_Client *client, const char *semaphoreFilePath)
Register the given server instance at the discovery server.
UA_StatusCode UA_THREADSAFE UA_Server_setVariableNode_valueBackend(UA_Server *server, const UA_NodeId nodeId, const UA_ValueBackend valueBackend)
UA_EXPORT const UA_DataType * UA_Server_findDataType(UA_Server *server, const UA_NodeId *typeId)
Lookup a datatype by its NodeId.
UA_StatusCode UA_THREADSAFE UA_Server_addMethodNode_finish(UA_Server *server, const UA_NodeId nodeId, UA_MethodCallback method, size_t inputArgumentsSize, const UA_Argument *inputArguments, size_t outputArgumentsSize, const UA_Argument *outputArguments)
UA_BrowseResult UA_THREADSAFE UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint, const UA_ByteString *continuationPoint)
UA_StatusCode UA_THREADSAFE UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences)
Deletes a node and optionally all references leading to the node.
UA_StatusCode UA_THREADSAFE UA_Server_addMethodNodeEx(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_MethodAttributes attr, UA_MethodCallback method, size_t inputArgumentsSize, const UA_Argument *inputArguments, const UA_NodeId inputArgumentsRequestedNewNodeId, UA_NodeId *inputArgumentsOutNewNodeId, size_t outputArgumentsSize, const UA_Argument *outputArguments, const UA_NodeId outputArgumentsRequestedNewNodeId, UA_NodeId *outputArgumentsOutNewNodeId, void *nodeContext, UA_NodeId *outNewNodeId)
UA_DataValue UA_THREADSAFE UA_Server_read(UA_Server *server, const UA_ReadValueId *item, UA_TimestampsToReturn timestamps)
Read an attribute of a node.
UA_EXPORT const UA_DataTypeAttributes UA_DataTypeAttributes_default
UA_StatusCode UA_THREADSAFE UA_Server_readObjectProperty(UA_Server *server, const UA_NodeId objectId, const UA_QualifiedName propertyName, UA_Variant *value)
Read an object property.
UA_StatusCode UA_THREADSAFE UA_Server_setNodeContext(UA_Server *server, UA_NodeId nodeId, void *nodeContext)
Careful! The user has to ensure that the destructor callbacks still work.
void UA_Server_setAdminSessionContext(UA_Server *server, void *context)
UA_EXPORT UA_StatusCode UA_THREADSAFE UA_Server_getSessionScalarParameter(UA_Server *server, const UA_NodeId *sessionId, const char *name, const UA_DataType *type, UA_Variant *outParameter)
Returns NULL if the parameter is not defined or not of the right datatype.
void UA_ServerConfig_clean(UA_ServerConfig *config)
UA_StatusCode UA_Server_updateCertificate(UA_Server *server, const UA_ByteString *oldCertificate, const UA_ByteString *newCertificate, const UA_ByteString *newPrivateKey, UA_Boolean closeSessions, UA_Boolean closeSecureChannels)
void(* UA_Server_AsyncOperationNotifyCallback)(UA_Server *server)
Definition server.h:49
UA_StatusCode UA_THREADSAFE __UA_Server_read(UA_Server *server, const UA_NodeId *nodeId, UA_AttributeId attributeId, void *v)
Don't use this function.
UA_UInt16 UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal)
Executes a single iteration of the server's main loop.
UA_BrowsePathResult UA_THREADSAFE UA_Server_browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin, size_t browsePathSize, const UA_QualifiedName *browsePath)
A simplified TranslateBrowsePathsToNodeIds based on the SimpleAttributeOperand type (Part 4,...
UA_EXPORT UA_StatusCode UA_THREADSAFE UA_Server_getSessionArrayParameter(UA_Server *server, const UA_NodeId *sessionId, const char *name, const UA_DataType *type, UA_Variant *outParameter)
UA_StatusCode UA_Server_run(UA_Server *server, const volatile UA_Boolean *running)
Runs the main loop of the server.
void UA_THREADSAFE UA_Server_removeCallback(UA_Server *server, UA_UInt64 callbackId)
Remove a repeated callback.
UA_StatusCode UA_THREADSAFE UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_VariableAttributes attr, const UA_DataSource dataSource, void *nodeContext, UA_NodeId *outNewNodeId)
UA_EXPORT const UA_ViewAttributes UA_ViewAttributes_default
UA_StatusCode UA_THREADSAFE UA_Server_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback, void *data, UA_Double interval_ms, UA_UInt64 *callbackId)
Add a callback for cyclic repetition to the server.
UA_StatusCode UA_Server_run_startup(UA_Server *server)
The prologue part of UA_Server_run (no need to use if you call UA_Server_run)
UA_StatusCode UA_THREADSAFE UA_Server_addTimedCallback(UA_Server *server, UA_ServerCallback callback, void *data, UA_DateTime date, UA_UInt64 *callbackId)
Add a callback for execution at a specified time.
UA_StatusCode UA_Server_run_shutdown(UA_Server *server)
The epilogue part of UA_Server_run (no need to use if you call UA_Server_run)
UA_StatusCode UA_THREADSAFE UA_Server_addNode_begin(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const void *attr, const UA_DataType *attributeType, void *nodeContext, UA_NodeId *outNewNodeId)
The attr argument must have a type according to the NodeClass.
UA_StatusCode UA_THREADSAFE UA_Server_write(UA_Server *server, const UA_WriteValue *value)
Overwrite an attribute of a node.
UA_StatusCode UA_THREADSAFE UA_Server_writeObjectProperty_scalar(UA_Server *server, const UA_NodeId objectId, const UA_QualifiedName propertyName, const void *value, const UA_DataType *type)
Directly point to the scalar value instead of a variant.
UA_MonitoredItemCreateResult UA_THREADSAFE UA_Server_createDataChangeMonitoredItem(UA_Server *server, UA_TimestampsToReturn timestampsToReturn, const UA_MonitoredItemCreateRequest item, void *monitoredItemContext, UA_Server_DataChangeNotificationCallback callback)
Create a local MonitoredItem with a sampling interval that detects data changes.
UA_StatusCode UA_THREADSAFE UA_Server_createEvent(UA_Server *server, const UA_NodeId eventType, UA_NodeId *outNodeId)
Creates a node representation of an event.
UA_BrowseResult UA_THREADSAFE UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences, const UA_BrowseDescription *bd)
Browse the references of a particular node.
UA_StatusCode UA_THREADSAFE UA_Server_getNamespaceByIndex(UA_Server *server, const size_t namespaceIndex, UA_String *foundUri)
Get namespace by id from the server.
UA_EXPORT const UA_VariableTypeAttributes UA_VariableTypeAttributes_default
UA_StatusCode UA_THREADSAFE UA_Server_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId, UA_Double interval_ms)
UA_StatusCode UA_THREADSAFE UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId)
void(* UA_Server_registerServerCallback)(const UA_RegisteredServer *registeredServer, void *data)
Callback for RegisterServer.
Definition server.h:807
UA_StatusCode UA_THREADSAFE UA_Server_getMethodNodeCallback(UA_Server *server, const UA_NodeId methodNodeId, UA_MethodCallback *outMethodCallback)
UA_EXPORT const UA_MethodAttributes UA_MethodAttributes_default
Methods are executable by default.
void(* UA_Server_EventNotificationCallback)(UA_Server *server, UA_UInt32 monId, void *monContext, size_t nEventFields, const UA_Variant *eventFields)
Definition server.h:902
UA_StatusCode UA_THREADSAFE UA_Server_unregister_discovery(UA_Server *server, struct UA_Client *client)
Unregister the given server instance from the discovery server.
UA_StatusCode UA_THREADSAFE __UA_Server_write(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, const UA_DataType *attr_type, const void *attr)
Don't use this function.
UA_StatusCode UA_THREADSAFE UA_Server_setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId, UA_NodeTypeLifecycle lifecycle)
void(* UA_Server_DataChangeNotificationCallback)(UA_Server *server, UA_UInt32 monitoredItemId, void *monitoredItemContext, const UA_NodeId *nodeId, void *nodeContext, UA_UInt32 attributeId, const UA_DataValue *value)
Definition server.h:897
void UA_THREADSAFE UA_Server_setRegisterServerCallback(UA_Server *server, UA_Server_registerServerCallback cb, void *data)
Set the callback which is called if another server registeres or unregisters with this instance.
UA_StatusCode UA_THREADSAFE UA_Server_browseRecursive(UA_Server *server, const UA_BrowseDescription *bd, size_t *resultsSize, UA_ExpandedNodeId **results)
Non-standard version of the Browse service that recurses into child nodes.
UA_UInt16 UA_THREADSAFE UA_Server_addNamespace(UA_Server *server, const char *name)
Add a new namespace to the server.
UA_StatusCode UA_THREADSAFE UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId, const UA_DataSource dataSource)
UA_EXPORT const UA_ReferenceTypeAttributes UA_ReferenceTypeAttributes_default
UA_ServerStatistics UA_Server_getStatistics(UA_Server *server)
UA_StatusCode UA_THREADSAFE __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId *requestedNewNodeId, const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId *typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, void *nodeContext, UA_NodeId *outNewNodeId)
Don't use this function.
UA_StatusCode UA_THREADSAFE UA_Server_addPeriodicServerRegisterCallback(UA_Server *server, struct UA_Client *client, const char *discoveryServerUrl, UA_Double intervalMs, UA_Double delayFirstRegisterMs, UA_UInt64 *periodicCallbackId)
UA_EXPORT UA_StatusCode UA_THREADSAFE UA_Server_setSessionParameter(UA_Server *server, const UA_NodeId *sessionId, const char *name, const UA_Variant *parameter)
Session Parameters: Besides the user-definable session context pointer, so-called session parameters ...
UA_EXPORT UA_StatusCode UA_THREADSAFE UA_Server_closeSession(UA_Server *server, const UA_NodeId *sessionId)
Manually close a session.
UA_StatusCode UA_THREADSAFE UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId, const UA_NodeId refTypeId, const UA_ExpandedNodeId targetId, UA_Boolean isForward)
UA_StatusCode UA_THREADSAFE UA_Server_setVariableNode_valueCallback(UA_Server *server, const UA_NodeId nodeId, const UA_ValueCallback callback)
UA_StatusCode UA_THREADSAFE UA_Server_deleteMonitoredItem(UA_Server *server, UA_UInt32 monitoredItemId)
UA_MonitoredItemCreateResult.
UA_StatusCode UA_THREADSAFE UA_Server_writeObjectProperty(UA_Server *server, const UA_NodeId objectId, const UA_QualifiedName propertyName, const UA_Variant value)
Write an object property.
UA_StatusCode UA_THREADSAFE UA_Server_getNamespaceByName(UA_Server *server, const UA_String namespaceUri, size_t *foundIndex)
Get namespace by name from the server.
UA_EXPORT const UA_ObjectAttributes UA_ObjectAttributes_default
The remaining attribute definitions are currently all zeroed out.
UA_ServerConfig * UA_Server_getConfig(UA_Server *server)
UA_BrowsePathResult UA_THREADSAFE UA_Server_translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath)
UA_Server * UA_Server_newWithConfig(UA_ServerConfig *config)
The method UA_Server_new is defined in server_config_default.h.
UA_EXPORT void UA_THREADSAFE UA_Server_deleteSessionParameter(UA_Server *server, const UA_NodeId *sessionId, const char *name)
UA_StatusCode UA_THREADSAFE UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId, const UA_NodeId originId, UA_ByteString *outEventId, const UA_Boolean deleteEventNode)
Triggers a node representation of an event by applying EventFilters and adding the event to the appro...
UA_EXPORT UA_StatusCode UA_THREADSAFE UA_Server_getSessionParameter(UA_Server *server, const UA_NodeId *sessionId, const char *name, UA_Variant *outParameter)
Returns NULL if the session or the parameter are not defined.
void UA_Server_delete(UA_Server *server)
UA_StatusCode UA_THREADSAFE UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
Datatype arrays with custom type definitions can be added in a linked list to the client or server co...
Definition types.h:859
UA_Duration max
Definition server.h:58
UA_Duration min
Definition server.h:57
General PubSub configuration.
UA_UInt32 maxRetransmissionQueueSize
Definition server.h:186
UA_UInt32 maxNodesPerMethodCall
Definition server.h:137
UA_RuleHandling allowEmptyVariables
Definition server.h:87
size_t networkLayersSize
Definition server.h:93
size_t securityPoliciesSize
Definition server.h:98
UA_UInt32Range lifeTimeCountLimits
Definition server.h:182
UA_DurationRange samplingIntervalLimits
Definition server.h:194
UA_Boolean insertEventCapability
Definition server.h:238
UA_UInt32 maxReturnDataValues
Definition server.h:232
UA_Boolean enableRetransmissionQueue
Definition server.h:185
UA_Boolean accessHistoryDataCapability
Definition server.h:231
UA_UInt32 maxSubscriptionsPerSession
Definition server.h:180
UA_RuleHandling verifyRequestTimestamp
Definition server.h:82
UA_UInt32 discoveryCleanupTimeout
Definition server.h:163
UA_Boolean insertDataCapability
Definition server.h:237
UA_Double maxSessionTimeout
Definition server.h:132
UA_UInt32 maxNodesPerTranslateBrowsePathsToNodeIds
Definition server.h:140
UA_Boolean deleteAtTimeDataCapability
Definition server.h:249
UA_SecurityPolicy * securityPolicies
Definition server.h:99
UA_GlobalNodeLifecycle nodeLifecycle
Definition server.h:120
UA_ByteString serverCertificate
Definition server.h:72
UA_UInt32 maxNotificationsPerPublish
Definition server.h:184
UA_UInt32 maxNodesPerWrite
Definition server.h:136
UA_UInt32 maxNodesPerRead
Definition server.h:135
UA_UInt32 maxPublishReqPerSession
Definition server.h:198
UA_UInt32 maxReturnEventValues
Definition server.h:235
UA_UInt32 maxMonitoredItemsPerCall
Definition server.h:142
UA_Boolean updateEventCapability
Definition server.h:245
UA_Boolean accessHistoryEventsCapability
Definition server.h:234
UA_AccessControl accessControl
Definition server.h:116
UA_Boolean replaceDataCapability
Definition server.h:241
UA_UInt32 maxEventsPerNode
Definition server.h:188
UA_Boolean deleteRawCapability
Definition server.h:247
UA_UInt32 maxNodesPerBrowse
Definition server.h:138
UA_UInt16 maxSessions
Definition server.h:131
UA_UInt32 maxReferencesPerNode
Definition server.h:145
UA_UInt32Range keepAliveCountLimits
Definition server.h:183
UA_ServerNetworkLayer * networkLayers
Definition server.h:94
UA_BuildInfo buildInfo
Definition server.h:70
UA_Boolean insertAnnotationsCapability
Definition server.h:239
size_t endpointsSize
Definition server.h:101
UA_Boolean updateDataCapability
Definition server.h:244
UA_Boolean replaceEventCapability
Definition server.h:242
UA_UInt32 maxSubscriptions
Definition server.h:179
UA_Double shutdownDelay
Definition server.h:77
UA_UInt32 maxNodesPerNodeManagement
Definition server.h:141
UA_UInt32Range queueSizeLimits
Definition server.h:195
UA_HistoryDatabase historyDatabase
Definition server.h:229
void * context
Definition server.h:65
UA_Boolean modellingRulesOnInstances
Definition server.h:123
const UA_DataTypeArray * customDataTypes
Definition server.h:90
UA_Boolean securityPolicyNoneDiscoveryOnly
Definition server.h:111
UA_UInt32 maxMonitoredItems
Definition server.h:192
UA_CertificateVerification certificateVerification
Definition server.h:113
UA_DurationRange publishingIntervalLimits
Definition server.h:181
UA_Logger logger
Definition server.h:64
UA_PubSubConfiguration pubSubConfig
Definition server.h:224
UA_Nodestore nodestore
Definition server.h:119
UA_Boolean deleteEventCapability
Definition server.h:248
UA_EndpointDescription * endpoints
Definition server.h:102
UA_UInt32 maxSecurityTokenLifetime
Definition server.h:128
UA_UInt32 maxMonitoredItemsPerSubscription
Definition server.h:193
UA_String customHostname
Definition server.h:95
void(* monitoredItemRegisterCallback)(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext, const UA_NodeId *nodeId, void *nodeContext, UA_UInt32 attibuteId, UA_Boolean removed)
Definition server.h:213
UA_UInt16 maxSecureChannels
Definition server.h:127
UA_ApplicationDescription applicationDescription
Definition server.h:71
UA_UInt32 maxNodesPerRegisterNodes
Definition server.h:139
UA_NetworkStatistics ns
Definition server.h:1481
UA_SessionStatistics ss
Definition server.h:1483
UA_SecureChannelStatistics scs
Definition server.h:1482
UA_UInt32 max
Definition server.h:53
UA_UInt32 min
Definition server.h:52
int32_t UA_Int32
Definition types.h:51
_UA_BEGIN_DECLS typedef bool UA_Boolean
This Source Code Form is subject to the terms of the Mozilla Public License, v.
Definition types.h:26
uint16_t UA_UInt16
Definition types.h:46
UA_EXPORT const UA_NodeId UA_NODEID_NULL
uint32_t UA_UInt32
Definition types.h:56
int64_t UA_DateTime
Definition types.h:144
uint32_t UA_StatusCode
Definition types.h:77
double UA_Double
Definition types.h:74
uint8_t UA_Byte
Definition types.h:36
uint64_t UA_UInt64
Definition types.h:66
#define UA_TYPES_NODEID
#define UA_TYPES_VARIANT
#define UA_TYPES_UINT32
#define UA_TYPES_VIEWATTRIBUTES
#define UA_TYPES_LOCALIZEDTEXT
#define UA_TYPES_REFERENCETYPEATTRIBUTES
#define UA_TYPES_INT32
#define UA_TYPES_BOOLEAN
#define UA_TYPES_QUALIFIEDNAME
#define UA_TYPES_DOUBLE
#define UA_TYPES_DATATYPEATTRIBUTES
#define UA_TYPES_DATAVALUE
#define UA_TYPES_VARIABLEATTRIBUTES
#define UA_TYPES_OBJECTTYPEATTRIBUTES
#define UA_TYPES_VARIABLETYPEATTRIBUTES
UA_TimestampsToReturn
const UA_DataType UA_TYPES[191]
#define UA_TYPES_OBJECTATTRIBUTES
UA_Double UA_Duration
#define UA_TYPES_BYTE
UA_NodeClass
@ UA_NODECLASS_OBJECTTYPE
@ UA_NODECLASS_REFERENCETYPE
@ UA_NODECLASS_OBJECT
@ UA_NODECLASS_DATATYPE
@ UA_NODECLASS_VIEW
@ UA_NODECLASS_VARIABLETYPE
@ UA_NODECLASS_VARIABLE
void(* UA_ServerCallback)(UA_Server *server, void *data)
Definition util.h:25