summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/open62541/open62541.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/open62541/open62541.h')
-rw-r--r--src/3rdparty/open62541/open62541.h10762
1 files changed, 6245 insertions, 4517 deletions
diff --git a/src/3rdparty/open62541/open62541.h b/src/3rdparty/open62541/open62541.h
index 5d96866..185fa6d 100644
--- a/src/3rdparty/open62541/open62541.h
+++ b/src/3rdparty/open62541/open62541.h
@@ -1,10 +1,10 @@
/* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
* visit http://open62541.org/ for information about this software
- * Git-Revision: v1.1.2-8-ge941fc23
+ * Git-Revision: v1.3.3
*/
/*
- * Copyright (C) 2014-2018 the contributors as stated in the AUTHORS file
+ * Copyright (C) 2014-2021 the contributors as stated in the AUTHORS file
*
* This file is part of open62541. open62541 is free software: you can
* redistribute it and/or modify it under the terms of the Mozilla Public
@@ -18,7 +18,7 @@
#ifndef OPEN62541_H_
#define OPEN62541_H_
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/build/src_generated/open62541/config.h" ***********************************/
+/**** amalgamated original file "/build/src_generated/open62541/config.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -29,10 +29,11 @@
* open62541 Version
* ----------------- */
#define UA_OPEN62541_VER_MAJOR 1
-#define UA_OPEN62541_VER_MINOR 1
-#define UA_OPEN62541_VER_PATCH 2
-#define UA_OPEN62541_VER_LABEL "-8-ge941fc23" /* Release candidate label, etc. */
-#define UA_OPEN62541_VER_COMMIT "v1.1.2-8-ge941fc23"
+#define UA_OPEN62541_VER_MINOR 3
+#define UA_OPEN62541_VER_PATCH 3
+#define UA_OPEN62541_VER_LABEL "" /* Release candidate label, etc. */
+#define UA_OPEN62541_VER_COMMIT "v1.3.3"
+#define UA_OPEN62541_VERSION "v1.3.3"
/**
* Feature Options
@@ -47,31 +48,35 @@
#define UA_ENABLE_NODEMANAGEMENT
#define UA_ENABLE_SUBSCRIPTIONS
/* #undef UA_ENABLE_PUBSUB */
+/* #undef UA_ENABLE_PUBSUB_ENCRYPTION */
+/* #undef UA_ENABLE_PUBSUB_FILE_CONFIG */
/* #undef UA_ENABLE_PUBSUB_ETH_UADP */
-/* #undef UA_ENABLE_PUBSUB_ETH_UADP_ETF */
-/* #undef UA_ENABLE_PUBSUB_ETH_UADP_XDP */
/* #undef UA_ENABLE_PUBSUB_DELTAFRAMES */
/* #undef UA_ENABLE_PUBSUB_INFORMATIONMODEL */
/* #undef UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS */
#define UA_ENABLE_DA
-/* #undef UA_ENABLE_ENCRYPTION */
+/* #undef UA_ENABLE_DIAGNOSTICS */
#define UA_ENABLE_HISTORIZING
#define UA_ENABLE_PARSING
-/* #undef UA_ENABLE_MICRO_EMB_DEV_PROFILE */
#define UA_ENABLE_EXPERIMENTAL_HISTORIZING
#define UA_ENABLE_SUBSCRIPTIONS_EVENTS
/* #undef UA_ENABLE_JSON_ENCODING */
/* #undef UA_ENABLE_PUBSUB_MQTT */
+/* #undef UA_ENABLE_MQTT_TLS */
+/* #undef UA_ENABLE_MQTT_TLS_OPENSSL */
+/* #undef UA_ENABLE_MQTT_TLS_MBEDTLS */
/* #undef UA_ENABLE_ENCRYPTION_MBEDTLS */
+/* #undef UA_ENABLE_TPM2_SECURITY */
/* #undef UA_ENABLE_ENCRYPTION_OPENSSL */
+/* #undef UA_ENABLE_ENCRYPTION_LIBRESSL */
+#if defined(UA_ENABLE_ENCRYPTION_MBEDTLS) || defined(UA_ENABLE_ENCRYPTION_OPENSSL) || defined(UA_ENABLE_ENCRYPTION_LIBRESSL)
+#define UA_ENABLE_ENCRYPTION
+#endif
/* #undef UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS */
/* Multithreading */
/* #undef UA_ENABLE_IMMUTABLE_NODES */
#define UA_MULTITHREADING 0
-#if UA_MULTITHREADING >= 200 && !defined(UA_ENABLE_IMMUTABLE_NODES)
-#error "The multithreading feature requires nodes to be immutable"
-#endif
/* Advanced Options */
#define UA_ENABLE_STATUSCODE_DESCRIPTIONS
@@ -88,14 +93,16 @@
/* #undef UA_ENABLE_VALGRIND_INTERACTIVE */
#define UA_VALGRIND_INTERACTIVE_INTERVAL 1000
#define UA_GENERATED_NAMESPACE_ZERO
-/* #undef UA_ENABLE_PUBSUB_CUSTOM_PUBLISH_HANDLING */
+/* #undef UA_GENERATED_NAMESPACE_ZERO_FULL */
+/* #undef UA_ENABLE_PUBSUB_MONITORING */
+/* #undef UA_ENABLE_PUBSUB_BUFMALLOC */
/* #undef UA_PACK_DEBIAN */
/* Options for Debugging */
#define UA_DEBUG
/* #undef UA_DEBUG_DUMP_PKGS */
-
+/* #undef UA_DEBUG_FILE_LINE_INFO */
/**
* Function Export
* ---------------
@@ -129,517 +136,31 @@
# endif
#endif
-// specific architectures can undef this
-#define UA_HAS_GETIFADDR
-
-
-
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/architecture_base.h" ***********************************/
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright 2018 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifndef ARCH_UA_ARCHITECTURE_BASE_H
-#define ARCH_UA_ARCHITECTURE_BASE_H
-
-/*
- * With the following list of defines, one can define its own UA_sleep_ms using a preprocessor define.
- * E.g. see unit tests.
- */
-
-#ifdef UA_sleep_ms
-void UA_sleep_ms(unsigned long ms);
-#endif
-
-#ifdef UA_malloc
-void* UA_malloc(unsigned long size);
-#endif
-
-#ifdef UA_calloc
-void* UA_calloc(unsigned long num, unsigned long size); //allocate memory in the heap with size*num bytes and set the memory to zero
-#endif
-
-#ifdef UA_realloc
-void* UA_realloc(void *ptr, unsigned long new_size);//re-allocate memory in the heap with new_size bytes from previously allocated memory ptr
-#endif
-
-#ifdef UA_free
-void UA_free(void* ptr); //de-allocate memory previously allocated with UA_malloc, UA_calloc or UA_realloc
-#endif
-
-#endif //ARCH_UA_ARCHITECTURE_BASE_H
-
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/arch/win32/ua_architecture.h" ***********************************/
-
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- * Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
-#ifdef UA_ARCHITECTURE_WIN32
-
-#ifndef PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
-#define PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
-
-
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-/* Disable some security warnings on MSVC */
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-# define _CRT_SECURE_NO_WARNINGS
-#endif
-
-/* Assume that Windows versions are newer than Windows XP */
-#if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501)
-# undef WINVER
-# undef _WIN32_WINDOWS
-# undef _WIN32_WINNT
-# define WINVER 0x0600
-# define _WIN32_WINDOWS 0x0600
-# define _WIN32_WINNT 0x0600 //windows vista version, which included InepPton
-#endif
-
-#include <stdlib.h>
-#if defined(_WIN32) && !defined(__clang__)
-# include <malloc.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <winsock2.h>
-#include <windows.h>
-#include <ws2tcpip.h>
-
-#if defined (_MSC_VER) || defined(__clang__)
-# ifndef UNDER_CE
-# include <io.h> //access
-# define UA_access _access
-# endif
-#else
-# include <unistd.h> //access and tests
-# define UA_access access
-#endif
-
-#define ssize_t int
-#define OPTVAL_TYPE char
-#ifndef UA_sleep_ms
-# define UA_sleep_ms(X) Sleep(X)
-#endif
-
-// Windows does not support ansi colors
-// #define UA_ENABLE_LOG_COLORS
-
-#define UA_IPV6 1
-
-#if defined(__MINGW32__) && !defined(__clang__) //mingw defines SOCKET as long long unsigned int, giving errors in logging and when comparing with UA_Int32
-# define UA_SOCKET int
-# define UA_INVALID_SOCKET -1
-#else
-# define UA_SOCKET SOCKET
-# define UA_INVALID_SOCKET INVALID_SOCKET
-#endif
-#define UA_ERRNO WSAGetLastError()
-#define UA_INTERRUPTED WSAEINTR
-#define UA_AGAIN WSAEWOULDBLOCK
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK WSAEWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS WSAEWOULDBLOCK
-
-#define UA_fd_set(fd, fds) FD_SET((UA_SOCKET)fd, fds)
-#define UA_fd_isset(fd, fds) FD_ISSET((UA_SOCKET)fd, fds)
-
-#ifdef UNDER_CE
-# define errno
-#endif
-
-#define UA_getnameinfo getnameinfo
-#define UA_send(sockfd, buf, len, flags) send(sockfd, buf, (int)(len), flags)
-#define UA_recv(sockfd, buf, len, flags) recv(sockfd, buf, (int)(len), flags)
-#define UA_sendto(sockfd, buf, len, flags, dest_addr, addrlen) sendto(sockfd, (const char*)(buf), (int)(len), flags, dest_addr, (int) (addrlen))
-#define UA_recvfrom(sockfd, buf, len, flags, src_addr, addrlen) recvfrom(sockfd, (char*)(buf), (int)(len), flags, src_addr, addrlen)
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close closesocket
-#define UA_select(nfds, readfds, writefds, exceptfds, timeout) select((int)(nfds), readfds, writefds, exceptfds, timeout)
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect(sockfd, addr, addrlen) connect(sockfd, addr, (int)(addrlen))
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt(sockfd, level, optname, optval, optlen) setsockopt(sockfd, level, optname, (const char*) (optval), optlen)
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname
-#define UA_getsockname getsockname
-#define UA_inet_pton InetPton
-
-#if UA_IPV6
-# include <iphlpapi.h>
-# define UA_if_nametoindex if_nametoindex
-#endif
-
-#ifdef maxStringLength //defined in mingw64
-# undef maxStringLength
-#endif
-
-#ifndef UA_free
-#define UA_free free
-#endif
-#ifndef UA_malloc
-#define UA_malloc malloc
-#endif
-#ifndef UA_calloc
-#define UA_calloc calloc
-#endif
-#ifndef UA_realloc
-#define UA_realloc realloc
-#endif
-
-/* 3rd Argument is the string */
-#define UA_snprintf(source, size, ...) _snprintf_s(source, size, _TRUNCATE, __VA_ARGS__)
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
- char *errno_str = NULL; \
- FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
- NULL, WSAGetLastError(), \
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
- (LPSTR)&errno_str, 0, NULL); \
- LOG; \
- LocalFree(errno_str); \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP UA_LOG_SOCKET_ERRNO_WRAP
-
-#if UA_MULTITHREADING >= 100
-#define UA_LOCK_TYPE(mutexName) CRITICAL_SECTION mutexName; \
- int mutexName##Counter;
-#define UA_LOCK_INIT(mutexName) InitializeCriticalSection(&mutexName); \
- mutexName##Counter = 0;;
-#define UA_LOCK_DESTROY(mutexName) DeleteCriticalSection(&mutexName);
-#define UA_LOCK(mutexName) EnterCriticalSection(&mutexName); \
- UA_assert(++(mutexName##Counter) == 1);
-#define UA_UNLOCK(mutexName) UA_assert(--(mutexName##Counter) == 0); \
- LeaveCriticalSection(&mutexName);
-#define UA_LOCK_ASSERT(mutexName, num) UA_assert(mutexName##Counter == num);
-#else
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_TYPE_POINTER(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-
-/* Fix redefinition of SLIST_ENTRY on mingw winnt.h */
-#if !defined(_SYS_QUEUE_H_) && defined(SLIST_ENTRY)
-# undef SLIST_ENTRY
-#endif
-
-#endif /* PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_ */
-
-#endif /* UA_ARCHITECTURE_WIN32 */
-
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/arch/posix/ua_architecture.h" ***********************************/
-
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
- *
- * Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
- * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- */
-
+/**
+ * POSIX Feature Flags
+ * -------------------
+ * These feature flags have to be set before including the first POSIX
+ * header. */
#ifdef UA_ARCHITECTURE_POSIX
-
-
-
-/* Enable POSIX features */
-#if !defined(_XOPEN_SOURCE)
-# define _XOPEN_SOURCE 600
-#endif
-#ifndef _DEFAULT_SOURCE
-# define _DEFAULT_SOURCE
-#endif
+# if !defined(_XOPEN_SOURCE)
+# define _XOPEN_SOURCE 600
+# endif
+# ifndef _DEFAULT_SOURCE
+# define _DEFAULT_SOURCE
+# endif
/* On older systems we need to define _BSD_SOURCE.
* _DEFAULT_SOURCE is an alias for that. */
-#ifndef _BSD_SOURCE
-# define _BSD_SOURCE
-#endif
-
-#include <errno.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/ioctl.h>
-#include <sys/select.h>
-#include <sys/types.h>
-#include <net/if.h>
-#ifndef UA_sleep_ms
-# include <unistd.h>
-# define UA_sleep_ms(X) usleep(X * 1000)
-#endif
-
-#define OPTVAL_TYPE int
-
-#include <fcntl.h>
-#include <unistd.h> // read, write, close
-
-#ifdef __QNX__
-# include <sys/socket.h>
-#endif
-#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
-# include <sys/param.h>
-# if defined(BSD)
-# include<sys/socket.h>
+# ifndef _BSD_SOURCE
+# define _BSD_SOURCE
# endif
#endif
-#if !defined(__CYGWIN__)
-# include <netinet/tcp.h>
-#endif
-
-/* unsigned int for windows and workaround to a glibc bug */
-/* Additionally if GNU_LIBRARY is not defined, it may be using
- * musl libc (e.g. Docker Alpine) */
-#if defined(__OpenBSD__) || \
- (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \
- (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \
- !defined(__GNU_LIBRARY__))
-# define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
-# define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
-#else
-# define UA_fd_set(fd, fds) FD_SET(fd, fds)
-# define UA_fd_isset(fd, fds) FD_ISSET(fd, fds)
-#endif
-
-#define UA_access access
-
-#define UA_IPV6 1
-#define UA_SOCKET int
-#define UA_INVALID_SOCKET -1
-#define UA_ERRNO errno
-#define UA_INTERRUPTED EINTR
-#define UA_AGAIN EAGAIN
-#define UA_EAGAIN EAGAIN
-#define UA_WOULDBLOCK EWOULDBLOCK
-#define UA_ERR_CONNECTION_PROGRESS EINPROGRESS
-
-#define UA_ENABLE_LOG_COLORS
-
-#define UA_getnameinfo getnameinfo
-#define UA_send send
-#define UA_recv recv
-#define UA_sendto sendto
-#define UA_recvfrom recvfrom
-#define UA_htonl htonl
-#define UA_ntohl ntohl
-#define UA_close close
-#define UA_select select
-#define UA_shutdown shutdown
-#define UA_socket socket
-#define UA_bind bind
-#define UA_listen listen
-#define UA_accept accept
-#define UA_connect connect
-#define UA_getaddrinfo getaddrinfo
-#define UA_getsockopt getsockopt
-#define UA_setsockopt setsockopt
-#define UA_freeaddrinfo freeaddrinfo
-#define UA_gethostname gethostname
-#define UA_getsockname getsockname
-#define UA_inet_pton inet_pton
-#if UA_IPV6
-# define UA_if_nametoindex if_nametoindex
-#endif
-
-#ifdef UA_ENABLE_MALLOC_SINGLETON
-extern void * (*UA_globalMalloc)(size_t size);
-extern void (*UA_globalFree)(void *ptr);
-extern void * (*UA_globalCalloc)(size_t nelem, size_t elsize);
-extern void * (*UA_globalRealloc)(void *ptr, size_t size);
-# define UA_free(ptr) UA_globalFree(ptr)
-# define UA_malloc(size) UA_globalMalloc(size)
-# define UA_calloc(num, size) UA_globalCalloc(num, size)
-# define UA_realloc(ptr, size) UA_globalRealloc(ptr, size)
-#endif
-
-#include <stdlib.h>
-#ifndef UA_free
-# define UA_free free
-#endif
-#ifndef UA_malloc
-# define UA_malloc malloc
-#endif
-#ifndef UA_calloc
-# define UA_calloc calloc
-#endif
-#ifndef UA_realloc
-# define UA_realloc realloc
-#endif
-
-#include <stdio.h>
-#define UA_snprintf snprintf
-
-#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
- char *errno_str = strerror(errno); \
- LOG; \
-}
-#define UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) { \
- const char *errno_str = gai_strerror(errno); \
- LOG; \
-}
-
-#if UA_MULTITHREADING >= 100
-#include <pthread.h>
-#define Sleep(x) sleep(x / 1000)
-#define UA_LOCK_TYPE(mutexName) pthread_mutex_t mutexName; \
- pthread_mutexattr_t mutexName##_attr; \
- int mutexName##Counter;
-#define UA_LOCK_INIT(mutexName) pthread_mutexattr_init(&mutexName##_attr); \
- pthread_mutexattr_settype(&mutexName##_attr, PTHREAD_MUTEX_RECURSIVE); \
- pthread_mutex_init(&mutexName, &mutexName##_attr); \
- mutexName##Counter = 0;
-#define UA_LOCK_DESTROY(mutexName) pthread_mutex_destroy(&mutexName); \
- pthread_mutexattr_destroy(&mutexName##_attr);
-
-#define UA_LOCK(mutexName) pthread_mutex_lock(&mutexName); \
- UA_assert(++(mutexName##Counter) == 1); \
-
-#define UA_UNLOCK(mutexName) UA_assert(--(mutexName##Counter) == 0); \
- pthread_mutex_unlock(&mutexName);
-#define UA_LOCK_ASSERT(mutexName, num) UA_assert(mutexName##Counter == num);
-#else
-#define UA_LOCK_TYPE(mutexName)
-#define UA_LOCK_INIT(mutexName)
-#define UA_LOCK_DESTROY(mutexName)
-#define UA_LOCK(mutexName)
-#define UA_UNLOCK(mutexName)
-#define UA_LOCK_ASSERT(mutexName, num)
-#endif
-
-
-#if defined(__APPLE__) && defined(_SYS_QUEUE_H_)
-// in some compilers there's already a _SYS_QUEUE_H_ which is included first and doesn't have all functions
-
-#undef SLIST_HEAD
-#undef SLIST_HEAD_INITIALIZER
-#undef SLIST_ENTRY
-#undef SLIST_FIRST
-#undef SLIST_END
-#undef SLIST_EMPTY
-#undef SLIST_NEXT
-#undef SLIST_FOREACH
-#undef SLIST_FOREACH_SAFE
-#undef SLIST_INIT
-#undef SLIST_INSERT_AFTER
-#undef SLIST_INSERT_HEAD
-#undef SLIST_REMOVE_AFTER
-#undef SLIST_REMOVE_HEAD
-#undef SLIST_REMOVE
-#undef LIST_HEAD
-#undef LIST_HEAD_INITIALIZER
-#undef LIST_ENTRY
-#undef LIST_FIRST
-#undef LIST_END
-#undef LIST_EMPTY
-#undef LIST_NEXT
-#undef LIST_FOREACH
-#undef LIST_FOREACH_SAFE
-#undef LIST_INIT
-#undef LIST_INSERT_AFTER
-#undef LIST_INSERT_BEFORE
-#undef LIST_INSERT_HEAD
-#undef LIST_REMOVE
-#undef LIST_REPLACE
-#undef SIMPLEQ_HEAD
-#undef SIMPLEQ_HEAD_INITIALIZER
-#undef SIMPLEQ_ENTRY
-#undef SIMPLEQ_FIRST
-#undef SIMPLEQ_END
-#undef SIMPLEQ_EMPTY
-#undef SIMPLEQ_NEXT
-#undef SIMPLEQ_FOREACH
-#undef SIMPLEQ_FOREACH_SAFE
-#undef SIMPLEQ_INIT
-#undef SIMPLEQ_INSERT_HEAD
-#undef SIMPLEQ_INSERT_TAIL
-#undef SIMPLEQ_INSERT_AFTER
-#undef SIMPLEQ_REMOVE_HEAD
-#undef SIMPLEQ_REMOVE_AFTER
-#undef XSIMPLEQ_HEAD
-#undef XSIMPLEQ_ENTRY
-#undef XSIMPLEQ_XOR
-#undef XSIMPLEQ_FIRST
-#undef XSIMPLEQ_END
-#undef XSIMPLEQ_EMPTY
-#undef XSIMPLEQ_NEXT
-#undef XSIMPLEQ_FOREACH
-#undef XSIMPLEQ_FOREACH_SAFE
-#undef XSIMPLEQ_INIT
-#undef XSIMPLEQ_INSERT_HEAD
-#undef XSIMPLEQ_INSERT_TAIL
-#undef XSIMPLEQ_INSERT_AFTER
-#undef XSIMPLEQ_REMOVE_HEAD
-#undef XSIMPLEQ_REMOVE_AFTER
-#undef TAILQ_HEAD
-#undef TAILQ_HEAD_INITIALIZER
-#undef TAILQ_ENTRY
-#undef TAILQ_FIRST
-#undef TAILQ_END
-#undef TAILQ_NEXT
-#undef TAILQ_LAST
-#undef TAILQ_PREV
-#undef TAILQ_EMPTY
-#undef TAILQ_FOREACH
-#undef TAILQ_FOREACH_SAFE
-#undef TAILQ_FOREACH_REVERSE
-#undef TAILQ_FOREACH_REVERSE_SAFE
-#undef TAILQ_INIT
-#undef TAILQ_INSERT_HEAD
-#undef TAILQ_INSERT_TAIL
-#undef TAILQ_INSERT_AFTER
-#undef TAILQ_INSERT_BEFORE
-#undef TAILQ_REMOVE
-#undef TAILQ_REPLACE
-#undef CIRCLEQ_HEAD
-#undef CIRCLEQ_HEAD_INITIALIZER
-#undef CIRCLEQ_ENTRY
-#undef CIRCLEQ_FIRST
-#undef CIRCLEQ_LAST
-#undef CIRCLEQ_END
-#undef CIRCLEQ_NEXT
-#undef CIRCLEQ_PREV
-#undef CIRCLEQ_EMPTY
-#undef CIRCLEQ_FOREACH
-#undef CIRCLEQ_FOREACH_SAFE
-#undef CIRCLEQ_FOREACH_REVERSE
-#undef CIRCLEQ_FOREACH_REVERSE_SAFE
-#undef CIRCLEQ_INIT
-#undef CIRCLEQ_INSERT_AFTER
-#undef CIRCLEQ_INSERT_BEFORE
-#undef CIRCLEQ_INSERT_HEAD
-#undef CIRCLEQ_INSERT_TAIL
-#undef CIRCLEQ_REMOVE
-#undef CIRCLEQ_REPLACE
-
-#undef _SYS_QUEUE_H_
-
-#endif /* defined(__APPLE__) && defined(_SYS_QUEUE_H_) */
+// specific architectures can undef this
+#define UA_HAS_GETIFADDR
-#endif /* UA_ARCHITECTURE_POSIX */
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/deps/ms_stdint.h" ***********************************/
+/**** amalgamated original file "/deps/ms_stdint.h" ****/
// ISO C9x compliant stdint.h for Microsoft Visual Studio
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
@@ -896,7 +417,7 @@ typedef uint64_t uintmax_t;
#endif // !defined(_MSC_VER) || _MSC_VER >= 1600 ]
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/architecture_definitions.h" ***********************************/
+/**** amalgamated original file "/include/open62541/architecture_definitions.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -937,33 +458,92 @@ typedef uint64_t uintmax_t;
# define __PRI_8_LENGTH_MODIFIER__ "hh"
# define __PRI_64_LENGTH_MODIFIER__ "ll"
-# define PRId8 __PRI_8_LENGTH_MODIFIER__ "d"
-# define PRIi8 __PRI_8_LENGTH_MODIFIER__ "i"
-# define PRIo8 __PRI_8_LENGTH_MODIFIER__ "o"
-# define PRIu8 __PRI_8_LENGTH_MODIFIER__ "u"
-# define PRIx8 __PRI_8_LENGTH_MODIFIER__ "x"
-# define PRIX8 __PRI_8_LENGTH_MODIFIER__ "X"
-
-# define PRId16 "hd"
-# define PRIi16 "hi"
-# define PRIo16 "ho"
-# define PRIu16 "hu"
-# define PRIx16 "hx"
-# define PRIX16 "hX"
-
-# define PRId32 "ld"
-# define PRIi32 "li"
-# define PRIo32 "lo"
-# define PRIu32 "lu"
-# define PRIx32 "lx"
-# define PRIX32 "lX"
-
-# define PRId64 __PRI_64_LENGTH_MODIFIER__ "d"
-# define PRIi64 __PRI_64_LENGTH_MODIFIER__ "i"
-# define PRIo64 __PRI_64_LENGTH_MODIFIER__ "o"
-# define PRIu64 __PRI_64_LENGTH_MODIFIER__ "u"
-# define PRIx64 __PRI_64_LENGTH_MODIFIER__ "x"
-# define PRIX64 __PRI_64_LENGTH_MODIFIER__ "X"
+# define PRId8 __PRI_8_LENGTH_MODIFIER__ "d"
+# define PRIi8 __PRI_8_LENGTH_MODIFIER__ "i"
+# define PRIo8 __PRI_8_LENGTH_MODIFIER__ "o"
+# define PRIu8 __PRI_8_LENGTH_MODIFIER__ "u"
+# define PRIx8 __PRI_8_LENGTH_MODIFIER__ "x"
+# define PRIX8 __PRI_8_LENGTH_MODIFIER__ "X"
+
+# define PRId16 "hd"
+# define PRIi16 "hi"
+# define PRIo16 "ho"
+# define PRIu16 "hu"
+# define PRIx16 "hx"
+# define PRIX16 "hX"
+
+# define PRId32 "ld"
+# define PRIi32 "li"
+# define PRIo32 "lo"
+# define PRIu32 "lu"
+# define PRIx32 "lx"
+# define PRIX32 "lX"
+
+# define PRId64 __PRI_64_LENGTH_MODIFIER__ "d"
+# define PRIi64 __PRI_64_LENGTH_MODIFIER__ "i"
+# define PRIo64 __PRI_64_LENGTH_MODIFIER__ "o"
+# define PRIu64 __PRI_64_LENGTH_MODIFIER__ "u"
+# define PRIx64 __PRI_64_LENGTH_MODIFIER__ "x"
+# define PRIX64 __PRI_64_LENGTH_MODIFIER__ "X"
+#endif
+
+/**
+ * Thread-local variables
+ * ---------------------- */
+#if UA_MULTITHREADING >= 100
+# if defined(__GNUC__) /* Also covers clang */
+# define UA_THREAD_LOCAL __thread
+# elif defined(_MSC_VER)
+# define UA_THREAD_LOCAL __declspec(thread)
+# endif
+#endif
+#ifndef UA_THREAD_LOCAL
+# define UA_THREAD_LOCAL
+#endif
+
+/**
+ * Memory Management
+ * -----------------
+ *
+ * The flag ``UA_ENABLE_MALLOC_SINGLETON`` enables singleton (global) variables
+ * with method pointers for memory management (malloc et al.). The method
+ * pointers can be switched out at runtime. Use-cases for this are testing of
+ * constrained memory conditions and arena-based custom memory management.
+ *
+ * If the flag is undefined, then ``UA_malloc`` etc. are set to the default
+ * malloc, as defined in ``/arch/<architecture>/ua_architecture.h``.
+ */
+
+#ifdef UA_ENABLE_MALLOC_SINGLETON
+extern UA_THREAD_LOCAL void * (*UA_mallocSingleton)(size_t size);
+extern UA_THREAD_LOCAL void (*UA_freeSingleton)(void *ptr);
+extern UA_THREAD_LOCAL void * (*UA_callocSingleton)(size_t nelem, size_t elsize);
+extern UA_THREAD_LOCAL void * (*UA_reallocSingleton)(void *ptr, size_t size);
+# define UA_malloc(size) UA_mallocSingleton(size)
+# define UA_free(ptr) UA_freeSingleton(ptr)
+# define UA_calloc(num, size) UA_callocSingleton(num, size)
+# define UA_realloc(ptr, size) UA_reallocSingleton(ptr, size)
+#endif
+
+/* Stack-allocation of memory. Use C99 variable-length arrays if possible.
+ * Otherwise revert to alloca. Note that alloca is not supported on some
+ * plattforms. */
+#ifndef UA_STACKARRAY
+# if defined(__GNUC__) || defined(__clang__)
+# define UA_STACKARRAY(TYPE, NAME, SIZE) TYPE NAME[SIZE]
+# else
+# if defined(__GNUC__) || defined(__clang__)
+# define UA_alloca(size) __builtin_alloca (size)
+# elif defined(_WIN32)
+# define UA_alloca(SIZE) _alloca(SIZE)
+# else
+# include <alloca.h>
+# define UA_alloca(SIZE) alloca(SIZE)
+# endif
+# define UA_STACKARRAY(TYPE, NAME, SIZE) \
+ /* cppcheck-suppress allocaCalled */ \
+ TYPE *(NAME) = (TYPE*)UA_alloca(sizeof(TYPE) * (SIZE))
+# endif
#endif
/**
@@ -1001,6 +581,10 @@ typedef uint64_t uintmax_t;
# define UA_STATIC_ASSERT(cond,msg) typedef char static_assertion_##msg[(cond)?1:-1]
#endif
+/**
+ * Dynamic Linking
+ * ---------------
+ * Explicit attribute for functions to be exported in a shared library. */
#if defined(_WIN32) && defined(UA_DYNAMIC_LINKING)
# ifdef UA_DYNAMIC_LINKING_EXPORT /* export dll */
# ifdef __GNUC__
@@ -1024,6 +608,13 @@ typedef uint64_t uintmax_t;
# define UA_EXPORT /* fallback to default */
#endif
+/**
+ * Threadsafe functions
+ * --------------------
+ * Functions that can be called from independent threads are marked with
+ * the UA_THREADSAFE macro. This is currently only an information for the
+ * developer. It can be used in the future for instrumentation and static
+ * code analysis. */
#define UA_THREADSAFE
/**
@@ -1042,11 +633,25 @@ typedef uint64_t uintmax_t;
# define UA_RESTRICT __restrict
#elif defined(__GNUC__)
# define UA_RESTRICT __restrict__
+#elif defined(__CODEGEARC__)
+# define UA_RESTRICT _RESTRICT
#else
# define UA_RESTRICT restrict
#endif
/**
+ * Likely/Unlikely Conditions
+ * --------------------------
+ * Condition is likely/unlikely, to help branch prediction. */
+#if defined(__GNUC__) || defined(__clang__)
+# define UA_LIKELY(x) __builtin_expect((x), 1)
+# define UA_UNLIKELY(x) __builtin_expect((x), 0)
+#else
+# define UA_LIKELY(x) x
+# define UA_UNLIKELY(x) x
+#endif
+
+/**
* Function attributes
* ------------------- */
#if defined(__GNUC__) || defined(__clang__)
@@ -1055,6 +660,13 @@ typedef uint64_t uintmax_t;
# define UA_FUNC_ATTR_CONST __attribute__((const))
# define UA_FUNC_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# define UA_FORMAT(X,Y) __attribute__ ((format (printf, X, Y)))
+#elif defined(_MSC_VER) && _MSC_VER >= 1800
+# include <sal.h>
+# define UA_FUNC_ATTR_MALLOC
+# define UA_FUNC_ATTR_PURE
+# define UA_FUNC_ATTR_CONST
+# define UA_FUNC_ATTR_WARN_UNUSED_RESULT _Check_return_
+# define UA_FORMAT(X,Y)
#else
# define UA_FUNC_ATTR_MALLOC
# define UA_FUNC_ATTR_PURE
@@ -1079,13 +691,15 @@ typedef uint64_t uintmax_t;
* warnings are only triggered for internal code. */
#if defined(UA_INTERNAL) && (defined(__GNUC__) || defined(__clang__))
-# define UA_INTERNAL_DEPRECATED _Pragma ("GCC warning \"Macro is deprecated for internal use\"")
+# define UA_INTERNAL_DEPRECATED \
+ _Pragma ("GCC warning \"Macro is deprecated for internal use\"")
#else
# define UA_INTERNAL_DEPRECATED
#endif
#if defined(UA_INTERNAL) && (defined(__GNUC__) || defined(__clang__))
-# define UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# define UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT \
+ __attribute__((warn_unused_result))
#else
# define UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT
#endif
@@ -1202,13 +816,12 @@ UA_STATIC_ASSERT(sizeof(bool) == 1, cannot_overlay_integers_with_large_bool);
# define UA_BINARY_OVERLAYABLE_FLOAT 0
#endif
-
/* Atomic Operations
* -----------------
* Atomic operations that synchronize across processor cores (for
* multithreading). Only the inline-functions defined next are used. Replace
* with architecture-specific operations if necessary. */
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
#define UA_atomic_sync() _ReadWriteBarrier()
#else /* GCC/Clang */
@@ -1220,7 +833,7 @@ UA_STATIC_ASSERT(sizeof(bool) == 1, cannot_overlay_integers_with_large_bool);
static UA_INLINE void *
UA_atomic_xchg(void * volatile * addr, void *newptr) {
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
return _InterlockedExchangePointer(addr, newptr);
#else /* GCC/Clang */
@@ -1235,7 +848,7 @@ UA_atomic_xchg(void * volatile * addr, void *newptr) {
static UA_INLINE void *
UA_atomic_cmpxchg(void * volatile * addr, void *expected, void *newptr) {
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
return _InterlockedCompareExchangePointer(addr, expected, newptr);
#else /* GCC/Clang */
@@ -1252,7 +865,7 @@ UA_atomic_cmpxchg(void * volatile * addr, void *expected, void *newptr) {
static UA_INLINE uint32_t
UA_atomic_addUInt32(volatile uint32_t *addr, uint32_t increase) {
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
return _InterlockedExchangeAdd(addr, increase) + increase;
#else /* GCC/Clang */
@@ -1268,7 +881,7 @@ UA_atomic_addUInt32(volatile uint32_t *addr, uint32_t increase) {
static UA_INLINE size_t
UA_atomic_addSize(volatile size_t *addr, size_t increase) {
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
return _InterlockedExchangeAdd(addr, increase) + increase;
#else /* GCC/Clang */
@@ -1284,7 +897,7 @@ UA_atomic_addSize(volatile size_t *addr, size_t increase) {
static UA_INLINE uint32_t
UA_atomic_subUInt32(volatile uint32_t *addr, uint32_t decrease) {
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
return _InterlockedExchangeSub(addr, decrease) - decrease;
#else /* GCC/Clang */
@@ -1300,7 +913,7 @@ UA_atomic_subUInt32(volatile uint32_t *addr, uint32_t decrease) {
static UA_INLINE size_t
UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
-#if UA_MULTITHREADING >= 200
+#if UA_MULTITHREADING >= 100
#ifdef _MSC_VER /* Visual Studio */
return _InterlockedExchangeSub(addr, decrease) - decrease;
#else /* GCC/Clang */
@@ -1315,12 +928,534 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
}
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/build/src_generated/open62541/statuscodes.h" ***********************************/
+/**** amalgamated original file "/arch/win32/ua_architecture.h" ****/
+
+/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
+ * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
+ *
+ * Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
+ * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
+ * Copyright 2021 (c) Christian von Arnim, ISW University of Stuttgart (for VDW and umati)
+ */
+
+#ifdef UA_ARCHITECTURE_WIN32
+
+#ifndef PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
+#define PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_
+
+#ifndef _BSD_SOURCE
+# define _BSD_SOURCE
+#endif
+
+/* Disable some security warnings on MSVC */
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+# define _CRT_SECURE_NO_WARNINGS
+#endif
+
+/* Assume that Windows versions are newer than Windows XP */
+#if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501)
+# undef WINVER
+# undef _WIN32_WINDOWS
+# undef _WIN32_WINNT
+# define WINVER 0x0600
+# define _WIN32_WINDOWS 0x0600
+# define _WIN32_WINNT 0x0600 //windows vista version, which included InepPton
+#endif
+
+#include <stdlib.h>
+#if defined(_WIN32) && !defined(__clang__)
+# include <malloc.h>
+#endif
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <winsock2.h>
+#include <windows.h>
+#include <ws2tcpip.h>
+#include <winsock2.h>
+
+#if defined (_MSC_VER) || defined(__clang__)
+# ifndef UNDER_CE
+# include <io.h> //access
+# define UA_access _access
+# endif
+#else
+# include <unistd.h> //access and tests
+# define UA_access access
+#endif
+
+#ifndef _SSIZE_T_DEFINED
+# define ssize_t int
+#endif
+
+#define OPTVAL_TYPE int
+#ifdef UA_sleep_ms
+void UA_sleep_ms(unsigned long ms);
+#else
+# define UA_sleep_ms(X) Sleep(X)
+#endif
+
+// Windows does not support ansi colors
+// #define UA_ENABLE_LOG_COLORS
+
+#define UA_IPV6 1
+
+#if defined(__MINGW32__) && !defined(__clang__) //mingw defines SOCKET as long long unsigned int, giving errors in logging and when comparing with UA_Int32
+# define UA_SOCKET int
+# define UA_INVALID_SOCKET -1
+#else
+# define UA_SOCKET SOCKET
+# define UA_INVALID_SOCKET INVALID_SOCKET
+#endif
+#define UA_ERRNO WSAGetLastError()
+#define UA_INTERRUPTED WSAEINTR
+#define UA_AGAIN WSAEWOULDBLOCK
+#define UA_EAGAIN EAGAIN
+#define UA_WOULDBLOCK WSAEWOULDBLOCK
+#define UA_ERR_CONNECTION_PROGRESS WSAEWOULDBLOCK
+
+#define UA_POLLIN POLLRDNORM
+#define UA_POLLOUT POLLWRNORM
+
+#define UA_fd_set(fd, fds) FD_SET((UA_SOCKET)fd, fds)
+#define UA_fd_isset(fd, fds) FD_ISSET((UA_SOCKET)fd, fds)
+
+#ifdef UNDER_CE
+# define errno
+#endif
+
+#define UA_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) \
+ getnameinfo(sa, (socklen_t)salen, host, (DWORD)hostlen, serv, (DWORD)servlen, flags)
+#define UA_poll(fds,nfds,timeout) WSAPoll((LPWSAPOLLFD)fds, nfds, timeout)
+#define UA_send(sockfd, buf, len, flags) send(sockfd, buf, (int)(len), flags)
+#define UA_recv(sockfd, buf, len, flags) recv(sockfd, buf, (int)(len), flags)
+#define UA_sendto(sockfd, buf, len, flags, dest_addr, addrlen) sendto(sockfd, (const char*)(buf), (int)(len), flags, dest_addr, (int) (addrlen))
+#define UA_recvfrom(sockfd, buf, len, flags, src_addr, addrlen) recvfrom(sockfd, (char*)(buf), (int)(len), flags, src_addr, addrlen)
+#define UA_recvmsg
+#define UA_htonl htonl
+#define UA_ntohl ntohl
+#define UA_close closesocket
+#define UA_select(nfds, readfds, writefds, exceptfds, timeout) select((int)(nfds), readfds, writefds, exceptfds, timeout)
+#define UA_shutdown shutdown
+#define UA_socket socket
+#define UA_bind bind
+#define UA_listen listen
+#define UA_accept accept
+#define UA_connect(sockfd, addr, addrlen) connect(sockfd, addr, (int)(addrlen))
+#define UA_getaddrinfo getaddrinfo
+#define UA_getsockopt(sockfd, level, optname, optval, optlen) getsockopt(sockfd, level, optname, (char*) (optval), optlen)
+#define UA_setsockopt(sockfd, level, optname, optval, optlen) setsockopt(sockfd, level, optname, (const char*) (optval), optlen)
+#define UA_ioctl
+#define UA_freeaddrinfo freeaddrinfo
+#define UA_gethostname gethostname
+#define UA_getsockname getsockname
+#define UA_inet_pton InetPton
+
+#if UA_IPV6
+# if defined(__WINCRYPT_H__) && defined(UA_ENABLE_ENCRYPTION_LIBRESSL)
+# error "Wincrypt is not compatible with LibreSSL"
+# endif
+# ifdef UA_ENABLE_ENCRYPTION_LIBRESSL
+/* Hack: Prevent Wincrypt-Includes */
+# define __WINCRYPT_H__
+# endif
+
+# include <iphlpapi.h>
+
+# ifdef UA_ENABLE_ENCRYPTION_LIBRESSL
+# undef __WINCRYPT_H__
+# endif
-/*---------------------------------------------------------
- * Autogenerated -- do not modify
- * Generated from /home/pdie/sonstiges/qtopcua/repos/open62541/tools/schema/StatusCode.csv with script /home/pdie/sonstiges/qtopcua/repos/open62541/tools/generate_statuscode_descriptions.py
- *-------------------------------------------------------*/
+# define UA_if_nametoindex if_nametoindex
+#endif
+
+#ifdef maxStringLength //defined in mingw64
+# undef maxStringLength
+#endif
+
+/* Use the standard malloc */
+#ifndef UA_free
+# define UA_free free
+# define UA_malloc malloc
+# define UA_calloc calloc
+# define UA_realloc realloc
+#endif
+
+#ifdef __CODEGEARC__
+#define _snprintf_s(a,b,c,...) snprintf(a,b,__VA_ARGS__)
+#endif
+
+/* 3rd Argument is the string */
+#define UA_snprintf(source, size, ...) _snprintf_s(source, size, _TRUNCATE, __VA_ARGS__)
+#define UA_strncasecmp _strnicmp
+
+#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
+ char *errno_str = NULL; \
+ FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
+ NULL, WSAGetLastError(), \
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
+ (LPSTR)&errno_str, 0, NULL); \
+ LOG; \
+ LocalFree(errno_str); \
+}
+#define UA_LOG_SOCKET_ERRNO_GAI_WRAP UA_LOG_SOCKET_ERRNO_WRAP
+
+#if UA_MULTITHREADING >= 100
+
+typedef struct {
+ CRITICAL_SECTION mutex;
+ int mutexCounter;
+} UA_Lock;
+
+static UA_INLINE void
+UA_LOCK_INIT(UA_Lock *lock) {
+ InitializeCriticalSection(&lock->mutex);
+ lock->mutexCounter = 0;
+}
+
+static UA_INLINE void
+UA_LOCK_DESTROY(UA_Lock *lock) {
+ DeleteCriticalSection(&lock->mutex);
+}
+
+static UA_INLINE void
+UA_LOCK(UA_Lock *lock) {
+ EnterCriticalSection(&lock->mutex);
+ UA_assert(++(lock->mutexCounter) == 1);
+}
+
+static UA_INLINE void
+UA_UNLOCK(UA_Lock *lock) {
+ UA_assert(--(lock->mutexCounter) == 0);
+ LeaveCriticalSection(&lock->mutex);
+}
+
+static UA_INLINE void
+UA_LOCK_ASSERT(UA_Lock *lock, int num) {
+ UA_assert(lock->mutexCounter == num);
+}
+#else
+#define UA_LOCK_INIT(lock)
+#define UA_LOCK_DESTROY(lock)
+#define UA_LOCK(lock)
+#define UA_UNLOCK(lock)
+#define UA_LOCK_ASSERT(lock, num)
+#endif
+
+
+/* Fix redefinition of SLIST_ENTRY on mingw winnt.h */
+#if !defined(_SYS_QUEUE_H_) && defined(SLIST_ENTRY)
+# undef SLIST_ENTRY
+#endif
+
+#endif /* PLUGINS_ARCH_WIN32_UA_ARCHITECTURE_H_ */
+
+#endif /* UA_ARCHITECTURE_WIN32 */
+
+/**** amalgamated original file "/arch/posix/ua_architecture.h" ****/
+
+/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
+ * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
+ *
+ * Copyright 2016-2017 (c) Julius Pfrommer, Fraunhofer IOSB
+ * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
+ */
+
+#ifdef UA_ARCHITECTURE_POSIX
+
+
+
+#include <errno.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <sys/ioctl.h>
+#include <sys/select.h>
+#include <sys/types.h>
+#include <net/if.h>
+#include <poll.h>
+#ifdef UA_sleep_ms
+void UA_sleep_ms(unsigned long ms);
+#else
+# include <unistd.h>
+# define UA_sleep_ms(X) usleep(X * 1000)
+#endif
+
+#define OPTVAL_TYPE int
+
+#include <fcntl.h>
+#include <unistd.h> // read, write, close
+
+#ifdef __QNX__
+# include <sys/socket.h>
+#endif
+#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
+# include <sys/param.h>
+# if defined(BSD)
+# include<sys/socket.h>
+# endif
+#endif
+
+#include <netinet/tcp.h>
+
+/* unsigned int for windows and workaround to a glibc bug */
+/* Additionally if GNU_LIBRARY is not defined, it may be using
+ * musl libc (e.g. Docker Alpine) */
+#if defined(__OpenBSD__) || \
+ (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \
+ (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \
+ !defined(__GNU_LIBRARY__))
+# define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds)
+# define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds)
+#else
+# define UA_fd_set(fd, fds) FD_SET(fd, fds)
+# define UA_fd_isset(fd, fds) FD_ISSET(fd, fds)
+#endif
+
+#define UA_access access
+
+#define UA_IPV6 1
+#define UA_SOCKET int
+#define UA_INVALID_SOCKET -1
+#define UA_ERRNO errno
+#define UA_INTERRUPTED EINTR
+#define UA_AGAIN EAGAIN
+#define UA_EAGAIN EAGAIN
+#define UA_WOULDBLOCK EWOULDBLOCK
+#define UA_ERR_CONNECTION_PROGRESS EINPROGRESS
+
+#define UA_POLLIN POLLIN
+#define UA_POLLOUT POLLOUT
+
+#define UA_ENABLE_LOG_COLORS
+
+#define UA_poll poll
+#define UA_getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) \
+ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
+#define UA_send send
+#define UA_recv recv
+#define UA_sendto sendto
+#define UA_recvfrom recvfrom
+#define UA_recvmsg recvmsg
+#define UA_htonl htonl
+#define UA_ntohl ntohl
+#define UA_close close
+#define UA_select select
+#define UA_shutdown shutdown
+#define UA_socket socket
+#define UA_bind bind
+#define UA_listen listen
+#define UA_accept accept
+#define UA_connect connect
+#define UA_getaddrinfo getaddrinfo
+#define UA_getsockopt getsockopt
+#define UA_setsockopt setsockopt
+#define UA_ioctl ioctl
+#define UA_freeaddrinfo freeaddrinfo
+#define UA_gethostname gethostname
+#define UA_getsockname getsockname
+#define UA_inet_pton inet_pton
+#if UA_IPV6
+# define UA_if_nametoindex if_nametoindex
+#endif
+
+/* Use the standard malloc */
+#include <stdlib.h>
+#ifndef UA_free
+# define UA_free free
+# define UA_malloc malloc
+# define UA_calloc calloc
+# define UA_realloc realloc
+#endif
+
+#include <stdio.h>
+#include <strings.h>
+#define UA_snprintf snprintf
+#define UA_strncasecmp strncasecmp
+
+#define UA_clean_errno(STR_FUN) (errno == 0 ? (char*) "None" : (STR_FUN)(errno))
+
+#define UA_LOG_SOCKET_ERRNO_WRAP(LOG) { \
+ char *errno_str = UA_clean_errno(strerror); \
+ LOG; \
+ errno = 0; \
+}
+#define UA_LOG_SOCKET_ERRNO_GAI_WRAP(LOG) { \
+ const char *errno_str = UA_clean_errno(gai_strerror); \
+ LOG; \
+ errno = 0; \
+}
+
+#if UA_MULTITHREADING >= 100
+
+#include <pthread.h>
+
+typedef struct {
+ pthread_mutex_t mutex;
+ pthread_mutexattr_t mutexAttr;
+ int mutexCounter;
+} UA_Lock;
+
+static UA_INLINE void
+UA_LOCK_INIT(UA_Lock *lock) {
+ pthread_mutexattr_init(&lock->mutexAttr);
+ pthread_mutexattr_settype(&lock->mutexAttr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutex_init(&lock->mutex, &lock->mutexAttr);
+ lock->mutexCounter = 0;
+}
+
+static UA_INLINE void
+UA_LOCK_DESTROY(UA_Lock *lock) {
+ pthread_mutex_destroy(&lock->mutex);
+ pthread_mutexattr_destroy(&lock->mutexAttr);
+}
+
+static UA_INLINE void
+UA_LOCK(UA_Lock *lock) {
+ pthread_mutex_lock(&lock->mutex);
+ UA_assert(++(lock->mutexCounter) == 1);
+}
+
+static UA_INLINE void
+UA_UNLOCK(UA_Lock *lock) {
+ UA_assert(--(lock->mutexCounter) == 0);
+ pthread_mutex_unlock(&lock->mutex);
+}
+
+static UA_INLINE void
+UA_LOCK_ASSERT(UA_Lock *lock, int num) {
+ UA_assert(lock->mutexCounter == num);
+}
+#else
+#define UA_EMPTY_STATEMENT \
+ do { \
+ } while(0)
+#define UA_LOCK_INIT(lock) UA_EMPTY_STATEMENT
+#define UA_LOCK_DESTROY(lock) UA_EMPTY_STATEMENT
+#define UA_LOCK(lock) UA_EMPTY_STATEMENT
+#define UA_UNLOCK(lock) UA_EMPTY_STATEMENT
+#define UA_LOCK_ASSERT(lock, num) UA_EMPTY_STATEMENT
+#endif
+
+
+#if defined(__APPLE__) && defined(_SYS_QUEUE_H_)
+// in some compilers there's already a _SYS_QUEUE_H_ which is included first and doesn't
+// have all functions
+
+#undef SLIST_HEAD
+#undef SLIST_HEAD_INITIALIZER
+#undef SLIST_ENTRY
+#undef SLIST_FIRST
+#undef SLIST_END
+#undef SLIST_EMPTY
+#undef SLIST_NEXT
+#undef SLIST_FOREACH
+#undef SLIST_FOREACH_SAFE
+#undef SLIST_INIT
+#undef SLIST_INSERT_AFTER
+#undef SLIST_INSERT_HEAD
+#undef SLIST_REMOVE_AFTER
+#undef SLIST_REMOVE_HEAD
+#undef SLIST_REMOVE
+#undef LIST_HEAD
+#undef LIST_HEAD_INITIALIZER
+#undef LIST_ENTRY
+#undef LIST_FIRST
+#undef LIST_END
+#undef LIST_EMPTY
+#undef LIST_NEXT
+#undef LIST_FOREACH
+#undef LIST_FOREACH_SAFE
+#undef LIST_INIT
+#undef LIST_INSERT_AFTER
+#undef LIST_INSERT_BEFORE
+#undef LIST_INSERT_HEAD
+#undef LIST_REMOVE
+#undef LIST_REPLACE
+#undef SIMPLEQ_HEAD
+#undef SIMPLEQ_HEAD_INITIALIZER
+#undef SIMPLEQ_ENTRY
+#undef SIMPLEQ_FIRST
+#undef SIMPLEQ_END
+#undef SIMPLEQ_EMPTY
+#undef SIMPLEQ_NEXT
+#undef SIMPLEQ_FOREACH
+#undef SIMPLEQ_FOREACH_SAFE
+#undef SIMPLEQ_INIT
+#undef SIMPLEQ_INSERT_HEAD
+#undef SIMPLEQ_INSERT_TAIL
+#undef SIMPLEQ_INSERT_AFTER
+#undef SIMPLEQ_REMOVE_HEAD
+#undef SIMPLEQ_REMOVE_AFTER
+#undef XSIMPLEQ_HEAD
+#undef XSIMPLEQ_ENTRY
+#undef XSIMPLEQ_XOR
+#undef XSIMPLEQ_FIRST
+#undef XSIMPLEQ_END
+#undef XSIMPLEQ_EMPTY
+#undef XSIMPLEQ_NEXT
+#undef XSIMPLEQ_FOREACH
+#undef XSIMPLEQ_FOREACH_SAFE
+#undef XSIMPLEQ_INIT
+#undef XSIMPLEQ_INSERT_HEAD
+#undef XSIMPLEQ_INSERT_TAIL
+#undef XSIMPLEQ_INSERT_AFTER
+#undef XSIMPLEQ_REMOVE_HEAD
+#undef XSIMPLEQ_REMOVE_AFTER
+#undef TAILQ_HEAD
+#undef TAILQ_HEAD_INITIALIZER
+#undef TAILQ_ENTRY
+#undef TAILQ_FIRST
+#undef TAILQ_END
+#undef TAILQ_NEXT
+#undef TAILQ_LAST
+#undef TAILQ_PREV
+#undef TAILQ_EMPTY
+#undef TAILQ_FOREACH
+#undef TAILQ_FOREACH_SAFE
+#undef TAILQ_FOREACH_REVERSE
+#undef TAILQ_FOREACH_REVERSE_SAFE
+#undef TAILQ_INIT
+#undef TAILQ_INSERT_HEAD
+#undef TAILQ_INSERT_TAIL
+#undef TAILQ_INSERT_AFTER
+#undef TAILQ_INSERT_BEFORE
+#undef TAILQ_REMOVE
+#undef TAILQ_REPLACE
+#undef CIRCLEQ_HEAD
+#undef CIRCLEQ_HEAD_INITIALIZER
+#undef CIRCLEQ_ENTRY
+#undef CIRCLEQ_FIRST
+#undef CIRCLEQ_LAST
+#undef CIRCLEQ_END
+#undef CIRCLEQ_NEXT
+#undef CIRCLEQ_PREV
+#undef CIRCLEQ_EMPTY
+#undef CIRCLEQ_FOREACH
+#undef CIRCLEQ_FOREACH_SAFE
+#undef CIRCLEQ_FOREACH_REVERSE
+#undef CIRCLEQ_FOREACH_REVERSE_SAFE
+#undef CIRCLEQ_INIT
+#undef CIRCLEQ_INSERT_AFTER
+#undef CIRCLEQ_INSERT_BEFORE
+#undef CIRCLEQ_INSERT_HEAD
+#undef CIRCLEQ_INSERT_TAIL
+#undef CIRCLEQ_REMOVE
+#undef CIRCLEQ_REPLACE
+
+#undef _SYS_QUEUE_H_
+
+#endif /* defined(__APPLE__) && defined(_SYS_QUEUE_H_) */
+
+
+#endif /* UA_ARCHITECTURE_POSIX */
+
+/**** amalgamated original file "/build/src_generated/open62541/statuscodes.h" ****/
+
+/**********************************
+ * Autogenerated -- do not modify *
+ **********************************/
/**
* .. _statuscodes:
@@ -1333,722 +1468,776 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
* with the OPC UA standard. */
/* These StatusCodes are manually generated. */
-#define UA_STATUSCODE_GOOD 0x00
#define UA_STATUSCODE_INFOTYPE_DATAVALUE 0x00000400
#define UA_STATUSCODE_INFOBITS_OVERFLOW 0x00000080
-/* An unexpected error occurred. */
+/* "The operation succeeded." */
+#define UA_STATUSCODE_GOOD 0x00000000
+
+/* "The operation was uncertain." */
+#define UA_STATUSCODE_UNCERTAIN 0x40000000
+
+/* "The operation failed." */
+#define UA_STATUSCODE_BAD 0x80000000
+
+/* "An unexpected error occurred." */
#define UA_STATUSCODE_BADUNEXPECTEDERROR 0x80010000
-/* An internal error occurred as a result of a programming or configuration error. */
+/* "An internal error occurred as a result of a programming or configuration error." */
#define UA_STATUSCODE_BADINTERNALERROR 0x80020000
-/* Not enough memory to complete the operation. */
+/* "Not enough memory to complete the operation." */
#define UA_STATUSCODE_BADOUTOFMEMORY 0x80030000
-/* An operating system resource is not available. */
+/* "An operating system resource is not available." */
#define UA_STATUSCODE_BADRESOURCEUNAVAILABLE 0x80040000
-/* A low level communication error occurred. */
+/* "A low level communication error occurred." */
#define UA_STATUSCODE_BADCOMMUNICATIONERROR 0x80050000
-/* Encoding halted because of invalid data in the objects being serialized. */
+/* "Encoding halted because of invalid data in the objects being serialized." */
#define UA_STATUSCODE_BADENCODINGERROR 0x80060000
-/* Decoding halted because of invalid data in the stream. */
+/* "Decoding halted because of invalid data in the stream." */
#define UA_STATUSCODE_BADDECODINGERROR 0x80070000
-/* The message encoding/decoding limits imposed by the stack have been exceeded. */
+/* "The message encoding/decoding limits imposed by the stack have been exceeded." */
#define UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED 0x80080000
-/* The request message size exceeds limits set by the server. */
+/* "The request message size exceeds limits set by the server." */
#define UA_STATUSCODE_BADREQUESTTOOLARGE 0x80B80000
-/* The response message size exceeds limits set by the client. */
+/* "The response message size exceeds limits set by the client." */
#define UA_STATUSCODE_BADRESPONSETOOLARGE 0x80B90000
-/* An unrecognized response was received from the server. */
+/* "An unrecognized response was received from the server." */
#define UA_STATUSCODE_BADUNKNOWNRESPONSE 0x80090000
-/* The operation timed out. */
+/* "The operation timed out." */
#define UA_STATUSCODE_BADTIMEOUT 0x800A0000
-/* The server does not support the requested service. */
+/* "The server does not support the requested service." */
#define UA_STATUSCODE_BADSERVICEUNSUPPORTED 0x800B0000
-/* The operation was cancelled because the application is shutting down. */
+/* "The operation was cancelled because the application is shutting down." */
#define UA_STATUSCODE_BADSHUTDOWN 0x800C0000
-/* The operation could not complete because the client is not connected to the server. */
+/* "The operation could not complete because the client is not connected to the server." */
#define UA_STATUSCODE_BADSERVERNOTCONNECTED 0x800D0000
-/* The server has stopped and cannot process any requests. */
+/* "The server has stopped and cannot process any requests." */
#define UA_STATUSCODE_BADSERVERHALTED 0x800E0000
-/* There was nothing to do because the client passed a list of operations with no elements. */
+/* "There was nothing to do because the client passed a list of operations with no elements." */
#define UA_STATUSCODE_BADNOTHINGTODO 0x800F0000
-/* The request could not be processed because it specified too many operations. */
+/* "The request could not be processed because it specified too many operations." */
#define UA_STATUSCODE_BADTOOMANYOPERATIONS 0x80100000
-/* The request could not be processed because there are too many monitored items in the subscription. */
+/* "The request could not be processed because there are too many monitored items in the subscription." */
#define UA_STATUSCODE_BADTOOMANYMONITOREDITEMS 0x80DB0000
-/* The extension object cannot be (de)serialized because the data type id is not recognized. */
+/* "The extension object cannot be (de)serialized because the data type id is not recognized." */
#define UA_STATUSCODE_BADDATATYPEIDUNKNOWN 0x80110000
-/* The certificate provided as a parameter is not valid. */
+/* "The certificate provided as a parameter is not valid." */
#define UA_STATUSCODE_BADCERTIFICATEINVALID 0x80120000
-/* An error occurred verifying security. */
+/* "An error occurred verifying security." */
#define UA_STATUSCODE_BADSECURITYCHECKSFAILED 0x80130000
-/* The certificate does not meet the requirements of the security policy. */
+/* "The certificate does not meet the requirements of the security policy." */
#define UA_STATUSCODE_BADCERTIFICATEPOLICYCHECKFAILED 0x81140000
-/* The certificate has expired or is not yet valid. */
+/* "The certificate has expired or is not yet valid." */
#define UA_STATUSCODE_BADCERTIFICATETIMEINVALID 0x80140000
-/* An issuer certificate has expired or is not yet valid. */
+/* "An issuer certificate has expired or is not yet valid." */
#define UA_STATUSCODE_BADCERTIFICATEISSUERTIMEINVALID 0x80150000
-/* The HostName used to connect to a server does not match a HostName in the certificate. */
+/* "The HostName used to connect to a server does not match a HostName in the certificate." */
#define UA_STATUSCODE_BADCERTIFICATEHOSTNAMEINVALID 0x80160000
-/* The URI specified in the ApplicationDescription does not match the URI in the certificate. */
+/* "The URI specified in the ApplicationDescription does not match the URI in the certificate." */
#define UA_STATUSCODE_BADCERTIFICATEURIINVALID 0x80170000
-/* The certificate may not be used for the requested operation. */
+/* "The certificate may not be used for the requested operation." */
#define UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED 0x80180000
-/* The issuer certificate may not be used for the requested operation. */
+/* "The issuer certificate may not be used for the requested operation." */
#define UA_STATUSCODE_BADCERTIFICATEISSUERUSENOTALLOWED 0x80190000
-/* The certificate is not trusted. */
+/* "The certificate is not trusted." */
#define UA_STATUSCODE_BADCERTIFICATEUNTRUSTED 0x801A0000
-/* It was not possible to determine if the certificate has been revoked. */
+/* "It was not possible to determine if the certificate has been revoked." */
#define UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN 0x801B0000
-/* It was not possible to determine if the issuer certificate has been revoked. */
+/* "It was not possible to determine if the issuer certificate has been revoked." */
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN 0x801C0000
-/* The certificate has been revoked. */
+/* "The certificate has been revoked." */
#define UA_STATUSCODE_BADCERTIFICATEREVOKED 0x801D0000
-/* The issuer certificate has been revoked. */
+/* "The issuer certificate has been revoked." */
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOKED 0x801E0000
-/* The certificate chain is incomplete. */
+/* "The certificate chain is incomplete." */
#define UA_STATUSCODE_BADCERTIFICATECHAININCOMPLETE 0x810D0000
-/* User does not have permission to perform the requested operation. */
+/* "User does not have permission to perform the requested operation." */
#define UA_STATUSCODE_BADUSERACCESSDENIED 0x801F0000
-/* The user identity token is not valid. */
+/* "The user identity token is not valid." */
#define UA_STATUSCODE_BADIDENTITYTOKENINVALID 0x80200000
-/* The user identity token is valid but the server has rejected it. */
+/* "The user identity token is valid but the server has rejected it." */
#define UA_STATUSCODE_BADIDENTITYTOKENREJECTED 0x80210000
-/* The specified secure channel is no longer valid. */
+/* "The specified secure channel is no longer valid." */
#define UA_STATUSCODE_BADSECURECHANNELIDINVALID 0x80220000
-/* The timestamp is outside the range allowed by the server. */
+/* "The timestamp is outside the range allowed by the server." */
#define UA_STATUSCODE_BADINVALIDTIMESTAMP 0x80230000
-/* The nonce does appear to be not a random value or it is not the correct length. */
+/* "The nonce does appear to be not a random value or it is not the correct length." */
#define UA_STATUSCODE_BADNONCEINVALID 0x80240000
-/* The session id is not valid. */
+/* "The session id is not valid." */
#define UA_STATUSCODE_BADSESSIONIDINVALID 0x80250000
-/* The session was closed by the client. */
+/* "The session was closed by the client." */
#define UA_STATUSCODE_BADSESSIONCLOSED 0x80260000
-/* The session cannot be used because ActivateSession has not been called. */
+/* "The session cannot be used because ActivateSession has not been called." */
#define UA_STATUSCODE_BADSESSIONNOTACTIVATED 0x80270000
-/* The subscription id is not valid. */
+/* "The subscription id is not valid." */
#define UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID 0x80280000
-/* The header for the request is missing or invalid. */
+/* "The header for the request is missing or invalid." */
#define UA_STATUSCODE_BADREQUESTHEADERINVALID 0x802A0000
-/* The timestamps to return parameter is invalid. */
+/* "The timestamps to return parameter is invalid." */
#define UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID 0x802B0000
-/* The request was cancelled by the client. */
+/* "The request was cancelled by the client." */
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYCLIENT 0x802C0000
-/* Too many arguments were provided. */
+/* "Too many arguments were provided." */
#define UA_STATUSCODE_BADTOOMANYARGUMENTS 0x80E50000
-/* The server requires a license to operate in general or to perform a service or operation */
+/* "The server requires a license to operate in general or to perform a service or operation */
#define UA_STATUSCODE_BADLICENSEEXPIRED 0x810E0000
-/* The server has limits on number of allowed operations / objects */
+/* "The server has limits on number of allowed operations / objects */
#define UA_STATUSCODE_BADLICENSELIMITSEXCEEDED 0x810F0000
-/* The server does not have a license which is required to operate in general or to perform a service or operation. */
+/* "The server does not have a license which is required to operate in general or to perform a service or operation." */
#define UA_STATUSCODE_BADLICENSENOTAVAILABLE 0x81100000
-/* The subscription was transferred to another session. */
+/* "The subscription was transferred to another session." */
#define UA_STATUSCODE_GOODSUBSCRIPTIONTRANSFERRED 0x002D0000
-/* The processing will complete asynchronously. */
+/* "The processing will complete asynchronously." */
#define UA_STATUSCODE_GOODCOMPLETESASYNCHRONOUSLY 0x002E0000
-/* Sampling has slowed down due to resource limitations. */
+/* "Sampling has slowed down due to resource limitations." */
#define UA_STATUSCODE_GOODOVERLOAD 0x002F0000
-/* The value written was accepted but was clamped. */
+/* "The value written was accepted but was clamped." */
#define UA_STATUSCODE_GOODCLAMPED 0x00300000
-/* Communication with the data source is defined */
+/* "Communication with the data source is defined */
#define UA_STATUSCODE_BADNOCOMMUNICATION 0x80310000
-/* Waiting for the server to obtain values from the underlying data source. */
+/* "Waiting for the server to obtain values from the underlying data source." */
#define UA_STATUSCODE_BADWAITINGFORINITIALDATA 0x80320000
-/* The syntax of the node id is not valid. */
+/* "The syntax of the node id is not valid." */
#define UA_STATUSCODE_BADNODEIDINVALID 0x80330000
-/* The node id refers to a node that does not exist in the server address space. */
+/* "The node id refers to a node that does not exist in the server address space." */
#define UA_STATUSCODE_BADNODEIDUNKNOWN 0x80340000
-/* The attribute is not supported for the specified Node. */
+/* "The attribute is not supported for the specified Node." */
#define UA_STATUSCODE_BADATTRIBUTEIDINVALID 0x80350000
-/* The syntax of the index range parameter is invalid. */
+/* "The syntax of the index range parameter is invalid." */
#define UA_STATUSCODE_BADINDEXRANGEINVALID 0x80360000
-/* No data exists within the range of indexes specified. */
+/* "No data exists within the range of indexes specified." */
#define UA_STATUSCODE_BADINDEXRANGENODATA 0x80370000
-/* The data encoding is invalid. */
+/* "The data encoding is invalid." */
#define UA_STATUSCODE_BADDATAENCODINGINVALID 0x80380000
-/* The server does not support the requested data encoding for the node. */
+/* "The server does not support the requested data encoding for the node." */
#define UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED 0x80390000
-/* The access level does not allow reading or subscribing to the Node. */
+/* "The access level does not allow reading or subscribing to the Node." */
#define UA_STATUSCODE_BADNOTREADABLE 0x803A0000
-/* The access level does not allow writing to the Node. */
+/* "The access level does not allow writing to the Node." */
#define UA_STATUSCODE_BADNOTWRITABLE 0x803B0000
-/* The value was out of range. */
+/* "The value was out of range." */
#define UA_STATUSCODE_BADOUTOFRANGE 0x803C0000
-/* The requested operation is not supported. */
+/* "The requested operation is not supported." */
#define UA_STATUSCODE_BADNOTSUPPORTED 0x803D0000
-/* A requested item was not found or a search operation ended without success. */
+/* "A requested item was not found or a search operation ended without success." */
#define UA_STATUSCODE_BADNOTFOUND 0x803E0000
-/* The object cannot be used because it has been deleted. */
+/* "The object cannot be used because it has been deleted." */
#define UA_STATUSCODE_BADOBJECTDELETED 0x803F0000
-/* Requested operation is not implemented. */
+/* "Requested operation is not implemented." */
#define UA_STATUSCODE_BADNOTIMPLEMENTED 0x80400000
-/* The monitoring mode is invalid. */
+/* "The monitoring mode is invalid." */
#define UA_STATUSCODE_BADMONITORINGMODEINVALID 0x80410000
-/* The monitoring item id does not refer to a valid monitored item. */
+/* "The monitoring item id does not refer to a valid monitored item." */
#define UA_STATUSCODE_BADMONITOREDITEMIDINVALID 0x80420000
-/* The monitored item filter parameter is not valid. */
+/* "The monitored item filter parameter is not valid." */
#define UA_STATUSCODE_BADMONITOREDITEMFILTERINVALID 0x80430000
-/* The server does not support the requested monitored item filter. */
+/* "The server does not support the requested monitored item filter." */
#define UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED 0x80440000
-/* A monitoring filter cannot be used in combination with the attribute specified. */
+/* "A monitoring filter cannot be used in combination with the attribute specified." */
#define UA_STATUSCODE_BADFILTERNOTALLOWED 0x80450000
-/* A mandatory structured parameter was missing or null. */
+/* "A mandatory structured parameter was missing or null." */
#define UA_STATUSCODE_BADSTRUCTUREMISSING 0x80460000
-/* The event filter is not valid. */
+/* "The event filter is not valid." */
#define UA_STATUSCODE_BADEVENTFILTERINVALID 0x80470000
-/* The content filter is not valid. */
+/* "The content filter is not valid." */
#define UA_STATUSCODE_BADCONTENTFILTERINVALID 0x80480000
-/* An unrecognized operator was provided in a filter. */
+/* "An unrecognized operator was provided in a filter." */
#define UA_STATUSCODE_BADFILTEROPERATORINVALID 0x80C10000
-/* A valid operator was provided */
+/* "A valid operator was provided */
#define UA_STATUSCODE_BADFILTEROPERATORUNSUPPORTED 0x80C20000
-/* The number of operands provided for the filter operator was less then expected for the operand provided. */
+/* "The number of operands provided for the filter operator was less then expected for the operand provided." */
#define UA_STATUSCODE_BADFILTEROPERANDCOUNTMISMATCH 0x80C30000
-/* The operand used in a content filter is not valid. */
+/* "The operand used in a content filter is not valid." */
#define UA_STATUSCODE_BADFILTEROPERANDINVALID 0x80490000
-/* The referenced element is not a valid element in the content filter. */
+/* "The referenced element is not a valid element in the content filter." */
#define UA_STATUSCODE_BADFILTERELEMENTINVALID 0x80C40000
-/* The referenced literal is not a valid value. */
+/* "The referenced literal is not a valid value." */
#define UA_STATUSCODE_BADFILTERLITERALINVALID 0x80C50000
-/* The continuation point provide is longer valid. */
+/* "The continuation point provide is longer valid." */
#define UA_STATUSCODE_BADCONTINUATIONPOINTINVALID 0x804A0000
-/* The operation could not be processed because all continuation points have been allocated. */
+/* "The operation could not be processed because all continuation points have been allocated." */
#define UA_STATUSCODE_BADNOCONTINUATIONPOINTS 0x804B0000
-/* The reference type id does not refer to a valid reference type node. */
+/* "The reference type id does not refer to a valid reference type node." */
#define UA_STATUSCODE_BADREFERENCETYPEIDINVALID 0x804C0000
-/* The browse direction is not valid. */
+/* "The browse direction is not valid." */
#define UA_STATUSCODE_BADBROWSEDIRECTIONINVALID 0x804D0000
-/* The node is not part of the view. */
+/* "The node is not part of the view." */
#define UA_STATUSCODE_BADNODENOTINVIEW 0x804E0000
-/* The number was not accepted because of a numeric overflow. */
+/* "The number was not accepted because of a numeric overflow." */
#define UA_STATUSCODE_BADNUMERICOVERFLOW 0x81120000
-/* The ServerUri is not a valid URI. */
+/* "The ServerUri is not a valid URI." */
#define UA_STATUSCODE_BADSERVERURIINVALID 0x804F0000
-/* No ServerName was specified. */
+/* "No ServerName was specified." */
#define UA_STATUSCODE_BADSERVERNAMEMISSING 0x80500000
-/* No DiscoveryUrl was specified. */
+/* "No DiscoveryUrl was specified." */
#define UA_STATUSCODE_BADDISCOVERYURLMISSING 0x80510000
-/* The semaphore file specified by the client is not valid. */
+/* "The semaphore file specified by the client is not valid." */
#define UA_STATUSCODE_BADSEMPAHOREFILEMISSING 0x80520000
-/* The security token request type is not valid. */
+/* "The security token request type is not valid." */
#define UA_STATUSCODE_BADREQUESTTYPEINVALID 0x80530000
-/* The security mode does not meet the requirements set by the server. */
+/* "The security mode does not meet the requirements set by the server." */
#define UA_STATUSCODE_BADSECURITYMODEREJECTED 0x80540000
-/* The security policy does not meet the requirements set by the server. */
+/* "The security policy does not meet the requirements set by the server." */
#define UA_STATUSCODE_BADSECURITYPOLICYREJECTED 0x80550000
-/* The server has reached its maximum number of sessions. */
+/* "The server has reached its maximum number of sessions." */
#define UA_STATUSCODE_BADTOOMANYSESSIONS 0x80560000
-/* The user token signature is missing or invalid. */
+/* "The user token signature is missing or invalid." */
#define UA_STATUSCODE_BADUSERSIGNATUREINVALID 0x80570000
-/* The signature generated with the client certificate is missing or invalid. */
+/* "The signature generated with the client certificate is missing or invalid." */
#define UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID 0x80580000
-/* The client did not provide at least one software certificate that is valid and meets the profile requirements for the server. */
+/* "The client did not provide at least one software certificate that is valid and meets the profile requirements for the server." */
#define UA_STATUSCODE_BADNOVALIDCERTIFICATES 0x80590000
-/* The server does not support changing the user identity assigned to the session. */
+/* "The server does not support changing the user identity assigned to the session." */
#define UA_STATUSCODE_BADIDENTITYCHANGENOTSUPPORTED 0x80C60000
-/* The request was cancelled by the client with the Cancel service. */
+/* "The request was cancelled by the client with the Cancel service." */
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYREQUEST 0x805A0000
-/* The parent node id does not to refer to a valid node. */
+/* "The parent node id does not to refer to a valid node." */
#define UA_STATUSCODE_BADPARENTNODEIDINVALID 0x805B0000
-/* The reference could not be created because it violates constraints imposed by the data model. */
+/* "The reference could not be created because it violates constraints imposed by the data model." */
#define UA_STATUSCODE_BADREFERENCENOTALLOWED 0x805C0000
-/* The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client. */
+/* "The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client." */
#define UA_STATUSCODE_BADNODEIDREJECTED 0x805D0000
-/* The requested node id is already used by another node. */
+/* "The requested node id is already used by another node." */
#define UA_STATUSCODE_BADNODEIDEXISTS 0x805E0000
-/* The node class is not valid. */
+/* "The node class is not valid." */
#define UA_STATUSCODE_BADNODECLASSINVALID 0x805F0000
-/* The browse name is invalid. */
+/* "The browse name is invalid." */
#define UA_STATUSCODE_BADBROWSENAMEINVALID 0x80600000
-/* The browse name is not unique among nodes that share the same relationship with the parent. */
+/* "The browse name is not unique among nodes that share the same relationship with the parent." */
#define UA_STATUSCODE_BADBROWSENAMEDUPLICATED 0x80610000
-/* The node attributes are not valid for the node class. */
+/* "The node attributes are not valid for the node class." */
#define UA_STATUSCODE_BADNODEATTRIBUTESINVALID 0x80620000
-/* The type definition node id does not reference an appropriate type node. */
+/* "The type definition node id does not reference an appropriate type node." */
#define UA_STATUSCODE_BADTYPEDEFINITIONINVALID 0x80630000
-/* The source node id does not reference a valid node. */
+/* "The source node id does not reference a valid node." */
#define UA_STATUSCODE_BADSOURCENODEIDINVALID 0x80640000
-/* The target node id does not reference a valid node. */
+/* "The target node id does not reference a valid node." */
#define UA_STATUSCODE_BADTARGETNODEIDINVALID 0x80650000
-/* The reference type between the nodes is already defined. */
+/* "The reference type between the nodes is already defined." */
#define UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED 0x80660000
-/* The server does not allow this type of self reference on this node. */
+/* "The server does not allow this type of self reference on this node." */
#define UA_STATUSCODE_BADINVALIDSELFREFERENCE 0x80670000
-/* The reference type is not valid for a reference to a remote server. */
+/* "The reference type is not valid for a reference to a remote server." */
#define UA_STATUSCODE_BADREFERENCELOCALONLY 0x80680000
-/* The server will not allow the node to be deleted. */
+/* "The server will not allow the node to be deleted." */
#define UA_STATUSCODE_BADNODELETERIGHTS 0x80690000
-/* The server was not able to delete all target references. */
+/* "The server was not able to delete all target references." */
#define UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED 0x40BC0000
-/* The server index is not valid. */
+/* "The server index is not valid." */
#define UA_STATUSCODE_BADSERVERINDEXINVALID 0x806A0000
-/* The view id does not refer to a valid view node. */
+/* "The view id does not refer to a valid view node." */
#define UA_STATUSCODE_BADVIEWIDUNKNOWN 0x806B0000
-/* The view timestamp is not available or not supported. */
+/* "The view timestamp is not available or not supported." */
#define UA_STATUSCODE_BADVIEWTIMESTAMPINVALID 0x80C90000
-/* The view parameters are not consistent with each other. */
+/* "The view parameters are not consistent with each other." */
#define UA_STATUSCODE_BADVIEWPARAMETERMISMATCH 0x80CA0000
-/* The view version is not available or not supported. */
+/* "The view version is not available or not supported." */
#define UA_STATUSCODE_BADVIEWVERSIONINVALID 0x80CB0000
-/* The list of references may not be complete because the underlying system is not available. */
+/* "The list of references may not be complete because the underlying system is not available." */
#define UA_STATUSCODE_UNCERTAINNOTALLNODESAVAILABLE 0x40C00000
-/* The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete. */
+/* "The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete." */
#define UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE 0x00BA0000
-/* The provided Nodeid was not a type definition nodeid. */
+/* "The provided Nodeid was not a type definition nodeid." */
#define UA_STATUSCODE_BADNOTTYPEDEFINITION 0x80C80000
-/* One of the references to follow in the relative path references to a node in the address space in another server. */
+/* "One of the references to follow in the relative path references to a node in the address space in another server." */
#define UA_STATUSCODE_UNCERTAINREFERENCEOUTOFSERVER 0x406C0000
-/* The requested operation has too many matches to return. */
+/* "The requested operation has too many matches to return." */
#define UA_STATUSCODE_BADTOOMANYMATCHES 0x806D0000
-/* The requested operation requires too many resources in the server. */
+/* "The requested operation requires too many resources in the server." */
#define UA_STATUSCODE_BADQUERYTOOCOMPLEX 0x806E0000
-/* The requested operation has no match to return. */
+/* "The requested operation has no match to return." */
#define UA_STATUSCODE_BADNOMATCH 0x806F0000
-/* The max age parameter is invalid. */
+/* "The max age parameter is invalid." */
#define UA_STATUSCODE_BADMAXAGEINVALID 0x80700000
-/* The operation is not permitted over the current secure channel. */
+/* "The operation is not permitted over the current secure channel." */
#define UA_STATUSCODE_BADSECURITYMODEINSUFFICIENT 0x80E60000
-/* The history details parameter is not valid. */
+/* "The history details parameter is not valid." */
#define UA_STATUSCODE_BADHISTORYOPERATIONINVALID 0x80710000
-/* The server does not support the requested operation. */
+/* "The server does not support the requested operation." */
#define UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED 0x80720000
-/* The defined timestamp to return was invalid. */
+/* "The defined timestamp to return was invalid." */
#define UA_STATUSCODE_BADINVALIDTIMESTAMPARGUMENT 0x80BD0000
-/* The server does not support writing the combination of value */
+/* "The server does not support writing the combination of value */
#define UA_STATUSCODE_BADWRITENOTSUPPORTED 0x80730000
-/* The value supplied for the attribute is not of the same type as the attribute's value. */
+/* "The value supplied for the attribute is not of the same type as the attribute's value." */
#define UA_STATUSCODE_BADTYPEMISMATCH 0x80740000
-/* The method id does not refer to a method for the specified object. */
+/* "The method id does not refer to a method for the specified object." */
#define UA_STATUSCODE_BADMETHODINVALID 0x80750000
-/* The client did not specify all of the input arguments for the method. */
+/* "The client did not specify all of the input arguments for the method." */
#define UA_STATUSCODE_BADARGUMENTSMISSING 0x80760000
-/* The executable attribute does not allow the execution of the method. */
+/* "The executable attribute does not allow the execution of the method." */
#define UA_STATUSCODE_BADNOTEXECUTABLE 0x81110000
-/* The server has reached its maximum number of subscriptions. */
+/* "The server has reached its maximum number of subscriptions." */
#define UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS 0x80770000
-/* The server has reached the maximum number of queued publish requests. */
+/* "The server has reached the maximum number of queued publish requests." */
#define UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS 0x80780000
-/* There is no subscription available for this session. */
+/* "There is no subscription available for this session." */
#define UA_STATUSCODE_BADNOSUBSCRIPTION 0x80790000
-/* The sequence number is unknown to the server. */
+/* "The sequence number is unknown to the server." */
#define UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN 0x807A0000
-/* The requested notification message is no longer available. */
+/* "The Server does not support retransmission queue and acknowledgement of sequence numbers is not available." */
+#define UA_STATUSCODE_GOODRETRANSMISSIONQUEUENOTSUPPORTED 0x00DF0000
+
+/* "The requested notification message is no longer available." */
#define UA_STATUSCODE_BADMESSAGENOTAVAILABLE 0x807B0000
-/* The client of the current session does not support one or more Profiles that are necessary for the subscription. */
+/* "The client of the current session does not support one or more Profiles that are necessary for the subscription." */
#define UA_STATUSCODE_BADINSUFFICIENTCLIENTPROFILE 0x807C0000
-/* The sub-state machine is not currently active. */
+/* "The sub-state machine is not currently active." */
#define UA_STATUSCODE_BADSTATENOTACTIVE 0x80BF0000
-/* An equivalent rule already exists. */
+/* "An equivalent rule already exists." */
#define UA_STATUSCODE_BADALREADYEXISTS 0x81150000
-/* The server cannot process the request because it is too busy. */
+/* "The server cannot process the request because it is too busy." */
#define UA_STATUSCODE_BADTCPSERVERTOOBUSY 0x807D0000
-/* The type of the message specified in the header invalid. */
+/* "The type of the message specified in the header invalid." */
#define UA_STATUSCODE_BADTCPMESSAGETYPEINVALID 0x807E0000
-/* The SecureChannelId and/or TokenId are not currently in use. */
+/* "The SecureChannelId and/or TokenId are not currently in use." */
#define UA_STATUSCODE_BADTCPSECURECHANNELUNKNOWN 0x807F0000
-/* The size of the message specified in the header is too large. */
+/* "The size of the message chunk specified in the header is too large." */
#define UA_STATUSCODE_BADTCPMESSAGETOOLARGE 0x80800000
-/* There are not enough resources to process the request. */
+/* "There are not enough resources to process the request." */
#define UA_STATUSCODE_BADTCPNOTENOUGHRESOURCES 0x80810000
-/* An internal error occurred. */
+/* "An internal error occurred." */
#define UA_STATUSCODE_BADTCPINTERNALERROR 0x80820000
-/* The server does not recognize the QueryString specified. */
+/* "The server does not recognize the QueryString specified." */
#define UA_STATUSCODE_BADTCPENDPOINTURLINVALID 0x80830000
-/* The request could not be sent because of a network interruption. */
+/* "The request could not be sent because of a network interruption." */
#define UA_STATUSCODE_BADREQUESTINTERRUPTED 0x80840000
-/* Timeout occurred while processing the request. */
+/* "Timeout occurred while processing the request." */
#define UA_STATUSCODE_BADREQUESTTIMEOUT 0x80850000
-/* The secure channel has been closed. */
+/* "The secure channel has been closed." */
#define UA_STATUSCODE_BADSECURECHANNELCLOSED 0x80860000
-/* The token has expired or is not recognized. */
+/* "The token has expired or is not recognized." */
#define UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN 0x80870000
-/* The sequence number is not valid. */
+/* "The sequence number is not valid." */
#define UA_STATUSCODE_BADSEQUENCENUMBERINVALID 0x80880000
-/* The applications do not have compatible protocol versions. */
+/* "The applications do not have compatible protocol versions." */
#define UA_STATUSCODE_BADPROTOCOLVERSIONUNSUPPORTED 0x80BE0000
-/* There is a problem with the configuration that affects the usefulness of the value. */
+/* "There is a problem with the configuration that affects the usefulness of the value." */
#define UA_STATUSCODE_BADCONFIGURATIONERROR 0x80890000
-/* The variable should receive its value from another variable */
+/* "The variable should receive its value from another variable */
#define UA_STATUSCODE_BADNOTCONNECTED 0x808A0000
-/* There has been a failure in the device/data source that generates the value that has affected the value. */
+/* "There has been a failure in the device/data source that generates the value that has affected the value." */
#define UA_STATUSCODE_BADDEVICEFAILURE 0x808B0000
-/* There has been a failure in the sensor from which the value is derived by the device/data source. */
+/* "There has been a failure in the sensor from which the value is derived by the device/data source." */
#define UA_STATUSCODE_BADSENSORFAILURE 0x808C0000
-/* The source of the data is not operational. */
+/* "The source of the data is not operational." */
#define UA_STATUSCODE_BADOUTOFSERVICE 0x808D0000
-/* The deadband filter is not valid. */
+/* "The deadband filter is not valid." */
#define UA_STATUSCODE_BADDEADBANDFILTERINVALID 0x808E0000
-/* Communication to the data source has failed. The variable value is the last value that had a good quality. */
+/* "Communication to the data source has failed. The variable value is the last value that had a good quality." */
#define UA_STATUSCODE_UNCERTAINNOCOMMUNICATIONLASTUSABLEVALUE 0x408F0000
-/* Whatever was updating this value has stopped doing so. */
+/* "Whatever was updating this value has stopped doing so." */
#define UA_STATUSCODE_UNCERTAINLASTUSABLEVALUE 0x40900000
-/* The value is an operational value that was manually overwritten. */
+/* "The value is an operational value that was manually overwritten." */
#define UA_STATUSCODE_UNCERTAINSUBSTITUTEVALUE 0x40910000
-/* The value is an initial value for a variable that normally receives its value from another variable. */
+/* "The value is an initial value for a variable that normally receives its value from another variable." */
#define UA_STATUSCODE_UNCERTAININITIALVALUE 0x40920000
-/* The value is at one of the sensor limits. */
+/* "The value is at one of the sensor limits." */
#define UA_STATUSCODE_UNCERTAINSENSORNOTACCURATE 0x40930000
-/* The value is outside of the range of values defined for this parameter. */
+/* "The value is outside of the range of values defined for this parameter." */
#define UA_STATUSCODE_UNCERTAINENGINEERINGUNITSEXCEEDED 0x40940000
-/* The value is derived from multiple sources and has less than the required number of Good sources. */
+/* "The value is derived from multiple sources and has less than the required number of Good sources." */
#define UA_STATUSCODE_UNCERTAINSUBNORMAL 0x40950000
-/* The value has been overridden. */
+/* "The value has been overridden." */
#define UA_STATUSCODE_GOODLOCALOVERRIDE 0x00960000
-/* This Condition refresh failed */
+/* "This Condition refresh failed */
#define UA_STATUSCODE_BADREFRESHINPROGRESS 0x80970000
-/* This condition has already been disabled. */
+/* "This condition has already been disabled." */
#define UA_STATUSCODE_BADCONDITIONALREADYDISABLED 0x80980000
-/* This condition has already been enabled. */
+/* "This condition has already been enabled." */
#define UA_STATUSCODE_BADCONDITIONALREADYENABLED 0x80CC0000
-/* Property not available */
+/* "Property not available */
#define UA_STATUSCODE_BADCONDITIONDISABLED 0x80990000
-/* The specified event id is not recognized. */
+/* "The specified event id is not recognized." */
#define UA_STATUSCODE_BADEVENTIDUNKNOWN 0x809A0000
-/* The event cannot be acknowledged. */
+/* "The event cannot be acknowledged." */
#define UA_STATUSCODE_BADEVENTNOTACKNOWLEDGEABLE 0x80BB0000
-/* The dialog condition is not active. */
+/* "The dialog condition is not active." */
#define UA_STATUSCODE_BADDIALOGNOTACTIVE 0x80CD0000
-/* The response is not valid for the dialog. */
+/* "The response is not valid for the dialog." */
#define UA_STATUSCODE_BADDIALOGRESPONSEINVALID 0x80CE0000
-/* The condition branch has already been acknowledged. */
+/* "The condition branch has already been acknowledged." */
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYACKED 0x80CF0000
-/* The condition branch has already been confirmed. */
+/* "The condition branch has already been confirmed." */
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYCONFIRMED 0x80D00000
-/* The condition has already been shelved. */
+/* "The condition has already been shelved." */
#define UA_STATUSCODE_BADCONDITIONALREADYSHELVED 0x80D10000
-/* The condition is not currently shelved. */
+/* "The condition is not currently shelved." */
#define UA_STATUSCODE_BADCONDITIONNOTSHELVED 0x80D20000
-/* The shelving time not within an acceptable range. */
+/* "The shelving time not within an acceptable range." */
#define UA_STATUSCODE_BADSHELVINGTIMEOUTOFRANGE 0x80D30000
-/* No data exists for the requested time range or event filter. */
+/* "No data exists for the requested time range or event filter." */
#define UA_STATUSCODE_BADNODATA 0x809B0000
-/* No data found to provide upper or lower bound value. */
+/* "No data found to provide upper or lower bound value." */
#define UA_STATUSCODE_BADBOUNDNOTFOUND 0x80D70000
-/* The server cannot retrieve a bound for the variable. */
+/* "The server cannot retrieve a bound for the variable." */
#define UA_STATUSCODE_BADBOUNDNOTSUPPORTED 0x80D80000
-/* Data is missing due to collection started/stopped/lost. */
+/* "Data is missing due to collection started/stopped/lost." */
#define UA_STATUSCODE_BADDATALOST 0x809D0000
-/* Expected data is unavailable for the requested time range due to an un-mounted volume */
+/* "Expected data is unavailable for the requested time range due to an un-mounted volume */
#define UA_STATUSCODE_BADDATAUNAVAILABLE 0x809E0000
-/* The data or event was not successfully inserted because a matching entry exists. */
+/* "The data or event was not successfully inserted because a matching entry exists." */
#define UA_STATUSCODE_BADENTRYEXISTS 0x809F0000
-/* The data or event was not successfully updated because no matching entry exists. */
+/* "The data or event was not successfully updated because no matching entry exists." */
#define UA_STATUSCODE_BADNOENTRYEXISTS 0x80A00000
-/* The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp). */
+/* "The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)." */
#define UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED 0x80A10000
-/* The data or event was successfully inserted into the historical database. */
+/* "The data or event was successfully inserted into the historical database." */
#define UA_STATUSCODE_GOODENTRYINSERTED 0x00A20000
-/* The data or event field was successfully replaced in the historical database. */
+/* "The data or event field was successfully replaced in the historical database." */
#define UA_STATUSCODE_GOODENTRYREPLACED 0x00A30000
-/* The value is derived from multiple values and has less than the required number of Good values. */
+/* "The value is derived from multiple values and has less than the required number of Good values." */
#define UA_STATUSCODE_UNCERTAINDATASUBNORMAL 0x40A40000
-/* No data exists for the requested time range or event filter. */
+/* "No data exists for the requested time range or event filter." */
#define UA_STATUSCODE_GOODNODATA 0x00A50000
-/* The data or event field was successfully replaced in the historical database. */
+/* "The data or event field was successfully replaced in the historical database." */
#define UA_STATUSCODE_GOODMOREDATA 0x00A60000
-/* The requested number of Aggregates does not match the requested number of NodeIds. */
+/* "The requested number of Aggregates does not match the requested number of NodeIds." */
#define UA_STATUSCODE_BADAGGREGATELISTMISMATCH 0x80D40000
-/* The requested Aggregate is not support by the server. */
+/* "The requested Aggregate is not support by the server." */
#define UA_STATUSCODE_BADAGGREGATENOTSUPPORTED 0x80D50000
-/* The aggregate value could not be derived due to invalid data inputs. */
+/* "The aggregate value could not be derived due to invalid data inputs." */
#define UA_STATUSCODE_BADAGGREGATEINVALIDINPUTS 0x80D60000
-/* The aggregate configuration is not valid for specified node. */
+/* "The aggregate configuration is not valid for specified node." */
#define UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED 0x80DA0000
-/* The request specifies fields which are not valid for the EventType or cannot be saved by the historian. */
+/* "The request specifies fields which are not valid for the EventType or cannot be saved by the historian." */
#define UA_STATUSCODE_GOODDATAIGNORED 0x00D90000
-/* The request was rejected by the server because it did not meet the criteria set by the server. */
+/* "The request was rejected by the server because it did not meet the criteria set by the server." */
#define UA_STATUSCODE_BADREQUESTNOTALLOWED 0x80E40000
-/* The request has not been processed by the server yet. */
+/* "The request has not been processed by the server yet." */
#define UA_STATUSCODE_BADREQUESTNOTCOMPLETE 0x81130000
-/* The value does not come from the real source and has been edited by the server. */
+/* "The device identity needs a ticket before it can be accepted." */
+#define UA_STATUSCODE_BADTICKETREQUIRED 0x811F0000
+
+/* "The device identity needs a ticket before it can be accepted." */
+#define UA_STATUSCODE_BADTICKETINVALID 0x81200000
+
+/* "The value does not come from the real source and has been edited by the server." */
#define UA_STATUSCODE_GOODEDITED 0x00DC0000
-/* There was an error in execution of these post-actions. */
+/* "There was an error in execution of these post-actions." */
#define UA_STATUSCODE_GOODPOSTACTIONFAILED 0x00DD0000
-/* The related EngineeringUnit has been changed but the Variable Value is still provided based on the previous unit. */
+/* "The related EngineeringUnit has been changed but the Variable Value is still provided based on the previous unit." */
#define UA_STATUSCODE_UNCERTAINDOMINANTVALUECHANGED 0x40DE0000
-/* A dependent value has been changed but the change has not been applied to the device. */
+/* "A dependent value has been changed but the change has not been applied to the device." */
#define UA_STATUSCODE_GOODDEPENDENTVALUECHANGED 0x00E00000
-/* The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad. */
+/* "The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad." */
#define UA_STATUSCODE_BADDOMINANTVALUECHANGED 0x80E10000
-/* A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain. */
+/* "A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain." */
#define UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED 0x40E20000
-/* A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad. */
+/* "A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad." */
#define UA_STATUSCODE_BADDEPENDENTVALUECHANGED 0x80E30000
-/* The communication layer has raised an event. */
+/* "It is delivered with a dominant Variable value when a dependent Variable has changed but the change has not been applied." */
+#define UA_STATUSCODE_GOODEDITED_DEPENDENTVALUECHANGED 0x01160000
+
+/* "It is delivered with a dependent Variable value when a dominant Variable has changed but the change has not been applied." */
+#define UA_STATUSCODE_GOODEDITED_DOMINANTVALUECHANGED 0x01170000
+
+/* "It is delivered with a dependent Variable value when a dominant or dependent Variable has changed but change has not been applied." */
+#define UA_STATUSCODE_GOODEDITED_DOMINANTVALUECHANGED_DEPENDENTVALUECHANGED 0x01180000
+
+/* "It is delivered with a Variable value when Variable has changed but the value is not legal." */
+#define UA_STATUSCODE_BADEDITED_OUTOFRANGE 0x81190000
+
+/* "It is delivered with a Variable value when a source Variable has changed but the value is not legal." */
+#define UA_STATUSCODE_BADINITIALVALUE_OUTOFRANGE 0x811A0000
+
+/* "It is delivered with a dependent Variable value when a dominant Variable has changed and the value is not legal." */
+#define UA_STATUSCODE_BADOUTOFRANGE_DOMINANTVALUECHANGED 0x811B0000
+
+/* "It is delivered with a dependent Variable value when a dominant Variable has changed */
+#define UA_STATUSCODE_BADEDITED_OUTOFRANGE_DOMINANTVALUECHANGED 0x811C0000
+
+/* "It is delivered with a dependent Variable value when a dominant or dependent Variable has changed and the value is not legal." */
+#define UA_STATUSCODE_BADOUTOFRANGE_DOMINANTVALUECHANGED_DEPENDENTVALUECHANGED 0x811D0000
+
+/* "It is delivered with a dependent Variable value when a dominant or dependent Variable has changed */
+#define UA_STATUSCODE_BADEDITED_OUTOFRANGE_DOMINANTVALUECHANGED_DEPENDENTVALUECHANGED 0x811E0000
+
+/* "The communication layer has raised an event." */
#define UA_STATUSCODE_GOODCOMMUNICATIONEVENT 0x00A70000
-/* The system is shutting down. */
+/* "The system is shutting down." */
#define UA_STATUSCODE_GOODSHUTDOWNEVENT 0x00A80000
-/* The operation is not finished and needs to be called again. */
+/* "The operation is not finished and needs to be called again." */
#define UA_STATUSCODE_GOODCALLAGAIN 0x00A90000
-/* A non-critical timeout occurred. */
+/* "A non-critical timeout occurred." */
#define UA_STATUSCODE_GOODNONCRITICALTIMEOUT 0x00AA0000
-/* One or more arguments are invalid. */
+/* "One or more arguments are invalid." */
#define UA_STATUSCODE_BADINVALIDARGUMENT 0x80AB0000
-/* Could not establish a network connection to remote server. */
+/* "Could not establish a network connection to remote server." */
#define UA_STATUSCODE_BADCONNECTIONREJECTED 0x80AC0000
-/* The server has disconnected from the client. */
+/* "The server has disconnected from the client." */
#define UA_STATUSCODE_BADDISCONNECT 0x80AD0000
-/* The network connection has been closed. */
+/* "The network connection has been closed." */
#define UA_STATUSCODE_BADCONNECTIONCLOSED 0x80AE0000
-/* The operation cannot be completed because the object is closed */
+/* "The operation cannot be completed because the object is closed */
#define UA_STATUSCODE_BADINVALIDSTATE 0x80AF0000
-/* Cannot move beyond end of the stream. */
+/* "Cannot move beyond end of the stream." */
#define UA_STATUSCODE_BADENDOFSTREAM 0x80B00000
-/* No data is currently available for reading from a non-blocking stream. */
+/* "No data is currently available for reading from a non-blocking stream." */
#define UA_STATUSCODE_BADNODATAAVAILABLE 0x80B10000
-/* The asynchronous operation is waiting for a response. */
+/* "The asynchronous operation is waiting for a response." */
#define UA_STATUSCODE_BADWAITINGFORRESPONSE 0x80B20000
-/* The asynchronous operation was abandoned by the caller. */
+/* "The asynchronous operation was abandoned by the caller." */
#define UA_STATUSCODE_BADOPERATIONABANDONED 0x80B30000
-/* The stream did not return all data requested (possibly because it is a non-blocking stream). */
+/* "The stream did not return all data requested (possibly because it is a non-blocking stream)." */
#define UA_STATUSCODE_BADEXPECTEDSTREAMTOBLOCK 0x80B40000
-/* Non blocking behaviour is required and the operation would block. */
+/* "Non blocking behaviour is required and the operation would block." */
#define UA_STATUSCODE_BADWOULDBLOCK 0x80B50000
-/* A value had an invalid syntax. */
+/* "A value had an invalid syntax." */
#define UA_STATUSCODE_BADSYNTAXERROR 0x80B60000
-/* The operation could not be finished because all available connections are in use. */
+/* "The operation could not be finished because all available connections are in use." */
#define UA_STATUSCODE_BADMAXCONNECTIONSREACHED 0x80B70000
+/* Depending on the version of the schema, the following might be already defined: */
+#ifndef UA_STATUSCODE_GOOD
+# define UA_STATUSCODE_GOOD 0x00000000
+#endif
+#ifndef UA_STATUSCODE_UNCERTAIN
+# define UA_STATUSCODE_UNCERTAIN 0x40000000
+#endif
+#ifndef UA_STATUSCODE_BAD
+# define UA_STATUSCODE_BAD 0x80000000
+#endif
+
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/build/src_generated/open62541/nodeids.h" ***********************************/
+/**** amalgamated original file "/build/src_generated/open62541/nodeids.h" ****/
-/*---------------------------------------------------------
- * Autogenerated -- do not modify
- * Generated from /home/pdie/sonstiges/qtopcua/repos/open62541/tools/schema/NodeIds.csv with script /home/pdie/sonstiges/qtopcua/repos/open62541/tools/generate_nodeid_header.py
- *-------------------------------------------------------*/
+/**********************************
+ * Autogenerated -- do not modify *
+ **********************************/
#ifndef UA_NODEIDS_NS0_H_
#define UA_NODEIDS_NS0_H_
@@ -2057,7 +2246,7 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
* Namespace Zero NodeIds
* ----------------------
* Numeric identifiers of standard-defined nodes in namespace zero. The
- * following definitions are autogenerated from the ``/home/pdie/sonstiges/qtopcua/repos/open62541/tools/schema/NodeIds.csv`` file */
+ * following definitions are autogenerated from a CSV file */
#define UA_NS0ID_BOOLEAN 1 /* DataType */
#define UA_NS0ID_SBYTE 2 /* DataType */
@@ -2123,7 +2312,6 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_DATATYPEENCODINGTYPE 76 /* ObjectType */
#define UA_NS0ID_MODELLINGRULETYPE 77 /* ObjectType */
#define UA_NS0ID_MODELLINGRULE_MANDATORY 78 /* Object */
-#define UA_NS0ID_MODELLINGRULE_MANDATORYSHARED 79 /* Object */
#define UA_NS0ID_MODELLINGRULE_OPTIONAL 80 /* Object */
#define UA_NS0ID_MODELLINGRULE_EXPOSESITSARRAY 83 /* Object */
#define UA_NS0ID_ROOTFOLDER 84 /* Object */
@@ -2153,7 +2341,6 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_MODELLINGRULE_MANDATORY_NAMINGRULE 112 /* Variable */
#define UA_NS0ID_MODELLINGRULE_OPTIONAL_NAMINGRULE 113 /* Variable */
#define UA_NS0ID_MODELLINGRULE_EXPOSESITSARRAY_NAMINGRULE 114 /* Variable */
-#define UA_NS0ID_MODELLINGRULE_MANDATORYSHARED_NAMINGRULE 116 /* Variable */
#define UA_NS0ID_HASSUBSTATEMACHINE 117 /* ReferenceType */
#define UA_NS0ID_NAMINGRULETYPE 120 /* DataType */
#define UA_NS0ID_DATATYPEDEFINITION_ENCODING_DEFAULTBINARY 121 /* Object */
@@ -2202,8 +2389,6 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_COUNTER 289 /* DataType */
#define UA_NS0ID_DURATION 290 /* DataType */
#define UA_NS0ID_NUMERICRANGE 291 /* DataType */
-#define UA_NS0ID_TIME 292 /* DataType */
-#define UA_NS0ID_DATE 293 /* DataType */
#define UA_NS0ID_UTCTIME 294 /* DataType */
#define UA_NS0ID_LOCALEID 295 /* DataType */
#define UA_NS0ID_ARGUMENT 296 /* DataType */
@@ -9202,7 +9387,6 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_ROLESET_ADDROLE_OUTPUTARGUMENTS 16303 /* Variable */
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_ROLESET_REMOVEROLE 16304 /* Method */
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_ROLESET_REMOVEROLE_INPUTARGUMENTS 16305 /* Variable */
-#define UA_NS0ID_DEFAULTINPUTVALUES 16306 /* Variable */
#define UA_NS0ID_AUDIODATATYPE 16307 /* DataType */
#define UA_NS0ID_SUBSCRIBEDDATASETDATATYPE_ENCODING_DEFAULTJSON 16308 /* Object */
#define UA_NS0ID_SELECTIONLISTTYPE 16309 /* VariableType */
@@ -10604,8 +10788,16 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_PROGRAMSTATEMACHINETYPE_AVAILABLETRANSITIONS 17705 /* Variable */
#define UA_NS0ID_PUBLISHSUBSCRIBETYPE_CONNECTIONNAME_PLACEHOLDER_TRANSPORTPROFILEURI_SELECTIONS 17706 /* Variable */
#define UA_NS0ID_PUBLISHSUBSCRIBETYPE_CONNECTIONNAME_PLACEHOLDER_TRANSPORTPROFILEURI_SELECTIONDESCRIPTIONS 17707 /* Variable */
+#define UA_NS0ID_INTERFACETYPES 17708 /* Object */
+#define UA_NS0ID_RATIONALNUMBERTYPE 17709 /* VariableType */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_TRANSPORTPROFILEURI_SELECTIONS 17710 /* Variable */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_TRANSPORTPROFILEURI_SELECTIONDESCRIPTIONS 17711 /* Variable */
+#define UA_NS0ID_RATIONALNUMBERTYPE_NUMERATOR 17712 /* Variable */
+#define UA_NS0ID_RATIONALNUMBERTYPE_DENOMINATOR 17713 /* Variable */
+#define UA_NS0ID_VECTORTYPE 17714 /* VariableType */
+#define UA_NS0ID_VECTORTYPE_VECTORUNIT 17715 /* Variable */
+#define UA_NS0ID_THREEDVECTORTYPE 17716 /* VariableType */
+#define UA_NS0ID_THREEDVECTORTYPE_VECTORUNIT 17717 /* Variable */
#define UA_NS0ID_FILEDIRECTORYTYPE_FILEDIRECTORYNAME_PLACEHOLDER_DELETEFILESYSTEMOBJECT 17718 /* Method */
#define UA_NS0ID_FILEDIRECTORYTYPE_FILEDIRECTORYNAME_PLACEHOLDER_DELETEFILESYSTEMOBJECT_INPUTARGUMENTS 17719 /* Variable */
#define UA_NS0ID_PUBSUBCONNECTIONADDREADERGROUPGROUPMETHODTYPE_OUTPUTARGUMENTS 17720 /* Variable */
@@ -10621,7 +10813,6 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_WRITERGROUPTYPE_STATUS 17730 /* Object */
#define UA_NS0ID_WRITERGROUPTYPE_STATUS_STATE 17731 /* Variable */
#define UA_NS0ID_AUTHORIZATIONSERVICES 17732 /* Object */
-#define UA_NS0ID_AUTHORIZATIONSERVICES_SERVICENAME_PLACEHOLDER 17733 /* Object */
#define UA_NS0ID_WRITERGROUPTYPE_STATUS_ENABLE 17734 /* Method */
#define UA_NS0ID_WRITERGROUPTYPE_STATUS_DISABLE 17735 /* Method */
#define UA_NS0ID_WRITERGROUPTYPE_WRITERGROUPID 17736 /* Variable */
@@ -10954,12 +11145,9 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_KEYCREDENTIALDELETEDAUDITEVENTTYPE_INPUTARGUMENTS 18063 /* Variable */
#define UA_NS0ID_KEYCREDENTIALDELETEDAUDITEVENTTYPE_RESOURCEURI 18064 /* Variable */
#define UA_NS0ID_READERGROUPTYPE_MAXNETWORKMESSAGESIZE 18065 /* Variable */
-#define UA_NS0ID_AUTHORIZATIONSERVICES_SERVICENAME_PLACEHOLDER_SERVICECERTIFICATE 18066 /* Variable */
#define UA_NS0ID_READERGROUPTYPE_STATUS 18067 /* Object */
#define UA_NS0ID_READERGROUPTYPE_STATUS_STATE 18068 /* Variable */
#define UA_NS0ID_KEYCREDENTIALCONFIGURATIONTYPE_RESOURCEURI 18069 /* Variable */
-#define UA_NS0ID_AUTHORIZATIONSERVICES_SERVICENAME_PLACEHOLDER_SERVICEURI 18070 /* Variable */
-#define UA_NS0ID_AUTHORIZATIONSERVICES_SERVICENAME_PLACEHOLDER_ISSUERENDPOINTURL 18071 /* Variable */
#define UA_NS0ID_AUTHORIZATIONSERVICECONFIGURATIONTYPE_SERVICEURI 18072 /* Variable */
#define UA_NS0ID_AUTHORIZATIONSERVICECONFIGURATIONTYPE_ISSUERENDPOINTURL 18073 /* Variable */
#define UA_NS0ID_READERGROUPTYPE_STATUS_ENABLE 18074 /* Method */
@@ -11657,6 +11845,108 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_PUBLISHSUBSCRIBETYPE_DIAGNOSTICS_LIVEVALUES_OPERATIONALDATASETWRITERS_DIAGNOSTICSLEVEL 18766 /* Variable */
#define UA_NS0ID_PUBLISHSUBSCRIBETYPE_DIAGNOSTICS_LIVEVALUES_OPERATIONALDATASETREADERS 18767 /* Variable */
#define UA_NS0ID_PUBLISHSUBSCRIBETYPE_DIAGNOSTICS_LIVEVALUES_OPERATIONALDATASETREADERS_DIAGNOSTICSLEVEL 18768 /* Variable */
+#define UA_NS0ID_THREEDVECTORTYPE_X 18769 /* Variable */
+#define UA_NS0ID_THREEDVECTORTYPE_Y 18770 /* Variable */
+#define UA_NS0ID_THREEDVECTORTYPE_Z 18771 /* Variable */
+#define UA_NS0ID_CARTESIANCOORDINATESTYPE 18772 /* VariableType */
+#define UA_NS0ID_CARTESIANCOORDINATESTYPE_LENGTHUNIT 18773 /* Variable */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATESTYPE 18774 /* VariableType */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATESTYPE_LENGTHUNIT 18775 /* Variable */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATESTYPE_X 18776 /* Variable */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATESTYPE_Y 18777 /* Variable */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATESTYPE_Z 18778 /* Variable */
+#define UA_NS0ID_ORIENTATIONTYPE 18779 /* VariableType */
+#define UA_NS0ID_ORIENTATIONTYPE_ANGLEUNIT 18780 /* Variable */
+#define UA_NS0ID_THREEDORIENTATIONTYPE 18781 /* VariableType */
+#define UA_NS0ID_THREEDORIENTATIONTYPE_ANGLEUNIT 18782 /* Variable */
+#define UA_NS0ID_THREEDORIENTATIONTYPE_A 18783 /* Variable */
+#define UA_NS0ID_THREEDORIENTATIONTYPE_B 18784 /* Variable */
+#define UA_NS0ID_THREEDORIENTATIONTYPE_C 18785 /* Variable */
+#define UA_NS0ID_FRAMETYPE 18786 /* VariableType */
+#define UA_NS0ID_FRAMETYPE_ORIENTATION 18787 /* Variable */
+#define UA_NS0ID_FRAMETYPE_CONSTANT 18788 /* Variable */
+#define UA_NS0ID_FRAMETYPE_BASEFRAME 18789 /* Variable */
+#define UA_NS0ID_FRAMETYPE_FIXEDBASE 18790 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE 18791 /* VariableType */
+#define UA_NS0ID_THREEDFRAMETYPE_ORIENTATION 18792 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_CONSTANT 18793 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_BASEFRAME 18794 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_FIXEDBASE 18795 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_CARTESIANCOORDINATES 18796 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_CARTESIANCOORDINATES_LENGTHUNIT 18797 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_CARTESIANCOORDINATES_X 18798 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_CARTESIANCOORDINATES_Y 18799 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_CARTESIANCOORDINATES_Z 18800 /* Variable */
+#define UA_NS0ID_FRAMETYPE_CARTESIANCOORDINATES 18801 /* Variable */
+#define UA_NS0ID_FRAMETYPE_CARTESIANCOORDINATES_LENGTHUNIT 18802 /* Variable */
+#define UA_NS0ID_FRAMETYPE_ORIENTATION_ANGLEUNIT 18803 /* Variable */
+#define UA_NS0ID_HASWRITERGROUP 18804 /* ReferenceType */
+#define UA_NS0ID_HASREADERGROUP 18805 /* ReferenceType */
+#define UA_NS0ID_RATIONALNUMBER 18806 /* DataType */
+#define UA_NS0ID_VECTOR 18807 /* DataType */
+#define UA_NS0ID_THREEDVECTOR 18808 /* DataType */
+#define UA_NS0ID_CARTESIANCOORDINATES 18809 /* DataType */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATES 18810 /* DataType */
+#define UA_NS0ID_ORIENTATION 18811 /* DataType */
+#define UA_NS0ID_THREEDORIENTATION 18812 /* DataType */
+#define UA_NS0ID_FRAME 18813 /* DataType */
+#define UA_NS0ID_THREEDFRAME 18814 /* DataType */
+#define UA_NS0ID_RATIONALNUMBER_ENCODING_DEFAULTBINARY 18815 /* Object */
+#define UA_NS0ID_VECTOR_ENCODING_DEFAULTBINARY 18816 /* Object */
+#define UA_NS0ID_THREEDVECTOR_ENCODING_DEFAULTBINARY 18817 /* Object */
+#define UA_NS0ID_CARTESIANCOORDINATES_ENCODING_DEFAULTBINARY 18818 /* Object */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATES_ENCODING_DEFAULTBINARY 18819 /* Object */
+#define UA_NS0ID_ORIENTATION_ENCODING_DEFAULTBINARY 18820 /* Object */
+#define UA_NS0ID_THREEDORIENTATION_ENCODING_DEFAULTBINARY 18821 /* Object */
+#define UA_NS0ID_FRAME_ENCODING_DEFAULTBINARY 18822 /* Object */
+#define UA_NS0ID_THREEDFRAME_ENCODING_DEFAULTBINARY 18823 /* Object */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_RATIONALNUMBER 18824 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_RATIONALNUMBER_DATATYPEVERSION 18825 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_RATIONALNUMBER_DICTIONARYFRAGMENT 18826 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_VECTOR 18827 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_VECTOR_DATATYPEVERSION 18828 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_VECTOR_DICTIONARYFRAGMENT 18829 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDVECTOR 18830 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDVECTOR_DATATYPEVERSION 18831 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDVECTOR_DICTIONARYFRAGMENT 18832 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_CARTESIANCOORDINATES 18833 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_CARTESIANCOORDINATES_DATATYPEVERSION 18834 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_CARTESIANCOORDINATES_DICTIONARYFRAGMENT 18835 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDCARTESIANCOORDINATES 18836 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDCARTESIANCOORDINATES_DATATYPEVERSION 18837 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDCARTESIANCOORDINATES_DICTIONARYFRAGMENT 18838 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_ORIENTATION 18839 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_ORIENTATION_DATATYPEVERSION 18840 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_ORIENTATION_DICTIONARYFRAGMENT 18841 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDORIENTATION 18842 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDORIENTATION_DATATYPEVERSION 18843 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDORIENTATION_DICTIONARYFRAGMENT 18844 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_FRAME 18845 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_FRAME_DATATYPEVERSION 18846 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_FRAME_DICTIONARYFRAGMENT 18847 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDFRAME 18848 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDFRAME_DATATYPEVERSION 18849 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_THREEDFRAME_DICTIONARYFRAGMENT 18850 /* Variable */
+#define UA_NS0ID_RATIONALNUMBER_ENCODING_DEFAULTXML 18851 /* Object */
+#define UA_NS0ID_VECTOR_ENCODING_DEFAULTXML 18852 /* Object */
+#define UA_NS0ID_THREEDVECTOR_ENCODING_DEFAULTXML 18853 /* Object */
+#define UA_NS0ID_CARTESIANCOORDINATES_ENCODING_DEFAULTXML 18854 /* Object */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATES_ENCODING_DEFAULTXML 18855 /* Object */
+#define UA_NS0ID_ORIENTATION_ENCODING_DEFAULTXML 18856 /* Object */
+#define UA_NS0ID_THREEDORIENTATION_ENCODING_DEFAULTXML 18857 /* Object */
+#define UA_NS0ID_FRAME_ENCODING_DEFAULTXML 18858 /* Object */
+#define UA_NS0ID_THREEDFRAME_ENCODING_DEFAULTXML 18859 /* Object */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_RATIONALNUMBER 18860 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_RATIONALNUMBER_DATATYPEVERSION 18861 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_RATIONALNUMBER_DICTIONARYFRAGMENT 18862 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_VECTOR 18863 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_VECTOR_DATATYPEVERSION 18864 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_VECTOR_DICTIONARYFRAGMENT 18865 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDVECTOR 18866 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDVECTOR_DATATYPEVERSION 18867 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDVECTOR_DICTIONARYFRAGMENT 18868 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_CARTESIANCOORDINATES 18869 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_CARTESIANCOORDINATES_DATATYPEVERSION 18870 /* Variable */
#define UA_NS0ID_PUBLISHEDDATASETTYPE_DATASETWRITERNAME_PLACEHOLDER_DIAGNOSTICS 18871 /* Object */
#define UA_NS0ID_PUBLISHEDDATASETTYPE_DATASETWRITERNAME_PLACEHOLDER_DIAGNOSTICS_DIAGNOSTICSLEVEL 18872 /* Variable */
#define UA_NS0ID_PUBLISHEDDATASETTYPE_DATASETWRITERNAME_PLACEHOLDER_DIAGNOSTICS_TOTALINFORMATION 18873 /* Variable */
@@ -11834,6 +12124,65 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_PUBLISHEDEVENTSTYPE_DATASETWRITERNAME_PLACEHOLDER_DIAGNOSTICS_LIVEVALUES_MAJORVERSION_DIAGNOSTICSLEVEL 19045 /* Variable */
#define UA_NS0ID_PUBLISHEDEVENTSTYPE_DATASETWRITERNAME_PLACEHOLDER_DIAGNOSTICS_LIVEVALUES_MINORVERSION 19046 /* Variable */
#define UA_NS0ID_PUBLISHEDEVENTSTYPE_DATASETWRITERNAME_PLACEHOLDER_DIAGNOSTICS_LIVEVALUES_MINORVERSION_DIAGNOSTICSLEVEL 19047 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_CARTESIANCOORDINATES_DICTIONARYFRAGMENT 19048 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDCARTESIANCOORDINATES 19049 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDCARTESIANCOORDINATES_DATATYPEVERSION 19050 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDCARTESIANCOORDINATES_DICTIONARYFRAGMENT 19051 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_ORIENTATION 19052 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_ORIENTATION_DATATYPEVERSION 19053 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_ORIENTATION_DICTIONARYFRAGMENT 19054 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDORIENTATION 19055 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDORIENTATION_DATATYPEVERSION 19056 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDORIENTATION_DICTIONARYFRAGMENT 19057 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_FRAME 19058 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_FRAME_DATATYPEVERSION 19059 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_FRAME_DICTIONARYFRAGMENT 19060 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDFRAME 19061 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDFRAME_DATATYPEVERSION 19062 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_THREEDFRAME_DICTIONARYFRAGMENT 19063 /* Variable */
+#define UA_NS0ID_RATIONALNUMBER_ENCODING_DEFAULTJSON 19064 /* Object */
+#define UA_NS0ID_VECTOR_ENCODING_DEFAULTJSON 19065 /* Object */
+#define UA_NS0ID_THREEDVECTOR_ENCODING_DEFAULTJSON 19066 /* Object */
+#define UA_NS0ID_CARTESIANCOORDINATES_ENCODING_DEFAULTJSON 19067 /* Object */
+#define UA_NS0ID_THREEDCARTESIANCOORDINATES_ENCODING_DEFAULTJSON 19068 /* Object */
+#define UA_NS0ID_ORIENTATION_ENCODING_DEFAULTJSON 19069 /* Object */
+#define UA_NS0ID_THREEDORIENTATION_ENCODING_DEFAULTJSON 19070 /* Object */
+#define UA_NS0ID_FRAME_ENCODING_DEFAULTJSON 19071 /* Object */
+#define UA_NS0ID_THREEDFRAME_ENCODING_DEFAULTJSON 19072 /* Object */
+#define UA_NS0ID_THREEDFRAMETYPE_ORIENTATION_ANGLEUNIT 19073 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_ORIENTATION_A 19074 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_ORIENTATION_B 19075 /* Variable */
+#define UA_NS0ID_THREEDFRAMETYPE_ORIENTATION_C 19076 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE 19077 /* VariableType */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE_DEFINITION 19078 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE_VALUEPRECISION 19079 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE_ENUMVALUES 19080 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE_VALUEASTEXT 19081 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE_ENUMDICTIONARYENTRIES 19082 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETEBASETYPE_VALUEASDICTIONARYENTRIES 19083 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE 19084 /* VariableType */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE_DEFINITION 19085 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE_VALUEPRECISION 19086 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE_ENUMVALUES 19087 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE_VALUEASTEXT 19088 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE_ENUMDICTIONARYENTRIES 19089 /* Variable */
+#define UA_NS0ID_MULTISTATEDICTIONARYENTRYDISCRETETYPE_VALUEASDICTIONARYENTRIES 19090 /* Variable */
+#define UA_NS0ID_HISTORYSERVERCAPABILITIES_SERVERTIMESTAMPSUPPORTED 19091 /* Variable */
+#define UA_NS0ID_HISTORICALDATACONFIGURATIONTYPE_SERVERTIMESTAMPSUPPORTED 19092 /* Variable */
+#define UA_NS0ID_HACONFIGURATION_SERVERTIMESTAMPSUPPORTED 19093 /* Variable */
+#define UA_NS0ID_HISTORYSERVERCAPABILITIESTYPE_SERVERTIMESTAMPSUPPORTED 19094 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE 19095 /* ObjectType */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_EVENTID 19096 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_EVENTTYPE 19097 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_SOURCENODE 19098 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_SOURCENAME 19099 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_TIME 19100 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_RECEIVETIME 19101 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_LOCALTIME 19102 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_MESSAGE 19103 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_SEVERITY 19104 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_ACTIONTIMESTAMP 19105 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_STATUS 19106 /* Variable */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_WRITERGROUPNAME_PLACEHOLDER_DIAGNOSTICS 19107 /* Object */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_WRITERGROUPNAME_PLACEHOLDER_DIAGNOSTICS_DIAGNOSTICSLEVEL 19108 /* Variable */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_WRITERGROUPNAME_PLACEHOLDER_DIAGNOSTICS_TOTALINFORMATION 19109 /* Variable */
@@ -12016,6 +12365,167 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_DIAGNOSTICS_LIVEVALUES 19286 /* Object */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_DIAGNOSTICS_LIVEVALUES_RESOLVEDADDRESS 19287 /* Variable */
#define UA_NS0ID_PUBSUBCONNECTIONTYPE_DIAGNOSTICS_LIVEVALUES_RESOLVEDADDRESS_DIAGNOSTICSLEVEL 19288 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_SERVERID 19289 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_CLIENTAUDITENTRYID 19290 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_CLIENTUSERID 19291 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_PARAMETERDATATYPEID 19292 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_PERFORMINSERTREPLACE 19293 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_NEWVALUES 19294 /* Variable */
+#define UA_NS0ID_AUDITHISTORYANNOTATIONUPDATEEVENTTYPE_OLDVALUES 19295 /* Variable */
+#define UA_NS0ID_TRUSTLISTTYPE_UPDATEFREQUENCY 19296 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE 19297 /* ObjectType */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_EVENTID 19298 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_EVENTTYPE 19299 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SOURCENODE 19300 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SOURCENAME 19301 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_TIME 19302 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_RECEIVETIME 19303 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LOCALTIME 19304 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_MESSAGE 19305 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SEVERITY 19306 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONCLASSID 19307 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONCLASSNAME 19308 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONSUBCLASSID 19309 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONSUBCLASSNAME 19310 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONNAME 19311 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_BRANCHID 19312 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_RETAIN 19313 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE 19314 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_ID 19315 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_NAME 19316 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_NUMBER 19317 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_EFFECTIVEDISPLAYNAME 19318 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_TRANSITIONTIME 19319 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_EFFECTIVETRANSITIONTIME 19320 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_TRUESTATE 19321 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLEDSTATE_FALSESTATE 19322 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_QUALITY 19323 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_QUALITY_SOURCETIMESTAMP 19324 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LASTSEVERITY 19325 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LASTSEVERITY_SOURCETIMESTAMP 19326 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_COMMENT 19327 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_COMMENT_SOURCETIMESTAMP 19328 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CLIENTUSERID 19329 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_DISABLE 19330 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ENABLE 19331 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ADDCOMMENT 19332 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ADDCOMMENT_INPUTARGUMENTS 19333 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONREFRESH 19334 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONREFRESH_INPUTARGUMENTS 19335 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONREFRESH2 19336 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONDITIONREFRESH2_INPUTARGUMENTS 19337 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE 19338 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_ID 19339 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_NAME 19340 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_NUMBER 19341 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_EFFECTIVEDISPLAYNAME 19342 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_TRANSITIONTIME 19343 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_EFFECTIVETRANSITIONTIME 19344 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_TRUESTATE 19345 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKEDSTATE_FALSESTATE 19346 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE 19347 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_ID 19348 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_NAME 19349 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_NUMBER 19350 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_EFFECTIVEDISPLAYNAME 19351 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_TRANSITIONTIME 19352 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_EFFECTIVETRANSITIONTIME 19353 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_TRUESTATE 19354 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRMEDSTATE_FALSESTATE 19355 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKNOWLEDGE 19356 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACKNOWLEDGE_INPUTARGUMENTS 19357 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRM 19358 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_CONFIRM_INPUTARGUMENTS 19359 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE 19360 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_ID 19361 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_NAME 19362 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_NUMBER 19363 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_EFFECTIVEDISPLAYNAME 19364 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_TRANSITIONTIME 19365 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_EFFECTIVETRANSITIONTIME 19366 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_TRUESTATE 19367 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ACTIVESTATE_FALSESTATE 19368 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_INPUTNODE 19369 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE 19370 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_ID 19371 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_NAME 19372 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_NUMBER 19373 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_EFFECTIVEDISPLAYNAME 19374 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_TRANSITIONTIME 19375 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_EFFECTIVETRANSITIONTIME 19376 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_TRUESTATE 19377 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDSTATE_FALSESTATE 19378 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE 19379 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_ID 19380 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_NAME 19381 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_NUMBER 19382 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_EFFECTIVEDISPLAYNAME 19383 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_TRANSITIONTIME 19384 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_EFFECTIVETRANSITIONTIME 19385 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_TRUESTATE 19386 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OUTOFSERVICESTATE_FALSESTATE 19387 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE 19388 /* Object */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_CURRENTSTATE 19389 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_CURRENTSTATE_ID 19390 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_CURRENTSTATE_NAME 19391 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_CURRENTSTATE_NUMBER 19392 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_CURRENTSTATE_EFFECTIVEDISPLAYNAME 19393 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_LASTTRANSITION 19394 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_LASTTRANSITION_ID 19395 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_LASTTRANSITION_NAME 19396 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_LASTTRANSITION_NUMBER 19397 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_LASTTRANSITION_TRANSITIONTIME 19398 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_LASTTRANSITION_EFFECTIVETRANSITIONTIME 19399 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_AVAILABLESTATES 19400 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_AVAILABLETRANSITIONS 19401 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_UNSHELVETIME 19402 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_TIMEDSHELVE 19403 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_TIMEDSHELVE_INPUTARGUMENTS 19404 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_UNSHELVE 19405 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SHELVINGSTATE_ONESHOTSHELVE 19406 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESSEDORSHELVED 19407 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_MAXTIMESHELVED 19408 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_AUDIBLEENABLED 19409 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_AUDIBLESOUND 19410 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_AUDIBLESOUND_LISTID 19411 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_AUDIBLESOUND_AGENCYID 19412 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_AUDIBLESOUND_VERSIONID 19413 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE 19414 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_ID 19415 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_NAME 19416 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_NUMBER 19417 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_EFFECTIVEDISPLAYNAME 19418 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_TRANSITIONTIME 19419 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_EFFECTIVETRANSITIONTIME 19420 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_TRUESTATE 19421 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCESTATE_FALSESTATE 19422 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ONDELAY 19423 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_OFFDELAY 19424 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_FIRSTINGROUPFLAG 19425 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_FIRSTINGROUP 19426 /* Object */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE 19427 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_ID 19428 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_NAME 19429 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_NUMBER 19430 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_EFFECTIVEDISPLAYNAME 19431 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_TRANSITIONTIME 19432 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_EFFECTIVETRANSITIONTIME 19433 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_TRUESTATE 19434 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LATCHEDSTATE_FALSESTATE 19435 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_ALARMGROUP_PLACEHOLDER 19436 /* Object */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_REALARMTIME 19437 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_REALARMREPEATCOUNT 19438 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SILENCE 19439 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_SUPPRESS 19440 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_UNSUPPRESS 19441 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_REMOVEFROMSERVICE 19442 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_PLACEINSERVICE 19443 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_RESET 19444 /* Method */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_NORMALSTATE 19445 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_TRUSTLISTID 19446 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_LASTUPDATETIME 19447 /* Variable */
+#define UA_NS0ID_TRUSTLISTOUTOFDATEALARMTYPE_UPDATEFREQUENCY 19448 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPTYPE_TRUSTLIST_UPDATEFREQUENCY 19449 /* Variable */
#define UA_NS0ID_DATASETWRITERTYPE_DIAGNOSTICS 19550 /* Object */
#define UA_NS0ID_DATASETWRITERTYPE_DIAGNOSTICS_DIAGNOSTICSLEVEL 19551 /* Variable */
#define UA_NS0ID_DATASETWRITERTYPE_DIAGNOSTICS_TOTALINFORMATION 19552 /* Variable */
@@ -12561,8 +13071,11 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_PUBSUBDIAGNOSTICSDATASETREADERTYPE_LIVEVALUES_SECURITYTOKENID_DIAGNOSTICSLEVEL 20092 /* Variable */
#define UA_NS0ID_PUBSUBDIAGNOSTICSDATASETREADERTYPE_LIVEVALUES_TIMETONEXTTOKENID 20093 /* Variable */
#define UA_NS0ID_PUBSUBDIAGNOSTICSDATASETREADERTYPE_LIVEVALUES_TIMETONEXTTOKENID_DIAGNOSTICSLEVEL 20094 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTAPPLICATIONGROUP_TRUSTLIST_UPDATEFREQUENCY 20290 /* Variable */
#define UA_NS0ID_DATASETORDERINGTYPE 20408 /* DataType */
#define UA_NS0ID_READERGROUPTYPE_DATASETREADERNAME_PLACEHOLDER_DIAGNOSTICS_LIVEVALUES_SECURITYTOKENID 20409 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTHTTPSGROUP_TRUSTLIST_UPDATEFREQUENCY 20588 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTUSERTOKENGROUP_TRUSTLIST_UPDATEFREQUENCY 20884 /* Variable */
#define UA_NS0ID_VERSIONTIME 20998 /* DataType */
#define UA_NS0ID_SESSIONLESSINVOKERESPONSETYPE 20999 /* DataType */
#define UA_NS0ID_SESSIONLESSINVOKERESPONSETYPE_ENCODING_DEFAULTXML 21000 /* Object */
@@ -12766,9 +13279,122 @@ UA_atomic_subSize(volatile size_t *addr, size_t decrease) {
#define UA_NS0ID_READERGROUPDATATYPE_ENCODING_DEFAULTJSON 21201 /* Object */
#define UA_NS0ID_PUBSUBCONFIGURATIONDATATYPE_ENCODING_DEFAULTJSON 21202 /* Object */
#define UA_NS0ID_DATAGRAMWRITERGROUPTRANSPORTDATATYPE_ENCODING_DEFAULTJSON 21203 /* Object */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_ADDITIONALGROUP_PLACEHOLDER_TRUSTLIST_UPDATEFREQUENCY 21383 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTAPPLICATIONGROUP_TRUSTLIST_UPDATEFREQUENCY 21679 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTHTTPSGROUP_TRUSTLIST_UPDATEFREQUENCY 21975 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTUSERTOKENGROUP_TRUSTLIST_UPDATEFREQUENCY 22271 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTAPPLICATIONGROUP_TRUSTLIST_UPDATEFREQUENCY 22567 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTHTTPSGROUP_TRUSTLIST_UPDATEFREQUENCY 22863 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTUSERTOKENGROUP_TRUSTLIST_UPDATEFREQUENCY 23159 /* Variable */
+#define UA_NS0ID_ALIASNAMETYPE 23455 /* ObjectType */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE 23456 /* ObjectType */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_ALIAS_PLACEHOLDER 23457 /* Object */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_SUBALIASNAMECATEGORIES_PLACEHOLDER 23458 /* Object */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS 23459 /* Method */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_INPUTARGUMENTS 23460 /* Variable */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_OUTPUTARGUMENTS 23461 /* Variable */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_FINDALIAS 23462 /* Method */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_FINDALIAS_INPUTARGUMENTS 23463 /* Variable */
+#define UA_NS0ID_ALIASNAMECATEGORYTYPE_FINDALIAS_OUTPUTARGUMENTS 23464 /* Variable */
+#define UA_NS0ID_FINDALIASMETHODTYPE 23465 /* Method */
+#define UA_NS0ID_FINDALIASMETHODTYPE_INPUTARGUMENTS 23466 /* Variable */
+#define UA_NS0ID_FINDALIASMETHODTYPE_OUTPUTARGUMENTS 23467 /* Variable */
+#define UA_NS0ID_ALIASNAMEDATATYPE 23468 /* DataType */
+#define UA_NS0ID_ALIASFOR 23469 /* ReferenceType */
+#define UA_NS0ID_ALIASES 23470 /* Object */
+#define UA_NS0ID_ALIASES_ALIAS_PLACEHOLDER 23471 /* Object */
+#define UA_NS0ID_ALIASES_SUBALIASNAMECATEGORIES_PLACEHOLDER 23472 /* Object */
+#define UA_NS0ID_ALIASES_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS 23473 /* Method */
+#define UA_NS0ID_ALIASES_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_INPUTARGUMENTS 23474 /* Variable */
+#define UA_NS0ID_ALIASES_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_OUTPUTARGUMENTS 23475 /* Variable */
+#define UA_NS0ID_ALIASES_FINDALIAS 23476 /* Method */
+#define UA_NS0ID_ALIASES_FINDALIAS_INPUTARGUMENTS 23477 /* Variable */
+#define UA_NS0ID_ALIASES_FINDALIAS_OUTPUTARGUMENTS 23478 /* Variable */
+#define UA_NS0ID_TAGVARIABLES 23479 /* Object */
+#define UA_NS0ID_TAGVARIABLES_ALIAS_PLACEHOLDER 23480 /* Object */
+#define UA_NS0ID_TAGVARIABLES_SUBALIASNAMECATEGORIES_PLACEHOLDER 23481 /* Object */
+#define UA_NS0ID_TAGVARIABLES_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS 23482 /* Method */
+#define UA_NS0ID_TAGVARIABLES_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_INPUTARGUMENTS 23483 /* Variable */
+#define UA_NS0ID_TAGVARIABLES_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_OUTPUTARGUMENTS 23484 /* Variable */
+#define UA_NS0ID_TAGVARIABLES_FINDALIAS 23485 /* Method */
+#define UA_NS0ID_TAGVARIABLES_FINDALIAS_INPUTARGUMENTS 23486 /* Variable */
+#define UA_NS0ID_TAGVARIABLES_FINDALIAS_OUTPUTARGUMENTS 23487 /* Variable */
+#define UA_NS0ID_TOPICS 23488 /* Object */
+#define UA_NS0ID_TOPICS_ALIAS_PLACEHOLDER 23489 /* Object */
+#define UA_NS0ID_TOPICS_SUBALIASNAMECATEGORIES_PLACEHOLDER 23490 /* Object */
+#define UA_NS0ID_TOPICS_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS 23491 /* Method */
+#define UA_NS0ID_TOPICS_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_INPUTARGUMENTS 23492 /* Variable */
+#define UA_NS0ID_TOPICS_SUBALIASNAMECATEGORIES_PLACEHOLDER_FINDALIAS_OUTPUTARGUMENTS 23493 /* Variable */
+#define UA_NS0ID_TOPICS_FINDALIAS 23494 /* Method */
+#define UA_NS0ID_TOPICS_FINDALIAS_INPUTARGUMENTS 23495 /* Variable */
+#define UA_NS0ID_TOPICS_FINDALIAS_OUTPUTARGUMENTS 23496 /* Variable */
+#define UA_NS0ID_READANNOTATIONDATADETAILS 23497 /* DataType */
+#define UA_NS0ID_CURRENCYUNITTYPE 23498 /* DataType */
+#define UA_NS0ID_ALIASNAMEDATATYPE_ENCODING_DEFAULTBINARY 23499 /* Object */
+#define UA_NS0ID_READANNOTATIONDATADETAILS_ENCODING_DEFAULTBINARY 23500 /* Object */
+#define UA_NS0ID_CURRENCYUNIT 23501 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_ALIASNAMEDATATYPE 23502 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_ALIASNAMEDATATYPE_DATATYPEVERSION 23503 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_ALIASNAMEDATATYPE_DICTIONARYFRAGMENT 23504 /* Variable */
+#define UA_NS0ID_ALIASNAMEDATATYPE_ENCODING_DEFAULTXML 23505 /* Object */
+#define UA_NS0ID_READANNOTATIONDATADETAILS_ENCODING_DEFAULTXML 23506 /* Object */
+#define UA_NS0ID_CURRENCYUNITTYPE_ENCODING_DEFAULTBINARY 23507 /* Object */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_ALIASNAMEDATATYPE 23508 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_ALIASNAMEDATATYPE_DATATYPEVERSION 23509 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_ALIASNAMEDATATYPE_DICTIONARYFRAGMENT 23510 /* Variable */
+#define UA_NS0ID_ALIASNAMEDATATYPE_ENCODING_DEFAULTJSON 23511 /* Object */
+#define UA_NS0ID_READANNOTATIONDATADETAILS_ENCODING_DEFAULTJSON 23512 /* Object */
+#define UA_NS0ID_IORDEREDOBJECTTYPE 23513 /* ObjectType */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_CURRENCYUNITTYPE 23514 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_CURRENCYUNITTYPE_DATATYPEVERSION 23515 /* Variable */
+#define UA_NS0ID_OPCUA_BINARYSCHEMA_CURRENCYUNITTYPE_DICTIONARYFRAGMENT 23516 /* Variable */
+#define UA_NS0ID_IORDEREDOBJECTTYPE_NUMBERINLIST 23517 /* Variable */
+#define UA_NS0ID_ORDEREDLISTTYPE 23518 /* ObjectType */
+#define UA_NS0ID_ORDEREDLISTTYPE_ORDEREDOBJECT_PLACEHOLDER 23519 /* Object */
+#define UA_NS0ID_CURRENCYUNITTYPE_ENCODING_DEFAULTXML 23520 /* Object */
+#define UA_NS0ID_ORDEREDLISTTYPE_ORDEREDOBJECT_PLACEHOLDER_NUMBERINLIST 23521 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_CURRENCYUNITTYPE 23522 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_CURRENCYUNITTYPE_DATATYPEVERSION 23523 /* Variable */
+#define UA_NS0ID_OPCUA_XMLSCHEMA_CURRENCYUNITTYPE_DICTIONARYFRAGMENT 23524 /* Variable */
+#define UA_NS0ID_ORDEREDLISTTYPE_NODEVERSION 23525 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPTYPE_GETREJECTEDLIST 23526 /* Method */
+#define UA_NS0ID_CERTIFICATEGROUPTYPE_GETREJECTEDLIST_OUTPUTARGUMENTS 23527 /* Variable */
+#define UA_NS0ID_CURRENCYUNITTYPE_ENCODING_DEFAULTJSON 23528 /* Object */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTAPPLICATIONGROUP_GETREJECTEDLIST 23529 /* Method */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTAPPLICATIONGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23530 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTHTTPSGROUP_GETREJECTEDLIST 23531 /* Method */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTHTTPSGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23532 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTUSERTOKENGROUP_GETREJECTEDLIST 23533 /* Method */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_DEFAULTUSERTOKENGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23534 /* Variable */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_ADDITIONALGROUP_PLACEHOLDER_GETREJECTEDLIST 23535 /* Method */
+#define UA_NS0ID_CERTIFICATEGROUPFOLDERTYPE_ADDITIONALGROUP_PLACEHOLDER_GETREJECTEDLIST_OUTPUTARGUMENTS 23536 /* Variable */
+#define UA_NS0ID_ECCAPPLICATIONCERTIFICATETYPE 23537 /* ObjectType */
+#define UA_NS0ID_ECCNISTP256APPLICATIONCERTIFICATETYPE 23538 /* ObjectType */
+#define UA_NS0ID_ECCNISTP384APPLICATIONCERTIFICATETYPE 23539 /* ObjectType */
+#define UA_NS0ID_ECCBRAINPOOLP256R1APPLICATIONCERTIFICATETYPE 23540 /* ObjectType */
+#define UA_NS0ID_ECCBRAINPOOLP384R1APPLICATIONCERTIFICATETYPE 23541 /* ObjectType */
+#define UA_NS0ID_ECCCURVE25519APPLICATIONCERTIFICATETYPE 23542 /* ObjectType */
+#define UA_NS0ID_ECCCURVE448APPLICATIONCERTIFICATETYPE 23543 /* ObjectType */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTAPPLICATIONGROUP_GETREJECTEDLIST 23544 /* Method */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTAPPLICATIONGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23545 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTHTTPSGROUP_GETREJECTEDLIST 23546 /* Method */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTHTTPSGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23547 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTUSERTOKENGROUP_GETREJECTEDLIST 23548 /* Method */
+#define UA_NS0ID_SERVERCONFIGURATIONTYPE_CERTIFICATEGROUPS_DEFAULTUSERTOKENGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23549 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTAPPLICATIONGROUP_GETREJECTEDLIST 23550 /* Method */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTAPPLICATIONGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23551 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTHTTPSGROUP_GETREJECTEDLIST 23552 /* Method */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTHTTPSGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23553 /* Variable */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTUSERTOKENGROUP_GETREJECTEDLIST 23554 /* Method */
+#define UA_NS0ID_SERVERCONFIGURATION_CERTIFICATEGROUPS_DEFAULTUSERTOKENGROUP_GETREJECTEDLIST_OUTPUTARGUMENTS 23555 /* Variable */
+#define UA_NS0ID_AUTHORIZATIONSERVICESCONFIGURATIONFOLDERTYPE 23556 /* ObjectType */
+#define UA_NS0ID_AUTHORIZATIONSERVICESCONFIGURATIONFOLDERTYPE_SERVICENAME_PLACEHOLDER 23557 /* Object */
+#define UA_NS0ID_AUTHORIZATIONSERVICESCONFIGURATIONFOLDERTYPE_SERVICENAME_PLACEHOLDER_SERVICEURI 23558 /* Variable */
+#define UA_NS0ID_AUTHORIZATIONSERVICESCONFIGURATIONFOLDERTYPE_SERVICENAME_PLACEHOLDER_SERVICECERTIFICATE 23559 /* Variable */
+#define UA_NS0ID_AUTHORIZATIONSERVICESCONFIGURATIONFOLDERTYPE_SERVICENAME_PLACEHOLDER_ISSUERENDPOINTURL 23560 /* Variable */
#endif /* UA_NODEIDS_NS0_H_ */
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/common.h" ***********************************/
+/**** amalgamated original file "/include/open62541/common.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -12821,7 +13447,11 @@ typedef enum {
UA_ATTRIBUTEID_HISTORIZING = 20,
UA_ATTRIBUTEID_EXECUTABLE = 21,
UA_ATTRIBUTEID_USEREXECUTABLE = 22,
- UA_ATTRIBUTEID_DATATYPEDEFINITION = 23
+ UA_ATTRIBUTEID_DATATYPEDEFINITION = 23,
+ UA_ATTRIBUTEID_ROLEPERMISSIONS = 24,
+ UA_ATTRIBUTEID_USERROLEPERMISSIONS = 25,
+ UA_ATTRIBUTEID_ACCESSRESTRICTIONS = 26,
+ UA_ATTRIBUTEID_ACCESSLEVELEX = 27
} UA_AttributeId;
/**
@@ -12883,6 +13513,20 @@ typedef enum {
#define UA_VALUERANK_THREE_DIMENSIONS 3
/**
+ * EventNotifier
+ * -------------
+ * The following are the available EventNotifier used for Nodes.
+ * The EventNotifier Attribute is used to indicate if the Node can be used
+ * to subscribe to Events or to read / write historic Events.
+ * Part 3: 5.4 Table 10 */
+
+#define UA_EVENTNOTIFIER_SUBSCRIBE_TO_EVENT (0x01u << 0u)
+#define UA_EVENTNOTIFIER_HISTORY_READ (0x01u << 2u)
+#define UA_EVENTNOTIFIER_HISTORY_WRITE (0x01u << 3u)
+
+/**
+ * .. _rule-handling:
+ *
* Rule Handling
* -------------
*
@@ -12916,14 +13560,15 @@ typedef enum {
* ---------------- */
typedef enum {
- UA_SECURECHANNELSTATE_CLOSED,
+ UA_SECURECHANNELSTATE_FRESH = 0,
UA_SECURECHANNELSTATE_HEL_SENT,
UA_SECURECHANNELSTATE_HEL_RECEIVED,
UA_SECURECHANNELSTATE_ACK_SENT,
UA_SECURECHANNELSTATE_ACK_RECEIVED,
UA_SECURECHANNELSTATE_OPN_SENT,
UA_SECURECHANNELSTATE_OPEN,
- UA_SECURECHANNELSTATE_CLOSING
+ UA_SECURECHANNELSTATE_CLOSING,
+ UA_SECURECHANNELSTATE_CLOSED
} UA_SecureChannelState;
typedef enum {
@@ -12939,7 +13584,7 @@ typedef enum {
* Statistic counters
* ------------------
*
- * The stack manage statistic counter for the following layers:
+ * The stack manages statistic counters for the following layers:
*
* - Network
* - Secure channel
@@ -12947,7 +13592,7 @@ typedef enum {
*
* The session layer counters are matching the counters of the
* ServerDiagnosticsSummaryDataType that are defined in the OPC UA Part 5
- * specification. Counter of the other layers are not specified by OPC UA but
+ * specification. Counters of the other layers are not specified by OPC UA but
* are harmonized with the session layer counters if possible. */
typedef struct {
@@ -12982,7 +13627,7 @@ typedef struct {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/types.h" ***********************************/
+/**** amalgamated original file "/include/open62541/types.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -13003,8 +13648,6 @@ _UA_END_DECLS
_UA_BEGIN_DECLS
-#define UA_BUILTIN_TYPES_COUNT 25U
-
/**
* .. _types:
*
@@ -13113,9 +13756,19 @@ typedef double UA_Double;
*
* StatusCode
* ^^^^^^^^^^
- * A numeric identifier for a error or condition that is associated with a value
- * or an operation. See the section :ref:`statuscodes` for the meaning of a
- * specific code. */
+ * A numeric identifier for an error or condition that is associated with a
+ * value or an operation. See the section :ref:`statuscodes` for the meaning of
+ * a specific code.
+ *
+ * Each StatusCode has one of three "severity" bit-flags:
+ * Good, Uncertain, Bad. An additional reason is indicated by the SubCode
+ * bitfield.
+ *
+ * - A StatusCode with severity Good means that the value is of good quality.
+ * - A StatusCode with severity Uncertain means that the quality of the value is
+ * uncertain for reasons indicated by the SubCode.
+ * - A StatusCode with severity Bad means that the value is not usable for
+ * reasons indicated by the SubCode. */
typedef uint32_t UA_StatusCode;
/* Returns the human-readable name of the StatusCode. If no matching StatusCode
@@ -13126,6 +13779,32 @@ typedef uint32_t UA_StatusCode;
UA_EXPORT const char *
UA_StatusCode_name(UA_StatusCode code);
+/* Extracts the severity from a StatusCode. See Part 4, Section 7.34 for
+ * details. */
+static UA_INLINE UA_Boolean
+UA_StatusCode_isBad(UA_StatusCode code) {
+ return ((code >> 30) >= 0x02);
+}
+
+static UA_INLINE UA_Boolean
+UA_StatusCode_isUncertain(UA_StatusCode code) {
+ return ((code >> 30) == 0x01);
+}
+
+static UA_INLINE UA_Boolean
+UA_StatusCode_isGood(UA_StatusCode code) {
+ return ((code >> 30) == 0x00);
+}
+
+/* Compares the top 16 bits of two StatusCodes for equality. This should only
+ * be used when processing user-defined StatusCodes e.g when processing a ReadResponse.
+ * As a convention, the lower bits of StatusCodes should not be used internally, meaning
+ * can compare them without the use of this function. */
+static UA_INLINE UA_Boolean
+UA_StatusCode_isEqualTop (UA_StatusCode s1, UA_StatusCode s2) {
+ return ((s1 & 0xFFFF0000) == (s2 & 0xFFFF0000));
+}
+
/**
* String
* ^^^^^^
@@ -13204,7 +13883,7 @@ typedef struct UA_DateTimeStruct {
UA_UInt16 hour;
UA_UInt16 day; /* From 1 to 31 */
UA_UInt16 month; /* From 1 to 12 */
- UA_UInt16 year;
+ UA_Int16 year; /* Can be negative (BC) */
} UA_DateTimeStruct;
UA_DateTimeStruct UA_EXPORT UA_DateTime_toStruct(UA_DateTime t);
@@ -13304,9 +13983,7 @@ UA_ByteString_equal(const UA_ByteString *string1,
(const UA_String*)string2);
}
-/* Returns a non-cryptographic hash for the String.
- * Uses FNV non-cryptographic hash function. See
- * https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function */
+/* Returns a non-cryptographic hash of a bytestring */
UA_UInt32 UA_EXPORT
UA_ByteString_hash(UA_UInt32 initialHashValue,
const UA_Byte *data, size_t size);
@@ -13443,6 +14120,9 @@ typedef struct {
UA_EXPORT extern const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL;
+UA_StatusCode UA_EXPORT
+UA_ExpandedNodeId_print(const UA_ExpandedNodeId *id, UA_String *output);
+
#ifdef UA_ENABLE_PARSING
/* Parse the ExpandedNodeId format defined in Part 6, 5.3.1.11:
*
@@ -13500,18 +14180,33 @@ UA_EXPANDEDNODEID_BYTESTRING_ALLOC(UA_UInt16 nsIndex, const char *chars) {
id.serverIndex = 0; id.namespaceUri = UA_STRING_NULL; return id;
}
+static UA_INLINE UA_ExpandedNodeId
+UA_EXPANDEDNODEID_NODEID(UA_NodeId nodeId) {
+ UA_ExpandedNodeId id = {0}; id.nodeId = nodeId; return id;
+}
+
+/* Does the ExpandedNodeId point to a local node? That is, are namespaceUri and
+ * serverIndex empty? */
+UA_Boolean UA_EXPORT
+UA_ExpandedNodeId_isLocal(const UA_ExpandedNodeId *n);
+
/* Total ordering of ExpandedNodeId */
UA_Order UA_EXPORT
-UA_ExpandedNodeId_order(const UA_ExpandedNodeId *n1, const UA_ExpandedNodeId *n2);
+UA_ExpandedNodeId_order(const UA_ExpandedNodeId *n1,
+ const UA_ExpandedNodeId *n2);
/* Check for equality */
static UA_INLINE UA_Boolean
-UA_ExpandedNodeId_equal(const UA_ExpandedNodeId *n1, const UA_ExpandedNodeId *n2) {
+UA_ExpandedNodeId_equal(const UA_ExpandedNodeId *n1,
+ const UA_ExpandedNodeId *n2) {
return (UA_ExpandedNodeId_order(n1, n2) == UA_ORDER_EQ);
}
-/* Returns a non-cryptographic hash for ExpandedNodeId */
-UA_UInt32 UA_EXPORT UA_ExpandedNodeId_hash(const UA_ExpandedNodeId *n);
+/* Returns a non-cryptographic hash for ExpandedNodeId. The hash of an
+ * ExpandedNodeId is identical to the hash of the embedded (simple) NodeId if
+ * the ServerIndex is zero and no NamespaceUri is set. */
+UA_UInt32 UA_EXPORT
+UA_ExpandedNodeId_hash(const UA_ExpandedNodeId *n);
/**
* .. _qualifiedname:
@@ -13600,11 +14295,6 @@ UA_NUMERICRANGE(const char *s) {
UA_NumericRange_parse(&nr, UA_STRING((char*)(uintptr_t)s)); return nr;
}
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_NumericRange_parseFromString(UA_NumericRange *range, const UA_String *str) {
- return UA_NumericRange_parse(range, *str);
-}
-
/**
* .. _variant:
*
@@ -13646,11 +14336,10 @@ typedef struct UA_DataType UA_DataType;
#define UA_EMPTY_ARRAY_SENTINEL ((void*)0x01)
typedef enum {
- UA_VARIANT_DATA, /* The data has the same lifecycle as the
- variant */
- UA_VARIANT_DATA_NODELETE /* The data is "borrowed" by the variant and
- shall not be deleted at the end of the
- variant's lifecycle. */
+ UA_VARIANT_DATA, /* The data has the same lifecycle as the variant */
+ UA_VARIANT_DATA_NODELETE /* The data is "borrowed" by the variant and is
+ * not deleted when the variant is cleared up.
+ * The array dimensions also borrowed. */
} UA_VariantStorageType;
typedef struct {
@@ -13718,7 +14407,7 @@ UA_Variant_setScalar(UA_Variant *v, void * UA_RESTRICT p,
* @param type The datatype of the value
* @return Indicates whether the operation succeeded or returns an error code */
UA_StatusCode UA_EXPORT
-UA_Variant_setScalarCopy(UA_Variant *v, const void *p,
+UA_Variant_setScalarCopy(UA_Variant *v, const void * UA_RESTRICT p,
const UA_DataType *type);
/* Set the variant to an array that already resides in memory. The array takes
@@ -13740,7 +14429,7 @@ UA_Variant_setArray(UA_Variant *v, void * UA_RESTRICT array,
* @param type The datatype of the array
* @return Indicates whether the operation succeeded or returns an error code */
UA_StatusCode UA_EXPORT
-UA_Variant_setArrayCopy(UA_Variant *v, const void *array,
+UA_Variant_setArrayCopy(UA_Variant *v, const void * UA_RESTRICT array,
size_t arraySize, const UA_DataType *type);
/* Copy the variant, but use only a subset of the (multidimensional) array into
@@ -13752,10 +14441,10 @@ UA_Variant_setArrayCopy(UA_Variant *v, const void *array,
* @param range The range of the copied data
* @return Returns UA_STATUSCODE_GOOD or an error code */
UA_StatusCode UA_EXPORT
-UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst,
+UA_Variant_copyRange(const UA_Variant *src, UA_Variant * UA_RESTRICT dst,
const UA_NumericRange range);
-/* Insert a range of data into an existing variant. The data array can't be
+/* Insert a range of data into an existing variant. The data array cannot be
* reused afterwards if it contains types without a fixed size (e.g. strings)
* since the members are moved into the variant and take on its lifecycle.
*
@@ -13778,7 +14467,7 @@ UA_Variant_setRange(UA_Variant *v, void * UA_RESTRICT array,
* @param range The range of where the new data is inserted
* @return Returns UA_STATUSCODE_GOOD or an error code */
UA_StatusCode UA_EXPORT
-UA_Variant_setRangeCopy(UA_Variant *v, const void *array,
+UA_Variant_setRangeCopy(UA_Variant *v, const void * UA_RESTRICT array,
size_t arraySize, const UA_NumericRange range);
/**
@@ -13815,6 +14504,29 @@ typedef struct {
} content;
} UA_ExtensionObject;
+/* Initialize the ExtensionObject and set the "decoded" value to the given
+ * pointer. The value will be deleted when the ExtensionObject is cleared. */
+void UA_EXPORT
+UA_ExtensionObject_setValue(UA_ExtensionObject *eo,
+ void * UA_RESTRICT p,
+ const UA_DataType *type);
+
+/* Initialize the ExtensionObject and set the "decoded" value to the given
+ * pointer. The value will *not* be deleted when the ExtensionObject is
+ * cleared. */
+void UA_EXPORT
+UA_ExtensionObject_setValueNoDelete(UA_ExtensionObject *eo,
+ void * UA_RESTRICT p,
+ const UA_DataType *type);
+
+/* Initialize the ExtensionObject and set the "decoded" value to a fresh copy of
+ * the given value pointer. The value will be deleted when the ExtensionObject
+ * is cleared. */
+UA_StatusCode UA_EXPORT
+UA_ExtensionObject_setValueCopy(UA_ExtensionObject *eo,
+ void * UA_RESTRICT p,
+ const UA_DataType *type);
+
/**
* .. _datavalue:
*
@@ -13836,6 +14548,18 @@ typedef struct {
UA_Boolean hasServerPicoseconds : 1;
} UA_DataValue;
+/* Copy the DataValue, but use only a subset of the (multidimensional) array of
+ * of the variant of the source DataValue. Returns an error code if the variant
+ * of the DataValue is not an array or if the indicated range does not fit.
+ *
+ * @param src The source DataValue
+ * @param dst The target DataValue
+ * @param range The range of the variant of the DataValue to copy
+ * @return Returns UA_STATUSCODE_GOOD or an error code */
+UA_StatusCode UA_EXPORT
+UA_DataValue_copyVariantRange(const UA_DataValue *src, UA_DataValue * UA_RESTRICT dst,
+ const UA_NumericRange range);
+
/**
* DiagnosticInfo
* ^^^^^^^^^^^^^^
@@ -13886,22 +14610,19 @@ typedef struct UA_DiagnosticInfo {
typedef struct {
#ifdef UA_ENABLE_TYPEDESCRIPTION
- const char *memberName;
+ const char *memberName; /* Human-readable member name */
#endif
- UA_UInt16 memberTypeIndex; /* Index of the member in the array of data
- types */
- UA_Byte padding; /* How much padding is there before this
+ const UA_DataType *memberType;/* The member data type description */
+ UA_Byte padding : 6; /* How much padding is there before this
member element? For arrays this is the
padding before the size_t length member.
(No padding between size_t and the
- following ptr.) */
- UA_Boolean namespaceZero : 1; /* The type of the member is defined in
- namespace zero. In this implementation,
- types from custom namespace may contain
- members from the same namespace or
- namespace zero only.*/
- UA_Boolean isArray : 1; /* The member is an array */
- UA_Boolean isOptional : 1; /* The member is an optional field */
+ following ptr.) For unions, the padding
+ includes the size of the switchfield (the
+ offset from the start of the union
+ type). */
+ UA_Byte isArray : 1; /* The member is an array */
+ UA_Byte isOptional : 1; /* The member is an optional field */
} UA_DataTypeMember;
/* The DataType "kind" is an internal type classification. It is used to
@@ -13945,26 +14666,52 @@ struct UA_DataType {
#ifdef UA_ENABLE_TYPEDESCRIPTION
const char *typeName;
#endif
- UA_NodeId typeId; /* The nodeid of the type */
- UA_UInt16 memSize; /* Size of the struct in memory */
- UA_UInt16 typeIndex; /* Index of the type in the datatypetable */
- UA_UInt32 typeKind : 6; /* Dispatch index for the handling routines */
- UA_UInt32 pointerFree : 1; /* The type (and its members) contains no
- * pointers that need to be freed */
- UA_UInt32 overlayable : 1; /* The type has the identical memory layout
- * in memory and on the binary stream. */
- UA_UInt32 membersSize : 8; /* How many members does the type have? */
- UA_UInt32 binaryEncodingId; /* NodeId of datatype when encoded as binary */
- //UA_UInt16 xmlEncodingId; /* NodeId of datatype when encoded as XML */
+ UA_NodeId typeId; /* The nodeid of the type */
+ UA_NodeId binaryEncodingId; /* NodeId of datatype when encoded as binary */
+ //UA_NodeId xmlEncodingId; /* NodeId of datatype when encoded as XML */
+ UA_UInt32 memSize : 16; /* Size of the struct in memory */
+ UA_UInt32 typeKind : 6; /* Dispatch index for the handling routines */
+ UA_UInt32 pointerFree : 1; /* The type (and its members) contains no
+ * pointers that need to be freed */
+ UA_UInt32 overlayable : 1; /* The type has the identical memory layout
+ * in memory and on the binary stream. */
+ UA_UInt32 membersSize : 8; /* How many members does the type have? */
UA_DataTypeMember *members;
};
-/* Test if the data type is a numeric builtin data type. This includes Boolean,
- * integers and floating point numbers. Not included are DateTime and
- * StatusCode. */
+/* Datatype arrays with custom type definitions can be added in a linked list to
+ * the client or server configuration. */
+typedef struct UA_DataTypeArray {
+ const struct UA_DataTypeArray *next;
+ const size_t typesSize;
+ const UA_DataType *types;
+} UA_DataTypeArray;
+
+/* Returns the offset and type of a structure member. The return value is false
+ * if the member was not found.
+ *
+ * If the member is an array, the offset points to the (size_t) length field.
+ * (The array pointer comes after the length field without any padding.) */
+#ifdef UA_ENABLE_TYPEDESCRIPTION
+UA_Boolean
+UA_DataType_getStructMember(const UA_DataType *type,
+ const char *memberName,
+ size_t *outOffset,
+ const UA_DataType **outMemberType,
+ UA_Boolean *outIsArray);
+#endif
+
+/* Test if the data type is a numeric builtin data type (via the typeKind field
+ * of UA_DataType). This includes integers and floating point numbers. Not
+ * included are Boolean, DateTime, StatusCode and Enums. */
UA_Boolean
UA_DataType_isNumeric(const UA_DataType *type);
+/* Return the Data Type Precedence-Rank defined in Part 4.
+ * If there is no Precedence-Rank assigned with the type -1 is returned.*/
+UA_Int16
+UA_DataType_getPrecedence(const UA_DataType *type);
+
/**
* Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is
* the name of the data type. If only the NodeId of a type is known, use the
@@ -14021,6 +14768,130 @@ void UA_EXPORT UA_clear(void *p, const UA_DataType *type);
* @param type The datatype description of the variable */
void UA_EXPORT UA_delete(void *p, const UA_DataType *type);
+/* Pretty-print the value from the datatype.
+ *
+ * @param p The memory location of the variable
+ * @param type The datatype description of the variable
+ * @param output A string that is memory-allocated for the pretty-printed output
+ * @return Indicates whether the operation succeeded*/
+#ifdef UA_ENABLE_TYPEDESCRIPTION
+UA_StatusCode UA_EXPORT
+UA_print(const void *p, const UA_DataType *type, UA_String *output);
+#endif
+
+/* Compare two variables and return their order. This can also be used to test
+ * for equality of two values.
+ *
+ * For numerical types (including StatusCodes and Enums), their natural order is
+ * used. NaN is the "smallest" value for floating point values. Different bit
+ * representations of NaN are considered identical.
+ *
+ * All other types have *some* absolute ordering so that a < b, b < c -> a < c.
+ *
+ * The ordering of arrays (also strings) is in "shortlex": A shorter array is
+ * always smaller than a longer array. Otherwise the first different element
+ * defines the order.
+ *
+ * When members of different types are permitted (in Variants and
+ * ExtensionObjects), the memory address in the "UA_DataType*" pointer
+ * determines which variable is smaller.
+ *
+ * @param p1 The memory location of the first value
+ * @param p2 The memory location of the first value
+ * @param type The datatype description of both values */
+UA_Order UA_EXPORT
+UA_order(const void *p1, const void *p2, const UA_DataType *type);
+
+/**
+ * Encoding/Decoding
+ * ^^^^^^^^^^^^^^^^^^
+ * Encoding and decoding routines for the available formats. For all formats
+ * the _calcSize, _encode and _decode methods are provided. */
+
+/* Returns the number of bytes the value p takes in binary encoding. Returns
+ * zero if an error occurs. */
+UA_EXPORT size_t
+UA_calcSizeBinary(const void *p, const UA_DataType *type);
+
+/* Encodes a data-structure in the binary format. If outBuf has a length of
+ * zero, a buffer of the required size is allocated. Otherwise, encoding into
+ * the existing outBuf is attempted (and may fail if the buffer is too
+ * small). */
+UA_EXPORT UA_StatusCode
+UA_encodeBinary(const void *p, const UA_DataType *type,
+ UA_ByteString *outBuf);
+
+/* The structure with the decoding options may be extended in the future.
+ * Zero-out the entire structure initially to ensure code-compatibility when
+ * more fields are added in a later release. */
+typedef struct {
+ const UA_DataTypeArray *customTypes; /* Begin of a linked list with custom
+ * datatype definitions */
+} UA_DecodeBinaryOptions;
+
+/* Decodes a data structure from the input buffer in the binary format. It is
+ * assumed that `p` points to valid memory (not necessarily zeroed out). The
+ * options can be NULL and will be disregarded in that case. */
+UA_EXPORT UA_StatusCode
+UA_decodeBinary(const UA_ByteString *inBuf,
+ void *p, const UA_DataType *type,
+ const UA_DecodeBinaryOptions *options);
+
+#ifdef UA_ENABLE_JSON_ENCODING
+
+typedef struct {
+ const UA_String *namespaces;
+ size_t namespacesSize;
+ const UA_String *serverUris;
+ size_t serverUrisSize;
+ UA_Boolean useReversible;
+} UA_EncodeJsonOptions;
+
+/* Returns the number of bytes the value src takes in json encoding. Returns
+ * zero if an error occurs. */
+UA_EXPORT size_t
+UA_calcSizeJson(const void *src, const UA_DataType *type,
+ const UA_EncodeJsonOptions *options);
+
+/* Encodes the scalar value described by type to json encoding.
+ *
+ * @param src The value. Must not be NULL.
+ * @param type The value type. Must not be NULL.
+ * @param outBuf Pointer to ByteString containing the result if the encoding
+ * was successful
+ * @return Returns a statuscode whether encoding succeeded. */
+UA_StatusCode UA_EXPORT
+UA_encodeJson(const void *src, const UA_DataType *type, UA_ByteString *outBuf,
+ const UA_EncodeJsonOptions *options);
+
+/* The structure with the decoding options may be extended in the future.
+ * Zero-out the entire structure initially to ensure code-compatibility when
+ * more fields are added in a later release. */
+typedef struct {
+ const UA_String *namespaces;
+ size_t namespacesSize;
+ const UA_String *serverUris;
+ size_t serverUrisSize;
+ const UA_DataTypeArray *customTypes; /* Begin of a linked list with custom
+ * datatype definitions */
+} UA_DecodeJsonOptions;
+
+/* Decodes a scalar value described by type from json encoding.
+ *
+ * @param src The buffer with the json encoded value. Must not be NULL.
+ * @param dst The target value. Must not be NULL. The target is assumed to have
+ * size type->memSize. The value is reset to zero before decoding. If
+ * decoding fails, members are deleted and the value is reset (zeroed)
+ * again.
+ * @param type The value type. Must not be NULL.
+ * @param options The options struct for decoding, currently unused
+ * @return Returns a statuscode whether decoding succeeded. */
+UA_StatusCode UA_EXPORT
+UA_decodeJson(const UA_ByteString *src, void *dst, const UA_DataType *type,
+ const UA_DecodeJsonOptions *options);
+
+#endif /* UA_ENABLE_JSON_ENCODING */
+
/**
* .. _array-handling:
*
@@ -14039,7 +14910,7 @@ void UA_EXPORT UA_delete(void *p, const UA_DataType *type);
* @param size The requested array length
* @param type The datatype description
* @return Returns the memory location of the variable or NULL if no memory
- could be allocated */
+ * could be allocated */
void UA_EXPORT *
UA_Array_new(size_t size, const UA_DataType *type) UA_FUNC_ATTR_MALLOC;
@@ -14054,12 +14925,57 @@ UA_StatusCode UA_EXPORT
UA_Array_copy(const void *src, size_t size, void **dst,
const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
+/* Resizes (and reallocates) an array. The last entries are initialized to zero
+ * if the array length is increased. If the array length is decreased, the last
+ * entries are removed if the size is decreased.
+ *
+ * @param p Double pointer to the array memory. Can be overwritten by the result
+ * of a realloc.
+ * @param size The current size of the array. Overwritten in case of success.
+ * @param newSize The new size of the array
+ * @param type The datatype of the array members
+ * @return Returns UA_STATUSCODE_GOOD or UA_STATUSCODE_BADOUTOFMEMORY. The
+ * original array is left untouched in the failure case. */
+UA_StatusCode UA_EXPORT
+UA_Array_resize(void **p, size_t *size, size_t newSize,
+ const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
+
+/* Append the given element at the end of the array. The content is moved
+ * (shallow copy) and the original memory is _init'ed if appending is
+ * successful.
+ *
+ * @param p Double pointer to the array memory. Can be overwritten by the result
+ * of a realloc.
+ * @param size The current size of the array. Overwritten in case of success.
+ * @param newElem The element to be appended. The memory is reset upon success.
+ * @param type The datatype of the array members
+ * @return Returns UA_STATUSCODE_GOOD or UA_STATUSCODE_BADOUTOFMEMORY. The
+ * original array is left untouched in the failure case. */
+UA_StatusCode UA_EXPORT
+UA_Array_append(void **p, size_t *size, void *newElem,
+ const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
+
+/* Append a copy of the given element at the end of the array.
+ *
+ * @param p Double pointer to the array memory. Can be overwritten by the result
+ * of a realloc.
+ * @param size The current size of the array. Overwritten in case of success.
+ * @param newElem The element to be appended.
+ * @param type The datatype of the array members
+ * @return Returns UA_STATUSCODE_GOOD or UA_STATUSCODE_BADOUTOFMEMORY. The
+ * original array is left untouched in the failure case. */
+
+UA_StatusCode UA_EXPORT
+UA_Array_appendCopy(void **p, size_t *size, const void *newElem,
+ const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
+
/* Deletes an array.
*
* @param p The memory location of the array
* @param size The size of the array
* @param type The datatype of the array members */
-void UA_EXPORT UA_Array_delete(void *p, size_t size, const UA_DataType *type);
+void UA_EXPORT
+UA_Array_delete(void *p, size_t size, const UA_DataType *type);
/**
* Random Number Generator
@@ -14088,27 +15004,17 @@ UA_Guid UA_EXPORT UA_Guid_random(void); /* no cryptographic entropy */
# define UA_TYPENAME(name)
#endif
-/* Datatype arrays with custom type definitions can be added in a linked list to
- * the client or server configuration. Datatype members can point to types in
- * the same array via the ``memberTypeIndex``. If ``namespaceZero`` is set to
- * true, the member datatype is looked up in the array of builtin datatypes
- * instead. */
-typedef struct UA_DataTypeArray {
- const struct UA_DataTypeArray *next;
- const size_t typesSize;
- const UA_DataType *types;
-} UA_DataTypeArray;
-
/**
* .. include:: types_generated.rst */
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/build/src_generated/open62541/types_generated.h" ***********************************/
+/**** amalgamated original file "/build/src_generated/open62541/types_generated.h" ****/
-/* Generated from Opc.Ua.Types.bsd with script /home/pdie/sonstiges/qtopcua/repos/open62541/tools/generate_datatypes.py
- * on host mintaka by user pdie at 2021-06-21 11:34:37 */
+/**********************************
+ * Autogenerated -- do not modify *
+ **********************************/
#ifdef UA_ENABLE_AMALGAMATION
@@ -14116,6 +15022,8 @@ _UA_END_DECLS
#endif
+
+
_UA_BEGIN_DECLS
@@ -14123,7 +15031,7 @@ _UA_BEGIN_DECLS
* Every type is assigned an index in an array containing the type descriptions.
* These descriptions are used during type handling (copying, deletion,
* binary encoding, ...). */
-#define UA_TYPES_COUNT 208
+#define UA_TYPES_COUNT 211
extern UA_EXPORT const UA_DataType UA_TYPES[UA_TYPES_COUNT];
/**
@@ -14277,9 +15185,20 @@ extern UA_EXPORT const UA_DataType UA_TYPES[UA_TYPES_COUNT];
#define UA_TYPES_DIAGNOSTICINFO 24
/**
+ * KeyValuePair
+ * ^^^^^^^^^^^^
+ */
+typedef struct {
+ UA_QualifiedName key;
+ UA_Variant value;
+} UA_KeyValuePair;
+
+#define UA_TYPES_KEYVALUEPAIR 25
+
+/**
* NodeClass
* ^^^^^^^^^
- * A mask specifying the class of the node. */
+ */
typedef enum {
UA_NODECLASS_UNSPECIFIED = 0,
UA_NODECLASS_OBJECT = 1,
@@ -14294,7 +15213,7 @@ typedef enum {
} UA_NodeClass;
UA_STATIC_ASSERT(sizeof(UA_NodeClass) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_NODECLASS 25
+#define UA_TYPES_NODECLASS 26
/**
* StructureType
@@ -14308,7 +15227,7 @@ typedef enum {
} UA_StructureType;
UA_STATIC_ASSERT(sizeof(UA_StructureType) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_STRUCTURETYPE 26
+#define UA_TYPES_STRUCTURETYPE 27
/**
* StructureField
@@ -14325,7 +15244,7 @@ typedef struct {
UA_Boolean isOptional;
} UA_StructureField;
-#define UA_TYPES_STRUCTUREFIELD 27
+#define UA_TYPES_STRUCTUREFIELD 28
/**
* StructureDefinition
@@ -14339,12 +15258,12 @@ typedef struct {
UA_StructureField *fields;
} UA_StructureDefinition;
-#define UA_TYPES_STRUCTUREDEFINITION 28
+#define UA_TYPES_STRUCTUREDEFINITION 29
/**
* Argument
* ^^^^^^^^
- * An argument for a method. */
+ */
typedef struct {
UA_String name;
UA_NodeId dataType;
@@ -14354,19 +15273,19 @@ typedef struct {
UA_LocalizedText description;
} UA_Argument;
-#define UA_TYPES_ARGUMENT 29
+#define UA_TYPES_ARGUMENT 30
/**
* EnumValueType
* ^^^^^^^^^^^^^
- * A mapping between a value of an enumerated type and a name and description. */
+ */
typedef struct {
UA_Int64 value;
UA_LocalizedText displayName;
UA_LocalizedText description;
} UA_EnumValueType;
-#define UA_TYPES_ENUMVALUETYPE 30
+#define UA_TYPES_ENUMVALUETYPE 31
/**
* EnumField
@@ -14379,31 +15298,31 @@ typedef struct {
UA_String name;
} UA_EnumField;
-#define UA_TYPES_ENUMFIELD 31
+#define UA_TYPES_ENUMFIELD 32
/**
* Duration
* ^^^^^^^^
- * A period of time measured in milliseconds. */
+ */
typedef UA_Double UA_Duration;
-#define UA_TYPES_DURATION 32
+#define UA_TYPES_DURATION 33
/**
* UtcTime
* ^^^^^^^
- * A date/time value specified in Universal Coordinated Time (UTC). */
+ */
typedef UA_DateTime UA_UtcTime;
-#define UA_TYPES_UTCTIME 33
+#define UA_TYPES_UTCTIME 34
/**
* LocaleId
* ^^^^^^^^
- * An identifier for a user locale. */
+ */
typedef UA_String UA_LocaleId;
-#define UA_TYPES_LOCALEID 34
+#define UA_TYPES_LOCALEID 35
/**
* TimeZoneDataType
@@ -14414,12 +15333,12 @@ typedef struct {
UA_Boolean daylightSavingInOffset;
} UA_TimeZoneDataType;
-#define UA_TYPES_TIMEZONEDATATYPE 35
+#define UA_TYPES_TIMEZONEDATATYPE 36
/**
* ApplicationType
* ^^^^^^^^^^^^^^^
- * The types of applications. */
+ */
typedef enum {
UA_APPLICATIONTYPE_SERVER = 0,
UA_APPLICATIONTYPE_CLIENT = 1,
@@ -14429,12 +15348,12 @@ typedef enum {
} UA_ApplicationType;
UA_STATIC_ASSERT(sizeof(UA_ApplicationType) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_APPLICATIONTYPE 36
+#define UA_TYPES_APPLICATIONTYPE 37
/**
* ApplicationDescription
* ^^^^^^^^^^^^^^^^^^^^^^
- * Describes an application and how to find it. */
+ */
typedef struct {
UA_String applicationUri;
UA_String productUri;
@@ -14446,12 +15365,12 @@ typedef struct {
UA_String *discoveryUrls;
} UA_ApplicationDescription;
-#define UA_TYPES_APPLICATIONDESCRIPTION 37
+#define UA_TYPES_APPLICATIONDESCRIPTION 38
/**
* RequestHeader
* ^^^^^^^^^^^^^
- * The header passed with every server request. */
+ */
typedef struct {
UA_NodeId authenticationToken;
UA_DateTime timestamp;
@@ -14462,12 +15381,12 @@ typedef struct {
UA_ExtensionObject additionalHeader;
} UA_RequestHeader;
-#define UA_TYPES_REQUESTHEADER 38
+#define UA_TYPES_REQUESTHEADER 39
/**
* ResponseHeader
* ^^^^^^^^^^^^^^
- * The header passed with every server response. */
+ */
typedef struct {
UA_DateTime timestamp;
UA_UInt32 requestHandle;
@@ -14478,22 +15397,22 @@ typedef struct {
UA_ExtensionObject additionalHeader;
} UA_ResponseHeader;
-#define UA_TYPES_RESPONSEHEADER 39
+#define UA_TYPES_RESPONSEHEADER 40
/**
* ServiceFault
* ^^^^^^^^^^^^
- * The response returned by all services when there is a service level error. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
} UA_ServiceFault;
-#define UA_TYPES_SERVICEFAULT 40
+#define UA_TYPES_SERVICEFAULT 41
/**
* FindServersRequest
* ^^^^^^^^^^^^^^^^^^
- * Finds the servers known to the discovery server. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_String endpointUrl;
@@ -14503,24 +15422,24 @@ typedef struct {
UA_String *serverUris;
} UA_FindServersRequest;
-#define UA_TYPES_FINDSERVERSREQUEST 41
+#define UA_TYPES_FINDSERVERSREQUEST 42
/**
* FindServersResponse
* ^^^^^^^^^^^^^^^^^^^
- * Finds the servers known to the discovery server. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t serversSize;
UA_ApplicationDescription *servers;
} UA_FindServersResponse;
-#define UA_TYPES_FINDSERVERSRESPONSE 42
+#define UA_TYPES_FINDSERVERSRESPONSE 43
/**
* MessageSecurityMode
* ^^^^^^^^^^^^^^^^^^^
- * The type of security to use on a message. */
+ */
typedef enum {
UA_MESSAGESECURITYMODE_INVALID = 0,
UA_MESSAGESECURITYMODE_NONE = 1,
@@ -14530,12 +15449,12 @@ typedef enum {
} UA_MessageSecurityMode;
UA_STATIC_ASSERT(sizeof(UA_MessageSecurityMode) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_MESSAGESECURITYMODE 43
+#define UA_TYPES_MESSAGESECURITYMODE 44
/**
* UserTokenType
* ^^^^^^^^^^^^^
- * The possible user token types. */
+ */
typedef enum {
UA_USERTOKENTYPE_ANONYMOUS = 0,
UA_USERTOKENTYPE_USERNAME = 1,
@@ -14545,12 +15464,12 @@ typedef enum {
} UA_UserTokenType;
UA_STATIC_ASSERT(sizeof(UA_UserTokenType) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_USERTOKENTYPE 44
+#define UA_TYPES_USERTOKENTYPE 45
/**
* UserTokenPolicy
* ^^^^^^^^^^^^^^^
- * Describes a user token that can be used with a server. */
+ */
typedef struct {
UA_String policyId;
UA_UserTokenType tokenType;
@@ -14559,12 +15478,12 @@ typedef struct {
UA_String securityPolicyUri;
} UA_UserTokenPolicy;
-#define UA_TYPES_USERTOKENPOLICY 45
+#define UA_TYPES_USERTOKENPOLICY 46
/**
* EndpointDescription
* ^^^^^^^^^^^^^^^^^^^
- * The description of a endpoint that can be used to access a server. */
+ */
typedef struct {
UA_String endpointUrl;
UA_ApplicationDescription server;
@@ -14577,12 +15496,12 @@ typedef struct {
UA_Byte securityLevel;
} UA_EndpointDescription;
-#define UA_TYPES_ENDPOINTDESCRIPTION 46
+#define UA_TYPES_ENDPOINTDESCRIPTION 47
/**
* GetEndpointsRequest
* ^^^^^^^^^^^^^^^^^^^
- * Gets the endpoints used by the server. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_String endpointUrl;
@@ -14592,24 +15511,24 @@ typedef struct {
UA_String *profileUris;
} UA_GetEndpointsRequest;
-#define UA_TYPES_GETENDPOINTSREQUEST 47
+#define UA_TYPES_GETENDPOINTSREQUEST 48
/**
* GetEndpointsResponse
* ^^^^^^^^^^^^^^^^^^^^
- * Gets the endpoints used by the server. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t endpointsSize;
UA_EndpointDescription *endpoints;
} UA_GetEndpointsResponse;
-#define UA_TYPES_GETENDPOINTSRESPONSE 48
+#define UA_TYPES_GETENDPOINTSRESPONSE 49
/**
* SecurityTokenRequestType
* ^^^^^^^^^^^^^^^^^^^^^^^^
- * Indicates whether a token if being created or renewed. */
+ */
typedef enum {
UA_SECURITYTOKENREQUESTTYPE_ISSUE = 0,
UA_SECURITYTOKENREQUESTTYPE_RENEW = 1,
@@ -14617,12 +15536,12 @@ typedef enum {
} UA_SecurityTokenRequestType;
UA_STATIC_ASSERT(sizeof(UA_SecurityTokenRequestType) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_SECURITYTOKENREQUESTTYPE 49
+#define UA_TYPES_SECURITYTOKENREQUESTTYPE 50
/**
* ChannelSecurityToken
* ^^^^^^^^^^^^^^^^^^^^
- * The token that identifies a set of keys for an active secure channel. */
+ */
typedef struct {
UA_UInt32 channelId;
UA_UInt32 tokenId;
@@ -14630,12 +15549,12 @@ typedef struct {
UA_UInt32 revisedLifetime;
} UA_ChannelSecurityToken;
-#define UA_TYPES_CHANNELSECURITYTOKEN 50
+#define UA_TYPES_CHANNELSECURITYTOKEN 51
/**
* OpenSecureChannelRequest
* ^^^^^^^^^^^^^^^^^^^^^^^^
- * Creates a secure channel with a server. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_UInt32 clientProtocolVersion;
@@ -14645,12 +15564,12 @@ typedef struct {
UA_UInt32 requestedLifetime;
} UA_OpenSecureChannelRequest;
-#define UA_TYPES_OPENSECURECHANNELREQUEST 51
+#define UA_TYPES_OPENSECURECHANNELREQUEST 52
/**
* OpenSecureChannelResponse
* ^^^^^^^^^^^^^^^^^^^^^^^^^
- * Creates a secure channel with a server. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
UA_UInt32 serverProtocolVersion;
@@ -14658,54 +15577,54 @@ typedef struct {
UA_ByteString serverNonce;
} UA_OpenSecureChannelResponse;
-#define UA_TYPES_OPENSECURECHANNELRESPONSE 52
+#define UA_TYPES_OPENSECURECHANNELRESPONSE 53
/**
* CloseSecureChannelRequest
* ^^^^^^^^^^^^^^^^^^^^^^^^^
- * Closes a secure channel. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
} UA_CloseSecureChannelRequest;
-#define UA_TYPES_CLOSESECURECHANNELREQUEST 53
+#define UA_TYPES_CLOSESECURECHANNELREQUEST 54
/**
* CloseSecureChannelResponse
* ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Closes a secure channel. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
} UA_CloseSecureChannelResponse;
-#define UA_TYPES_CLOSESECURECHANNELRESPONSE 54
+#define UA_TYPES_CLOSESECURECHANNELRESPONSE 55
/**
* SignedSoftwareCertificate
* ^^^^^^^^^^^^^^^^^^^^^^^^^
- * A software certificate with a digital signature. */
+ */
typedef struct {
UA_ByteString certificateData;
UA_ByteString signature;
} UA_SignedSoftwareCertificate;
-#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE 55
+#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE 56
/**
* SignatureData
* ^^^^^^^^^^^^^
- * A digital signature. */
+ */
typedef struct {
UA_String algorithm;
UA_ByteString signature;
} UA_SignatureData;
-#define UA_TYPES_SIGNATUREDATA 56
+#define UA_TYPES_SIGNATUREDATA 57
/**
* CreateSessionRequest
* ^^^^^^^^^^^^^^^^^^^^
- * Creates a new session with the server. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_ApplicationDescription clientDescription;
@@ -14718,12 +15637,12 @@ typedef struct {
UA_UInt32 maxResponseMessageSize;
} UA_CreateSessionRequest;
-#define UA_TYPES_CREATESESSIONREQUEST 57
+#define UA_TYPES_CREATESESSIONREQUEST 58
/**
* CreateSessionResponse
* ^^^^^^^^^^^^^^^^^^^^^
- * Creates a new session with the server. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
UA_NodeId sessionId;
@@ -14739,32 +15658,32 @@ typedef struct {
UA_UInt32 maxRequestMessageSize;
} UA_CreateSessionResponse;
-#define UA_TYPES_CREATESESSIONRESPONSE 58
+#define UA_TYPES_CREATESESSIONRESPONSE 59
/**
* UserIdentityToken
* ^^^^^^^^^^^^^^^^^
- * A base type for a user identity token. */
+ */
typedef struct {
UA_String policyId;
} UA_UserIdentityToken;
-#define UA_TYPES_USERIDENTITYTOKEN 59
+#define UA_TYPES_USERIDENTITYTOKEN 60
/**
* AnonymousIdentityToken
* ^^^^^^^^^^^^^^^^^^^^^^
- * A token representing an anonymous user. */
+ */
typedef struct {
UA_String policyId;
} UA_AnonymousIdentityToken;
-#define UA_TYPES_ANONYMOUSIDENTITYTOKEN 60
+#define UA_TYPES_ANONYMOUSIDENTITYTOKEN 61
/**
* UserNameIdentityToken
* ^^^^^^^^^^^^^^^^^^^^^
- * A token representing a user identified by a user name and password. */
+ */
typedef struct {
UA_String policyId;
UA_String userName;
@@ -14772,35 +15691,35 @@ typedef struct {
UA_String encryptionAlgorithm;
} UA_UserNameIdentityToken;
-#define UA_TYPES_USERNAMEIDENTITYTOKEN 61
+#define UA_TYPES_USERNAMEIDENTITYTOKEN 62
/**
* X509IdentityToken
* ^^^^^^^^^^^^^^^^^
- * A token representing a user identified by an X509 certificate. */
+ */
typedef struct {
UA_String policyId;
UA_ByteString certificateData;
} UA_X509IdentityToken;
-#define UA_TYPES_X509IDENTITYTOKEN 62
+#define UA_TYPES_X509IDENTITYTOKEN 63
/**
* IssuedIdentityToken
* ^^^^^^^^^^^^^^^^^^^
- * A token representing a user identified by a WS-Security XML token. */
+ */
typedef struct {
UA_String policyId;
UA_ByteString tokenData;
UA_String encryptionAlgorithm;
} UA_IssuedIdentityToken;
-#define UA_TYPES_ISSUEDIDENTITYTOKEN 63
+#define UA_TYPES_ISSUEDIDENTITYTOKEN 64
/**
* ActivateSessionRequest
* ^^^^^^^^^^^^^^^^^^^^^^
- * Activates a session with the server. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_SignatureData clientSignature;
@@ -14812,12 +15731,12 @@ typedef struct {
UA_SignatureData userTokenSignature;
} UA_ActivateSessionRequest;
-#define UA_TYPES_ACTIVATESESSIONREQUEST 64
+#define UA_TYPES_ACTIVATESESSIONREQUEST 65
/**
* ActivateSessionResponse
* ^^^^^^^^^^^^^^^^^^^^^^^
- * Activates a session with the server. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
UA_ByteString serverNonce;
@@ -14827,33 +15746,33 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_ActivateSessionResponse;
-#define UA_TYPES_ACTIVATESESSIONRESPONSE 65
+#define UA_TYPES_ACTIVATESESSIONRESPONSE 66
/**
* CloseSessionRequest
* ^^^^^^^^^^^^^^^^^^^
- * Closes a session with the server. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_Boolean deleteSubscriptions;
} UA_CloseSessionRequest;
-#define UA_TYPES_CLOSESESSIONREQUEST 66
+#define UA_TYPES_CLOSESESSIONREQUEST 67
/**
* CloseSessionResponse
* ^^^^^^^^^^^^^^^^^^^^
- * Closes a session with the server. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
} UA_CloseSessionResponse;
-#define UA_TYPES_CLOSESESSIONRESPONSE 67
+#define UA_TYPES_CLOSESESSIONRESPONSE 68
/**
* NodeAttributesMask
* ^^^^^^^^^^^^^^^^^^
- * The bits used to specify default attributes for a new node. */
+ */
typedef enum {
UA_NODEATTRIBUTESMASK_NONE = 0,
UA_NODEATTRIBUTESMASK_ACCESSLEVEL = 1,
@@ -14894,12 +15813,12 @@ typedef enum {
} UA_NodeAttributesMask;
UA_STATIC_ASSERT(sizeof(UA_NodeAttributesMask) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_NODEATTRIBUTESMASK 68
+#define UA_TYPES_NODEATTRIBUTESMASK 69
/**
* NodeAttributes
* ^^^^^^^^^^^^^^
- * The base attributes for all nodes. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -14908,12 +15827,12 @@ typedef struct {
UA_UInt32 userWriteMask;
} UA_NodeAttributes;
-#define UA_TYPES_NODEATTRIBUTES 69
+#define UA_TYPES_NODEATTRIBUTES 70
/**
* ObjectAttributes
* ^^^^^^^^^^^^^^^^
- * The attributes for an object node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -14923,12 +15842,12 @@ typedef struct {
UA_Byte eventNotifier;
} UA_ObjectAttributes;
-#define UA_TYPES_OBJECTATTRIBUTES 70
+#define UA_TYPES_OBJECTATTRIBUTES 71
/**
* VariableAttributes
* ^^^^^^^^^^^^^^^^^^
- * The attributes for a variable node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -14946,12 +15865,12 @@ typedef struct {
UA_Boolean historizing;
} UA_VariableAttributes;
-#define UA_TYPES_VARIABLEATTRIBUTES 71
+#define UA_TYPES_VARIABLEATTRIBUTES 72
/**
* MethodAttributes
* ^^^^^^^^^^^^^^^^
- * The attributes for a method node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -14962,12 +15881,12 @@ typedef struct {
UA_Boolean userExecutable;
} UA_MethodAttributes;
-#define UA_TYPES_METHODATTRIBUTES 72
+#define UA_TYPES_METHODATTRIBUTES 73
/**
* ObjectTypeAttributes
* ^^^^^^^^^^^^^^^^^^^^
- * The attributes for an object type node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -14977,12 +15896,12 @@ typedef struct {
UA_Boolean isAbstract;
} UA_ObjectTypeAttributes;
-#define UA_TYPES_OBJECTTYPEATTRIBUTES 73
+#define UA_TYPES_OBJECTTYPEATTRIBUTES 74
/**
* VariableTypeAttributes
* ^^^^^^^^^^^^^^^^^^^^^^
- * The attributes for a variable type node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -14997,12 +15916,12 @@ typedef struct {
UA_Boolean isAbstract;
} UA_VariableTypeAttributes;
-#define UA_TYPES_VARIABLETYPEATTRIBUTES 74
+#define UA_TYPES_VARIABLETYPEATTRIBUTES 75
/**
* ReferenceTypeAttributes
* ^^^^^^^^^^^^^^^^^^^^^^^
- * The attributes for a reference type node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -15014,12 +15933,12 @@ typedef struct {
UA_LocalizedText inverseName;
} UA_ReferenceTypeAttributes;
-#define UA_TYPES_REFERENCETYPEATTRIBUTES 75
+#define UA_TYPES_REFERENCETYPEATTRIBUTES 76
/**
* DataTypeAttributes
* ^^^^^^^^^^^^^^^^^^
- * The attributes for a data type node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -15029,12 +15948,12 @@ typedef struct {
UA_Boolean isAbstract;
} UA_DataTypeAttributes;
-#define UA_TYPES_DATATYPEATTRIBUTES 76
+#define UA_TYPES_DATATYPEATTRIBUTES 77
/**
* ViewAttributes
* ^^^^^^^^^^^^^^
- * The attributes for a view node. */
+ */
typedef struct {
UA_UInt32 specifiedAttributes;
UA_LocalizedText displayName;
@@ -15045,12 +15964,12 @@ typedef struct {
UA_Byte eventNotifier;
} UA_ViewAttributes;
-#define UA_TYPES_VIEWATTRIBUTES 77
+#define UA_TYPES_VIEWATTRIBUTES 78
/**
* AddNodesItem
* ^^^^^^^^^^^^
- * A request to add a node to the server address space. */
+ */
typedef struct {
UA_ExpandedNodeId parentNodeId;
UA_NodeId referenceTypeId;
@@ -15061,35 +15980,35 @@ typedef struct {
UA_ExpandedNodeId typeDefinition;
} UA_AddNodesItem;
-#define UA_TYPES_ADDNODESITEM 78
+#define UA_TYPES_ADDNODESITEM 79
/**
* AddNodesResult
* ^^^^^^^^^^^^^^
- * A result of an add node operation. */
+ */
typedef struct {
UA_StatusCode statusCode;
UA_NodeId addedNodeId;
} UA_AddNodesResult;
-#define UA_TYPES_ADDNODESRESULT 79
+#define UA_TYPES_ADDNODESRESULT 80
/**
* AddNodesRequest
* ^^^^^^^^^^^^^^^
- * Adds one or more nodes to the server address space. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t nodesToAddSize;
UA_AddNodesItem *nodesToAdd;
} UA_AddNodesRequest;
-#define UA_TYPES_ADDNODESREQUEST 80
+#define UA_TYPES_ADDNODESREQUEST 81
/**
* AddNodesResponse
* ^^^^^^^^^^^^^^^^
- * Adds one or more nodes to the server address space. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15098,12 +16017,12 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_AddNodesResponse;
-#define UA_TYPES_ADDNODESRESPONSE 81
+#define UA_TYPES_ADDNODESRESPONSE 82
/**
* AddReferencesItem
* ^^^^^^^^^^^^^^^^^
- * A request to add a reference to the server address space. */
+ */
typedef struct {
UA_NodeId sourceNodeId;
UA_NodeId referenceTypeId;
@@ -15113,24 +16032,24 @@ typedef struct {
UA_NodeClass targetNodeClass;
} UA_AddReferencesItem;
-#define UA_TYPES_ADDREFERENCESITEM 82
+#define UA_TYPES_ADDREFERENCESITEM 83
/**
* AddReferencesRequest
* ^^^^^^^^^^^^^^^^^^^^
- * Adds one or more references to the server address space. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t referencesToAddSize;
UA_AddReferencesItem *referencesToAdd;
} UA_AddReferencesRequest;
-#define UA_TYPES_ADDREFERENCESREQUEST 83
+#define UA_TYPES_ADDREFERENCESREQUEST 84
/**
* AddReferencesResponse
* ^^^^^^^^^^^^^^^^^^^^^
- * Adds one or more references to the server address space. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15139,35 +16058,35 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_AddReferencesResponse;
-#define UA_TYPES_ADDREFERENCESRESPONSE 84
+#define UA_TYPES_ADDREFERENCESRESPONSE 85
/**
* DeleteNodesItem
* ^^^^^^^^^^^^^^^
- * A request to delete a node to the server address space. */
+ */
typedef struct {
UA_NodeId nodeId;
UA_Boolean deleteTargetReferences;
} UA_DeleteNodesItem;
-#define UA_TYPES_DELETENODESITEM 85
+#define UA_TYPES_DELETENODESITEM 86
/**
* DeleteNodesRequest
* ^^^^^^^^^^^^^^^^^^
- * Delete one or more nodes from the server address space. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t nodesToDeleteSize;
UA_DeleteNodesItem *nodesToDelete;
} UA_DeleteNodesRequest;
-#define UA_TYPES_DELETENODESREQUEST 86
+#define UA_TYPES_DELETENODESREQUEST 87
/**
* DeleteNodesResponse
* ^^^^^^^^^^^^^^^^^^^
- * Delete one or more nodes from the server address space. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15176,12 +16095,12 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_DeleteNodesResponse;
-#define UA_TYPES_DELETENODESRESPONSE 87
+#define UA_TYPES_DELETENODESRESPONSE 88
/**
* DeleteReferencesItem
* ^^^^^^^^^^^^^^^^^^^^
- * A request to delete a node from the server address space. */
+ */
typedef struct {
UA_NodeId sourceNodeId;
UA_NodeId referenceTypeId;
@@ -15190,24 +16109,24 @@ typedef struct {
UA_Boolean deleteBidirectional;
} UA_DeleteReferencesItem;
-#define UA_TYPES_DELETEREFERENCESITEM 88
+#define UA_TYPES_DELETEREFERENCESITEM 89
/**
* DeleteReferencesRequest
* ^^^^^^^^^^^^^^^^^^^^^^^
- * Delete one or more references from the server address space. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t referencesToDeleteSize;
UA_DeleteReferencesItem *referencesToDelete;
} UA_DeleteReferencesRequest;
-#define UA_TYPES_DELETEREFERENCESREQUEST 89
+#define UA_TYPES_DELETEREFERENCESREQUEST 90
/**
* DeleteReferencesResponse
* ^^^^^^^^^^^^^^^^^^^^^^^^
- * Delete one or more references from the server address space. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15216,12 +16135,12 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_DeleteReferencesResponse;
-#define UA_TYPES_DELETEREFERENCESRESPONSE 90
+#define UA_TYPES_DELETEREFERENCESRESPONSE 91
/**
* BrowseDirection
* ^^^^^^^^^^^^^^^
- * The directions of the references to return. */
+ */
typedef enum {
UA_BROWSEDIRECTION_FORWARD = 0,
UA_BROWSEDIRECTION_INVERSE = 1,
@@ -15231,24 +16150,24 @@ typedef enum {
} UA_BrowseDirection;
UA_STATIC_ASSERT(sizeof(UA_BrowseDirection) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_BROWSEDIRECTION 91
+#define UA_TYPES_BROWSEDIRECTION 92
/**
* ViewDescription
* ^^^^^^^^^^^^^^^
- * The view to browse. */
+ */
typedef struct {
UA_NodeId viewId;
UA_DateTime timestamp;
UA_UInt32 viewVersion;
} UA_ViewDescription;
-#define UA_TYPES_VIEWDESCRIPTION 92
+#define UA_TYPES_VIEWDESCRIPTION 93
/**
* BrowseDescription
* ^^^^^^^^^^^^^^^^^
- * A request to browse the the references from a node. */
+ */
typedef struct {
UA_NodeId nodeId;
UA_BrowseDirection browseDirection;
@@ -15258,12 +16177,12 @@ typedef struct {
UA_UInt32 resultMask;
} UA_BrowseDescription;
-#define UA_TYPES_BROWSEDESCRIPTION 93
+#define UA_TYPES_BROWSEDESCRIPTION 94
/**
* BrowseResultMask
* ^^^^^^^^^^^^^^^^
- * A bit mask which specifies what should be returned in a browse response. */
+ */
typedef enum {
UA_BROWSERESULTMASK_NONE = 0,
UA_BROWSERESULTMASK_REFERENCETYPEID = 1,
@@ -15279,12 +16198,12 @@ typedef enum {
} UA_BrowseResultMask;
UA_STATIC_ASSERT(sizeof(UA_BrowseResultMask) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_BROWSERESULTMASK 94
+#define UA_TYPES_BROWSERESULTMASK 95
/**
* ReferenceDescription
* ^^^^^^^^^^^^^^^^^^^^
- * The description of a reference. */
+ */
typedef struct {
UA_NodeId referenceTypeId;
UA_Boolean isForward;
@@ -15295,12 +16214,12 @@ typedef struct {
UA_ExpandedNodeId typeDefinition;
} UA_ReferenceDescription;
-#define UA_TYPES_REFERENCEDESCRIPTION 95
+#define UA_TYPES_REFERENCEDESCRIPTION 96
/**
* BrowseResult
* ^^^^^^^^^^^^
- * The result of a browse operation. */
+ */
typedef struct {
UA_StatusCode statusCode;
UA_ByteString continuationPoint;
@@ -15308,12 +16227,12 @@ typedef struct {
UA_ReferenceDescription *references;
} UA_BrowseResult;
-#define UA_TYPES_BROWSERESULT 96
+#define UA_TYPES_BROWSERESULT 97
/**
* BrowseRequest
* ^^^^^^^^^^^^^
- * Browse the references for one or more nodes from the server address space. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_ViewDescription view;
@@ -15322,12 +16241,12 @@ typedef struct {
UA_BrowseDescription *nodesToBrowse;
} UA_BrowseRequest;
-#define UA_TYPES_BROWSEREQUEST 97
+#define UA_TYPES_BROWSEREQUEST 98
/**
* BrowseResponse
* ^^^^^^^^^^^^^^
- * Browse the references for one or more nodes from the server address space. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15336,12 +16255,12 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_BrowseResponse;
-#define UA_TYPES_BROWSERESPONSE 98
+#define UA_TYPES_BROWSERESPONSE 99
/**
* BrowseNextRequest
* ^^^^^^^^^^^^^^^^^
- * Continues one or more browse operations. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
UA_Boolean releaseContinuationPoints;
@@ -15349,12 +16268,12 @@ typedef struct {
UA_ByteString *continuationPoints;
} UA_BrowseNextRequest;
-#define UA_TYPES_BROWSENEXTREQUEST 99
+#define UA_TYPES_BROWSENEXTREQUEST 100
/**
* BrowseNextResponse
* ^^^^^^^^^^^^^^^^^^
- * Continues one or more browse operations. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15363,12 +16282,12 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_BrowseNextResponse;
-#define UA_TYPES_BROWSENEXTRESPONSE 100
+#define UA_TYPES_BROWSENEXTRESPONSE 101
/**
* RelativePathElement
* ^^^^^^^^^^^^^^^^^^^
- * An element in a relative path. */
+ */
typedef struct {
UA_NodeId referenceTypeId;
UA_Boolean isInverse;
@@ -15376,69 +16295,69 @@ typedef struct {
UA_QualifiedName targetName;
} UA_RelativePathElement;
-#define UA_TYPES_RELATIVEPATHELEMENT 101
+#define UA_TYPES_RELATIVEPATHELEMENT 102
/**
* RelativePath
* ^^^^^^^^^^^^
- * A relative path constructed from reference types and browse names. */
+ */
typedef struct {
size_t elementsSize;
UA_RelativePathElement *elements;
} UA_RelativePath;
-#define UA_TYPES_RELATIVEPATH 102
+#define UA_TYPES_RELATIVEPATH 103
/**
* BrowsePath
* ^^^^^^^^^^
- * A request to translate a path into a node id. */
+ */
typedef struct {
UA_NodeId startingNode;
UA_RelativePath relativePath;
} UA_BrowsePath;
-#define UA_TYPES_BROWSEPATH 103
+#define UA_TYPES_BROWSEPATH 104
/**
* BrowsePathTarget
* ^^^^^^^^^^^^^^^^
- * The target of the translated path. */
+ */
typedef struct {
UA_ExpandedNodeId targetId;
UA_UInt32 remainingPathIndex;
} UA_BrowsePathTarget;
-#define UA_TYPES_BROWSEPATHTARGET 104
+#define UA_TYPES_BROWSEPATHTARGET 105
/**
* BrowsePathResult
* ^^^^^^^^^^^^^^^^
- * The result of a translate opearation. */
+ */
typedef struct {
UA_StatusCode statusCode;
size_t targetsSize;
UA_BrowsePathTarget *targets;
} UA_BrowsePathResult;
-#define UA_TYPES_BROWSEPATHRESULT 105
+#define UA_TYPES_BROWSEPATHRESULT 106
/**
* TranslateBrowsePathsToNodeIdsRequest
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Translates one or more paths in the server address space. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t browsePathsSize;
UA_BrowsePath *browsePaths;
} UA_TranslateBrowsePathsToNodeIdsRequest;
-#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST 106
+#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST 107
/**
* TranslateBrowsePathsToNodeIdsResponse
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Translates one or more paths in the server address space. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t resultsSize;
@@ -15447,53 +16366,53 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_TranslateBrowsePathsToNodeIdsResponse;
-#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE 107
+#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE 108
/**
* RegisterNodesRequest
* ^^^^^^^^^^^^^^^^^^^^
- * Registers one or more nodes for repeated use within a session. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t nodesToRegisterSize;
UA_NodeId *nodesToRegister;
} UA_RegisterNodesRequest;
-#define UA_TYPES_REGISTERNODESREQUEST 108
+#define UA_TYPES_REGISTERNODESREQUEST 109
/**
* RegisterNodesResponse
* ^^^^^^^^^^^^^^^^^^^^^
- * Registers one or more nodes for repeated use within a session. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
size_t registeredNodeIdsSize;
UA_NodeId *registeredNodeIds;
} UA_RegisterNodesResponse;
-#define UA_TYPES_REGISTERNODESRESPONSE 109
+#define UA_TYPES_REGISTERNODESRESPONSE 110
/**
* UnregisterNodesRequest
* ^^^^^^^^^^^^^^^^^^^^^^
- * Unregisters one or more previously registered nodes. */
+ */
typedef struct {
UA_RequestHeader requestHeader;
size_t nodesToUnregisterSize;
UA_NodeId *nodesToUnregister;
} UA_UnregisterNodesRequest;
-#define UA_TYPES_UNREGISTERNODESREQUEST 110
+#define UA_TYPES_UNREGISTERNODESREQUEST 111
/**
* UnregisterNodesResponse
* ^^^^^^^^^^^^^^^^^^^^^^^
- * Unregisters one or more previously registered nodes. */
+ */
typedef struct {
UA_ResponseHeader responseHeader;
} UA_UnregisterNodesResponse;
-#define UA_TYPES_UNREGISTERNODESRESPONSE 111
+#define UA_TYPES_UNREGISTERNODESRESPONSE 112
/**
* FilterOperator
@@ -15522,7 +16441,7 @@ typedef enum {
} UA_FilterOperator;
UA_STATIC_ASSERT(sizeof(UA_FilterOperator) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_FILTEROPERATOR 112
+#define UA_TYPES_FILTEROPERATOR 113
/**
* ContentFilterElement
@@ -15534,7 +16453,7 @@ typedef struct {
UA_ExtensionObject *filterOperands;
} UA_ContentFilterElement;
-#define UA_TYPES_CONTENTFILTERELEMENT 113
+#define UA_TYPES_CONTENTFILTERELEMENT 114
/**
* ContentFilter
@@ -15545,15 +16464,7 @@ typedef struct {
UA_ContentFilterElement *elements;
} UA_ContentFilter;
-#define UA_TYPES_CONTENTFILTER 114
-
-/**
- * FilterOperand
- * ^^^^^^^^^^^^^
- */
-typedef void * UA_FilterOperand;
-
-#define UA_TYPES_FILTEROPERAND 115
+#define UA_TYPES_CONTENTFILTER 115
/**
* ElementOperand
@@ -16494,6 +17405,45 @@ typedef struct {
#define UA_TYPES_REPUBLISHRESPONSE 185
/**
+ * TransferResult
+ * ^^^^^^^^^^^^^^
+ */
+typedef struct {
+ UA_StatusCode statusCode;
+ size_t availableSequenceNumbersSize;
+ UA_UInt32 *availableSequenceNumbers;
+} UA_TransferResult;
+
+#define UA_TYPES_TRANSFERRESULT 186
+
+/**
+ * TransferSubscriptionsRequest
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ */
+typedef struct {
+ UA_RequestHeader requestHeader;
+ size_t subscriptionIdsSize;
+ UA_UInt32 *subscriptionIds;
+ UA_Boolean sendInitialValues;
+} UA_TransferSubscriptionsRequest;
+
+#define UA_TYPES_TRANSFERSUBSCRIPTIONSREQUEST 187
+
+/**
+ * TransferSubscriptionsResponse
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ */
+typedef struct {
+ UA_ResponseHeader responseHeader;
+ size_t resultsSize;
+ UA_TransferResult *results;
+ size_t diagnosticInfosSize;
+ UA_DiagnosticInfo *diagnosticInfos;
+} UA_TransferSubscriptionsResponse;
+
+#define UA_TYPES_TRANSFERSUBSCRIPTIONSRESPONSE 188
+
+/**
* DeleteSubscriptionsRequest
* ^^^^^^^^^^^^^^^^^^^^^^^^^^
*/
@@ -16503,7 +17453,7 @@ typedef struct {
UA_UInt32 *subscriptionIds;
} UA_DeleteSubscriptionsRequest;
-#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST 186
+#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST 189
/**
* DeleteSubscriptionsResponse
@@ -16517,7 +17467,7 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_DeleteSubscriptionsResponse;
-#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE 187
+#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE 190
/**
* BuildInfo
@@ -16532,7 +17482,7 @@ typedef struct {
UA_DateTime buildDate;
} UA_BuildInfo;
-#define UA_TYPES_BUILDINFO 188
+#define UA_TYPES_BUILDINFO 191
/**
* RedundancySupport
@@ -16549,7 +17499,7 @@ typedef enum {
} UA_RedundancySupport;
UA_STATIC_ASSERT(sizeof(UA_RedundancySupport) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_REDUNDANCYSUPPORT 189
+#define UA_TYPES_REDUNDANCYSUPPORT 192
/**
* ServerState
@@ -16568,7 +17518,7 @@ typedef enum {
} UA_ServerState;
UA_STATIC_ASSERT(sizeof(UA_ServerState) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_SERVERSTATE 190
+#define UA_TYPES_SERVERSTATE 193
/**
* ServerDiagnosticsSummaryDataType
@@ -16589,7 +17539,7 @@ typedef struct {
UA_UInt32 rejectedRequestsCount;
} UA_ServerDiagnosticsSummaryDataType;
-#define UA_TYPES_SERVERDIAGNOSTICSSUMMARYDATATYPE 191
+#define UA_TYPES_SERVERDIAGNOSTICSSUMMARYDATATYPE 194
/**
* ServerStatusDataType
@@ -16604,7 +17554,7 @@ typedef struct {
UA_LocalizedText shutdownReason;
} UA_ServerStatusDataType;
-#define UA_TYPES_SERVERSTATUSDATATYPE 192
+#define UA_TYPES_SERVERSTATUSDATATYPE 195
/**
* Range
@@ -16615,7 +17565,7 @@ typedef struct {
UA_Double high;
} UA_Range;
-#define UA_TYPES_RANGE 193
+#define UA_TYPES_RANGE 196
/**
* EUInformation
@@ -16628,7 +17578,7 @@ typedef struct {
UA_LocalizedText description;
} UA_EUInformation;
-#define UA_TYPES_EUINFORMATION 194
+#define UA_TYPES_EUINFORMATION 197
/**
* AxisScaleEnumeration
@@ -16642,7 +17592,7 @@ typedef enum {
} UA_AxisScaleEnumeration;
UA_STATIC_ASSERT(sizeof(UA_AxisScaleEnumeration) == sizeof(UA_Int32), enum_must_be_32bit);
-#define UA_TYPES_AXISSCALEENUMERATION 195
+#define UA_TYPES_AXISSCALEENUMERATION 198
/**
* ComplexNumberType
@@ -16653,7 +17603,7 @@ typedef struct {
UA_Float imaginary;
} UA_ComplexNumberType;
-#define UA_TYPES_COMPLEXNUMBERTYPE 196
+#define UA_TYPES_COMPLEXNUMBERTYPE 199
/**
* DoubleComplexNumberType
@@ -16664,7 +17614,7 @@ typedef struct {
UA_Double imaginary;
} UA_DoubleComplexNumberType;
-#define UA_TYPES_DOUBLECOMPLEXNUMBERTYPE 197
+#define UA_TYPES_DOUBLECOMPLEXNUMBERTYPE 200
/**
* AxisInformation
@@ -16679,7 +17629,7 @@ typedef struct {
UA_Double *axisSteps;
} UA_AxisInformation;
-#define UA_TYPES_AXISINFORMATION 198
+#define UA_TYPES_AXISINFORMATION 201
/**
* XVType
@@ -16690,7 +17640,7 @@ typedef struct {
UA_Float value;
} UA_XVType;
-#define UA_TYPES_XVTYPE 199
+#define UA_TYPES_XVTYPE 202
/**
* EnumDefinition
@@ -16701,7 +17651,7 @@ typedef struct {
UA_EnumField *fields;
} UA_EnumDefinition;
-#define UA_TYPES_ENUMDEFINITION 200
+#define UA_TYPES_ENUMDEFINITION 203
/**
* ReadEventDetails
@@ -16714,7 +17664,7 @@ typedef struct {
UA_EventFilter filter;
} UA_ReadEventDetails;
-#define UA_TYPES_READEVENTDETAILS 201
+#define UA_TYPES_READEVENTDETAILS 204
/**
* ReadProcessedDetails
@@ -16729,7 +17679,7 @@ typedef struct {
UA_AggregateConfiguration aggregateConfiguration;
} UA_ReadProcessedDetails;
-#define UA_TYPES_READPROCESSEDDETAILS 202
+#define UA_TYPES_READPROCESSEDDETAILS 205
/**
* ModificationInfo
@@ -16741,7 +17691,7 @@ typedef struct {
UA_String userName;
} UA_ModificationInfo;
-#define UA_TYPES_MODIFICATIONINFO 203
+#define UA_TYPES_MODIFICATIONINFO 206
/**
* HistoryModifiedData
@@ -16754,7 +17704,7 @@ typedef struct {
UA_ModificationInfo *modificationInfos;
} UA_HistoryModifiedData;
-#define UA_TYPES_HISTORYMODIFIEDDATA 204
+#define UA_TYPES_HISTORYMODIFIEDDATA 207
/**
* HistoryEvent
@@ -16765,7 +17715,7 @@ typedef struct {
UA_HistoryEventFieldList *events;
} UA_HistoryEvent;
-#define UA_TYPES_HISTORYEVENT 205
+#define UA_TYPES_HISTORYEVENT 208
/**
* DataChangeNotification
@@ -16778,7 +17728,7 @@ typedef struct {
UA_DiagnosticInfo *diagnosticInfos;
} UA_DataChangeNotification;
-#define UA_TYPES_DATACHANGENOTIFICATION 206
+#define UA_TYPES_DATACHANGENOTIFICATION 209
/**
* EventNotificationList
@@ -16789,16 +17739,17 @@ typedef struct {
UA_EventFieldList *events;
} UA_EventNotificationList;
-#define UA_TYPES_EVENTNOTIFICATIONLIST 207
+#define UA_TYPES_EVENTNOTIFICATIONLIST 210
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/build/src_generated/open62541/types_generated_handling.h" ***********************************/
+/**** amalgamated original file "/build/src_generated/open62541/types_generated_handling.h" ****/
-/* Generated from Opc.Ua.Types.bsd with script /home/pdie/sonstiges/qtopcua/repos/open62541/tools/generate_datatypes.py
- * on host mintaka by user pdie at 2021-06-21 11:34:37 */
+/**********************************
+ * Autogenerated -- do not modify *
+ **********************************/
@@ -16827,7 +17778,7 @@ UA_Boolean_copy(const UA_Boolean *src, UA_Boolean *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BOOLEAN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Boolean_deleteMembers(UA_Boolean *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BOOLEAN]);
}
@@ -16858,7 +17809,7 @@ UA_SByte_copy(const UA_SByte *src, UA_SByte *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SBYTE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SByte_deleteMembers(UA_SByte *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SBYTE]);
}
@@ -16889,7 +17840,7 @@ UA_Byte_copy(const UA_Byte *src, UA_Byte *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BYTE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Byte_deleteMembers(UA_Byte *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BYTE]);
}
@@ -16920,7 +17871,7 @@ UA_Int16_copy(const UA_Int16 *src, UA_Int16 *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_INT16]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Int16_deleteMembers(UA_Int16 *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_INT16]);
}
@@ -16951,7 +17902,7 @@ UA_UInt16_copy(const UA_UInt16 *src, UA_UInt16 *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UINT16]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UInt16_deleteMembers(UA_UInt16 *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UINT16]);
}
@@ -16982,7 +17933,7 @@ UA_Int32_copy(const UA_Int32 *src, UA_Int32 *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_INT32]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Int32_deleteMembers(UA_Int32 *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_INT32]);
}
@@ -17013,7 +17964,7 @@ UA_UInt32_copy(const UA_UInt32 *src, UA_UInt32 *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UINT32]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UInt32_deleteMembers(UA_UInt32 *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UINT32]);
}
@@ -17044,7 +17995,7 @@ UA_Int64_copy(const UA_Int64 *src, UA_Int64 *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_INT64]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Int64_deleteMembers(UA_Int64 *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_INT64]);
}
@@ -17075,7 +18026,7 @@ UA_UInt64_copy(const UA_UInt64 *src, UA_UInt64 *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UINT64]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UInt64_deleteMembers(UA_UInt64 *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UINT64]);
}
@@ -17106,7 +18057,7 @@ UA_Float_copy(const UA_Float *src, UA_Float *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_FLOAT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Float_deleteMembers(UA_Float *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_FLOAT]);
}
@@ -17137,7 +18088,7 @@ UA_Double_copy(const UA_Double *src, UA_Double *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DOUBLE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Double_deleteMembers(UA_Double *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DOUBLE]);
}
@@ -17168,7 +18119,7 @@ UA_String_copy(const UA_String *src, UA_String *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_STRING]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_String_deleteMembers(UA_String *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_STRING]);
}
@@ -17199,7 +18150,7 @@ UA_DateTime_copy(const UA_DateTime *src, UA_DateTime *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DATETIME]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DateTime_deleteMembers(UA_DateTime *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DATETIME]);
}
@@ -17230,7 +18181,7 @@ UA_Guid_copy(const UA_Guid *src, UA_Guid *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_GUID]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Guid_deleteMembers(UA_Guid *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_GUID]);
}
@@ -17261,7 +18212,7 @@ UA_ByteString_copy(const UA_ByteString *src, UA_ByteString *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BYTESTRING]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ByteString_deleteMembers(UA_ByteString *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BYTESTRING]);
}
@@ -17292,7 +18243,7 @@ UA_XmlElement_copy(const UA_XmlElement *src, UA_XmlElement *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_XMLELEMENT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_XmlElement_deleteMembers(UA_XmlElement *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_XMLELEMENT]);
}
@@ -17323,7 +18274,7 @@ UA_NodeId_copy(const UA_NodeId *src, UA_NodeId *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_NODEID]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_NodeId_deleteMembers(UA_NodeId *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_NODEID]);
}
@@ -17354,7 +18305,7 @@ UA_ExpandedNodeId_copy(const UA_ExpandedNodeId *src, UA_ExpandedNodeId *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ExpandedNodeId_deleteMembers(UA_ExpandedNodeId *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
}
@@ -17385,7 +18336,7 @@ UA_StatusCode_copy(const UA_StatusCode *src, UA_StatusCode *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_STATUSCODE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_StatusCode_deleteMembers(UA_StatusCode *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_STATUSCODE]);
}
@@ -17416,7 +18367,7 @@ UA_QualifiedName_copy(const UA_QualifiedName *src, UA_QualifiedName *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_QualifiedName_deleteMembers(UA_QualifiedName *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
}
@@ -17447,7 +18398,7 @@ UA_LocalizedText_copy(const UA_LocalizedText *src, UA_LocalizedText *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_LocalizedText_deleteMembers(UA_LocalizedText *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
}
@@ -17478,7 +18429,7 @@ UA_ExtensionObject_copy(const UA_ExtensionObject *src, UA_ExtensionObject *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ExtensionObject_deleteMembers(UA_ExtensionObject *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
}
@@ -17509,7 +18460,7 @@ UA_DataValue_copy(const UA_DataValue *src, UA_DataValue *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DATAVALUE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DataValue_deleteMembers(UA_DataValue *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DATAVALUE]);
}
@@ -17540,7 +18491,7 @@ UA_Variant_copy(const UA_Variant *src, UA_Variant *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_VARIANT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Variant_deleteMembers(UA_Variant *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_VARIANT]);
}
@@ -17571,7 +18522,7 @@ UA_DiagnosticInfo_copy(const UA_DiagnosticInfo *src, UA_DiagnosticInfo *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DiagnosticInfo_deleteMembers(UA_DiagnosticInfo *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO]);
}
@@ -17586,6 +18537,37 @@ UA_DiagnosticInfo_delete(UA_DiagnosticInfo *p) {
UA_delete(p, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO]);
}
+/* KeyValuePair */
+static UA_INLINE void
+UA_KeyValuePair_init(UA_KeyValuePair *p) {
+ memset(p, 0, sizeof(UA_KeyValuePair));
+}
+
+static UA_INLINE UA_KeyValuePair *
+UA_KeyValuePair_new(void) {
+ return (UA_KeyValuePair*)UA_new(&UA_TYPES[UA_TYPES_KEYVALUEPAIR]);
+}
+
+static UA_INLINE UA_StatusCode
+UA_KeyValuePair_copy(const UA_KeyValuePair *src, UA_KeyValuePair *dst) {
+ return UA_copy(src, dst, &UA_TYPES[UA_TYPES_KEYVALUEPAIR]);
+}
+
+UA_DEPRECATED static UA_INLINE void
+UA_KeyValuePair_deleteMembers(UA_KeyValuePair *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_KEYVALUEPAIR]);
+}
+
+static UA_INLINE void
+UA_KeyValuePair_clear(UA_KeyValuePair *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_KEYVALUEPAIR]);
+}
+
+static UA_INLINE void
+UA_KeyValuePair_delete(UA_KeyValuePair *p) {
+ UA_delete(p, &UA_TYPES[UA_TYPES_KEYVALUEPAIR]);
+}
+
/* NodeClass */
static UA_INLINE void
UA_NodeClass_init(UA_NodeClass *p) {
@@ -17602,7 +18584,7 @@ UA_NodeClass_copy(const UA_NodeClass *src, UA_NodeClass *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_NODECLASS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_NodeClass_deleteMembers(UA_NodeClass *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_NODECLASS]);
}
@@ -17633,7 +18615,7 @@ UA_StructureType_copy(const UA_StructureType *src, UA_StructureType *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_STRUCTURETYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_StructureType_deleteMembers(UA_StructureType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_STRUCTURETYPE]);
}
@@ -17664,7 +18646,7 @@ UA_StructureField_copy(const UA_StructureField *src, UA_StructureField *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_STRUCTUREFIELD]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_StructureField_deleteMembers(UA_StructureField *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_STRUCTUREFIELD]);
}
@@ -17695,7 +18677,7 @@ UA_StructureDefinition_copy(const UA_StructureDefinition *src, UA_StructureDefin
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_STRUCTUREDEFINITION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_StructureDefinition_deleteMembers(UA_StructureDefinition *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_STRUCTUREDEFINITION]);
}
@@ -17726,7 +18708,7 @@ UA_Argument_copy(const UA_Argument *src, UA_Argument *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ARGUMENT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Argument_deleteMembers(UA_Argument *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ARGUMENT]);
}
@@ -17757,7 +18739,7 @@ UA_EnumValueType_copy(const UA_EnumValueType *src, UA_EnumValueType *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ENUMVALUETYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EnumValueType_deleteMembers(UA_EnumValueType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ENUMVALUETYPE]);
}
@@ -17788,7 +18770,7 @@ UA_EnumField_copy(const UA_EnumField *src, UA_EnumField *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ENUMFIELD]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EnumField_deleteMembers(UA_EnumField *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ENUMFIELD]);
}
@@ -17819,7 +18801,7 @@ UA_Duration_copy(const UA_Duration *src, UA_Duration *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DURATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Duration_deleteMembers(UA_Duration *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DURATION]);
}
@@ -17850,7 +18832,7 @@ UA_UtcTime_copy(const UA_UtcTime *src, UA_UtcTime *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UTCTIME]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UtcTime_deleteMembers(UA_UtcTime *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UTCTIME]);
}
@@ -17881,7 +18863,7 @@ UA_LocaleId_copy(const UA_LocaleId *src, UA_LocaleId *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_LOCALEID]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_LocaleId_deleteMembers(UA_LocaleId *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_LOCALEID]);
}
@@ -17912,7 +18894,7 @@ UA_TimeZoneDataType_copy(const UA_TimeZoneDataType *src, UA_TimeZoneDataType *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TIMEZONEDATATYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_TimeZoneDataType_deleteMembers(UA_TimeZoneDataType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_TIMEZONEDATATYPE]);
}
@@ -17943,7 +18925,7 @@ UA_ApplicationType_copy(const UA_ApplicationType *src, UA_ApplicationType *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_APPLICATIONTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ApplicationType_deleteMembers(UA_ApplicationType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_APPLICATIONTYPE]);
}
@@ -17974,7 +18956,7 @@ UA_ApplicationDescription_copy(const UA_ApplicationDescription *src, UA_Applicat
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ApplicationDescription_deleteMembers(UA_ApplicationDescription *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_APPLICATIONDESCRIPTION]);
}
@@ -18005,7 +18987,7 @@ UA_RequestHeader_copy(const UA_RequestHeader *src, UA_RequestHeader *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REQUESTHEADER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RequestHeader_deleteMembers(UA_RequestHeader *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REQUESTHEADER]);
}
@@ -18036,7 +19018,7 @@ UA_ResponseHeader_copy(const UA_ResponseHeader *src, UA_ResponseHeader *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_RESPONSEHEADER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ResponseHeader_deleteMembers(UA_ResponseHeader *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_RESPONSEHEADER]);
}
@@ -18067,7 +19049,7 @@ UA_ServiceFault_copy(const UA_ServiceFault *src, UA_ServiceFault *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SERVICEFAULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ServiceFault_deleteMembers(UA_ServiceFault *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SERVICEFAULT]);
}
@@ -18098,7 +19080,7 @@ UA_FindServersRequest_copy(const UA_FindServersRequest *src, UA_FindServersReque
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_FINDSERVERSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_FindServersRequest_deleteMembers(UA_FindServersRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_FINDSERVERSREQUEST]);
}
@@ -18129,7 +19111,7 @@ UA_FindServersResponse_copy(const UA_FindServersResponse *src, UA_FindServersRes
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_FINDSERVERSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_FindServersResponse_deleteMembers(UA_FindServersResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_FINDSERVERSRESPONSE]);
}
@@ -18160,7 +19142,7 @@ UA_MessageSecurityMode_copy(const UA_MessageSecurityMode *src, UA_MessageSecurit
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MESSAGESECURITYMODE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MessageSecurityMode_deleteMembers(UA_MessageSecurityMode *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MESSAGESECURITYMODE]);
}
@@ -18191,7 +19173,7 @@ UA_UserTokenType_copy(const UA_UserTokenType *src, UA_UserTokenType *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_USERTOKENTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UserTokenType_deleteMembers(UA_UserTokenType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_USERTOKENTYPE]);
}
@@ -18222,7 +19204,7 @@ UA_UserTokenPolicy_copy(const UA_UserTokenPolicy *src, UA_UserTokenPolicy *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_USERTOKENPOLICY]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UserTokenPolicy_deleteMembers(UA_UserTokenPolicy *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_USERTOKENPOLICY]);
}
@@ -18253,7 +19235,7 @@ UA_EndpointDescription_copy(const UA_EndpointDescription *src, UA_EndpointDescri
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EndpointDescription_deleteMembers(UA_EndpointDescription *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ENDPOINTDESCRIPTION]);
}
@@ -18284,7 +19266,7 @@ UA_GetEndpointsRequest_copy(const UA_GetEndpointsRequest *src, UA_GetEndpointsRe
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_GetEndpointsRequest_deleteMembers(UA_GetEndpointsRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_GETENDPOINTSREQUEST]);
}
@@ -18315,7 +19297,7 @@ UA_GetEndpointsResponse_copy(const UA_GetEndpointsResponse *src, UA_GetEndpoints
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_GetEndpointsResponse_deleteMembers(UA_GetEndpointsResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_GETENDPOINTSRESPONSE]);
}
@@ -18346,7 +19328,7 @@ UA_SecurityTokenRequestType_copy(const UA_SecurityTokenRequestType *src, UA_Secu
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SECURITYTOKENREQUESTTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SecurityTokenRequestType_deleteMembers(UA_SecurityTokenRequestType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SECURITYTOKENREQUESTTYPE]);
}
@@ -18377,7 +19359,7 @@ UA_ChannelSecurityToken_copy(const UA_ChannelSecurityToken *src, UA_ChannelSecur
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CHANNELSECURITYTOKEN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ChannelSecurityToken_deleteMembers(UA_ChannelSecurityToken *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CHANNELSECURITYTOKEN]);
}
@@ -18408,7 +19390,7 @@ UA_OpenSecureChannelRequest_copy(const UA_OpenSecureChannelRequest *src, UA_Open
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_OPENSECURECHANNELREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_OpenSecureChannelRequest_deleteMembers(UA_OpenSecureChannelRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_OPENSECURECHANNELREQUEST]);
}
@@ -18439,7 +19421,7 @@ UA_OpenSecureChannelResponse_copy(const UA_OpenSecureChannelResponse *src, UA_Op
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_OpenSecureChannelResponse_deleteMembers(UA_OpenSecureChannelResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_OPENSECURECHANNELRESPONSE]);
}
@@ -18470,7 +19452,7 @@ UA_CloseSecureChannelRequest_copy(const UA_CloseSecureChannelRequest *src, UA_Cl
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CLOSESECURECHANNELREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CloseSecureChannelRequest_deleteMembers(UA_CloseSecureChannelRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CLOSESECURECHANNELREQUEST]);
}
@@ -18501,7 +19483,7 @@ UA_CloseSecureChannelResponse_copy(const UA_CloseSecureChannelResponse *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CLOSESECURECHANNELRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CloseSecureChannelResponse_deleteMembers(UA_CloseSecureChannelResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CLOSESECURECHANNELRESPONSE]);
}
@@ -18532,7 +19514,7 @@ UA_SignedSoftwareCertificate_copy(const UA_SignedSoftwareCertificate *src, UA_Si
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SIGNEDSOFTWARECERTIFICATE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SignedSoftwareCertificate_deleteMembers(UA_SignedSoftwareCertificate *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SIGNEDSOFTWARECERTIFICATE]);
}
@@ -18563,7 +19545,7 @@ UA_SignatureData_copy(const UA_SignatureData *src, UA_SignatureData *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SIGNATUREDATA]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SignatureData_deleteMembers(UA_SignatureData *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SIGNATUREDATA]);
}
@@ -18594,7 +19576,7 @@ UA_CreateSessionRequest_copy(const UA_CreateSessionRequest *src, UA_CreateSessio
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CreateSessionRequest_deleteMembers(UA_CreateSessionRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CREATESESSIONREQUEST]);
}
@@ -18625,7 +19607,7 @@ UA_CreateSessionResponse_copy(const UA_CreateSessionResponse *src, UA_CreateSess
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CREATESESSIONRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CreateSessionResponse_deleteMembers(UA_CreateSessionResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CREATESESSIONRESPONSE]);
}
@@ -18656,7 +19638,7 @@ UA_UserIdentityToken_copy(const UA_UserIdentityToken *src, UA_UserIdentityToken
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_USERIDENTITYTOKEN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UserIdentityToken_deleteMembers(UA_UserIdentityToken *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_USERIDENTITYTOKEN]);
}
@@ -18687,7 +19669,7 @@ UA_AnonymousIdentityToken_copy(const UA_AnonymousIdentityToken *src, UA_Anonymou
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AnonymousIdentityToken_deleteMembers(UA_AnonymousIdentityToken *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ANONYMOUSIDENTITYTOKEN]);
}
@@ -18718,7 +19700,7 @@ UA_UserNameIdentityToken_copy(const UA_UserNameIdentityToken *src, UA_UserNameId
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UserNameIdentityToken_deleteMembers(UA_UserNameIdentityToken *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_USERNAMEIDENTITYTOKEN]);
}
@@ -18749,7 +19731,7 @@ UA_X509IdentityToken_copy(const UA_X509IdentityToken *src, UA_X509IdentityToken
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_X509IDENTITYTOKEN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_X509IdentityToken_deleteMembers(UA_X509IdentityToken *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_X509IDENTITYTOKEN]);
}
@@ -18780,7 +19762,7 @@ UA_IssuedIdentityToken_copy(const UA_IssuedIdentityToken *src, UA_IssuedIdentity
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ISSUEDIDENTITYTOKEN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_IssuedIdentityToken_deleteMembers(UA_IssuedIdentityToken *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ISSUEDIDENTITYTOKEN]);
}
@@ -18811,7 +19793,7 @@ UA_ActivateSessionRequest_copy(const UA_ActivateSessionRequest *src, UA_Activate
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ACTIVATESESSIONREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ActivateSessionRequest_deleteMembers(UA_ActivateSessionRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ACTIVATESESSIONREQUEST]);
}
@@ -18842,7 +19824,7 @@ UA_ActivateSessionResponse_copy(const UA_ActivateSessionResponse *src, UA_Activa
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ACTIVATESESSIONRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ActivateSessionResponse_deleteMembers(UA_ActivateSessionResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ACTIVATESESSIONRESPONSE]);
}
@@ -18873,7 +19855,7 @@ UA_CloseSessionRequest_copy(const UA_CloseSessionRequest *src, UA_CloseSessionRe
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CLOSESESSIONREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CloseSessionRequest_deleteMembers(UA_CloseSessionRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CLOSESESSIONREQUEST]);
}
@@ -18904,7 +19886,7 @@ UA_CloseSessionResponse_copy(const UA_CloseSessionResponse *src, UA_CloseSession
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CLOSESESSIONRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CloseSessionResponse_deleteMembers(UA_CloseSessionResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CLOSESESSIONRESPONSE]);
}
@@ -18935,7 +19917,7 @@ UA_NodeAttributesMask_copy(const UA_NodeAttributesMask *src, UA_NodeAttributesMa
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_NODEATTRIBUTESMASK]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_NodeAttributesMask_deleteMembers(UA_NodeAttributesMask *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_NODEATTRIBUTESMASK]);
}
@@ -18966,7 +19948,7 @@ UA_NodeAttributes_copy(const UA_NodeAttributes *src, UA_NodeAttributes *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_NODEATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_NodeAttributes_deleteMembers(UA_NodeAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_NODEATTRIBUTES]);
}
@@ -18997,7 +19979,7 @@ UA_ObjectAttributes_copy(const UA_ObjectAttributes *src, UA_ObjectAttributes *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ObjectAttributes_deleteMembers(UA_ObjectAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES]);
}
@@ -19028,7 +20010,7 @@ UA_VariableAttributes_copy(const UA_VariableAttributes *src, UA_VariableAttribut
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_VariableAttributes_deleteMembers(UA_VariableAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES]);
}
@@ -19059,7 +20041,7 @@ UA_MethodAttributes_copy(const UA_MethodAttributes *src, UA_MethodAttributes *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_METHODATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MethodAttributes_deleteMembers(UA_MethodAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_METHODATTRIBUTES]);
}
@@ -19090,7 +20072,7 @@ UA_ObjectTypeAttributes_copy(const UA_ObjectTypeAttributes *src, UA_ObjectTypeAt
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ObjectTypeAttributes_deleteMembers(UA_ObjectTypeAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES]);
}
@@ -19121,7 +20103,7 @@ UA_VariableTypeAttributes_copy(const UA_VariableTypeAttributes *src, UA_Variable
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_VariableTypeAttributes_deleteMembers(UA_VariableTypeAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES]);
}
@@ -19152,7 +20134,7 @@ UA_ReferenceTypeAttributes_copy(const UA_ReferenceTypeAttributes *src, UA_Refere
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReferenceTypeAttributes_deleteMembers(UA_ReferenceTypeAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES]);
}
@@ -19183,7 +20165,7 @@ UA_DataTypeAttributes_copy(const UA_DataTypeAttributes *src, UA_DataTypeAttribut
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DataTypeAttributes_deleteMembers(UA_DataTypeAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES]);
}
@@ -19214,7 +20196,7 @@ UA_ViewAttributes_copy(const UA_ViewAttributes *src, UA_ViewAttributes *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_VIEWATTRIBUTES]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ViewAttributes_deleteMembers(UA_ViewAttributes *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_VIEWATTRIBUTES]);
}
@@ -19245,7 +20227,7 @@ UA_AddNodesItem_copy(const UA_AddNodesItem *src, UA_AddNodesItem *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDNODESITEM]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddNodesItem_deleteMembers(UA_AddNodesItem *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDNODESITEM]);
}
@@ -19276,7 +20258,7 @@ UA_AddNodesResult_copy(const UA_AddNodesResult *src, UA_AddNodesResult *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDNODESRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddNodesResult_deleteMembers(UA_AddNodesResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDNODESRESULT]);
}
@@ -19307,7 +20289,7 @@ UA_AddNodesRequest_copy(const UA_AddNodesRequest *src, UA_AddNodesRequest *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDNODESREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddNodesRequest_deleteMembers(UA_AddNodesRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDNODESREQUEST]);
}
@@ -19338,7 +20320,7 @@ UA_AddNodesResponse_copy(const UA_AddNodesResponse *src, UA_AddNodesResponse *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDNODESRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddNodesResponse_deleteMembers(UA_AddNodesResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDNODESRESPONSE]);
}
@@ -19369,7 +20351,7 @@ UA_AddReferencesItem_copy(const UA_AddReferencesItem *src, UA_AddReferencesItem
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDREFERENCESITEM]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddReferencesItem_deleteMembers(UA_AddReferencesItem *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDREFERENCESITEM]);
}
@@ -19400,7 +20382,7 @@ UA_AddReferencesRequest_copy(const UA_AddReferencesRequest *src, UA_AddReference
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDREFERENCESREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddReferencesRequest_deleteMembers(UA_AddReferencesRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDREFERENCESREQUEST]);
}
@@ -19431,7 +20413,7 @@ UA_AddReferencesResponse_copy(const UA_AddReferencesResponse *src, UA_AddReferen
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ADDREFERENCESRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AddReferencesResponse_deleteMembers(UA_AddReferencesResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ADDREFERENCESRESPONSE]);
}
@@ -19462,7 +20444,7 @@ UA_DeleteNodesItem_copy(const UA_DeleteNodesItem *src, UA_DeleteNodesItem *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETENODESITEM]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteNodesItem_deleteMembers(UA_DeleteNodesItem *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETENODESITEM]);
}
@@ -19493,7 +20475,7 @@ UA_DeleteNodesRequest_copy(const UA_DeleteNodesRequest *src, UA_DeleteNodesReque
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETENODESREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteNodesRequest_deleteMembers(UA_DeleteNodesRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETENODESREQUEST]);
}
@@ -19524,7 +20506,7 @@ UA_DeleteNodesResponse_copy(const UA_DeleteNodesResponse *src, UA_DeleteNodesRes
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETENODESRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteNodesResponse_deleteMembers(UA_DeleteNodesResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETENODESRESPONSE]);
}
@@ -19555,7 +20537,7 @@ UA_DeleteReferencesItem_copy(const UA_DeleteReferencesItem *src, UA_DeleteRefere
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETEREFERENCESITEM]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteReferencesItem_deleteMembers(UA_DeleteReferencesItem *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETEREFERENCESITEM]);
}
@@ -19586,7 +20568,7 @@ UA_DeleteReferencesRequest_copy(const UA_DeleteReferencesRequest *src, UA_Delete
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETEREFERENCESREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteReferencesRequest_deleteMembers(UA_DeleteReferencesRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETEREFERENCESREQUEST]);
}
@@ -19617,7 +20599,7 @@ UA_DeleteReferencesResponse_copy(const UA_DeleteReferencesResponse *src, UA_Dele
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETEREFERENCESRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteReferencesResponse_deleteMembers(UA_DeleteReferencesResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETEREFERENCESRESPONSE]);
}
@@ -19648,7 +20630,7 @@ UA_BrowseDirection_copy(const UA_BrowseDirection *src, UA_BrowseDirection *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSEDIRECTION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseDirection_deleteMembers(UA_BrowseDirection *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSEDIRECTION]);
}
@@ -19679,7 +20661,7 @@ UA_ViewDescription_copy(const UA_ViewDescription *src, UA_ViewDescription *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ViewDescription_deleteMembers(UA_ViewDescription *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
}
@@ -19710,7 +20692,7 @@ UA_BrowseDescription_copy(const UA_BrowseDescription *src, UA_BrowseDescription
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSEDESCRIPTION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseDescription_deleteMembers(UA_BrowseDescription *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSEDESCRIPTION]);
}
@@ -19741,7 +20723,7 @@ UA_BrowseResultMask_copy(const UA_BrowseResultMask *src, UA_BrowseResultMask *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSERESULTMASK]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseResultMask_deleteMembers(UA_BrowseResultMask *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSERESULTMASK]);
}
@@ -19772,7 +20754,7 @@ UA_ReferenceDescription_copy(const UA_ReferenceDescription *src, UA_ReferenceDes
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReferenceDescription_deleteMembers(UA_ReferenceDescription *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
}
@@ -19803,7 +20785,7 @@ UA_BrowseResult_copy(const UA_BrowseResult *src, UA_BrowseResult *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSERESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseResult_deleteMembers(UA_BrowseResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSERESULT]);
}
@@ -19834,7 +20816,7 @@ UA_BrowseRequest_copy(const UA_BrowseRequest *src, UA_BrowseRequest *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSEREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseRequest_deleteMembers(UA_BrowseRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSEREQUEST]);
}
@@ -19865,7 +20847,7 @@ UA_BrowseResponse_copy(const UA_BrowseResponse *src, UA_BrowseResponse *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSERESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseResponse_deleteMembers(UA_BrowseResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSERESPONSE]);
}
@@ -19896,7 +20878,7 @@ UA_BrowseNextRequest_copy(const UA_BrowseNextRequest *src, UA_BrowseNextRequest
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSENEXTREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseNextRequest_deleteMembers(UA_BrowseNextRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSENEXTREQUEST]);
}
@@ -19927,7 +20909,7 @@ UA_BrowseNextResponse_copy(const UA_BrowseNextResponse *src, UA_BrowseNextRespon
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSENEXTRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowseNextResponse_deleteMembers(UA_BrowseNextResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSENEXTRESPONSE]);
}
@@ -19958,7 +20940,7 @@ UA_RelativePathElement_copy(const UA_RelativePathElement *src, UA_RelativePathEl
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RelativePathElement_deleteMembers(UA_RelativePathElement *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]);
}
@@ -19989,7 +20971,7 @@ UA_RelativePath_copy(const UA_RelativePath *src, UA_RelativePath *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_RELATIVEPATH]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RelativePath_deleteMembers(UA_RelativePath *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_RELATIVEPATH]);
}
@@ -20020,7 +21002,7 @@ UA_BrowsePath_copy(const UA_BrowsePath *src, UA_BrowsePath *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSEPATH]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowsePath_deleteMembers(UA_BrowsePath *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSEPATH]);
}
@@ -20051,7 +21033,7 @@ UA_BrowsePathTarget_copy(const UA_BrowsePathTarget *src, UA_BrowsePathTarget *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSEPATHTARGET]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowsePathTarget_deleteMembers(UA_BrowsePathTarget *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSEPATHTARGET]);
}
@@ -20082,7 +21064,7 @@ UA_BrowsePathResult_copy(const UA_BrowsePathResult *src, UA_BrowsePathResult *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BrowsePathResult_deleteMembers(UA_BrowsePathResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]);
}
@@ -20113,7 +21095,7 @@ UA_TranslateBrowsePathsToNodeIdsRequest_copy(const UA_TranslateBrowsePathsToNode
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_TranslateBrowsePathsToNodeIdsRequest_deleteMembers(UA_TranslateBrowsePathsToNodeIdsRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST]);
}
@@ -20144,7 +21126,7 @@ UA_TranslateBrowsePathsToNodeIdsResponse_copy(const UA_TranslateBrowsePathsToNod
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_TranslateBrowsePathsToNodeIdsResponse_deleteMembers(UA_TranslateBrowsePathsToNodeIdsResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE]);
}
@@ -20175,7 +21157,7 @@ UA_RegisterNodesRequest_copy(const UA_RegisterNodesRequest *src, UA_RegisterNode
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REGISTERNODESREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RegisterNodesRequest_deleteMembers(UA_RegisterNodesRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REGISTERNODESREQUEST]);
}
@@ -20206,7 +21188,7 @@ UA_RegisterNodesResponse_copy(const UA_RegisterNodesResponse *src, UA_RegisterNo
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REGISTERNODESRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RegisterNodesResponse_deleteMembers(UA_RegisterNodesResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REGISTERNODESRESPONSE]);
}
@@ -20237,7 +21219,7 @@ UA_UnregisterNodesRequest_copy(const UA_UnregisterNodesRequest *src, UA_Unregist
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UNREGISTERNODESREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UnregisterNodesRequest_deleteMembers(UA_UnregisterNodesRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UNREGISTERNODESREQUEST]);
}
@@ -20268,7 +21250,7 @@ UA_UnregisterNodesResponse_copy(const UA_UnregisterNodesResponse *src, UA_Unregi
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UNREGISTERNODESRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UnregisterNodesResponse_deleteMembers(UA_UnregisterNodesResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UNREGISTERNODESRESPONSE]);
}
@@ -20299,7 +21281,7 @@ UA_FilterOperator_copy(const UA_FilterOperator *src, UA_FilterOperator *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_FILTEROPERATOR]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_FilterOperator_deleteMembers(UA_FilterOperator *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_FILTEROPERATOR]);
}
@@ -20330,7 +21312,7 @@ UA_ContentFilterElement_copy(const UA_ContentFilterElement *src, UA_ContentFilte
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CONTENTFILTERELEMENT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ContentFilterElement_deleteMembers(UA_ContentFilterElement *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CONTENTFILTERELEMENT]);
}
@@ -20361,7 +21343,7 @@ UA_ContentFilter_copy(const UA_ContentFilter *src, UA_ContentFilter *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CONTENTFILTER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ContentFilter_deleteMembers(UA_ContentFilter *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CONTENTFILTER]);
}
@@ -20376,37 +21358,6 @@ UA_ContentFilter_delete(UA_ContentFilter *p) {
UA_delete(p, &UA_TYPES[UA_TYPES_CONTENTFILTER]);
}
-/* FilterOperand */
-static UA_INLINE void
-UA_FilterOperand_init(UA_FilterOperand *p) {
- memset(p, 0, sizeof(UA_FilterOperand));
-}
-
-static UA_INLINE UA_FilterOperand *
-UA_FilterOperand_new(void) {
- return (UA_FilterOperand*)UA_new(&UA_TYPES[UA_TYPES_FILTEROPERAND]);
-}
-
-static UA_INLINE UA_StatusCode
-UA_FilterOperand_copy(const UA_FilterOperand *src, UA_FilterOperand *dst) {
- return UA_copy(src, dst, &UA_TYPES[UA_TYPES_FILTEROPERAND]);
-}
-
-static UA_INLINE void
-UA_FilterOperand_deleteMembers(UA_FilterOperand *p) {
- UA_clear(p, &UA_TYPES[UA_TYPES_FILTEROPERAND]);
-}
-
-static UA_INLINE void
-UA_FilterOperand_clear(UA_FilterOperand *p) {
- UA_clear(p, &UA_TYPES[UA_TYPES_FILTEROPERAND]);
-}
-
-static UA_INLINE void
-UA_FilterOperand_delete(UA_FilterOperand *p) {
- UA_delete(p, &UA_TYPES[UA_TYPES_FILTEROPERAND]);
-}
-
/* ElementOperand */
static UA_INLINE void
UA_ElementOperand_init(UA_ElementOperand *p) {
@@ -20423,7 +21374,7 @@ UA_ElementOperand_copy(const UA_ElementOperand *src, UA_ElementOperand *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ELEMENTOPERAND]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ElementOperand_deleteMembers(UA_ElementOperand *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ELEMENTOPERAND]);
}
@@ -20454,7 +21405,7 @@ UA_LiteralOperand_copy(const UA_LiteralOperand *src, UA_LiteralOperand *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_LITERALOPERAND]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_LiteralOperand_deleteMembers(UA_LiteralOperand *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_LITERALOPERAND]);
}
@@ -20485,7 +21436,7 @@ UA_AttributeOperand_copy(const UA_AttributeOperand *src, UA_AttributeOperand *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ATTRIBUTEOPERAND]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AttributeOperand_deleteMembers(UA_AttributeOperand *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ATTRIBUTEOPERAND]);
}
@@ -20516,7 +21467,7 @@ UA_SimpleAttributeOperand_copy(const UA_SimpleAttributeOperand *src, UA_SimpleAt
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SimpleAttributeOperand_deleteMembers(UA_SimpleAttributeOperand *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]);
}
@@ -20547,7 +21498,7 @@ UA_ContentFilterElementResult_copy(const UA_ContentFilterElementResult *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CONTENTFILTERELEMENTRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ContentFilterElementResult_deleteMembers(UA_ContentFilterElementResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CONTENTFILTERELEMENTRESULT]);
}
@@ -20578,7 +21529,7 @@ UA_ContentFilterResult_copy(const UA_ContentFilterResult *src, UA_ContentFilterR
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CONTENTFILTERRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ContentFilterResult_deleteMembers(UA_ContentFilterResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CONTENTFILTERRESULT]);
}
@@ -20609,7 +21560,7 @@ UA_TimestampsToReturn_copy(const UA_TimestampsToReturn *src, UA_TimestampsToRetu
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TIMESTAMPSTORETURN]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_TimestampsToReturn_deleteMembers(UA_TimestampsToReturn *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_TIMESTAMPSTORETURN]);
}
@@ -20640,7 +21591,7 @@ UA_ReadValueId_copy(const UA_ReadValueId *src, UA_ReadValueId *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READVALUEID]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadValueId_deleteMembers(UA_ReadValueId *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READVALUEID]);
}
@@ -20671,7 +21622,7 @@ UA_ReadRequest_copy(const UA_ReadRequest *src, UA_ReadRequest *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadRequest_deleteMembers(UA_ReadRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READREQUEST]);
}
@@ -20702,7 +21653,7 @@ UA_ReadResponse_copy(const UA_ReadResponse *src, UA_ReadResponse *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadResponse_deleteMembers(UA_ReadResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READRESPONSE]);
}
@@ -20733,7 +21684,7 @@ UA_HistoryReadValueId_copy(const UA_HistoryReadValueId *src, UA_HistoryReadValue
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYREADVALUEID]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryReadValueId_deleteMembers(UA_HistoryReadValueId *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYREADVALUEID]);
}
@@ -20764,7 +21715,7 @@ UA_HistoryReadResult_copy(const UA_HistoryReadResult *src, UA_HistoryReadResult
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYREADRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryReadResult_deleteMembers(UA_HistoryReadResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYREADRESULT]);
}
@@ -20795,7 +21746,7 @@ UA_ReadRawModifiedDetails_copy(const UA_ReadRawModifiedDetails *src, UA_ReadRawM
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READRAWMODIFIEDDETAILS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadRawModifiedDetails_deleteMembers(UA_ReadRawModifiedDetails *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READRAWMODIFIEDDETAILS]);
}
@@ -20826,7 +21777,7 @@ UA_ReadAtTimeDetails_copy(const UA_ReadAtTimeDetails *src, UA_ReadAtTimeDetails
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READATTIMEDETAILS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadAtTimeDetails_deleteMembers(UA_ReadAtTimeDetails *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READATTIMEDETAILS]);
}
@@ -20857,7 +21808,7 @@ UA_HistoryData_copy(const UA_HistoryData *src, UA_HistoryData *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYDATA]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryData_deleteMembers(UA_HistoryData *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYDATA]);
}
@@ -20888,7 +21839,7 @@ UA_HistoryReadRequest_copy(const UA_HistoryReadRequest *src, UA_HistoryReadReque
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYREADREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryReadRequest_deleteMembers(UA_HistoryReadRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYREADREQUEST]);
}
@@ -20919,7 +21870,7 @@ UA_HistoryReadResponse_copy(const UA_HistoryReadResponse *src, UA_HistoryReadRes
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYREADRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryReadResponse_deleteMembers(UA_HistoryReadResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYREADRESPONSE]);
}
@@ -20950,7 +21901,7 @@ UA_WriteValue_copy(const UA_WriteValue *src, UA_WriteValue *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_WRITEVALUE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_WriteValue_deleteMembers(UA_WriteValue *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_WRITEVALUE]);
}
@@ -20981,7 +21932,7 @@ UA_WriteRequest_copy(const UA_WriteRequest *src, UA_WriteRequest *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_WRITEREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_WriteRequest_deleteMembers(UA_WriteRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_WRITEREQUEST]);
}
@@ -21012,7 +21963,7 @@ UA_WriteResponse_copy(const UA_WriteResponse *src, UA_WriteResponse *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_WRITERESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_WriteResponse_deleteMembers(UA_WriteResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_WRITERESPONSE]);
}
@@ -21043,7 +21994,7 @@ UA_HistoryUpdateType_copy(const UA_HistoryUpdateType *src, UA_HistoryUpdateType
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYUPDATETYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryUpdateType_deleteMembers(UA_HistoryUpdateType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYUPDATETYPE]);
}
@@ -21074,7 +22025,7 @@ UA_PerformUpdateType_copy(const UA_PerformUpdateType *src, UA_PerformUpdateType
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_PERFORMUPDATETYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_PerformUpdateType_deleteMembers(UA_PerformUpdateType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_PERFORMUPDATETYPE]);
}
@@ -21105,7 +22056,7 @@ UA_UpdateDataDetails_copy(const UA_UpdateDataDetails *src, UA_UpdateDataDetails
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_UPDATEDATADETAILS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_UpdateDataDetails_deleteMembers(UA_UpdateDataDetails *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_UPDATEDATADETAILS]);
}
@@ -21136,7 +22087,7 @@ UA_DeleteRawModifiedDetails_copy(const UA_DeleteRawModifiedDetails *src, UA_Dele
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETERAWMODIFIEDDETAILS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteRawModifiedDetails_deleteMembers(UA_DeleteRawModifiedDetails *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETERAWMODIFIEDDETAILS]);
}
@@ -21167,7 +22118,7 @@ UA_HistoryUpdateResult_copy(const UA_HistoryUpdateResult *src, UA_HistoryUpdateR
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYUPDATERESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryUpdateResult_deleteMembers(UA_HistoryUpdateResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYUPDATERESULT]);
}
@@ -21198,7 +22149,7 @@ UA_HistoryUpdateRequest_copy(const UA_HistoryUpdateRequest *src, UA_HistoryUpdat
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYUPDATEREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryUpdateRequest_deleteMembers(UA_HistoryUpdateRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYUPDATEREQUEST]);
}
@@ -21229,7 +22180,7 @@ UA_HistoryUpdateResponse_copy(const UA_HistoryUpdateResponse *src, UA_HistoryUpd
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYUPDATERESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryUpdateResponse_deleteMembers(UA_HistoryUpdateResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYUPDATERESPONSE]);
}
@@ -21260,7 +22211,7 @@ UA_CallMethodRequest_copy(const UA_CallMethodRequest *src, UA_CallMethodRequest
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CALLMETHODREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CallMethodRequest_deleteMembers(UA_CallMethodRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CALLMETHODREQUEST]);
}
@@ -21291,7 +22242,7 @@ UA_CallMethodResult_copy(const UA_CallMethodResult *src, UA_CallMethodResult *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CALLMETHODRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CallMethodResult_deleteMembers(UA_CallMethodResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CALLMETHODRESULT]);
}
@@ -21322,7 +22273,7 @@ UA_CallRequest_copy(const UA_CallRequest *src, UA_CallRequest *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CALLREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CallRequest_deleteMembers(UA_CallRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CALLREQUEST]);
}
@@ -21353,7 +22304,7 @@ UA_CallResponse_copy(const UA_CallResponse *src, UA_CallResponse *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CALLRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CallResponse_deleteMembers(UA_CallResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CALLRESPONSE]);
}
@@ -21384,7 +22335,7 @@ UA_MonitoringMode_copy(const UA_MonitoringMode *src, UA_MonitoringMode *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITORINGMODE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoringMode_deleteMembers(UA_MonitoringMode *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITORINGMODE]);
}
@@ -21415,7 +22366,7 @@ UA_DataChangeTrigger_copy(const UA_DataChangeTrigger *src, UA_DataChangeTrigger
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DATACHANGETRIGGER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DataChangeTrigger_deleteMembers(UA_DataChangeTrigger *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DATACHANGETRIGGER]);
}
@@ -21446,7 +22397,7 @@ UA_DeadbandType_copy(const UA_DeadbandType *src, UA_DeadbandType *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DEADBANDTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeadbandType_deleteMembers(UA_DeadbandType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DEADBANDTYPE]);
}
@@ -21477,7 +22428,7 @@ UA_DataChangeFilter_copy(const UA_DataChangeFilter *src, UA_DataChangeFilter *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DATACHANGEFILTER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DataChangeFilter_deleteMembers(UA_DataChangeFilter *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DATACHANGEFILTER]);
}
@@ -21508,7 +22459,7 @@ UA_EventFilter_copy(const UA_EventFilter *src, UA_EventFilter *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EVENTFILTER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EventFilter_deleteMembers(UA_EventFilter *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EVENTFILTER]);
}
@@ -21539,7 +22490,7 @@ UA_AggregateConfiguration_copy(const UA_AggregateConfiguration *src, UA_Aggregat
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_AGGREGATECONFIGURATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AggregateConfiguration_deleteMembers(UA_AggregateConfiguration *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_AGGREGATECONFIGURATION]);
}
@@ -21570,7 +22521,7 @@ UA_AggregateFilter_copy(const UA_AggregateFilter *src, UA_AggregateFilter *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_AGGREGATEFILTER]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AggregateFilter_deleteMembers(UA_AggregateFilter *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_AGGREGATEFILTER]);
}
@@ -21601,7 +22552,7 @@ UA_EventFilterResult_copy(const UA_EventFilterResult *src, UA_EventFilterResult
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EVENTFILTERRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EventFilterResult_deleteMembers(UA_EventFilterResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EVENTFILTERRESULT]);
}
@@ -21632,7 +22583,7 @@ UA_MonitoringParameters_copy(const UA_MonitoringParameters *src, UA_MonitoringPa
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITORINGPARAMETERS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoringParameters_deleteMembers(UA_MonitoringParameters *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITORINGPARAMETERS]);
}
@@ -21663,7 +22614,7 @@ UA_MonitoredItemCreateRequest_copy(const UA_MonitoredItemCreateRequest *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITOREDITEMCREATEREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoredItemCreateRequest_deleteMembers(UA_MonitoredItemCreateRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITOREDITEMCREATEREQUEST]);
}
@@ -21694,7 +22645,7 @@ UA_MonitoredItemCreateResult_copy(const UA_MonitoredItemCreateResult *src, UA_Mo
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITOREDITEMCREATERESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoredItemCreateResult_deleteMembers(UA_MonitoredItemCreateResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITOREDITEMCREATERESULT]);
}
@@ -21725,7 +22676,7 @@ UA_CreateMonitoredItemsRequest_copy(const UA_CreateMonitoredItemsRequest *src, U
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CreateMonitoredItemsRequest_deleteMembers(UA_CreateMonitoredItemsRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSREQUEST]);
}
@@ -21756,7 +22707,7 @@ UA_CreateMonitoredItemsResponse_copy(const UA_CreateMonitoredItemsResponse *src,
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CreateMonitoredItemsResponse_deleteMembers(UA_CreateMonitoredItemsResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CREATEMONITOREDITEMSRESPONSE]);
}
@@ -21787,7 +22738,7 @@ UA_MonitoredItemModifyRequest_copy(const UA_MonitoredItemModifyRequest *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITOREDITEMMODIFYREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoredItemModifyRequest_deleteMembers(UA_MonitoredItemModifyRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITOREDITEMMODIFYREQUEST]);
}
@@ -21818,7 +22769,7 @@ UA_MonitoredItemModifyResult_copy(const UA_MonitoredItemModifyResult *src, UA_Mo
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITOREDITEMMODIFYRESULT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoredItemModifyResult_deleteMembers(UA_MonitoredItemModifyResult *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITOREDITEMMODIFYRESULT]);
}
@@ -21849,7 +22800,7 @@ UA_ModifyMonitoredItemsRequest_copy(const UA_ModifyMonitoredItemsRequest *src, U
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ModifyMonitoredItemsRequest_deleteMembers(UA_ModifyMonitoredItemsRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST]);
}
@@ -21880,7 +22831,7 @@ UA_ModifyMonitoredItemsResponse_copy(const UA_ModifyMonitoredItemsResponse *src,
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ModifyMonitoredItemsResponse_deleteMembers(UA_ModifyMonitoredItemsResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
}
@@ -21911,7 +22862,7 @@ UA_SetMonitoringModeRequest_copy(const UA_SetMonitoringModeRequest *src, UA_SetM
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SETMONITORINGMODEREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SetMonitoringModeRequest_deleteMembers(UA_SetMonitoringModeRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SETMONITORINGMODEREQUEST]);
}
@@ -21942,7 +22893,7 @@ UA_SetMonitoringModeResponse_copy(const UA_SetMonitoringModeResponse *src, UA_Se
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SETMONITORINGMODERESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SetMonitoringModeResponse_deleteMembers(UA_SetMonitoringModeResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SETMONITORINGMODERESPONSE]);
}
@@ -21973,7 +22924,7 @@ UA_SetTriggeringRequest_copy(const UA_SetTriggeringRequest *src, UA_SetTriggerin
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SETTRIGGERINGREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SetTriggeringRequest_deleteMembers(UA_SetTriggeringRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SETTRIGGERINGREQUEST]);
}
@@ -22004,7 +22955,7 @@ UA_SetTriggeringResponse_copy(const UA_SetTriggeringResponse *src, UA_SetTrigger
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SETTRIGGERINGRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SetTriggeringResponse_deleteMembers(UA_SetTriggeringResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SETTRIGGERINGRESPONSE]);
}
@@ -22035,7 +22986,7 @@ UA_DeleteMonitoredItemsRequest_copy(const UA_DeleteMonitoredItemsRequest *src, U
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteMonitoredItemsRequest_deleteMembers(UA_DeleteMonitoredItemsRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST]);
}
@@ -22066,7 +23017,7 @@ UA_DeleteMonitoredItemsResponse_copy(const UA_DeleteMonitoredItemsResponse *src,
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteMonitoredItemsResponse_deleteMembers(UA_DeleteMonitoredItemsResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE]);
}
@@ -22097,7 +23048,7 @@ UA_CreateSubscriptionRequest_copy(const UA_CreateSubscriptionRequest *src, UA_Cr
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CreateSubscriptionRequest_deleteMembers(UA_CreateSubscriptionRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONREQUEST]);
}
@@ -22128,7 +23079,7 @@ UA_CreateSubscriptionResponse_copy(const UA_CreateSubscriptionResponse *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_CreateSubscriptionResponse_deleteMembers(UA_CreateSubscriptionResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_CREATESUBSCRIPTIONRESPONSE]);
}
@@ -22159,7 +23110,7 @@ UA_ModifySubscriptionRequest_copy(const UA_ModifySubscriptionRequest *src, UA_Mo
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ModifySubscriptionRequest_deleteMembers(UA_ModifySubscriptionRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONREQUEST]);
}
@@ -22190,7 +23141,7 @@ UA_ModifySubscriptionResponse_copy(const UA_ModifySubscriptionResponse *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ModifySubscriptionResponse_deleteMembers(UA_ModifySubscriptionResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE]);
}
@@ -22221,7 +23172,7 @@ UA_SetPublishingModeRequest_copy(const UA_SetPublishingModeRequest *src, UA_SetP
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SETPUBLISHINGMODEREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SetPublishingModeRequest_deleteMembers(UA_SetPublishingModeRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SETPUBLISHINGMODEREQUEST]);
}
@@ -22252,7 +23203,7 @@ UA_SetPublishingModeResponse_copy(const UA_SetPublishingModeResponse *src, UA_Se
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SETPUBLISHINGMODERESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SetPublishingModeResponse_deleteMembers(UA_SetPublishingModeResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SETPUBLISHINGMODERESPONSE]);
}
@@ -22283,7 +23234,7 @@ UA_NotificationMessage_copy(const UA_NotificationMessage *src, UA_NotificationMe
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_NOTIFICATIONMESSAGE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_NotificationMessage_deleteMembers(UA_NotificationMessage *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_NOTIFICATIONMESSAGE]);
}
@@ -22314,7 +23265,7 @@ UA_MonitoredItemNotification_copy(const UA_MonitoredItemNotification *src, UA_Mo
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MONITOREDITEMNOTIFICATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_MonitoredItemNotification_deleteMembers(UA_MonitoredItemNotification *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MONITOREDITEMNOTIFICATION]);
}
@@ -22345,7 +23296,7 @@ UA_EventFieldList_copy(const UA_EventFieldList *src, UA_EventFieldList *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EVENTFIELDLIST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EventFieldList_deleteMembers(UA_EventFieldList *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EVENTFIELDLIST]);
}
@@ -22376,7 +23327,7 @@ UA_HistoryEventFieldList_copy(const UA_HistoryEventFieldList *src, UA_HistoryEve
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYEVENTFIELDLIST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryEventFieldList_deleteMembers(UA_HistoryEventFieldList *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYEVENTFIELDLIST]);
}
@@ -22407,7 +23358,7 @@ UA_StatusChangeNotification_copy(const UA_StatusChangeNotification *src, UA_Stat
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_STATUSCHANGENOTIFICATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_StatusChangeNotification_deleteMembers(UA_StatusChangeNotification *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_STATUSCHANGENOTIFICATION]);
}
@@ -22438,7 +23389,7 @@ UA_SubscriptionAcknowledgement_copy(const UA_SubscriptionAcknowledgement *src, U
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_SubscriptionAcknowledgement_deleteMembers(UA_SubscriptionAcknowledgement *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT]);
}
@@ -22469,7 +23420,7 @@ UA_PublishRequest_copy(const UA_PublishRequest *src, UA_PublishRequest *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_PUBLISHREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_PublishRequest_deleteMembers(UA_PublishRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_PUBLISHREQUEST]);
}
@@ -22500,7 +23451,7 @@ UA_PublishResponse_copy(const UA_PublishResponse *src, UA_PublishResponse *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_PublishResponse_deleteMembers(UA_PublishResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_PUBLISHRESPONSE]);
}
@@ -22531,7 +23482,7 @@ UA_RepublishRequest_copy(const UA_RepublishRequest *src, UA_RepublishRequest *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REPUBLISHREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RepublishRequest_deleteMembers(UA_RepublishRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REPUBLISHREQUEST]);
}
@@ -22562,7 +23513,7 @@ UA_RepublishResponse_copy(const UA_RepublishResponse *src, UA_RepublishResponse
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REPUBLISHRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RepublishResponse_deleteMembers(UA_RepublishResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REPUBLISHRESPONSE]);
}
@@ -22577,6 +23528,99 @@ UA_RepublishResponse_delete(UA_RepublishResponse *p) {
UA_delete(p, &UA_TYPES[UA_TYPES_REPUBLISHRESPONSE]);
}
+/* TransferResult */
+static UA_INLINE void
+UA_TransferResult_init(UA_TransferResult *p) {
+ memset(p, 0, sizeof(UA_TransferResult));
+}
+
+static UA_INLINE UA_TransferResult *
+UA_TransferResult_new(void) {
+ return (UA_TransferResult*)UA_new(&UA_TYPES[UA_TYPES_TRANSFERRESULT]);
+}
+
+static UA_INLINE UA_StatusCode
+UA_TransferResult_copy(const UA_TransferResult *src, UA_TransferResult *dst) {
+ return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TRANSFERRESULT]);
+}
+
+UA_DEPRECATED static UA_INLINE void
+UA_TransferResult_deleteMembers(UA_TransferResult *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_TRANSFERRESULT]);
+}
+
+static UA_INLINE void
+UA_TransferResult_clear(UA_TransferResult *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_TRANSFERRESULT]);
+}
+
+static UA_INLINE void
+UA_TransferResult_delete(UA_TransferResult *p) {
+ UA_delete(p, &UA_TYPES[UA_TYPES_TRANSFERRESULT]);
+}
+
+/* TransferSubscriptionsRequest */
+static UA_INLINE void
+UA_TransferSubscriptionsRequest_init(UA_TransferSubscriptionsRequest *p) {
+ memset(p, 0, sizeof(UA_TransferSubscriptionsRequest));
+}
+
+static UA_INLINE UA_TransferSubscriptionsRequest *
+UA_TransferSubscriptionsRequest_new(void) {
+ return (UA_TransferSubscriptionsRequest*)UA_new(&UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSREQUEST]);
+}
+
+static UA_INLINE UA_StatusCode
+UA_TransferSubscriptionsRequest_copy(const UA_TransferSubscriptionsRequest *src, UA_TransferSubscriptionsRequest *dst) {
+ return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSREQUEST]);
+}
+
+UA_DEPRECATED static UA_INLINE void
+UA_TransferSubscriptionsRequest_deleteMembers(UA_TransferSubscriptionsRequest *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSREQUEST]);
+}
+
+static UA_INLINE void
+UA_TransferSubscriptionsRequest_clear(UA_TransferSubscriptionsRequest *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSREQUEST]);
+}
+
+static UA_INLINE void
+UA_TransferSubscriptionsRequest_delete(UA_TransferSubscriptionsRequest *p) {
+ UA_delete(p, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSREQUEST]);
+}
+
+/* TransferSubscriptionsResponse */
+static UA_INLINE void
+UA_TransferSubscriptionsResponse_init(UA_TransferSubscriptionsResponse *p) {
+ memset(p, 0, sizeof(UA_TransferSubscriptionsResponse));
+}
+
+static UA_INLINE UA_TransferSubscriptionsResponse *
+UA_TransferSubscriptionsResponse_new(void) {
+ return (UA_TransferSubscriptionsResponse*)UA_new(&UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSRESPONSE]);
+}
+
+static UA_INLINE UA_StatusCode
+UA_TransferSubscriptionsResponse_copy(const UA_TransferSubscriptionsResponse *src, UA_TransferSubscriptionsResponse *dst) {
+ return UA_copy(src, dst, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSRESPONSE]);
+}
+
+UA_DEPRECATED static UA_INLINE void
+UA_TransferSubscriptionsResponse_deleteMembers(UA_TransferSubscriptionsResponse *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSRESPONSE]);
+}
+
+static UA_INLINE void
+UA_TransferSubscriptionsResponse_clear(UA_TransferSubscriptionsResponse *p) {
+ UA_clear(p, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSRESPONSE]);
+}
+
+static UA_INLINE void
+UA_TransferSubscriptionsResponse_delete(UA_TransferSubscriptionsResponse *p) {
+ UA_delete(p, &UA_TYPES[UA_TYPES_TRANSFERSUBSCRIPTIONSRESPONSE]);
+}
+
/* DeleteSubscriptionsRequest */
static UA_INLINE void
UA_DeleteSubscriptionsRequest_init(UA_DeleteSubscriptionsRequest *p) {
@@ -22593,7 +23637,7 @@ UA_DeleteSubscriptionsRequest_copy(const UA_DeleteSubscriptionsRequest *src, UA_
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSREQUEST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteSubscriptionsRequest_deleteMembers(UA_DeleteSubscriptionsRequest *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSREQUEST]);
}
@@ -22624,7 +23668,7 @@ UA_DeleteSubscriptionsResponse_copy(const UA_DeleteSubscriptionsResponse *src, U
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSRESPONSE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DeleteSubscriptionsResponse_deleteMembers(UA_DeleteSubscriptionsResponse *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DELETESUBSCRIPTIONSRESPONSE]);
}
@@ -22655,7 +23699,7 @@ UA_BuildInfo_copy(const UA_BuildInfo *src, UA_BuildInfo *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_BUILDINFO]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_BuildInfo_deleteMembers(UA_BuildInfo *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_BUILDINFO]);
}
@@ -22686,7 +23730,7 @@ UA_RedundancySupport_copy(const UA_RedundancySupport *src, UA_RedundancySupport
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_REDUNDANCYSUPPORT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_RedundancySupport_deleteMembers(UA_RedundancySupport *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_REDUNDANCYSUPPORT]);
}
@@ -22717,7 +23761,7 @@ UA_ServerState_copy(const UA_ServerState *src, UA_ServerState *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SERVERSTATE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ServerState_deleteMembers(UA_ServerState *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SERVERSTATE]);
}
@@ -22748,7 +23792,7 @@ UA_ServerDiagnosticsSummaryDataType_copy(const UA_ServerDiagnosticsSummaryDataTy
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SERVERDIAGNOSTICSSUMMARYDATATYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ServerDiagnosticsSummaryDataType_deleteMembers(UA_ServerDiagnosticsSummaryDataType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SERVERDIAGNOSTICSSUMMARYDATATYPE]);
}
@@ -22779,7 +23823,7 @@ UA_ServerStatusDataType_copy(const UA_ServerStatusDataType *src, UA_ServerStatus
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_SERVERSTATUSDATATYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ServerStatusDataType_deleteMembers(UA_ServerStatusDataType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_SERVERSTATUSDATATYPE]);
}
@@ -22810,7 +23854,7 @@ UA_Range_copy(const UA_Range *src, UA_Range *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_RANGE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_Range_deleteMembers(UA_Range *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_RANGE]);
}
@@ -22841,7 +23885,7 @@ UA_EUInformation_copy(const UA_EUInformation *src, UA_EUInformation *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EUINFORMATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EUInformation_deleteMembers(UA_EUInformation *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EUINFORMATION]);
}
@@ -22872,7 +23916,7 @@ UA_AxisScaleEnumeration_copy(const UA_AxisScaleEnumeration *src, UA_AxisScaleEnu
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_AXISSCALEENUMERATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AxisScaleEnumeration_deleteMembers(UA_AxisScaleEnumeration *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_AXISSCALEENUMERATION]);
}
@@ -22903,7 +23947,7 @@ UA_ComplexNumberType_copy(const UA_ComplexNumberType *src, UA_ComplexNumberType
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_COMPLEXNUMBERTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ComplexNumberType_deleteMembers(UA_ComplexNumberType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_COMPLEXNUMBERTYPE]);
}
@@ -22934,7 +23978,7 @@ UA_DoubleComplexNumberType_copy(const UA_DoubleComplexNumberType *src, UA_Double
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DOUBLECOMPLEXNUMBERTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DoubleComplexNumberType_deleteMembers(UA_DoubleComplexNumberType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DOUBLECOMPLEXNUMBERTYPE]);
}
@@ -22965,7 +24009,7 @@ UA_AxisInformation_copy(const UA_AxisInformation *src, UA_AxisInformation *dst)
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_AXISINFORMATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_AxisInformation_deleteMembers(UA_AxisInformation *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_AXISINFORMATION]);
}
@@ -22996,7 +24040,7 @@ UA_XVType_copy(const UA_XVType *src, UA_XVType *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_XVTYPE]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_XVType_deleteMembers(UA_XVType *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_XVTYPE]);
}
@@ -23027,7 +24071,7 @@ UA_EnumDefinition_copy(const UA_EnumDefinition *src, UA_EnumDefinition *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_ENUMDEFINITION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EnumDefinition_deleteMembers(UA_EnumDefinition *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_ENUMDEFINITION]);
}
@@ -23058,7 +24102,7 @@ UA_ReadEventDetails_copy(const UA_ReadEventDetails *src, UA_ReadEventDetails *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READEVENTDETAILS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadEventDetails_deleteMembers(UA_ReadEventDetails *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READEVENTDETAILS]);
}
@@ -23089,7 +24133,7 @@ UA_ReadProcessedDetails_copy(const UA_ReadProcessedDetails *src, UA_ReadProcesse
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_READPROCESSEDDETAILS]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ReadProcessedDetails_deleteMembers(UA_ReadProcessedDetails *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_READPROCESSEDDETAILS]);
}
@@ -23120,7 +24164,7 @@ UA_ModificationInfo_copy(const UA_ModificationInfo *src, UA_ModificationInfo *ds
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_MODIFICATIONINFO]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_ModificationInfo_deleteMembers(UA_ModificationInfo *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_MODIFICATIONINFO]);
}
@@ -23151,7 +24195,7 @@ UA_HistoryModifiedData_copy(const UA_HistoryModifiedData *src, UA_HistoryModifie
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYMODIFIEDDATA]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryModifiedData_deleteMembers(UA_HistoryModifiedData *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYMODIFIEDDATA]);
}
@@ -23182,7 +24226,7 @@ UA_HistoryEvent_copy(const UA_HistoryEvent *src, UA_HistoryEvent *dst) {
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_HISTORYEVENT]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_HistoryEvent_deleteMembers(UA_HistoryEvent *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_HISTORYEVENT]);
}
@@ -23213,7 +24257,7 @@ UA_DataChangeNotification_copy(const UA_DataChangeNotification *src, UA_DataChan
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_DATACHANGENOTIFICATION]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_DataChangeNotification_deleteMembers(UA_DataChangeNotification *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_DATACHANGENOTIFICATION]);
}
@@ -23244,7 +24288,7 @@ UA_EventNotificationList_copy(const UA_EventNotificationList *src, UA_EventNotif
return UA_copy(src, dst, &UA_TYPES[UA_TYPES_EVENTNOTIFICATIONLIST]);
}
-static UA_INLINE void
+UA_DEPRECATED static UA_INLINE void
UA_EventNotificationList_deleteMembers(UA_EventNotificationList *p) {
UA_clear(p, &UA_TYPES[UA_TYPES_EVENTNOTIFICATIONLIST]);
}
@@ -23266,7 +24310,7 @@ UA_EventNotificationList_delete(UA_EventNotificationList *p) {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/util.h" ***********************************/
+/**** amalgamated original file "/include/open62541/util.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -23280,6 +24324,78 @@ _UA_END_DECLS
_UA_BEGIN_DECLS
/**
+ * Forward Declarations
+ * --------------------
+ * Opaque pointers used by the plugins. */
+
+struct UA_Server;
+typedef struct UA_Server UA_Server;
+
+struct UA_ServerConfig;
+typedef struct UA_ServerConfig UA_ServerConfig;
+
+typedef void (*UA_ServerCallback)(UA_Server *server, void *data);
+
+struct UA_Client;
+typedef struct UA_Client UA_Client;
+
+/* Timer policy to handle cycle misses */
+typedef enum {
+ UA_TIMER_HANDLE_CYCLEMISS_WITH_CURRENTTIME,
+ UA_TIMER_HANDLE_CYCLEMISS_WITH_BASETIME
+} UA_TimerPolicy;
+
+/**
+ * Key Value Map
+ * -------------
+ * Helper functions to work with configuration parameters in an array of
+ * UA_KeyValuePair. Lookup is linear. So this is for small numbers of
+ * keys. */
+
+/* Makes a copy of the value. Can reallocate the underlying array. This
+ * invalidates pointers into the previous array. If the key exists already, the
+ * value is overwritten. */
+UA_EXPORT UA_StatusCode
+UA_KeyValueMap_setQualified(UA_KeyValuePair **map, size_t *mapSize,
+ const UA_QualifiedName *key,
+ const UA_Variant *value);
+
+/* Simplified version that assumes the key is in namespace 0 */
+UA_EXPORT UA_StatusCode
+UA_KeyValueMap_set(UA_KeyValuePair **map, size_t *mapSize,
+ const char *key, const UA_Variant *value);
+
+/* Returns a pointer into underlying array or NULL if the key is not found.*/
+UA_EXPORT const UA_Variant *
+UA_KeyValueMap_getQualified(UA_KeyValuePair *map, size_t mapSize,
+ const UA_QualifiedName *key);
+
+/* Simplified version that assumes the key is in namespace 0 */
+UA_EXPORT const UA_Variant *
+UA_KeyValueMap_get(UA_KeyValuePair *map, size_t mapSize,
+ const char *key);
+
+/* Returns NULL if the value for the key is not defined or not of the right
+ * datatype and scalar/array */
+UA_EXPORT const UA_Variant *
+UA_KeyValueMap_getScalar(UA_KeyValuePair *map, size_t mapSize,
+ const char *key, const UA_DataType *type);
+
+UA_EXPORT const UA_Variant *
+UA_KeyValueMap_getArray(UA_KeyValuePair *map, size_t mapSize,
+ const char *key, const UA_DataType *type);
+
+/* Remove a single entry. To delete the entire map, use UA_Array_delete. */
+UA_EXPORT void
+UA_KeyValueMap_deleteQualified(UA_KeyValuePair **map, size_t *mapSize,
+ const UA_QualifiedName *key);
+
+/* Simplified version that assumes the key is in namespace 0 */
+UA_EXPORT void
+UA_KeyValueMap_delete(UA_KeyValuePair **map, size_t *mapSize,
+ const char *key);
+
+/**
* Endpoint URL Parser
* -------------------
* The endpoint URL parser is generally useful for the implementation of network
@@ -23332,11 +24448,11 @@ UA_readNumberWithBase(const UA_Byte *buf, size_t buflen,
UA_UInt32 *number, UA_Byte base);
#ifndef UA_MIN
-#define UA_MIN(A,B) (A > B ? B : A)
+#define UA_MIN(A, B) ((A) > (B) ? (B) : (A))
#endif
#ifndef UA_MAX
-#define UA_MAX(A,B) (A > B ? A : B)
+#define UA_MAX(A, B) ((A) > (B) ? (A) : (B))
#endif
/**
@@ -23384,7 +24500,8 @@ UA_RelativePath_parse(UA_RelativePath *rp, const UA_String str);
/**
* Convenience macros for complex types
* ------------------------------------ */
-#define UA_PRINTF_GUID_FORMAT "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x"
+#define UA_PRINTF_GUID_FORMAT "%08" PRIx32 "-%04" PRIx16 "-%04" PRIx16 \
+ "-%02" PRIx8 "%02" PRIx8 "-%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8 "%02" PRIx8
#define UA_PRINTF_GUID_DATA(GUID) (GUID).data1, (GUID).data2, (GUID).data3, \
(GUID).data4[0], (GUID).data4[1], (GUID).data4[2], (GUID).data4[3], \
(GUID).data4[4], (GUID).data4[5], (GUID).data4[6], (GUID).data4[7]
@@ -23396,24 +24513,6 @@ UA_RelativePath_parse(UA_RelativePath *rp, const UA_String str);
* Helper functions for converting data types
* ------------------------------------------ */
-/* Converts a bytestring to the corresponding base64 representation */
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_ByteString_toBase64String(const UA_ByteString *byteString,
- UA_String *str) {
- return UA_ByteString_toBase64(byteString, str);
-}
-
-/* Converts a node id to the corresponding string representation.
- * It can be one of:
- * - Numeric: ns=0;i=123
- * - String: ns=0;s=Some String
- * - Guid: ns=0;g=A123456C-0ABC-1A2B-815F-687212AAEE1B
- * - ByteString: ns=0;b=AA== */
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_NodeId_toString(const UA_NodeId *nodeId, UA_String *nodeIdStr) {
- return UA_NodeId_print(nodeId, nodeIdStr);
-}
-
/* Compare memory in constant time to mitigate timing attacks.
* Returns true if ptr1 and ptr2 are equal for length bytes. */
static UA_INLINE UA_Boolean
@@ -23431,1608 +24530,7 @@ UA_constantTimeEqual(const void *ptr1, const void *ptr2, size_t length) {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/server.h" ***********************************/
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- * Copyright 2015-2016 (c) Sten Grüner
- * Copyright 2014-2015, 2017 (c) Florian Palm
- * Copyright 2015-2016 (c) Chris Iatrou
- * Copyright 2015-2016 (c) Oleksiy Vasylyev
- * Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
- * Copyright 2017-2020 (c) HMS Industrial Networks AB (Author: Jonas Green)
- */
-
-
-
-_UA_BEGIN_DECLS
-
-/* Forward declarations */
-struct UA_ServerConfig;
-typedef struct UA_ServerConfig UA_ServerConfig;
-
-struct UA_Server;
-typedef struct UA_Server UA_Server;
-
-struct UA_Client;
-
-/**
- * .. _server:
- *
- * Server
- * ======
- *
- * .. include:: server_config.rst
- *
- * .. _server-lifecycle:
- *
- * Server Lifecycle
- * ---------------- */
-
-/* The method UA_Server_new is defined in server_config_default.h. So default
- * plugins outside of the core library (for logging, etc) are already available
- * during the initialization.
- *
- * UA_Server UA_EXPORT * UA_Server_new(void);
- */
-
-/* Creates a new server. Moves the config into the server with a shallow copy.
- * The config content is cleared together with the server. */
-UA_Server UA_EXPORT *
-UA_Server_newWithConfig(const UA_ServerConfig *config);
-
-void UA_EXPORT UA_Server_delete(UA_Server *server);
-
-UA_ServerConfig UA_EXPORT *
-UA_Server_getConfig(UA_Server *server);
-
-/* Runs the main loop of the server. In each iteration, this calls into the
- * networklayers to see if messages have arrived.
- *
- * @param server The server object.
- * @param running The loop is run as long as *running is true.
- * Otherwise, the server shuts down.
- * @return Returns the statuscode of the UA_Server_run_shutdown method */
-UA_StatusCode UA_EXPORT
-UA_Server_run(UA_Server *server, const volatile UA_Boolean *running);
-
-/* The prologue part of UA_Server_run (no need to use if you call
- * UA_Server_run) */
-UA_StatusCode UA_EXPORT
-UA_Server_run_startup(UA_Server *server);
-
-/* Executes a single iteration of the server's main loop.
- *
- * @param server The server object.
- * @param waitInternal Should we wait for messages in the networklayer?
- * Otherwise, the timouts for the networklayers are set to zero.
- * The default max wait time is 50millisec.
- * @return Returns how long we can wait until the next scheduled
- * callback (in ms) */
-UA_UInt16 UA_EXPORT
-UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal);
-
-/* The epilogue part of UA_Server_run (no need to use if you call
- * UA_Server_run) */
-UA_StatusCode UA_EXPORT
-UA_Server_run_shutdown(UA_Server *server);
-
-/**
- * Timed Callbacks
- * --------------- */
-typedef void (*UA_ServerCallback)(UA_Server *server, void *data);
-
-/* Add a callback for execution at a specified time. If the indicated time lies
- * in the past, then the callback is executed at the next iteration of the
- * server's main loop.
- *
- * @param server The server object.
- * @param callback The callback that shall be added.
- * @param data Data that is forwarded to the callback.
- * @param date The timestamp for the execution time.
- * @param callbackId Set to the identifier of the repeated callback . This can
- * be used to cancel the callback later on. If the pointer is null, the
- * identifier is not set.
- * @return Upon success, UA_STATUSCODE_GOOD is returned. An error code
- * otherwise. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addTimedCallback(UA_Server *server, UA_ServerCallback callback,
- void *data, UA_DateTime date, UA_UInt64 *callbackId);
-
-/* Add a callback for cyclic repetition to the server.
- *
- * @param server The server object.
- * @param callback The callback that shall be added.
- * @param data Data that is forwarded to the callback.
- * @param interval_ms The callback shall be repeatedly executed with the given
- * interval (in ms). The interval must be positive. The first execution
- * occurs at now() + interval at the latest.
- * @param callbackId Set to the identifier of the repeated callback . This can
- * be used to cancel the callback later on. If the pointer is null, the
- * identifier is not set.
- * @return Upon success, UA_STATUSCODE_GOOD is returned. An error code
- * otherwise. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
- void *data, UA_Double interval_ms, UA_UInt64 *callbackId);
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
- UA_Double interval_ms);
-
-/* Remove a repeated callback. Does nothing if the callback is not found.
- *
- * @param server The server object.
- * @param callbackId The id of the callback */
-void UA_EXPORT UA_THREADSAFE
-UA_Server_removeCallback(UA_Server *server, UA_UInt64 callbackId);
-
-#define UA_Server_removeRepeatedCallback(server, callbackId) \
- UA_Server_removeCallback(server, callbackId);
-
-/**
- * Reading and Writing Node Attributes
- * -----------------------------------
- * The functions for reading and writing node attributes call the regular read
- * and write service in the background that are also used over the network.
- *
- * The following attributes cannot be read, since the local "admin" user always
- * has full rights.
- *
- * - UserWriteMask
- * - UserAccessLevel
- * - UserExecutable */
-/* Read an attribute of a node. The specialized functions below provide a more
- * concise syntax.
- *
- * @param server The server object.
- * @param item ReadValueIds contain the NodeId of the target node, the id of the
- * attribute to read and (optionally) an index range to read parts
- * of an array only. See the section on NumericRange for the format
- * used for array ranges.
- * @param timestamps Which timestamps to return for the attribute.
- * @return Returns a DataValue that contains either an error code, or a variant
- * with the attribute value and the timestamps. */
-UA_DataValue UA_EXPORT UA_THREADSAFE
-UA_Server_read(UA_Server *server, const UA_ReadValueId *item,
- UA_TimestampsToReturn timestamps);
-
-/* Don't use this function. There are typed versions for every supported
- * attribute. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-__UA_Server_read(UA_Server *server, const UA_NodeId *nodeId,
- UA_AttributeId attributeId, void *v);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readNodeId(UA_Server *server, const UA_NodeId nodeId,
- UA_NodeId *outNodeId) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODEID, outNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readNodeClass(UA_Server *server, const UA_NodeId nodeId,
- UA_NodeClass *outNodeClass) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODECLASS,
- outNodeClass);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readBrowseName(UA_Server *server, const UA_NodeId nodeId,
- UA_QualifiedName *outBrowseName) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
- outBrowseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readDisplayName(UA_Server *server, const UA_NodeId nodeId,
- UA_LocalizedText *outDisplayName) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
- outDisplayName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readDescription(UA_Server *server, const UA_NodeId nodeId,
- UA_LocalizedText *outDescription) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
- outDescription);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readWriteMask(UA_Server *server, const UA_NodeId nodeId,
- UA_UInt32 *outWriteMask) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
- outWriteMask);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readIsAbstract(UA_Server *server, const UA_NodeId nodeId,
- UA_Boolean *outIsAbstract) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
- outIsAbstract);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readSymmetric(UA_Server *server, const UA_NodeId nodeId,
- UA_Boolean *outSymmetric) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
- outSymmetric);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readInverseName(UA_Server *server, const UA_NodeId nodeId,
- UA_LocalizedText *outInverseName) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
- outInverseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readContainsNoLoops(UA_Server *server, const UA_NodeId nodeId,
- UA_Boolean *outContainsNoLoops) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS,
- outContainsNoLoops);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readEventNotifier(UA_Server *server, const UA_NodeId nodeId,
- UA_Byte *outEventNotifier) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
- outEventNotifier);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readValue(UA_Server *server, const UA_NodeId nodeId,
- UA_Variant *outValue) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUE, outValue);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readDataType(UA_Server *server, const UA_NodeId nodeId,
- UA_NodeId *outDataType) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
- outDataType);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readValueRank(UA_Server *server, const UA_NodeId nodeId,
- UA_Int32 *outValueRank) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
- outValueRank);
-}
-
-/* Returns a variant with an int32 array */
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
- UA_Variant *outArrayDimensions) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
- outArrayDimensions);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readAccessLevel(UA_Server *server, const UA_NodeId nodeId,
- UA_Byte *outAccessLevel) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
- outAccessLevel);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
- UA_Double *outMinimumSamplingInterval) {
- return __UA_Server_read(server, &nodeId,
- UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
- outMinimumSamplingInterval);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readHistorizing(UA_Server *server, const UA_NodeId nodeId,
- UA_Boolean *outHistorizing) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
- outHistorizing);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_readExecutable(UA_Server *server, const UA_NodeId nodeId,
- UA_Boolean *outExecutable) {
- return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
- outExecutable);
-}
-
-/**
- * The following node attributes cannot be changed once a node has been created:
- *
- * - NodeClass
- * - NodeId
- * - Symmetric
- * - ContainsNoLoops
- *
- * The following attributes cannot be written from the server, as they are
- * specific to the different users and set by the access control callback:
- *
- * - UserWriteMask
- * - UserAccessLevel
- * - UserExecutable
- */
-
-/* Overwrite an attribute of a node. The specialized functions below provide a
- * more concise syntax.
- *
- * @param server The server object.
- * @param value WriteValues contain the NodeId of the target node, the id of the
- * attribute to overwritten, the actual value and (optionally) an
- * index range to replace parts of an array only. of an array only.
- * See the section on NumericRange for the format used for array
- * ranges.
- * @return Returns a status code. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_write(UA_Server *server, const UA_WriteValue *value);
-
-/* Don't use this function. There are typed versions with no additional
- * overhead. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-__UA_Server_write(UA_Server *server, const UA_NodeId *nodeId,
- const UA_AttributeId attributeId,
- const UA_DataType *attr_type, const void *attr);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeBrowseName(UA_Server *server, const UA_NodeId nodeId,
- const UA_QualifiedName browseName) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
- &UA_TYPES[UA_TYPES_QUALIFIEDNAME], &browseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDisplayName(UA_Server *server, const UA_NodeId nodeId,
- const UA_LocalizedText displayName) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
- &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &displayName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDescription(UA_Server *server, const UA_NodeId nodeId,
- const UA_LocalizedText description) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
- &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &description);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeWriteMask(UA_Server *server, const UA_NodeId nodeId,
- const UA_UInt32 writeMask) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
- &UA_TYPES[UA_TYPES_UINT32], &writeMask);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeIsAbstract(UA_Server *server, const UA_NodeId nodeId,
- const UA_Boolean isAbstract) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
- &UA_TYPES[UA_TYPES_BOOLEAN], &isAbstract);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeInverseName(UA_Server *server, const UA_NodeId nodeId,
- const UA_LocalizedText inverseName) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
- &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &inverseName);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeEventNotifier(UA_Server *server, const UA_NodeId nodeId,
- const UA_Byte eventNotifier) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
- &UA_TYPES[UA_TYPES_BYTE], &eventNotifier);
-}
-
-/**
- * Writes an UA_Variant to a variable/variableType node.
- * StatusCode is set to UA_STATUSCODE_GOOD, sourceTimestamp and
- * serverTimestamp are set to UA_DateTime_now()
- */
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeValue(UA_Server *server, const UA_NodeId nodeId,
- const UA_Variant value) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
- &UA_TYPES[UA_TYPES_VARIANT], &value);
-}
-
-/**
- * Writes an UA_DataValue to a variable/variableType node.
- * In contrast to UA_Server_writeValue, this functions can also write
- * sourceTimestamp, serverTimestamp and statusCode.
- */
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDataValue(UA_Server *server, const UA_NodeId nodeId,
- const UA_DataValue value) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
- &UA_TYPES[UA_TYPES_DATAVALUE], &value);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeDataType(UA_Server *server, const UA_NodeId nodeId,
- const UA_NodeId dataType) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
- &UA_TYPES[UA_TYPES_NODEID], &dataType);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeValueRank(UA_Server *server, const UA_NodeId nodeId,
- const UA_Int32 valueRank) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
- &UA_TYPES[UA_TYPES_INT32], &valueRank);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
- const UA_Variant arrayDimensions) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
- &UA_TYPES[UA_TYPES_VARIANT], &arrayDimensions);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeAccessLevel(UA_Server *server, const UA_NodeId nodeId,
- const UA_Byte accessLevel) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
- &UA_TYPES[UA_TYPES_BYTE], &accessLevel);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
- const UA_Double miniumSamplingInterval) {
- return __UA_Server_write(server, &nodeId,
- UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
- &UA_TYPES[UA_TYPES_DOUBLE],
- &miniumSamplingInterval);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeHistorizing(UA_Server *server, const UA_NodeId nodeId,
- const UA_Boolean historizing) {
- return __UA_Server_write(server, &nodeId,
- UA_ATTRIBUTEID_HISTORIZING,
- &UA_TYPES[UA_TYPES_BOOLEAN],
- &historizing);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_writeExecutable(UA_Server *server, const UA_NodeId nodeId,
- const UA_Boolean executable) {
- return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
- &UA_TYPES[UA_TYPES_BOOLEAN], &executable); }
-
-/**
- * Browsing
- * -------- */
-
-/* Browse the references of a particular node. See the definition of
- * BrowseDescription structure for details. */
-UA_BrowseResult UA_EXPORT UA_THREADSAFE
-UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences,
- const UA_BrowseDescription *bd);
-
-UA_BrowseResult UA_EXPORT UA_THREADSAFE
-UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint,
- const UA_ByteString *continuationPoint);
-
-/* Nonstandard version of the browse service that recurses into child nodes.
- * Possible loops (that can occur for non-hierarchical references) are handled
- * by adding every target node at most once to the results array. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_browseRecursive(UA_Server *server, const UA_BrowseDescription *bd,
- size_t *resultsSize, UA_ExpandedNodeId **results);
-
-UA_BrowsePathResult UA_EXPORT UA_THREADSAFE
-UA_Server_translateBrowsePathToNodeIds(UA_Server *server,
- const UA_BrowsePath *browsePath);
-
-/* A simplified TranslateBrowsePathsToNodeIds based on the
- * SimpleAttributeOperand type (Part 4, 7.4.4.5).
- *
- * This specifies a relative path using a list of BrowseNames instead of the
- * RelativePath structure. The list of BrowseNames is equivalent to a
- * RelativePath that specifies forward references which are subtypes of the
- * HierarchicalReferences ReferenceType. All Nodes followed by the browsePath
- * shall be of the NodeClass Object or Variable. */
-UA_BrowsePathResult UA_EXPORT UA_THREADSAFE
-UA_Server_browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
- size_t browsePathSize,
- const UA_QualifiedName *browsePath);
-
-#ifndef HAVE_NODEITER_CALLBACK
-#define HAVE_NODEITER_CALLBACK
-/* Iterate over all nodes referenced by parentNodeId by calling the callback
- * function for each child node (in ifdef because GCC/CLANG handle include order
- * differently) */
-typedef UA_StatusCode
-(*UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse,
- UA_NodeId referenceTypeId, void *handle);
-#endif
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId,
- UA_NodeIteratorCallback callback, void *handle);
-
-#ifdef UA_ENABLE_DISCOVERY
-
-/**
- * Discovery
- * --------- */
-/* Register the given server instance at the discovery server.
- * This should be called periodically.
- * The semaphoreFilePath is optional. If the given file is deleted,
- * the server will automatically be unregistered. This could be
- * for example a pid file which is deleted if the server crashes.
- *
- * When the server shuts down you need to call unregister.
- *
- * @param server
- * @param client the client which is used to call the RegisterServer. It must
- * already be connected to the correct endpoint
- * @param semaphoreFilePath optional parameter pointing to semaphore file. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_register_discovery(UA_Server *server, struct UA_Client *client,
- const char* semaphoreFilePath);
-
-/* Unregister the given server instance from the discovery server.
- * This should only be called when the server is shutting down.
- * @param server
- * @param client the client which is used to call the RegisterServer. It must
- * already be connected to the correct endpoint */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_unregister_discovery(UA_Server *server, struct UA_Client *client);
-
- /* Adds a periodic callback to register the server with the LDS (local discovery server)
- * periodically. The interval between each register call is given as second parameter.
- * It should be 10 minutes by default (= 10*60*1000).
- *
- * The delayFirstRegisterMs parameter indicates the delay for the first register call.
- * If it is 0, the first register call will be after intervalMs milliseconds,
- * otherwise the server's first register will be after delayFirstRegisterMs.
- *
- * When you manually unregister the server, you also need to cancel the
- * periodic callback, otherwise it will be automatically be registered again.
- *
- * If you call this method multiple times for the same discoveryServerUrl, the older
- * periodic callback will be removed.
- *
- * @param server
- * @param client the client which is used to call the RegisterServer.
- * It must not yet be connected and will be connected for every register call
- * to the given discoveryServerUrl.
- * @param discoveryServerUrl where this server should register itself.
- * The string will be copied internally. Therefore you can free it after calling this method.
- * @param intervalMs
- * @param delayFirstRegisterMs
- * @param periodicCallbackId */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addPeriodicServerRegisterCallback(UA_Server *server, struct UA_Client *client,
- const char* discoveryServerUrl,
- UA_Double intervalMs,
- UA_Double delayFirstRegisterMs,
- UA_UInt64 *periodicCallbackId);
-
-/* Callback for RegisterServer. Data is passed from the register call */
-typedef void (*UA_Server_registerServerCallback)(const UA_RegisteredServer *registeredServer,
- void* data);
-
-/* Set the callback which is called if another server registeres or unregisters
- * with this instance. This callback is called every time the server gets a register
- * call. This especially means that for every periodic server register the callback will
- * be called.
- *
- * @param server
- * @param cb the callback
- * @param data data passed to the callback
- * @return UA_STATUSCODE_SUCCESS on success */
-void UA_EXPORT UA_THREADSAFE
-UA_Server_setRegisterServerCallback(UA_Server *server, UA_Server_registerServerCallback cb,
- void* data);
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
-
-/* Callback for server detected through mDNS. Data is passed from the register
- * call
- *
- * @param isServerAnnounce indicates if the server has just been detected. If
- * set to false, this means the server is shutting down.
- * @param isTxtReceived indicates if we already received the corresponding TXT
- * record with the path and caps data */
-typedef void (*UA_Server_serverOnNetworkCallback)(const UA_ServerOnNetwork *serverOnNetwork,
- UA_Boolean isServerAnnounce,
- UA_Boolean isTxtReceived, void* data);
-
-/* Set the callback which is called if another server is found through mDNS or
- * deleted. It will be called for any mDNS message from the remote server, thus
- * it may be called multiple times for the same instance. Also the SRV and TXT
- * records may arrive later, therefore for the first call the server
- * capabilities may not be set yet. If called multiple times, previous data will
- * be overwritten.
- *
- * @param server
- * @param cb the callback
- * @param data data passed to the callback
- * @return UA_STATUSCODE_SUCCESS on success */
-void UA_EXPORT UA_THREADSAFE
-UA_Server_setServerOnNetworkCallback(UA_Server *server,
- UA_Server_serverOnNetworkCallback cb,
- void* data);
-
-#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
-
-#endif /* UA_ENABLE_DISCOVERY */
-
-/**
- * Information Model Callbacks
- * ---------------------------
- *
- * There are three places where a callback from an information model to
- * user-defined code can happen.
- *
- * - Custom node constructors and destructors
- * - Linking VariableNodes with an external data source
- * - MethodNode callbacks
- *
- * .. _node-lifecycle:
- *
- * Node Lifecycle: Constructors, Destructors and Node Contexts
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * To finalize the instantiation of a node, a (user-defined) constructor
- * callback is executed. There can be both a global constructor for all nodes
- * and node-type constructor specific to the TypeDefinition of the new node
- * (attached to an ObjectTypeNode or VariableTypeNode).
- *
- * In the hierarchy of ObjectTypes and VariableTypes, only the constructor of
- * the (lowest) type defined for the new node is executed. Note that every
- * Object and Variable can have only one ``isTypeOf`` reference. But type-nodes
- * can technically have several ``hasSubType`` references to implement multiple
- * inheritance. Issues of (multiple) inheritance in the constructor need to be
- * solved by the user.
- *
- * When a node is destroyed, the node-type destructor is called before the
- * global destructor. So the overall node lifecycle is as follows:
- *
- * 1. Global Constructor (set in the server config)
- * 2. Node-Type Constructor (for VariableType or ObjectTypes)
- * 3. (Usage-period of the Node)
- * 4. Node-Type Destructor
- * 5. Global Destructor
- *
- * The constructor and destructor callbacks can be set to ``NULL`` and are not
- * used in that case. If the node-type constructor fails, the global destructor
- * will be called before removing the node. The destructors are assumed to never
- * fail.
- *
- * Every node carries a user-context and a constructor-context pointer. The
- * user-context is used to attach custom data to a node. But the (user-defined)
- * constructors and destructors may replace the user-context pointer if they
- * wish to do so. The initial value for the constructor-context is ``NULL``.
- * When the ``AddNodes`` service is used over the network, the user-context
- * pointer of the new node is also initially set to ``NULL``. */
-
-/* To be set in the server config. */
-typedef struct {
- /* Can be NULL. May replace the nodeContext */
- UA_StatusCode (*constructor)(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *nodeId, void **nodeContext);
-
- /* Can be NULL. The context cannot be replaced since the node is destroyed
- * immediately afterwards anyway. */
- void (*destructor)(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *nodeId, void *nodeContext);
-
- /* Can be NULL. Called during recursive node instantiation. While mandatory
- * child nodes are automatically created if not already present, optional child
- * nodes are not. This callback can be used to define whether an optional child
- * node should be created.
- *
- * @param server The server executing the callback
- * @param sessionId The identifier of the session
- * @param sessionContext Additional data attached to the session in the
- * access control layer
- * @param sourceNodeId Source node from the type definition. If the new node
- * shall be created, it will be a copy of this node.
- * @param targetParentNodeId Parent of the potential new child node
- * @param referenceTypeId Identifies the reference type which that the parent
- * node has to the new node.
- * @return Return UA_TRUE if the child node shall be instantiatet,
- * UA_FALSE otherwise. */
- UA_Boolean (*createOptionalChild)(UA_Server *server,
- const UA_NodeId *sessionId,
- void *sessionContext,
- const UA_NodeId *sourceNodeId,
- const UA_NodeId *targetParentNodeId,
- const UA_NodeId *referenceTypeId);
-
- /* Can be NULL. Called when a node is to be copied during recursive
- * node instantiation. Allows definition of the NodeId for the new node.
- * If the callback is set to NULL or the resulting NodeId is UA_NODEID_NULL,
- * then a random NodeId will be generated.
- *
- * @param server The server executing the callback
- * @param sessionId The identifier of the session
- * @param sessionContext Additional data attached to the session in the
- * access control layer
- * @param sourceNodeId Source node of the copy operation
- * @param targetParentNodeId Parent node of the new node
- * @param referenceTypeId Identifies the reference type which that the parent
- * node has to the new node. */
- UA_StatusCode (*generateChildNodeId)(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *sourceNodeId,
- const UA_NodeId *targetParentNodeId,
- const UA_NodeId *referenceTypeId,
- UA_NodeId *targetNodeId);
- } UA_GlobalNodeLifecycle;
-
-typedef struct {
- /* Can be NULL. May replace the nodeContext */
- UA_StatusCode (*constructor)(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *typeNodeId, void *typeNodeContext,
- const UA_NodeId *nodeId, void **nodeContext);
-
- /* Can be NULL. May replace the nodeContext. */
- void (*destructor)(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *typeNodeId, void *typeNodeContext,
- const UA_NodeId *nodeId, void **nodeContext);
-} UA_NodeTypeLifecycle;
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId,
- UA_NodeTypeLifecycle lifecycle);
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_getNodeContext(UA_Server *server, UA_NodeId nodeId,
- void **nodeContext);
-
-/* Careful! The user has to ensure that the destructor callbacks still work. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setNodeContext(UA_Server *server, UA_NodeId nodeId,
- void *nodeContext);
-
-/**
- * .. _datasource:
- *
- * Data Source Callback
- * ^^^^^^^^^^^^^^^^^^^^
- *
- * The server has a unique way of dealing with the content of variables. Instead
- * of storing a variant attached to the variable node, the node can point to a
- * function with a local data provider. Whenever the value attribute is read,
- * the function will be called and asked to provide a UA_DataValue return value
- * that contains the value content and additional timestamps.
- *
- * It is expected that the read callback is implemented. The write callback can
- * be set to a null-pointer. */
-typedef struct {
- /* Copies the data from the source into the provided value.
- *
- * !! ZERO-COPY OPERATIONS POSSIBLE !!
- * It is not required to return a copy of the actual content data. You can
- * return a pointer to memory owned by the user. Memory can be reused
- * between read callbacks of a DataSource, as the result is already encoded
- * on the network buffer between each read operation.
- *
- * To use zero-copy reads, set the value of the `value->value` Variant
- * without copying, e.g. with `UA_Variant_setScalar`. Then, also set
- * `value->value.storageType` to `UA_VARIANT_DATA_NODELETE` to prevent the
- * memory being cleaned up. Don't forget to also set `value->hasValue` to
- * true to indicate the presence of a value.
- *
- * @param server The server executing the callback
- * @param sessionId The identifier of the session
- * @param sessionContext Additional data attached to the session in the
- * access control layer
- * @param nodeId The identifier of the node being read from
- * @param nodeContext Additional data attached to the node by the user
- * @param includeSourceTimeStamp If true, then the datasource is expected to
- * set the source timestamp in the returned value
- * @param range If not null, then the datasource shall return only a
- * selection of the (nonscalar) data. Set
- * UA_STATUSCODE_BADINDEXRANGEINVALID in the value if this does not
- * apply
- * @param value The (non-null) DataValue that is returned to the client. The
- * data source sets the read data, the result status and optionally a
- * sourcetimestamp.
- * @return Returns a status code for logging. Error codes intended for the
- * original caller are set in the value. If an error is returned,
- * then no releasing of the value is done
- */
- UA_StatusCode (*read)(UA_Server *server, const UA_NodeId *sessionId,
- void *sessionContext, const UA_NodeId *nodeId,
- void *nodeContext, UA_Boolean includeSourceTimeStamp,
- const UA_NumericRange *range, UA_DataValue *value);
-
- /* Write into a data source. This method pointer can be NULL if the
- * operation is unsupported.
- *
- * @param server The server executing the callback
- * @param sessionId The identifier of the session
- * @param sessionContext Additional data attached to the session in the
- * access control layer
- * @param nodeId The identifier of the node being written to
- * @param nodeContext Additional data attached to the node by the user
- * @param range If not NULL, then the datasource shall return only a
- * selection of the (nonscalar) data. Set
- * UA_STATUSCODE_BADINDEXRANGEINVALID in the value if this does not
- * apply
- * @param value The (non-NULL) DataValue that has been written by the client.
- * The data source contains the written data, the result status and
- * optionally a sourcetimestamp
- * @return Returns a status code for logging. Error codes intended for the
- * original caller are set in the value. If an error is returned,
- * then no releasing of the value is done
- */
- UA_StatusCode (*write)(UA_Server *server, const UA_NodeId *sessionId,
- void *sessionContext, const UA_NodeId *nodeId,
- void *nodeContext, const UA_NumericRange *range,
- const UA_DataValue *value);
-} UA_DataSource;
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
- const UA_DataSource dataSource);
-
-/**
- * .. _value-callback:
- *
- * Value Callback
- * ^^^^^^^^^^^^^^
- * Value Callbacks can be attached to variable and variable type nodes. If
- * not ``NULL``, they are called before reading and after writing respectively. */
-typedef struct {
- /* Called before the value attribute is read. It is possible to write into the
- * value attribute during onRead (using the write service). The node is
- * re-opened afterwards so that changes are considered in the following read
- * operation.
- *
- * @param handle Points to user-provided data for the callback.
- * @param nodeid The identifier of the node.
- * @param data Points to the current node value.
- * @param range Points to the numeric range the client wants to read from
- * (or NULL). */
- void (*onRead)(UA_Server *server, const UA_NodeId *sessionId,
- void *sessionContext, const UA_NodeId *nodeid,
- void *nodeContext, const UA_NumericRange *range,
- const UA_DataValue *value);
-
- /* Called after writing the value attribute. The node is re-opened after
- * writing so that the new value is visible in the callback.
- *
- * @param server The server executing the callback
- * @sessionId The identifier of the session
- * @sessionContext Additional data attached to the session
- * in the access control layer
- * @param nodeid The identifier of the node.
- * @param nodeUserContext Additional data attached to the node by
- * the user.
- * @param nodeConstructorContext Additional data attached to the node
- * by the type constructor(s).
- * @param range Points to the numeric range the client wants to write to (or
- * NULL). */
- void (*onWrite)(UA_Server *server, const UA_NodeId *sessionId,
- void *sessionContext, const UA_NodeId *nodeId,
- void *nodeContext, const UA_NumericRange *range,
- const UA_DataValue *data);
-} UA_ValueCallback;
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setVariableNode_valueCallback(UA_Server *server,
- const UA_NodeId nodeId,
- const UA_ValueCallback callback);
-
-/**
- * .. _local-monitoreditems:
- *
- * Local MonitoredItems
- * ^^^^^^^^^^^^^^^^^^^^
- *
- * MonitoredItems are used with the Subscription mechanism of OPC UA to
- * transported notifications for data changes and events. MonitoredItems can
- * also be registered locally. Notifications are then forwarded to a
- * user-defined callback instead of a remote client. */
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
-
-typedef 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);
-
-typedef void (*UA_Server_EventNotificationCallback)
- (UA_Server *server, UA_UInt32 monId, void *monContext,
- size_t nEventFields, const UA_Variant *eventFields);
-
-/* Create a local MonitoredItem with a sampling interval that detects data
- * changes.
- *
- * @param server The server executing the MonitoredItem
- * @timestampsToReturn Shall timestamps be added to the value for the callback?
- * @item The parameters of the new MonitoredItem. Note that the attribute of the
- * ReadValueId (the node that is monitored) can not be
- * ``UA_ATTRIBUTEID_EVENTNOTIFIER``. A different callback type needs to be
- * registered for event notifications.
- * @monitoredItemContext A pointer that is forwarded with the callback
- * @callback The callback that is executed on detected data changes
- *
- * @return Returns a description of the created MonitoredItem. The structure
- * also contains a StatusCode (in case of an error) and the identifier of the
- * new MonitoredItem. */
-UA_MonitoredItemCreateResult UA_EXPORT UA_THREADSAFE
-UA_Server_createDataChangeMonitoredItem(UA_Server *server,
- UA_TimestampsToReturn timestampsToReturn,
- const UA_MonitoredItemCreateRequest item,
- void *monitoredItemContext,
- UA_Server_DataChangeNotificationCallback callback);
-
-/* UA_MonitoredItemCreateResult UA_EXPORT */
-/* UA_Server_createEventMonitoredItem(UA_Server *server, */
-/* UA_TimestampsToReturn timestampsToReturn, */
-/* const UA_MonitoredItemCreateRequest item, void *context, */
-/* UA_Server_EventNotificationCallback callback); */
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_deleteMonitoredItem(UA_Server *server, UA_UInt32 monitoredItemId);
-
-#endif
-
-/**
- * Method Callbacks
- * ^^^^^^^^^^^^^^^^
- * Method callbacks are set to `NULL` (not executable) when a method node is
- * added over the network. In theory, it is possible to add a callback via
- * ``UA_Server_setMethodNode_callback`` within the global constructor when
- * adding methods over the network is really wanted. See the Section
- * :ref:`object-interaction` for calling methods on an object. */
-
-typedef 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);
-
-#ifdef UA_ENABLE_METHODCALLS
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_setMethodNode_callback(UA_Server *server,
- const UA_NodeId methodNodeId,
- UA_MethodCallback methodCallback);
-#endif
-
-/**
- * .. _object-interaction:
- *
- * Interacting with Objects
- * ------------------------
- * Objects in the information model are represented as ObjectNodes. Some
- * convenience functions are provided to simplify the interaction with objects.
- */
-
-/* Write an object property. The property is represented as a VariableNode with
- * a ``HasProperty`` reference from the ObjectNode. The VariableNode is
- * identified by its BrowseName. Writing the property sets the value attribute
- * of the VariableNode.
- *
- * @param server The server object
- * @param objectId The identifier of the object (node)
- * @param propertyName The name of the property
- * @param value The value to be set for the event attribute
- * @return The StatusCode for setting the event attribute */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_writeObjectProperty(UA_Server *server, const UA_NodeId objectId,
- const UA_QualifiedName propertyName,
- const UA_Variant value);
-
-/* Directly point to the scalar value instead of a variant */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_writeObjectProperty_scalar(UA_Server *server, const UA_NodeId objectId,
- const UA_QualifiedName propertyName,
- const void *value, const UA_DataType *type);
-
-/* Read an object property.
- *
- * @param server The server object
- * @param objectId The identifier of the object (node)
- * @param propertyName The name of the property
- * @param value Contains the property value after reading. Must not be NULL.
- * @return The StatusCode for setting the event attribute */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_readObjectProperty(UA_Server *server, const UA_NodeId objectId,
- const UA_QualifiedName propertyName,
- UA_Variant *value);
-
-#ifdef UA_ENABLE_METHODCALLS
-UA_CallMethodResult UA_EXPORT UA_THREADSAFE
-UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request);
-#endif
-
-/**
- * .. _addnodes:
- *
- * Node Addition and Deletion
- * --------------------------
- * When creating dynamic node instances at runtime, chances are that you will
- * not care about the specific NodeId of the new node, as long as you can
- * reference it later. When passing numeric NodeIds with a numeric identifier 0,
- * the stack evaluates this as "select a random unassigned numeric NodeId in
- * that namespace". To find out which NodeId was actually assigned to the new
- * node, you may pass a pointer `outNewNodeId`, which will (after a successful
- * node insertion) contain the nodeId of the new node. You may also pass a
- * ``NULL`` pointer if this result is not needed.
- *
- * See the Section :ref:`node-lifecycle` on constructors and on attaching
- * user-defined data to nodes.
- *
- * The methods for node addition and deletion take mostly const arguments that
- * are not modified. When creating a node, a deep copy of the node identifier,
- * node attributes, etc. is created. Therefore, it is possible to call for
- * example ``UA_Server_addVariablenode`` with a value attribute (a
- * :ref:`variant`) pointing to a memory location on the stack. If you need
- * changes to a variable value to manifest at a specific memory location, please
- * use a :ref:`datasource` or a :ref:`value-callback`. */
-
-/* Protect against redundant definitions for server/client */
-#ifndef UA_DEFAULT_ATTRIBUTES_DEFINED
-#define UA_DEFAULT_ATTRIBUTES_DEFINED
-/* The default for variables is "BaseDataType" for the datatype, -2 for the
- * valuerank and a read-accesslevel. */
-UA_EXPORT extern const UA_VariableAttributes UA_VariableAttributes_default;
-UA_EXPORT extern const UA_VariableTypeAttributes UA_VariableTypeAttributes_default;
-/* Methods are executable by default */
-UA_EXPORT extern const UA_MethodAttributes UA_MethodAttributes_default;
-/* The remaining attribute definitions are currently all zeroed out */
-UA_EXPORT extern const UA_ObjectAttributes UA_ObjectAttributes_default;
-UA_EXPORT extern const UA_ObjectTypeAttributes UA_ObjectTypeAttributes_default;
-UA_EXPORT extern const UA_ReferenceTypeAttributes UA_ReferenceTypeAttributes_default;
-UA_EXPORT extern const UA_DataTypeAttributes UA_DataTypeAttributes_default;
-UA_EXPORT extern const UA_ViewAttributes UA_ViewAttributes_default;
-#endif
-
-/* Don't use this function. There are typed versions as inline functions. */
-UA_StatusCode UA_EXPORT 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);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addVariableNode(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,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_VARIABLE, &requestedNewNodeId,
- &parentNodeId, &referenceTypeId, browseName,
- &typeDefinition, (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addVariableTypeNode(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_VariableTypeAttributes attr,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_VARIABLETYPE,
- &requestedNewNodeId, &parentNodeId, &referenceTypeId,
- browseName, &typeDefinition,
- (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addObjectNode(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_ObjectAttributes attr,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_OBJECT, &requestedNewNodeId,
- &parentNodeId, &referenceTypeId, browseName,
- &typeDefinition, (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addObjectTypeNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
- const UA_NodeId parentNodeId,
- const UA_NodeId referenceTypeId,
- const UA_QualifiedName browseName,
- const UA_ObjectTypeAttributes attr,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_OBJECTTYPE, &requestedNewNodeId,
- &parentNodeId, &referenceTypeId, browseName,
- &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addViewNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
- const UA_NodeId parentNodeId,
- const UA_NodeId referenceTypeId,
- const UA_QualifiedName browseName,
- const UA_ViewAttributes attr,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_VIEW, &requestedNewNodeId,
- &parentNodeId, &referenceTypeId, browseName,
- &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_VIEWATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addReferenceTypeNode(UA_Server *server,
- const UA_NodeId requestedNewNodeId,
- const UA_NodeId parentNodeId,
- const UA_NodeId referenceTypeId,
- const UA_QualifiedName browseName,
- const UA_ReferenceTypeAttributes attr,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_REFERENCETYPE,
- &requestedNewNodeId, &parentNodeId, &referenceTypeId,
- browseName, &UA_NODEID_NULL,
- (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addDataTypeNode(UA_Server *server,
- const UA_NodeId requestedNewNodeId,
- const UA_NodeId parentNodeId,
- const UA_NodeId referenceTypeId,
- const UA_QualifiedName browseName,
- const UA_DataTypeAttributes attr,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return __UA_Server_addNode(server, UA_NODECLASS_DATATYPE, &requestedNewNodeId,
- &parentNodeId, &referenceTypeId, browseName,
- &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
- &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES],
- nodeContext, outNewNodeId);
-}
-
-UA_StatusCode UA_EXPORT 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);
-
-#ifdef UA_ENABLE_METHODCALLS
-
-UA_StatusCode UA_EXPORT 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);
-
-static UA_INLINE UA_THREADSAFE UA_StatusCode
-UA_Server_addMethodNode(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,
- size_t outputArgumentsSize, const UA_Argument *outputArguments,
- void *nodeContext, UA_NodeId *outNewNodeId) {
- return UA_Server_addMethodNodeEx(server, requestedNewNodeId, parentNodeId,
- referenceTypeId, browseName, attr, method,
- inputArgumentsSize, inputArguments, UA_NODEID_NULL, NULL,
- outputArgumentsSize, outputArguments, UA_NODEID_NULL, NULL,
- nodeContext, outNewNodeId);
-}
-
-#endif
-
-
-/**
- * The method pair UA_Server_addNode_begin and _finish splits the AddNodes
- * service in two parts. This is useful if the node shall be modified before
- * finish the instantiation. For example to add children with specific NodeIds.
- * Otherwise, mandatory children (e.g. of an ObjectType) are added with
- * pseudo-random unique NodeIds. Existing children are detected during the
- * _finish part via their matching BrowseName.
- *
- * The _begin method:
- * - prepares the node and adds it to the nodestore
- * - copies some unassigned attributes from the TypeDefinition node internally
- * - adds the references to the parent (and the TypeDefinition if applicable)
- * - performs type-checking of variables.
- *
- * You can add an object node without a parent if you set the parentNodeId and
- * referenceTypeId to UA_NODE_ID_NULL. Then you need to add the parent reference
- * and hasTypeDef reference yourself before calling the _finish method.
- * Not that this is only allowed for object nodes.
- *
- * The _finish method:
- * - copies mandatory children
- * - calls the node constructor(s) at the end
- * - may remove the node if it encounters an error.
- *
- * The special UA_Server_addMethodNode_finish method needs to be used for
- * method nodes, since there you need to explicitly specifiy the input
- * and output arguments which are added in the finish step (if not yet already there)
- **/
-
-/* The ``attr`` argument must have a type according to the NodeClass.
- * ``VariableAttributes`` for variables, ``ObjectAttributes`` for objects, and
- * so on. Missing attributes are taken from the TypeDefinition node if
- * applicable. */
-UA_StatusCode UA_EXPORT 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);
-
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId);
-
-#ifdef UA_ENABLE_METHODCALLS
-
-UA_StatusCode UA_EXPORT 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);
-
-#endif
-
-/* Deletes a node and optionally all references leading to the node. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId,
- UA_Boolean deleteReferences);
-
-/**
- * Reference Management
- * -------------------- */
-UA_StatusCode UA_EXPORT 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_EXPORT 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);
-
-/**
- * .. _events:
- *
- * Events
- * ------
- * The method ``UA_Server_createEvent`` creates an event and represents it as node. The node receives a unique `EventId`
- * which is automatically added to the node.
- * The method returns a `NodeId` to the object node which represents the event through ``outNodeId``. The `NodeId` can
- * be used to set the attributes of the event. The generated `NodeId` is always numeric. ``outNodeId`` cannot be
- * ``NULL``.
- *
- * Note: In order to see an event in UAExpert, the field `Time` must be given a value!
- *
- * The method ``UA_Server_triggerEvent`` "triggers" an event by adding it to all monitored items of the specified
- * origin node and those of all its parents. Any filters specified by the monitored items are automatically applied.
- * Using this method deletes the node generated by ``UA_Server_createEvent``. The `EventId` for the new event is
- * generated automatically and is returned through ``outEventId``. ``NULL`` can be passed if the `EventId` is not
- * needed. ``deleteEventNode`` specifies whether the node representation of the event should be deleted after invoking
- * the method. This can be useful if events with the similar attributes are triggered frequently. ``UA_TRUE`` would
- * cause the node to be deleted. */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
-
-/* The EventQueueOverflowEventType is defined as abstract, therefore we can not
- * create an instance of that type directly, but need to create a subtype. The
- * following is an arbitrary number which shall refer to our internal overflow
- * type. This is already posted on the OPC Foundation bug tracker under the
- * following link for clarification:
- * https://opcfoundation-onlineapplications.org/mantis/view.php?id=4206 */
-# define UA_NS0ID_SIMPLEOVERFLOWEVENTTYPE 4035
-
-/* Creates a node representation of an event
- *
- * @param server The server object
- * @param eventType The type of the event for which a node should be created
- * @param outNodeId The NodeId of the newly created node for the event
- * @return The StatusCode of the UA_Server_createEvent method */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_createEvent(UA_Server *server, const UA_NodeId eventType,
- UA_NodeId *outNodeId);
-
-/* Triggers a node representation of an event by applying EventFilters and
- adding the event to the appropriate queues.
- * @param server The server object
- * @param eventNodeId The NodeId of the node representation of the event which should be triggered
- * @param outEvent the EventId of the new event
- * @param deleteEventNode Specifies whether the node representation of the event should be deleted
- * @return The StatusCode of the UA_Server_triggerEvent method */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId, const UA_NodeId originId,
- UA_ByteString *outEventId, const UA_Boolean deleteEventNode);
-
-#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS
-typedef enum UA_TwoStateVariableCallbackType {
- UA_ENTERING_ENABLEDSTATE,
- UA_ENTERING_ACKEDSTATE,
- UA_ENTERING_CONFIRMEDSTATE,
- UA_ENTERING_ACTIVESTATE
-} UA_TwoStateVariableCallbackType;
-
-/**
- * callback prototype to set user specific callbacks
- */
-typedef UA_StatusCode
-(*UA_TwoStateVariableChangeCallback)(UA_Server *server, const UA_NodeId *condition);
-
-/**
- * create condition instance. The function checks first whether the passed conditionType
- * is a subType of ConditionType. Then checks whether the condition source has HasEventSource
- * reference to its parent. If not, a HasEventSource reference will be created between condition
- * source and server object. To expose the condition in address space, a hierarchical ReferenceType
- * should be passed to create the reference to condition source. Otherwise, UA_NODEID_NULL should be
- * passed to make the condition not exposed.
- * @param server The server object
- * @param conditionId The NodeId of the requested Condition Object. UA_NODEID_NULL for random Id with NS Idx = 0.
- * @param conditionType The NodeId of the node representation of the ConditionType
- * @param conditionName The name of the condition to be created
- * @param conditionSource The NodeId of the Condition Source (Parent of the Condition)
- * @param hierarchialReferenceType The NodeId of Hierarchical ReferenceType between Condition and its source
- * @param outConditionId The NodeId of the created Condition
- * @return The StatusCode of the UA_Server_createCondition method */
-UA_StatusCode UA_EXPORT
-UA_Server_createCondition(UA_Server *server,
- const UA_NodeId conditionId, const UA_NodeId conditionType,
- UA_QualifiedName conditionName, const UA_NodeId conditionSource,
- const UA_NodeId hierarchialReferenceType, UA_NodeId *outConditionId);
-
-/**
- * set the value of condition field.
- * @param server The server object
- * @param condition The NodeId of the node representation of the Condition Instance
- * @param value Variant Value to be written to the Field
- * @param fieldName Name of the Field in which the value should be written
- * @return The StatusCode of the UA_Server_setConditionField method*/
-UA_StatusCode UA_EXPORT
-UA_Server_setConditionField(UA_Server *server,
- const UA_NodeId condition,
- const UA_Variant* value,
- const UA_QualifiedName fieldName);
-
-/**
- * set the value of property of condition field.
- * @param server The server object
- * @param condition The NodeId of the node representation of the Condition Instance
- * @param value Variant Value to be written to the Field
- * @param variableFieldName Name of the Field which has a property
- * @param variablePropertyName Name of the Field Property in which the value should be written
- * @return The StatusCode of the UA_Server_setConditionVariableFieldProperty*/
-UA_StatusCode UA_EXPORT
-UA_Server_setConditionVariableFieldProperty(UA_Server *server,
- const UA_NodeId condition,
- const UA_Variant* value,
- const UA_QualifiedName variableFieldName,
- const UA_QualifiedName variablePropertyName);
-
-/**
- * triggers an event only for an enabled condition. The condition list is updated then with the
- * last generated EventId.
- * @param server The server object
- * @param condition The NodeId of the node representation of the Condition Instance
- * @param conditionSource The NodeId of the node representation of the Condition Source
- * @param outEventId last generated EventId
- * @return The StatusCode of the UA_Server_triggerConditionEvent method*/
-UA_StatusCode UA_EXPORT
-UA_Server_triggerConditionEvent(UA_Server *server, const UA_NodeId condition,
- const UA_NodeId conditionSource, UA_ByteString *outEventId);
-
-/**
- * add an optional condition field using its name. (TODO Adding optional methods
- * is not implemented yet)
- * @param server The server object
- * @param condition The NodeId of the node representation of the Condition Instance
- * @param conditionType The NodeId of the node representation of the Condition Type
- * from which the optional field comes
- * @param fieldName Name of the optional field
- * @param outOptionalVariable The NodeId of the created field (Variable Node)
- * @return The StatusCode of the UA_Server_addConditionOptionalField method*/
-UA_StatusCode UA_EXPORT
-UA_Server_addConditionOptionalField(UA_Server *server, const UA_NodeId condition,
- const UA_NodeId conditionType, const UA_QualifiedName fieldName,
- UA_NodeId *outOptionalVariable);
-
-/**
- * Function used to set a user specific callback to TwoStateVariable Fields of
- * a condition. The callbacks will be called before triggering the events when
- * transition to true State of EnabledState/Id, AckedState/Id, ConfirmedState/Id
- * and ActiveState/Id occurs.
- * @param server The server object
- * @param condition The NodeId of the node representation of the Condition Instance
- * @param conditionSource The NodeId of the node representation of the Condition Source
- * @param removeBranch (Not Implemented yet)
- * @param callback User specific callback function
- * @param callbackType Callback function type, indicates where it should be called
- * @return The StatusCode of the UA_Server_setConditionTwoStateVariableCallback method*/
-UA_StatusCode UA_EXPORT
-UA_Server_setConditionTwoStateVariableCallback(UA_Server *server, const UA_NodeId condition,
- const UA_NodeId conditionSource, UA_Boolean removeBranch,
- UA_TwoStateVariableChangeCallback callback,
- UA_TwoStateVariableCallbackType callbackType);
-
-#endif//UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS
-
-UA_StatusCode UA_EXPORT
-UA_Server_updateCertificate(UA_Server *server,
- const UA_ByteString *oldCertificate,
- const UA_ByteString *newCertificate,
- const UA_ByteString *newPrivateKey,
- UA_Boolean closeSessions,
- UA_Boolean closeSecureChannels);
-
-/**
- * Utility Functions
- * ----------------- */
-/* Add a new namespace to the server. Returns the index of the new namespace */
-UA_UInt16 UA_EXPORT UA_THREADSAFE UA_Server_addNamespace(UA_Server *server, const char* name);
-
-/* Get namespace by name from the server. */
-UA_StatusCode UA_EXPORT UA_THREADSAFE
-UA_Server_getNamespaceByName(UA_Server *server, const UA_String namespaceUri,
- size_t* foundIndex);
-
-#ifdef UA_ENABLE_HISTORIZING
-UA_Boolean UA_EXPORT UA_THREADSAFE
-UA_Server_AccessControl_allowHistoryUpdateUpdateData(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *nodeId,
- UA_PerformUpdateType performInsertReplace,
- const UA_DataValue *value);
-
-UA_Boolean UA_EXPORT UA_THREADSAFE
-UA_Server_AccessControl_allowHistoryUpdateDeleteRawModified(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *nodeId,
- UA_DateTime startTimestamp,
- UA_DateTime endTimestamp,
- bool isDeleteModified);
-#endif // UA_ENABLE_HISTORIZING
-
-/**
-* .. _async-operations:
-*
-* Async Operations
-* ----------------
-* Some operations (such as reading out a sensor that needs to warm up) can take
-* quite some time. In order not to block the server during such an operation, it
-* can be "outsourced" to a worker thread.
-*
-* Take the example of a CallRequest. It is split into the individual method call
-* operations. If the method is marked as async, then the operation is put into a
-* queue where it is be retrieved by a worker. The worker returns the result when
-* ready. See the examples in ``/examples/tutorial_server_method_async.c`` for
-* the usage.
-*
-* Note that the operation can time out (see the asyncOperationTimeout setting in
-* the server config) also when it has been retrieved by the worker. */
-
-#if UA_MULTITHREADING >= 100
-
-/* Set the async flag in a method node */
-UA_StatusCode UA_EXPORT
-UA_Server_setMethodNodeAsync(UA_Server *server, const UA_NodeId id,
- UA_Boolean isAsync);
-
-typedef enum {
- UA_ASYNCOPERATIONTYPE_INVALID, /* 0, the default */
- UA_ASYNCOPERATIONTYPE_CALL
- /* UA_ASYNCOPERATIONTYPE_READ, */
- /* UA_ASYNCOPERATIONTYPE_WRITE, */
-} UA_AsyncOperationType;
-
-typedef union {
- UA_CallMethodRequest callMethodRequest;
- /* UA_ReadValueId readValueId; */
- /* UA_WriteValue writeValue; */
-} UA_AsyncOperationRequest;
-
-typedef union {
- UA_CallMethodResult callMethodResult;
- /* UA_DataValue readResult; */
- /* UA_StatusCode writeResult; */
-} UA_AsyncOperationResponse;
-
-/* Get the next async operation without blocking
- *
- * @param server The server object
- * @param type The type of the async operation
- * @param request Receives pointer to the operation
- * @param context Receives the pointer to the operation context
- * @param timeout The timestamp when the operation times out and can
- * no longer be returned to the client. The response has to
- * be set in UA_Server_setAsyncOperationResult in any case.
- * @return false if queue is empty, true else */
-UA_Boolean UA_EXPORT
-UA_Server_getAsyncOperationNonBlocking(UA_Server *server, UA_AsyncOperationType *type,
- const UA_AsyncOperationRequest **request,
- void **context, UA_DateTime *timeout);
-
-/* UA_Boolean UA_EXPORT */
-/* UA_Server_getAsyncOperationBlocking(UA_Server *server, UA_AsyncOperationType *type, */
-/* const UA_AsyncOperationRequest **request, */
-/* void **context, UA_DateTime *timeout); */
-
-/* Submit an async operation result
- *
- * @param server The server object
- * @param response Pointer to the operation result
- * @param context Pointer to the operation context */
-void UA_EXPORT
-UA_Server_setAsyncOperationResult(UA_Server *server,
- const UA_AsyncOperationResponse *response,
- void *context);
-
-/* Get the next async operation. Attention! This method is deprecated and has
- * been replaced by UA_Server_getAsyncOperationNonBlocking! */
-UA_DEPRECATED UA_Boolean UA_EXPORT
-UA_Server_getAsyncOperation(UA_Server *server, UA_AsyncOperationType *type,
- const UA_AsyncOperationRequest **request,
- void **context);
-
-#endif /* !UA_MULTITHREADING >= 100 */
-
-/**
-* Statistics
-* ----------
-*
-* Statistic counters keeping track of the current state of the stack. Counters
-* are structured per OPC UA communication layer. */
-
-typedef struct {
- UA_NetworkStatistics ns;
- UA_SecureChannelStatistics scs;
- UA_SessionStatistics ss;
-} UA_ServerStatistics;
-
-UA_ServerStatistics UA_EXPORT
-UA_Server_getStatistics(UA_Server *server);
-
-_UA_END_DECLS
-
-
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/log.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/log.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -25057,12 +24555,12 @@ _UA_BEGIN_DECLS
* The logger plugin is stateful and can point to custom data. So it is possible
* to keep open file handlers in the logger context.
*
- * Every log-message consists of a log-level, a log-category and a string
- * message content. The timestamp of the log-message is created within the
+ * Every log message consists of a log level, a log category and a string
+ * message content. The timestamp of the log message is created within the
* logger. */
typedef enum {
- UA_LOGLEVEL_TRACE,
+ UA_LOGLEVEL_TRACE = 0,
UA_LOGLEVEL_DEBUG,
UA_LOGLEVEL_INFO,
UA_LOGLEVEL_WARNING,
@@ -25071,7 +24569,7 @@ typedef enum {
} UA_LogLevel;
typedef enum {
- UA_LOGCATEGORY_NETWORK,
+ UA_LOGCATEGORY_NETWORK = 0,
UA_LOGCATEGORY_SECURECHANNEL,
UA_LOGCATEGORY_SESSION,
UA_LOGCATEGORY_SERVER,
@@ -25083,7 +24581,7 @@ typedef enum {
typedef struct {
/* Log a message. The message string and following varargs are formatted
* according to the rules of the printf command. Use the convenience macros
- * below that take the minimum log-level defined in ua_config.h into
+ * below that take the minimum log level defined in ua_config.h into
* account. */
void (*log)(void *logContext, UA_LogLevel level, UA_LogCategory category,
const char *msg, va_list args);
@@ -25186,7 +24684,7 @@ UA_LOG_FATAL(const UA_Logger *logger, UA_LogCategory category, const char *msg,
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/network.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/network.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -25315,7 +24813,7 @@ struct UA_Connection {
* The network layer is part of the server config. So users can provide a custom
* implementation if the provided example does not fit their architecture. The
* network layer is invoked only from the server's main loop. So the network
- * layer does not need to be thread-safe. If the networklayer receives a
+ * layer does not need to be thread-safe. If the network layer receives a
* positive duration for blocking listening, the server's main loop will block
* until a message is received or the duration times out. */
@@ -25342,11 +24840,12 @@ struct UA_ServerNetworkLayer {
UA_ConnectionConfig localConnectionConfig;
- /* Start listening on the networklayer.
+ /* Start listening on the network layer.
*
* @param nl The network layer
* @return Returns UA_STATUSCODE_GOOD or an error code. */
- UA_StatusCode (*start)(UA_ServerNetworkLayer *nl, const UA_String *customHostname);
+ UA_StatusCode (*start)(UA_ServerNetworkLayer *nl, const UA_Logger *logger,
+ const UA_String *customHostname);
/* Listen for new and closed connections and arriving packets. Calls
* UA_Server_processBinaryMessage for the arriving packets. Closed
@@ -25387,12 +24886,12 @@ struct UA_ServerNetworkLayer {
* @param logger the logger to use */
typedef UA_Connection
(*UA_ConnectClientConnection)(UA_ConnectionConfig config, UA_String endpointUrl,
- UA_UInt32 timeout, UA_Logger *logger);
+ UA_UInt32 timeout, const UA_Logger *logger);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/accesscontrol.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/accesscontrol.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -25415,7 +24914,11 @@ typedef struct UA_AccessControl UA_AccessControl;
* Access Control Plugin API
* =========================
* The access control callback is used to authenticate sessions and grant access
- * rights accordingly. */
+ * rights accordingly.
+ *
+ * The ``sessionId`` and ``sessionContext`` can be both NULL. This is the case
+ * when, for example, a MonitoredItem (the underlying Subscription) is detached
+ * from its Session but continues to run. */
struct UA_AccessControl {
void *context;
@@ -25486,6 +24989,16 @@ struct UA_AccessControl {
UA_Boolean (*allowBrowseNode)(UA_Server *server, UA_AccessControl *ac,
const UA_NodeId *sessionId, void *sessionContext,
const UA_NodeId *nodeId, void *nodeContext);
+
+#ifdef UA_ENABLE_SUBSCRIPTIONS
+ /* Allow transfer of a subscription to another session. The Server shall
+ * validate that the Client of that Session is operating on behalf of the
+ * same user */
+ UA_Boolean (*allowTransferSubscription)(UA_Server *server, UA_AccessControl *ac,
+ const UA_NodeId *oldSessionId, void *oldSessionContext,
+ const UA_NodeId *newSessionId, void *newSessionContext);
+#endif
+
#ifdef UA_ENABLE_HISTORIZING
/* Allow insert,replace,update of historical data */
UA_Boolean (*allowHistoryUpdateUpdateData)(UA_Server *server, UA_AccessControl *ac,
@@ -25507,7 +25020,7 @@ struct UA_AccessControl {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/pki.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/pki.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -25558,7 +25071,7 @@ struct UA_CertificateVerification {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/securitypolicy.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/securitypolicy.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -25573,7 +25086,7 @@ _UA_END_DECLS
_UA_BEGIN_DECLS
-extern UA_EXPORT const UA_ByteString UA_SECURITY_POLICY_NONE_URI;
+extern UA_EXPORT const UA_String UA_SECURITY_POLICY_NONE_URI;
struct UA_SecurityPolicy;
typedef struct UA_SecurityPolicy UA_SecurityPolicy;
@@ -25587,19 +25100,16 @@ typedef struct {
/* Verifies the signature of the message using the provided keys in the context.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the channelContext that contains the key to verify
* the supplied message with.
* @param message the message to which the signature is supposed to belong.
* @param signature the signature of the message, that should be verified. */
- UA_StatusCode (*verify)(const UA_SecurityPolicy *securityPolicy,
- void *channelContext, const UA_ByteString *message,
+ UA_StatusCode (*verify)(void *channelContext, const UA_ByteString *message,
const UA_ByteString *signature) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
/* Signs the given message using this policys signing algorithm and the
* provided keys in the context.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the channelContext that contains the key to sign
* the supplied message with.
* @param message the message to sign.
@@ -25607,126 +25117,94 @@ typedef struct {
* buffer needs to be allocated by the caller. The
* necessary size can be acquired with the signatureSize
* attribute of this module. */
- UA_StatusCode (*sign)(const UA_SecurityPolicy *securityPolicy,
- void *channelContext, const UA_ByteString *message,
+ UA_StatusCode (*sign)(void *channelContext, const UA_ByteString *message,
UA_ByteString *signature) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
/* Gets the signature size that depends on the local (private) key.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the channelContext that contains the
* certificate/key.
* @return the size of the local signature. Returns 0 if no local
* certificate was set. */
- size_t (*getLocalSignatureSize)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getLocalSignatureSize)(const void *channelContext);
/* Gets the signature size that depends on the remote (public) key.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the size of the remote signature. Returns 0 if no
* remote certificate was set previousely. */
- size_t (*getRemoteSignatureSize)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getRemoteSignatureSize)(const void *channelContext);
/* Gets the local signing key length.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the length of the signing key in bytes. Returns 0 if no length can be found.
*/
- size_t (*getLocalKeyLength)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getLocalKeyLength)(const void *channelContext);
/* Gets the local signing key length.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the length of the signing key in bytes. Returns 0 if no length can be found.
*/
- size_t (*getRemoteKeyLength)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getRemoteKeyLength)(const void *channelContext);
} UA_SecurityPolicySignatureAlgorithm;
typedef struct {
UA_String uri;
- /* Encrypt the given data in place using an asymmetric algorithm and keys.
+ /* Encrypt the given data in place. For asymmetric encryption, the block
+ * size for plaintext and cypher depend on the remote key (certificate).
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the channelContext which contains information about
* the keys to encrypt data.
* @param data the data that is encrypted. The encrypted data will overwrite
* the data that was supplied. */
- UA_StatusCode (*encrypt)(const UA_SecurityPolicy *securityPolicy,
- void *channelContext,
+ UA_StatusCode (*encrypt)(void *channelContext,
UA_ByteString *data) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
- /* Decrypts the given ciphertext in place using an asymmetric algorithm and
- * key.
+ /* Decrypts the given ciphertext in place. For asymmetric encryption, the
+ * block size for plaintext and cypher depend on the local private key.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the channelContext which contains information about
* the keys needed to decrypt the message.
* @param data the data to decrypt. The decryption is done in place. */
- UA_StatusCode (*decrypt)(const UA_SecurityPolicy *securityPolicy,
- void *channelContext,
+ UA_StatusCode (*decrypt)(void *channelContext,
UA_ByteString *data) UA_FUNC_ATTR_WARN_UNUSED_RESULT;
- /* Returns the length of the key used locally to encrypt messages in bits
+ /* Returns the length of the key used to encrypt messages in bits. For
+ * asymmetric encryption the key length is for the local private key.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the length of the local key. Returns 0 if no
* key length is known. */
- size_t (*getLocalKeyLength)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getLocalKeyLength)(const void *channelContext);
- /* Returns the length of the key used remotely to encrypt messages in bits
+ /* Returns the length of the key to encrypt messages in bits. Depends on the
+ * key (certificate) from the remote side.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the length of the remote key. Returns 0 if no
* key length is known. */
- size_t (*getRemoteKeyLength)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
-
- /* Returns the size of encrypted blocks used by the local encryption algorithm.
- *
- * @param securityPolicy the securityPolicy the function is invoked on.
- * @param channelContext the context to retrieve data from.
- * @return the size of encrypted blocks in bytes. Returns 0 if no key length is known.
- */
- size_t (*getLocalBlockSize)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getRemoteKeyLength)(const void *channelContext);
- /* Returns the size of encrypted blocks used by the remote encryption algorithm.
+ /* Returns the size of encrypted blocks for sending. For asymmetric
+ * encryption this depends on the remote key (certificate). For symmetric
+ * encryption the local and remote encrypted block size are identical.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the size of encrypted blocks in bytes. Returns 0 if no key length is known.
*/
- size_t (*getRemoteBlockSize)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getRemoteBlockSize)(const void *channelContext);
- /* Returns the size of plaintext blocks used by the local encryption algorithm.
+ /* Returns the size of plaintext blocks for sending. For asymmetric
+ * encryption this depends on the remote key (certificate). For symmetric
+ * encryption the local and remote plaintext block size are identical.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param channelContext the context to retrieve data from.
* @return the size of plaintext blocks in bytes. Returns 0 if no key length is known.
*/
- size_t (*getLocalPlainTextBlockSize)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
-
- /* Returns the size of plaintext blocks used by the remote encryption algorithm.
- *
- * @param securityPolicy the securityPolicy the function is invoked on.
- * @param channelContext the context to retrieve data from.
- * @return the size of plaintext blocks in bytes. Returns 0 if no key length is known.
- */
- size_t (*getRemotePlainTextBlockSize)(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext);
+ size_t (*getRemotePlainTextBlockSize)(const void *channelContext);
} UA_SecurityPolicyEncryptionAlgorithm;
typedef struct {
@@ -25741,7 +25219,6 @@ typedef struct {
typedef struct {
/* Generates a thumbprint for the specified certificate.
*
- * @param securityPolicy the securityPolicy the function is invoked on.
* @param certificate the certificate to make a thumbprint of.
* @param thumbprint an output buffer for the resulting thumbprint. Always
* has the length specified in the thumbprintLength in the
@@ -25751,7 +25228,7 @@ typedef struct {
UA_ByteString *thumbprint)
UA_FUNC_ATTR_WARN_UNUSED_RESULT;
- /* Compares the supplied certificate with the certificate in the endpoit context.
+ /* Compares the supplied certificate with the certificate in the endpoint context.
*
* @param securityPolicy the policy data that contains the certificate
* to compare to.
@@ -25772,26 +25249,22 @@ typedef struct {
* For information on what parameters this function receives in what situation,
* refer to the OPC UA specification 1.03 Part6 Table 33
*
- * @param securityPolicy the securityPolicy the function is invoked on.
+ * @param policyContext The context of the policy instance
* @param secret
* @param seed
* @param out an output to write the data to. The length defines the maximum
* number of output bytes that are produced. */
- UA_StatusCode (*generateKey)(const UA_SecurityPolicy *securityPolicy,
- const UA_ByteString *secret,
+ UA_StatusCode (*generateKey)(void *policyContext, const UA_ByteString *secret,
const UA_ByteString *seed, UA_ByteString *out)
UA_FUNC_ATTR_WARN_UNUSED_RESULT;
/* Random generator for generating nonces.
*
- * @param securityPolicy the securityPolicy this function is invoked on.
- * Example: myPolicy->generateNonce(myPolicy,
- * &outBuff);
+ * @param policyContext The context of the policy instance
* @param out pointer to a buffer to store the nonce in. Needs to be
* allocated by the caller. The buffer is filled with random
* data. */
- UA_StatusCode (*generateNonce)(const UA_SecurityPolicy *securityPolicy,
- UA_ByteString *out)
+ UA_StatusCode (*generateNonce)(void *policyContext, UA_ByteString *out)
UA_FUNC_ATTR_WARN_UNUSED_RESULT;
/*
@@ -25893,7 +25366,7 @@ struct UA_SecurityPolicy {
void *policyContext;
/* The policy uri that identifies the implemented algorithms */
- UA_ByteString policyUri;
+ UA_String policyUri;
/* The local certificate is specific for each SecurityPolicy since it
* depends on the used key length. */
@@ -25917,590 +25390,66 @@ struct UA_SecurityPolicy {
void (*clear)(UA_SecurityPolicy *policy);
};
-/* Gets the number of bytes that are needed by the encryption function in
- * addition to the length of the plaintext message. This is needed, since
- * most RSA encryption methods have their own padding mechanism included.
- * This makes the encrypted message larger than the plainText, so we need to
- * have enough room in the buffer for the overhead.
- *
- * @param securityPolicy the algorithms to use.
- * @param channelContext the retrieve data from.
- * @param maxEncryptionLength the maximum number of bytes that the data to
- * encrypt can be. */
-size_t
-UA_SecurityPolicy_getRemoteAsymEncryptionBufferLengthOverhead(const UA_SecurityPolicy *securityPolicy,
- const void *channelContext,
- size_t maxEncryptionLength);
-
-/* Gets the a pointer to the context of a security policy supported by the
- * server matched by the security policy uri.
- *
- * @param server the server context.
- * @param securityPolicyUri the security policy to get the context of. */
-UA_SecurityPolicy *
-UA_SecurityPolicy_getSecurityPolicyByUri(const UA_Server *server,
- const UA_ByteString *securityPolicyUri);
-
-_UA_END_DECLS
-
-
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/server_pubsub.h" ***********************************/
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
- * Copyright (c) 2019 Kalycito Infotech Private Limited
- */
-
-#ifndef UA_SERVER_PUBSUB_H
-#define UA_SERVER_PUBSUB_H
-
-
-_UA_BEGIN_DECLS
-
-#ifdef UA_ENABLE_PUBSUB
-
-/**
- * .. _pubsub:
- *
- * Publish/Subscribe
- * =================
- *
- * Work in progress!
- * This part will be a new chapter later.
- *
- * TODO: write general PubSub introduction
- *
- * The Publish/Subscribe (PubSub) extension for OPC UA enables fast and efficient
- * 1:m communication. The PubSub extension is protocol agnostic and can be used
- * with broker based protocols like MQTT and AMQP or brokerless implementations like UDP-Multicasting.
- *
- * The PubSub API uses the following scheme:
- *
- * 1. Create a configuration for the needed PubSub element.
- *
- * 2. Call the add[element] function and pass in the configuration.
- *
- * 3. The add[element] function returns the unique nodeId of the internally created element.
- *
- * Take a look on the PubSub Tutorials for mor details about the API usage.::
- *
- * +-----------+
- * | UA_Server |
- * +-----------+
- * | |
- * | |
- * | |
- * | | +----------------------+
- * | +--> UA_PubSubConnection | UA_Server_addPubSubConnection
- * | +----------------------+
- * | | |
- * | | | +----------------+
- * | | +----> UA_WriterGroup | UA_PubSubConnection_addWriterGroup
- * | | +----------------+
- * | | |
- * | | | +------------------+
- * | | +----> UA_DataSetWriter | UA_WriterGroup_addDataSetWriter +-+
- * | | +------------------+ |
- * | | |
- * | | +----------------+ | r
- * | +---------> UA_ReaderGroup | | e
- * | +----------------+ | f
- * | |
- * | +---------------------------+ |
- * +-------> UA_PubSubPublishedDataSet | UA_Server_addPublishedDataSet <-+
- * +---------------------------+
- * |
- * | +-----------------+
- * +----> UA_DataSetField | UA_PublishedDataSet_addDataSetField
- * +-----------------+
- *
- * PubSub compile flags
- * --------------------
- *
- * **UA_ENABLE_PUBSUB**
- * Enable the experimental OPC UA PubSub support. The option will include the PubSub UDP multicast plugin. Disabled by default.
- * **UA_ENABLE_PUBSUB_DELTAFRAMES**
- * The PubSub messages differentiate between keyframe (all published values contained) and deltaframe (only changed values contained) messages.
- * Deltaframe messages creation consumes some additional ressources and can be disabled with this flag. Disabled by default.
- * Compile the human-readable name of the StatusCodes into the binary. Disabled by default.
- * **UA_ENABLE_PUBSUB_INFORMATIONMODEL**
- * Enable the information model representation of the PubSub configuration. For more details take a look at the following section `PubSub Information Model Representation`. Disabled by default.
- *
- * PubSub Information Model Representation
- * ---------------------------------------
- * .. _pubsub_informationmodel:
- *
- * The complete PubSub configuration is available inside the information model.
- * The entry point is the node 'PublishSubscribe, located under the Server node.
- * The standard defines for PubSub no new Service set. The configuration can optionally
- * done over methods inside the information model. The information model representation
- * of the current PubSub configuration is generated automatically. This feature
- * can enabled/disable by changing the UA_ENABLE_PUBSUB_INFORMATIONMODEL option.
- *
- * Connections
- * -----------
- * The PubSub connections are the abstraction between the concrete transport protocol
- * and the PubSub functionality. It is possible to create multiple connections with
- * different transport protocols at runtime.
- *
- * Take a look on the PubSub Tutorials for mor details about the API usage.
- */
-
-typedef enum {
- UA_PUBSUB_PUBLISHERID_NUMERIC,
- UA_PUBSUB_PUBLISHERID_STRING
-} UA_PublisherIdType;
-
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP_ETF
-typedef struct {
- UA_Int32 socketPriority;
- UA_Boolean sotxtimeEnabled;
- /* SO_TXTIME-specific additional socket config */
- UA_Int32 sotxtimeDeadlinemode;
- UA_Int32 sotxtimeReceiveerrors;
-} UA_ETFConfiguration;
-#endif
-
-typedef struct {
- UA_String name;
- UA_Boolean enabled;
- UA_PublisherIdType publisherIdType;
- union { /* std: valid types UInt or String */
- UA_UInt32 numeric;
- UA_String string;
- } publisherId;
- UA_String transportProfileUri;
- UA_Variant address;
- size_t connectionPropertiesSize;
- UA_KeyValuePair *connectionProperties;
- UA_Variant connectionTransportSettings;
-
- /* This flag is 'read only' and is set internally based on the PubSub state. */
- UA_Boolean configurationFrozen;
-
-#ifdef UA_ENABLE_PUBSUB_ETH_UADP_ETF
- /* ETF related connection configuration - Not in PubSub specfication */
- UA_ETFConfiguration etfConfiguration;
-#endif
-} UA_PubSubConnectionConfig;
-
-UA_StatusCode UA_EXPORT
-UA_Server_addPubSubConnection(UA_Server *server,
- const UA_PubSubConnectionConfig *connectionConfig,
- UA_NodeId *connectionIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getPubSubConnectionConfig(UA_Server *server,
- const UA_NodeId connection,
- UA_PubSubConnectionConfig *config);
-
-/* Remove Connection, identified by the NodeId. Deletion of Connection
- * removes all contained WriterGroups and Writers. */
-UA_StatusCode UA_EXPORT
-UA_Server_removePubSubConnection(UA_Server *server, const UA_NodeId connection);
-
-/**
- * PublishedDataSets
- * -----------------
- * The PublishedDataSets (PDS) are containers for the published information. The
- * PDS contain the published variables and meta informations. The metadata is
- * commonly autogenerated or given as constant argument as part of the template
- * functions. The template functions are standard defined and intended for
- * configuration tools. You should normally create a empty PDS and call the
- * functions to add new fields. */
-
-/* The UA_PUBSUB_DATASET_PUBLISHEDITEMS has currently no additional members and
- * thus no dedicated config structure. */
-
-typedef enum {
- UA_PUBSUB_DATASET_PUBLISHEDITEMS,
- UA_PUBSUB_DATASET_PUBLISHEDEVENTS,
- UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE,
- UA_PUBSUB_DATASET_PUBLISHEDEVENTS_TEMPLATE,
-} UA_PublishedDataSetType;
-
-typedef struct {
- UA_DataSetMetaDataType metaData;
- size_t variablesToAddSize;
- UA_PublishedVariableDataType *variablesToAdd;
-} UA_PublishedDataItemsTemplateConfig;
-
-typedef struct {
- UA_NodeId eventNotfier;
- UA_ContentFilter filter;
-} UA_PublishedEventConfig;
-
-typedef struct {
- UA_DataSetMetaDataType metaData;
- UA_NodeId eventNotfier;
- size_t selectedFieldsSize;
- UA_SimpleAttributeOperand *selectedFields;
- UA_ContentFilter filter;
-} UA_PublishedEventTemplateConfig;
-
-/* Configuration structure for PublishedDataSet */
-typedef struct {
- UA_String name;
- UA_PublishedDataSetType publishedDataSetType;
- union {
- /* The UA_PUBSUB_DATASET_PUBLISHEDITEMS has currently no additional members
- * and thus no dedicated config structure.*/
- UA_PublishedDataItemsTemplateConfig itemsTemplate;
- UA_PublishedEventConfig event;
- UA_PublishedEventTemplateConfig eventTemplate;
- } config;
- /* This flag is 'read only' and is set internally based on the PubSub state. */
- UA_Boolean configurationFrozen;
-} UA_PublishedDataSetConfig;
-
-void UA_EXPORT
-UA_PublishedDataSetConfig_clear(UA_PublishedDataSetConfig *pdsConfig);
-
-typedef struct {
- UA_StatusCode addResult;
- size_t fieldAddResultsSize;
- UA_StatusCode *fieldAddResults;
- UA_ConfigurationVersionDataType configurationVersion;
-} UA_AddPublishedDataSetResult;
-
-UA_AddPublishedDataSetResult UA_EXPORT
-UA_Server_addPublishedDataSet(UA_Server *server,
- const UA_PublishedDataSetConfig *publishedDataSetConfig,
- UA_NodeId *pdsIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getPublishedDataSetConfig(UA_Server *server, const UA_NodeId pds,
- UA_PublishedDataSetConfig *config);
-
-/* Returns a deep copy of the DataSetMetaData for an specific PDS */
-UA_StatusCode UA_EXPORT
-UA_Server_getPublishedDataSetMetaData(UA_Server *server, const UA_NodeId pds,
- UA_DataSetMetaDataType *metaData);
-
-/* Remove PublishedDataSet, identified by the NodeId. Deletion of PDS removes
- * all contained and linked PDS Fields. Connected WriterGroups will be also
- * removed. */
-UA_StatusCode UA_EXPORT
-UA_Server_removePublishedDataSet(UA_Server *server, const UA_NodeId pds);
-
/**
- * DataSetFields
- * -------------
- * The description of published variables is named DataSetField. Each
- * DataSetField contains the selection of one information model node. The
- * DataSetField has additional parameters for the publishing, sampling and error
- * handling process. */
-
-typedef struct{
- UA_ConfigurationVersionDataType configurationVersion;
- UA_String fieldNameAlias;
- UA_Boolean promotedField;
- UA_PublishedVariableDataType publishParameters;
- /* non std. field */
- UA_Boolean staticValueSourceEnabled;
- UA_DataValue staticValueSource;
-} UA_DataSetVariableConfig;
-
-typedef enum {
- UA_PUBSUB_DATASETFIELD_VARIABLE,
- UA_PUBSUB_DATASETFIELD_EVENT
-} UA_DataSetFieldType;
-
-typedef struct {
- UA_DataSetFieldType dataSetFieldType;
- union {
- /* events need other config later */
- UA_DataSetVariableConfig variable;
- } field;
- /* This flag is 'read only' and is set internally based on the PubSub state. */
- UA_Boolean configurationFrozen;
-} UA_DataSetFieldConfig;
-
-void UA_EXPORT
-UA_DataSetFieldConfig_clear(UA_DataSetFieldConfig *dataSetFieldConfig);
-
-typedef struct {
- UA_StatusCode result;
- UA_ConfigurationVersionDataType configurationVersion;
-} UA_DataSetFieldResult;
-
-UA_DataSetFieldResult UA_EXPORT
-UA_Server_addDataSetField(UA_Server *server,
- const UA_NodeId publishedDataSet,
- const UA_DataSetFieldConfig *fieldConfig,
- UA_NodeId *fieldIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getDataSetFieldConfig(UA_Server *server, const UA_NodeId dsf,
- UA_DataSetFieldConfig *config);
-
-UA_DataSetFieldResult UA_EXPORT
-UA_Server_removeDataSetField(UA_Server *server, const UA_NodeId dsf);
-
-/**
- * WriterGroup
- * -----------
- * All WriterGroups are created within a PubSubConnection and automatically
- * deleted if the connection is removed. The WriterGroup is primary used as
- * container for :ref:`dsw` and network message settings. The WriterGroup can be
- * imagined as producer of the network messages. The creation of network
- * messages is controlled by parameters like the publish interval, which is e.g.
- * contained in the WriterGroup. */
-
-typedef enum {
- UA_PUBSUB_ENCODING_BINARY,
- UA_PUBSUB_ENCODING_JSON,
- UA_PUBSUB_ENCODING_UADP
-} UA_PubSubEncodingType;
-
-/**
- * WriterGroup
- * -----------
- * The message publishing can be configured for realtime requirements. The RT-levels
- * go along with different requirements. The below listed levels can be configured:
- *
- * UA_PUBSUB_RT_NONE -
- * ---> Description: Default "none-RT" Mode
- * ---> Requirements: -
- * ---> Restrictions: -
- * UA_PUBSUB_RT_DIRECT_VALUE_ACCESS (Preview - not implemented)
- * ---> Description: Normally, the latest value for each DataSetField is read out of the information model. Within this RT-mode, the
- * value source of each field configured as static pointer to an DataValue. The publish cycle won't use call the server read function.
- * ---> Requirements: All fields must be configured with a 'staticValueSource'.
- * ---> Restrictions: -
- * UA_PUBSUB_RT_FIXED_LENGTH (Preview - not implemented)
- * ---> Description: All DataSetFields have a known, non-changing length. The server will pre-generate some
- * buffers and use only memcopy operations to generate requested PubSub packages.
- * ---> Requirements: DataSetFields with variable size can't be used within this mode.
- * ---> Restrictions: The configuration must be frozen and changes are not allowed while the WriterGroup is 'Operational'.
- * UA_PUBSUB_RT_DETERMINISTIC (Preview - not implemented)
- * ---> Description: -
- * ---> Requirements: -
- * ---> Restrictions: -
- *
- * WARNING! For hard real time requirements the underlying system must be rt-capable.
- *
- */
-typedef enum {
- UA_PUBSUB_RT_NONE = 0,
- UA_PUBSUB_RT_DIRECT_VALUE_ACCESS = 1,
- UA_PUBSUB_RT_FIXED_SIZE = 2,
- UA_PUBSUB_RT_DETERMINISTIC = 4,
-} UA_PubSubRTLevel;
-
-typedef struct {
- UA_String name;
- UA_Boolean enabled;
- UA_UInt16 writerGroupId;
- UA_Duration publishingInterval;
- UA_Double keepAliveTime;
- UA_Byte priority;
- UA_MessageSecurityMode securityMode;
- UA_ExtensionObject transportSettings;
- UA_ExtensionObject messageSettings;
- size_t groupPropertiesSize;
- UA_KeyValuePair *groupProperties;
- UA_PubSubEncodingType encodingMimeType;
-
- /* non std. config parameter. maximum count of embedded DataSetMessage in
- * one NetworkMessage */
- UA_UInt16 maxEncapsulatedDataSetMessageCount;
- /* This flag is 'read only' and is set internally based on the PubSub state. */
- UA_Boolean configurationFrozen;
- /* non std. field */
- UA_PubSubRTLevel rtLevel;
-} UA_WriterGroupConfig;
-
-void UA_EXPORT
-UA_WriterGroupConfig_clear(UA_WriterGroupConfig *writerGroupConfig);
-
-/* Add a new WriterGroup to an existing Connection */
-UA_StatusCode UA_EXPORT
-UA_Server_addWriterGroup(UA_Server *server, const UA_NodeId connection,
- const UA_WriterGroupConfig *writerGroupConfig,
- UA_NodeId *writerGroupIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getWriterGroupConfig(UA_Server *server, const UA_NodeId writerGroup,
- UA_WriterGroupConfig *config);
-
-UA_StatusCode UA_EXPORT
-UA_Server_updateWriterGroupConfig(UA_Server *server, UA_NodeId writerGroupIdentifier,
- const UA_WriterGroupConfig *config);
-
-UA_StatusCode UA_EXPORT
-UA_Server_removeWriterGroup(UA_Server *server, const UA_NodeId writerGroup);
-
-UA_StatusCode UA_EXPORT
-UA_Server_freezeWriterGroupConfiguration(UA_Server *server, const UA_NodeId writerGroup);
-
-UA_StatusCode UA_EXPORT
-UA_Server_unfreezeWriterGroupConfiguration(UA_Server *server, const UA_NodeId writerGroup);
-
-UA_StatusCode UA_EXPORT
-UA_Server_setWriterGroupOperational(UA_Server *server, const UA_NodeId writerGroup);
-
-UA_StatusCode UA_EXPORT
-UA_Server_setWriterGroupDisabled(UA_Server *server, const UA_NodeId writerGroup);
-
-/**
- * .. _dsw:
- *
- * DataSetWriter
- * -------------
- * The DataSetWriters are the glue between the WriterGroups and the
- * PublishedDataSets. The DataSetWriter contain configuration parameters and
- * flags which influence the creation of DataSet messages. These messages are
- * encapsulated inside the network message. The DataSetWriter must be linked
- * with an existing PublishedDataSet and be contained within a WriterGroup. */
-
-typedef struct {
- UA_String name;
- UA_UInt16 dataSetWriterId;
- UA_DataSetFieldContentMask dataSetFieldContentMask;
- UA_UInt32 keyFrameCount;
- UA_ExtensionObject messageSettings;
- UA_ExtensionObject transportSettings;
- UA_String dataSetName;
- size_t dataSetWriterPropertiesSize;
- UA_KeyValuePair *dataSetWriterProperties;
- /* This flag is 'read only' and is set internally based on the PubSub state. */
- UA_Boolean configurationFrozen;
-} UA_DataSetWriterConfig;
-
-void UA_EXPORT
-UA_DataSetWriterConfig_clear(UA_DataSetWriterConfig *pdsConfig);
-
-/* Add a new DataSetWriter to a existing WriterGroup. The DataSetWriter must be
- * coupled with a PublishedDataSet on creation.
+ * PubSub SecurityPolicy
+ * ---------------------
*
- * Part 14, 7.1.5.2.1 defines: The link between the PublishedDataSet and
- * DataSetWriter shall be created when an instance of the DataSetWriterType is
- * created. */
-UA_StatusCode UA_EXPORT
-UA_Server_addDataSetWriter(UA_Server *server,
- const UA_NodeId writerGroup, const UA_NodeId dataSet,
- const UA_DataSetWriterConfig *dataSetWriterConfig,
- UA_NodeId *writerIdentifier);
-
-/* Returns a deep copy of the config */
-UA_StatusCode UA_EXPORT
-UA_Server_getDataSetWriterConfig(UA_Server *server, const UA_NodeId dsw,
- UA_DataSetWriterConfig *config);
-
-UA_StatusCode UA_EXPORT
-UA_Server_removeDataSetWriter(UA_Server *server, const UA_NodeId dsw);
-
-/**
- * DataSetReader
- * -------------
- * DataSetReader can receive NetworkMessages with the DataSet
- * of interest sent by the Publisher. DataSetReaders represent
- * the configuration necessary to receive and process DataSetMessages
- * on the Subscriber side */
-
-/* Parameters for PubSubSecurity */
-typedef struct {
- UA_Int32 securityMode; /* placeholder datatype 'MessageSecurityMode' */
- UA_String securityGroupId;
- size_t keyServersSize;
- UA_Int32 *keyServers;
-} UA_PubSubSecurityParameters;
-
-/* Parameters for PubSub DataSetReader Configuration */
-typedef struct {
- UA_String name;
- UA_Variant publisherId;
- UA_UInt16 writerGroupId;
- UA_UInt16 dataSetWriterId;
- UA_DataSetMetaDataType dataSetMetaData;
- UA_DataSetFieldContentMask dataSetFieldContentMask;
- UA_Double messageReceiveTimeout;
- UA_PubSubSecurityParameters securityParameters;
- UA_UadpDataSetReaderMessageDataType messageSettings;
- UA_ExtensionObject transportSettings;
- UA_TargetVariablesDataType subscribedDataSetTarget;
-} UA_DataSetReaderConfig;
-
-/* Update configuration to the dataSetReader */
-UA_StatusCode UA_EXPORT
-UA_Server_DataSetReader_updateConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
- UA_NodeId readerGroupIdentifier, const UA_DataSetReaderConfig *config);
-
-/* Get configuration of the dataSetReader */
-UA_StatusCode UA_EXPORT
-UA_Server_DataSetReader_getConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
- UA_DataSetReaderConfig *config);
-
-/* Return Status Code after creating TargetVariables in Subscriber AddressSpace
- * TargetVariables define a list of variable mappings between received DataSet fields
- * and the TargetVariables in the Subscriber AddressSpace */
-UA_StatusCode UA_EXPORT
-UA_Server_DataSetReader_createTargetVariables(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
- UA_TargetVariablesDataType* targetVariables);
-
-/* To Do:Implementation of SubscribedDataSetMirrorType
- * UA_StatusCode
- * A_PubSubDataSetReader_createDataSetMirror(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
- * UA_SubscribedDataSetMirrorDataType* mirror) */
-
-/**
- * ReaderGroup
- * -----------
- * All ReaderGroups are created within a PubSubConnection and automatically
- * deleted if the connection is removed. */
-
-/* ReaderGroup configuration */
-typedef struct {
- UA_String name;
- UA_PubSubSecurityParameters securityParameters;
-} UA_ReaderGroupConfig;
+ * For PubSub encryption, the message nonce is part of the (unencrypted)
+ * SecurityHeader. The nonce is required for the de- and encryption and has to
+ * be set in the channel context before de/encrypting. */
-/* Add DataSetReader to the ReaderGroup */
-UA_StatusCode UA_EXPORT
-UA_Server_addDataSetReader(UA_Server *server, UA_NodeId readerGroupIdentifier,
- const UA_DataSetReaderConfig *dataSetReaderConfig,
- UA_NodeId *readerIdentifier);
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+struct UA_PubSubSecurityPolicy;
+typedef struct UA_PubSubSecurityPolicy UA_PubSubSecurityPolicy;
-/* Remove DataSetReader from ReaderGroup */
-UA_StatusCode UA_EXPORT
-UA_Server_removeDataSetReader(UA_Server *server, UA_NodeId readerIdentifier);
+struct UA_PubSubSecurityPolicy {
+ UA_String policyUri; /* The policy uri that identifies the implemented
+ * algorithms */
+ UA_SecurityPolicySymmetricModule symmetricModule;
-/* To Do: Update Configuration of ReaderGroup
- * UA_StatusCode UA_EXPORT
- * UA_Server_ReaderGroup_updateConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
- * const UA_ReaderGroupConfig *config);
- */
+ /* Create the context for the WriterGroup. The keys and nonce can be NULL
+ * here. Then they have to be set before the first encryption or signing
+ * operation. */
+ UA_StatusCode
+ (*newContext)(void *policyContext,
+ const UA_ByteString *signingKey,
+ const UA_ByteString *encryptingKey,
+ const UA_ByteString *keyNonce,
+ void **wgContext);
+
+ /* Delete the WriterGroup SecurityPolicy context */
+ void (*deleteContext)(void *wgContext);
+
+ /* Set the keys and nonce for the WriterGroup. This is returned from the
+ * GetSecurityKeys method of a Security Key Service (SKS). Otherwise, set
+ * manually via out-of-band transmission of the keys. */
+ UA_StatusCode
+ (*setSecurityKeys)(void *wgContext,
+ const UA_ByteString *signingKey,
+ const UA_ByteString *encryptingKey,
+ const UA_ByteString *keyNonce)
+ UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-/* Get configuraiton of ReaderGroup */
-UA_StatusCode UA_EXPORT
-UA_Server_ReaderGroup_getConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
- UA_ReaderGroupConfig *config);
+ /* The nonce is contained in the NetworkMessage SecurityHeader. Set before
+ * each en-/decryption step. */
+ UA_StatusCode
+ (*setMessageNonce)(void *wgContext,
+ const UA_ByteString *nonce)
+ UA_FUNC_ATTR_WARN_UNUSED_RESULT;
-/* Add ReaderGroup to the created connection */
-UA_StatusCode UA_EXPORT
-UA_Server_addReaderGroup(UA_Server *server, UA_NodeId connectionIdentifier,
- const UA_ReaderGroupConfig *readerGroupConfig,
- UA_NodeId *readerGroupIdentifier);
+ const UA_Logger *logger;
-/* Remove ReaderGroup from connection */
-UA_StatusCode UA_EXPORT
-UA_Server_removeReaderGroup(UA_Server *server, UA_NodeId groupIdentifier);
+ /* Deletes the dynamic content of the policy */
+ void (*clear)(UA_PubSubSecurityPolicy *policy);
+ void *policyContext;
+};
-#endif /* UA_ENABLE_PUBSUB */
+#endif
_UA_END_DECLS
-#endif /* UA_SERVER_PUBSUB_H */
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/pubsub.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/pubsub.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -26530,6 +25479,12 @@ _UA_BEGIN_DECLS
* with different network implementations like UDP, MQTT, AMQP. The channel
* provides basis services like send, regist, unregist, receive, close. */
+struct UA_PubSubConnectionConfig;
+typedef struct UA_PubSubConnectionConfig UA_PubSubConnectionConfig;
+
+struct UA_PubSubChannel;
+typedef struct UA_PubSubChannel UA_PubSubChannel;
+
typedef enum {
UA_PUBSUB_CHANNEL_RDY,
UA_PUBSUB_CHANNEL_PUB,
@@ -26539,8 +25494,10 @@ typedef enum {
UA_PUBSUB_CHANNEL_CLOSED
} UA_PubSubChannelState;
-struct UA_PubSubChannel;
-typedef struct UA_PubSubChannel UA_PubSubChannel;
+typedef UA_StatusCode
+(*UA_PubSubReceiveCallback)(UA_PubSubChannel *channel,
+ void *callbackContext,
+ const UA_ByteString *buffer);
/* Interface structure between network plugin and internal implementation */
struct UA_PubSubChannel {
@@ -26558,15 +25515,18 @@ struct UA_PubSubChannel {
const UA_ByteString *buf);
/* Register to an specified message source, e.g. multicast group or topic. Callback is used for mqtt. */
- UA_StatusCode (*regist)(UA_PubSubChannel * channel, UA_ExtensionObject *transportSettings,
+ UA_StatusCode (*regist)(UA_PubSubChannel *channel, UA_ExtensionObject *transportSettings,
void (*callback)(UA_ByteString *encodedBuffer, UA_ByteString *topic));
/* Remove subscription to an specified message source, e.g. multicast group or topic */
- UA_StatusCode (*unregist)(UA_PubSubChannel * channel, UA_ExtensionObject *transportSettings);
+ UA_StatusCode (*unregist)(UA_PubSubChannel *channel, UA_ExtensionObject *transportSettings);
/* Receive messages. A regist to the message source is needed before. */
- UA_StatusCode (*receive)(UA_PubSubChannel * channel, UA_ByteString *,
- UA_ExtensionObject *transportSettings, UA_UInt32 timeout);
+ UA_StatusCode (*receive)(UA_PubSubChannel *channel,
+ UA_ExtensionObject *transportSettings,
+ UA_PubSubReceiveCallback receiveCallback,
+ void *receiveCallbackContext,
+ UA_UInt32 timeout);
/* Closing the connection and implicit free of the channel structures. */
UA_StatusCode (*close)(UA_PubSubChannel *channel);
@@ -26577,47 +25537,49 @@ struct UA_PubSubChannel {
/**
* The UA_PubSubTransportLayer is used for the creation of new connections.
- * Whenever on runtime a new connection is request, the internal PubSub
- * implementation call * the 'createPubSubChannel' function. The
+ * Whenever in runtime a new connection is requested, the internal PubSub
+ * implementation calls the 'createPubSubChannel' function. The
* 'transportProfileUri' contains the standard defined transport profile
* information and is used to identify the type of connections which can be
* created by the TransportLayer. The server config contains a list of
* UA_PubSubTransportLayer. Take a look in the tutorial_pubsub_connection to get
- * informations about the TransportLayer handling. */
+ * information about the TransportLayer handling. */
typedef struct {
UA_String transportProfileUri;
UA_PubSubChannel *(*createPubSubChannel)(UA_PubSubConnectionConfig *connectionConfig);
} UA_PubSubTransportLayer;
-/**
- * The UA_ServerConfig_addPubSubTransportLayer is used to add a transport layer
- * to the server configuration. The list memory is allocated and will be freed
- * with UA_PubSubManager_delete.
- *
- * .. note:: If the UA_String transportProfileUri was dynamically allocated
- * the memory has to be freed when no longer required.
- *
- * .. note:: This has to be done before the server is started with UA_Server_run. */
-UA_StatusCode UA_EXPORT
-UA_ServerConfig_addPubSubTransportLayer(UA_ServerConfig *config,
- UA_PubSubTransportLayer *pubsubTransportLayer);
-
#endif /* UA_ENABLE_PUBSUB */
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/deps/ziptree.h" ***********************************/
+/**** amalgamated original file "/deps/ziptree.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
- * Copyright 2018 (c) Julius Pfrommer
+ * Copyright 2018, 2021 (c) Julius Pfrommer
*/
+#include <stddef.h>
+
+#ifdef _MSC_VER
+# define ZIP_INLINE __inline
+#else
+# define ZIP_INLINE inline
+#endif
+
+/* Prevent warnings on unused static inline functions for some compilers */
+#if defined(__GNUC__) || defined(__clang__)
+# define ZIP_UNUSED __attribute__((unused))
+#else
+# define ZIP_UNUSED
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -26631,37 +25593,70 @@ extern "C" {
* ZIP_FIND will only return the topmost of these elements in the tree.
*
* The ZIP_ENTRY definitions are to be contained in the tree entries themselves.
- * Use ZIP_PROTTYPE to define the signature of the zip tree and ZIP_IMPL (in a
- * .c compilation unit) for the method implementations.
- *
- * Zip trees are a probabilistic data structure. Entries are assigned a
- * (nonzero) rank k with probability 1/2^{k+1}. This header file does not assume
- * a specific random number generator. So the rank must be given when an entry
- * is inserted. A fast way (with a single call to a pseudo random generator) to
- * compute the rank is with ZIP_FFS32(random()). The ZIP_FFS32 returns the least
- * significant nonzero bit of a 32bit number. */
+ * Use ZIP_FUNCTIONS to define the signature of the zip tree functions. */
#define ZIP_HEAD(name, type) \
struct name { \
- struct type *zip_root; \
+ struct type *root; \
}
-#define ZIP_INIT(head) do { (head)->zip_root = NULL; } while (0)
-#define ZIP_ROOT(head) (head)->zip_root
-#define ZIP_EMPTY(head) (ZIP_ROOT(head) == NULL)
-
#define ZIP_ENTRY(type) \
struct { \
- struct type *zip_left; \
- struct type *zip_right; \
+ struct type *left; \
+ struct type *right; \
unsigned char rank; \
}
-#define ZIP_LEFT(elm, field) (elm)->field.zip_left
-#define ZIP_RIGHT(elm, field) (elm)->field.zip_right
+enum ZIP_CMP {
+ ZIP_CMP_LESS = -1,
+ ZIP_CMP_EQ = 0,
+ ZIP_CMP_MORE = 1
+};
+
+typedef enum ZIP_CMP (*zip_cmp_cb)(const void *key1, const void *key2);
+
+#define ZIP_INIT(head) do { (head)->root = NULL; } while (0)
+#define ZIP_ROOT(head) (head)->root
+#define ZIP_LEFT(elm, field) (elm)->field.left
+#define ZIP_RIGHT(elm, field) (elm)->field.right
#define ZIP_RANK(elm, field) (elm)->field.rank
-/* Shortcuts */
+/* Internal definitions. Don't use directly. */
+
+typedef void (*__zip_iter_cb)(void *elm, void *context);
+
+void *
+__ZIP_INSERT(zip_cmp_cb cmp, unsigned short fieldoffset,
+ unsigned short keyoffset, void *root, void *elm);
+
+void *
+__ZIP_REMOVE(zip_cmp_cb cmp, unsigned short fieldoffset,
+ unsigned short keyoffset, void *root, void *elm);
+
+void *
+__ZIP_FIND(zip_cmp_cb cmp, unsigned short fieldoffset,
+ unsigned short keyoffset, void *root,
+ const void *key);
+
+void
+__ZIP_ITER(unsigned short fieldoffset, __zip_iter_cb cb,
+ void *context, void *elm);
+
+void * __ZIP_MIN(unsigned short fieldoffset, void *elm);
+void * __ZIP_MAX(unsigned short fieldoffset, void *elm);
+
+/* Zip trees are a probabilistic data structure. Entries are assigned a
+ * (non-negative) rank k with probability 1/2^{k+1}. A uniformly sampled random
+ * number has to be supplied with the insert method. __ZIP_FFS32 extracts from
+ * it least significant nonzero bit of a 32bit number. This then has the correct
+ * distribution. */
+unsigned char __ZIP_FFS32(unsigned int v);
+
+/* Generate zip tree method definitions with the ZIP_FUNCTIONS macro. The
+ * comparison method "cmp" defined for every zip tree has the signature
+ *
+ * enum ZIP_CMP cmpDateTime(const keytype *a, const keytype *b); */
+
#define ZIP_INSERT(name, head, elm, rank) name##_ZIP_INSERT(head, elm, rank)
#define ZIP_REMOVE(name, head, elm) name##_ZIP_REMOVE(head, elm)
#define ZIP_FIND(name, head, key) name##_ZIP_FIND(head, key)
@@ -26669,186 +25664,50 @@ struct { \
#define ZIP_MAX(name, head) name##_ZIP_MAX(head)
#define ZIP_ITER(name, head, cb, d) name##_ZIP_ITER(head, cb, d)
-/* Zip tree method prototypes */
-#define ZIP_PROTTYPE(name, type, keytype) \
-void name##_ZIP_INSERT(struct name *head, struct type *elm, unsigned char rank); \
-void name##_ZIP_REMOVE(struct name *head, struct type *elm); \
-struct type *name##_ZIP_FIND(struct name *head, const keytype *key); \
-struct type *name##_ZIP_MIN(struct name *head); \
-struct type *name##_ZIP_MAX(struct name *head); \
-typedef void (*name##_cb)(struct type *elm, void *data); \
-void name##_ZIP_ITER(struct name *head, name##_cb cb, void *data); \
-
-/* The comparison method "cmp" defined for every zip tree has the signature
- *
- * enum ZIP_CMP cmpDateTime(const keytype *a, const keytype *b);
- *
- * The entries need an absolute ordering. So ZIP_CMP_EQ must only be returned if
- * a and b point to the same memory. (E.g. assured by unique identifiers.) */
-enum ZIP_CMP {
- ZIP_CMP_LESS = -1,
- ZIP_CMP_EQ = 0,
- ZIP_CMP_MORE = 1
-};
-
-/* Find the position of the first bit in an unsigned 32bit integer */
-#ifdef _MSC_VER
-static __inline
-#else
-static inline
-#endif
-unsigned char
-ZIP_FFS32(unsigned int v) {
- unsigned int t = 1;
- unsigned char r = 1;
- if(v == 0) return 0;
- while((v & t) == 0) {
- t = t << 1; r++;
- }
- return r;
-}
-
-/* Zip tree method implementations */
-#define ZIP_IMPL(name, type, field, keytype, keyfield, cmp) \
-static struct type * \
-__##name##_ZIP_INSERT(struct type *root, struct type *elm) { \
- if(!root) { \
- ZIP_LEFT(elm, field) = NULL; \
- ZIP_RIGHT(elm, field) = NULL; \
- return elm; \
- } \
- if((cmp)(&(elm)->keyfield, &(root)->keyfield) == ZIP_CMP_LESS) { \
- if(__##name##_ZIP_INSERT(ZIP_LEFT(root, field), elm) == elm) { \
- if(ZIP_RANK(elm, field) < ZIP_RANK(root, field)) { \
- ZIP_LEFT(root, field) = elm; \
- } else { \
- ZIP_LEFT(root, field) = ZIP_RIGHT(elm, field); \
- ZIP_RIGHT(elm, field) = root; \
- return elm; \
- } \
- } \
- } else { \
- if(__##name##_ZIP_INSERT(ZIP_RIGHT(root, field), elm) == elm) { \
- if(ZIP_RANK(elm, field) <= ZIP_RANK(root, field)) { \
- ZIP_RIGHT(root, field) = elm; \
- } else { \
- ZIP_RIGHT(root, field) = ZIP_LEFT(elm, field); \
- ZIP_LEFT(elm, field) = root; \
- return elm; \
- } \
- } \
- } \
- return root; \
-} \
- \
-void \
+#define ZIP_FUNCTIONS(name, type, field, keytype, keyfield, cmp) \
+ZIP_UNUSED static ZIP_INLINE void \
name##_ZIP_INSERT(struct name *head, struct type *elm, \
- unsigned char rank) { \
- ZIP_RANK(elm, field) = rank; \
- ZIP_ROOT(head) = __##name##_ZIP_INSERT(ZIP_ROOT(head), elm); \
-} \
- \
-static struct type * \
-__##name##ZIP(struct type *x, struct type *y) { \
- if(!x) return y; \
- if(!y) return x; \
- if(ZIP_RANK(x, field) < ZIP_RANK(y, field)) { \
- ZIP_LEFT(y, field) = __##name##ZIP(x, ZIP_LEFT(y, field)); \
- return y; \
- } \
- ZIP_RIGHT(x, field) = __##name##ZIP(ZIP_RIGHT(x, field), y); \
- return x; \
+ unsigned int r) { \
+ ZIP_RANK(elm, field) = __ZIP_FFS32(r); \
+ ZIP_ROOT(head) = (struct type*) \
+ __ZIP_INSERT(cmp, offsetof(struct type, field), \
+ offsetof(struct type, keyfield), \
+ ZIP_ROOT(head), elm); \
} \
\
-/* Modified from the original algorithm. Allow multiple */ \
-/* elements with the same key. */ \
-static struct type * \
-__##name##_ZIP_REMOVE(struct type *root, struct type *elm) { \
- if(root == elm) \
- return __##name##ZIP(ZIP_LEFT(root, field), \
- ZIP_RIGHT(root, field)); \
- enum ZIP_CMP eq = (cmp)(&(elm)->keyfield, &(root)->keyfield); \
- struct type *left = ZIP_LEFT(root, field); \
- struct type *right = ZIP_RIGHT(root, field); \
- if(eq == ZIP_CMP_LESS) { \
- if(elm == left) \
- ZIP_LEFT(root, field) = \
- __##name##ZIP(ZIP_LEFT(left, field), \
- ZIP_RIGHT(left, field)); \
- else if(left) \
- __##name##_ZIP_REMOVE(left, elm); \
- } else if(eq == ZIP_CMP_MORE) { \
- if(elm == right) \
- ZIP_RIGHT(root, field) = \
- __##name##ZIP(ZIP_LEFT(right, field), \
- ZIP_RIGHT(right, field)); \
- else if(right) \
- __##name##_ZIP_REMOVE(right, elm); \
- } else { /* ZIP_CMP_EQ, but root != elm */ \
- if(right) \
- ZIP_RIGHT(root, field) = __##name##_ZIP_REMOVE(right, elm); \
- if(left) \
- ZIP_LEFT(root, field) = __##name##_ZIP_REMOVE(left, elm); \
- } \
- return root; \
-} \
- \
-void \
+ZIP_UNUSED static ZIP_INLINE void \
name##_ZIP_REMOVE(struct name *head, struct type *elm) { \
- ZIP_ROOT(head) = __##name##_ZIP_REMOVE(ZIP_ROOT(head), elm); \
-} \
- \
-static struct type * \
-__##name##_ZIP_FIND(struct type *root, const keytype *key) { \
- if(!root) \
- return NULL; \
- enum ZIP_CMP eq = (cmp)(key, &(root)->keyfield); \
- if(eq == ZIP_CMP_EQ) { \
- return root; \
- } \
- if(eq == ZIP_CMP_LESS) { \
- return __##name##_ZIP_FIND(ZIP_LEFT(root, field), key); \
- } \
- return __##name##_ZIP_FIND(ZIP_RIGHT(root, field), key); \
+ ZIP_ROOT(head) = (struct type*) \
+ __ZIP_REMOVE(cmp, offsetof(struct type, field), \
+ offsetof(struct type, keyfield), \
+ ZIP_ROOT(head), elm); \
} \
\
-struct type * \
+ZIP_UNUSED static ZIP_INLINE struct type * \
name##_ZIP_FIND(struct name *head, const keytype *key) { \
- return __##name##_ZIP_FIND(ZIP_ROOT(head), key); \
+ return (struct type*)__ZIP_FIND(cmp, offsetof(struct type, field), \
+ offsetof(struct type, keyfield), \
+ ZIP_ROOT(head), key); \
} \
\
-struct type * \
+ZIP_UNUSED static ZIP_INLINE struct type * \
name##_ZIP_MIN(struct name *head) { \
- struct type *cur = ZIP_ROOT(head); \
- if(!cur) return NULL; \
- while(ZIP_LEFT(cur, field)) { \
- cur = ZIP_LEFT(cur, field); \
- } \
- return cur; \
+ return (struct type *)__ZIP_MIN(offsetof(struct type, field), \
+ ZIP_ROOT(head)); \
} \
\
-struct type * \
+ZIP_UNUSED static ZIP_INLINE struct type * \
name##_ZIP_MAX(struct name *head) { \
- struct type *cur = ZIP_ROOT(head); \
- if(!cur) return NULL; \
- while(ZIP_RIGHT(cur, field)) { \
- cur = ZIP_RIGHT(cur, field); \
- } \
- return cur; \
+ return (struct type *)__ZIP_MAX(offsetof(struct type, field), \
+ ZIP_ROOT(head)); \
} \
\
-static void \
-__##name##_ZIP_ITER(struct type *elm, name##_cb cb, void *data) { \
- if(!elm) \
- return; \
- __##name##_ZIP_ITER(ZIP_LEFT(elm, field), cb, data); \
- __##name##_ZIP_ITER(ZIP_RIGHT(elm, field), cb, data); \
- cb(elm, data); \
-} \
+typedef void (*name##_cb)(struct type *elm, void *context); \
\
-void \
-name##_ZIP_ITER(struct name *head, name##_cb cb, void *data) { \
- __##name##_ZIP_ITER(ZIP_ROOT(head), cb, data); \
+ZIP_UNUSED static ZIP_INLINE void \
+name##_ZIP_ITER(struct name *head, name##_cb cb, void *context) { \
+ __ZIP_ITER(offsetof(struct type, field), (__zip_iter_cb)cb, \
+ context, ZIP_ROOT(head)); \
}
#ifdef __cplusplus
@@ -26856,13 +25715,66 @@ name##_ZIP_ITER(struct name *head, name##_cb cb, void *data) { \
#endif
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/nodestore.h" ***********************************/
+/**** amalgamated original file "/deps/aa_tree.h" ****/
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2020 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum aa_cmp {
+ AA_CMP_LESS = -1,
+ AA_CMP_EQ = 0,
+ AA_CMP_MORE = 1
+};
+
+struct aa_entry {
+ struct aa_entry *left;
+ struct aa_entry *right;
+ unsigned int level;
+};
+
+struct aa_head {
+ struct aa_entry *root;
+ enum aa_cmp (*cmp)(const void* a, const void* b);
+ /* Offset from the container element to the aa_entry and the key */
+ unsigned int entry_offset;
+ unsigned int key_offset;
+};
+
+/* The AA-Tree allows duplicate entries. The first matching key is returned in
+ * aa_find. */
+
+void aa_init(struct aa_head *head,
+ enum aa_cmp (*cmp)(const void*, const void*),
+ unsigned int entry_offset, unsigned int key_offset);
+void aa_insert(struct aa_head *head, void *elem);
+void aa_remove(struct aa_head *head, void *elem);
+void * aa_find(const struct aa_head *head, const void *key);
+void * aa_min(const struct aa_head *head);
+void * aa_max(const struct aa_head *head);
+void * aa_next(const struct aa_head *head, const void *elem);
+void * aa_prev(const struct aa_head *head, const void *elem);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+/**** amalgamated original file "/include/open62541/plugin/nodestore.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
- * Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
+ * Copyright 2017, 2021 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
* Copyright 2017 (c) Julian Grothoff
* Copyright 2017 (c) Stefan Profanter, fortiss GmbH
*/
@@ -26879,8 +25791,9 @@ name##_ZIP_ITER(struct name *head, name##_cb cb, void *data) { \
_UA_BEGIN_DECLS
/* Forward declaration */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
+#ifdef UA_ENABLE_SUBSCRIPTIONS
struct UA_MonitoredItem;
+typedef struct UA_MonitoredItem UA_MonitoredItem;
#endif
/**
@@ -26910,6 +25823,272 @@ struct UA_MonitoredItem;
* sections are purely informational so that users may have a clear mental
* model of the underlying representation.
*
+ * .. _node-lifecycle:
+ *
+ * Node Lifecycle: Constructors, Destructors and Node Contexts
+ * -----------------------------------------------------------
+ *
+ * To finalize the instantiation of a node, a (user-defined) constructor
+ * callback is executed. There can be both a global constructor for all nodes
+ * and node-type constructor specific to the TypeDefinition of the new node
+ * (attached to an ObjectTypeNode or VariableTypeNode).
+ *
+ * In the hierarchy of ObjectTypes and VariableTypes, only the constructor of
+ * the (lowest) type defined for the new node is executed. Note that every
+ * Object and Variable can have only one ``isTypeOf`` reference. But type-nodes
+ * can technically have several ``hasSubType`` references to implement multiple
+ * inheritance. Issues of (multiple) inheritance in the constructor need to be
+ * solved by the user.
+ *
+ * When a node is destroyed, the node-type destructor is called before the
+ * global destructor. So the overall node lifecycle is as follows:
+ *
+ * 1. Global Constructor (set in the server config)
+ * 2. Node-Type Constructor (for VariableType or ObjectTypes)
+ * 3. (Usage-period of the Node)
+ * 4. Node-Type Destructor
+ * 5. Global Destructor
+ *
+ * The constructor and destructor callbacks can be set to ``NULL`` and are not
+ * used in that case. If the node-type constructor fails, the global destructor
+ * will be called before removing the node. The destructors are assumed to never
+ * fail.
+ *
+ * Every node carries a user-context and a constructor-context pointer. The
+ * user-context is used to attach custom data to a node. But the (user-defined)
+ * constructors and destructors may replace the user-context pointer if they
+ * wish to do so. The initial value for the constructor-context is ``NULL``.
+ * When the ``AddNodes`` service is used over the network, the user-context
+ * pointer of the new node is also initially set to ``NULL``.
+ *
+ * Global Node Lifecycle
+ * ~~~~~~~~~~~~~~~~~~~~~~
+ * Global constructor and destructor callbacks used for every node type.
+ * To be set in the server config.
+ */
+
+typedef struct {
+ /* Can be NULL. May replace the nodeContext */
+ UA_StatusCode (*constructor)(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionContext,
+ const UA_NodeId *nodeId, void **nodeContext);
+
+ /* Can be NULL. The context cannot be replaced since the node is destroyed
+ * immediately afterwards anyway. */
+ void (*destructor)(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionContext,
+ const UA_NodeId *nodeId, void *nodeContext);
+
+ /* Can be NULL. Called during recursive node instantiation. While mandatory
+ * child nodes are automatically created if not already present, optional child
+ * nodes are not. This callback can be used to define whether an optional child
+ * node should be created.
+ *
+ * @param server The server executing the callback
+ * @param sessionId The identifier of the session
+ * @param sessionContext Additional data attached to the session in the
+ * access control layer
+ * @param sourceNodeId Source node from the type definition. If the new node
+ * shall be created, it will be a copy of this node.
+ * @param targetParentNodeId Parent of the potential new child node
+ * @param referenceTypeId Identifies the reference type which that the parent
+ * node has to the new node.
+ * @return Return UA_TRUE if the child node shall be instantiated,
+ * UA_FALSE otherwise. */
+ UA_Boolean (*createOptionalChild)(UA_Server *server,
+ const UA_NodeId *sessionId,
+ void *sessionContext,
+ const UA_NodeId *sourceNodeId,
+ const UA_NodeId *targetParentNodeId,
+ const UA_NodeId *referenceTypeId);
+
+ /* Can be NULL. Called when a node is to be copied during recursive
+ * node instantiation. Allows definition of the NodeId for the new node.
+ * If the callback is set to NULL or the resulting NodeId is UA_NODEID_NUMERIC(X,0)
+ * an unused nodeid in namespace X will be used. E.g. passing UA_NODEID_NULL will
+ * result in a NodeId in namespace 0.
+ *
+ * @param server The server executing the callback
+ * @param sessionId The identifier of the session
+ * @param sessionContext Additional data attached to the session in the
+ * access control layer
+ * @param sourceNodeId Source node of the copy operation
+ * @param targetParentNodeId Parent node of the new node
+ * @param referenceTypeId Identifies the reference type which that the parent
+ * node has to the new node. */
+ UA_StatusCode (*generateChildNodeId)(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionContext,
+ const UA_NodeId *sourceNodeId,
+ const UA_NodeId *targetParentNodeId,
+ const UA_NodeId *referenceTypeId,
+ UA_NodeId *targetNodeId);
+} UA_GlobalNodeLifecycle;
+
+/**
+ * Node Type Lifecycle
+ * ~~~~~~~~~~~~~~~~~~~
+ * Constructor and destructors for specific object and variable types. */
+typedef struct {
+ /* Can be NULL. May replace the nodeContext */
+ UA_StatusCode (*constructor)(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionContext,
+ const UA_NodeId *typeNodeId, void *typeNodeContext,
+ const UA_NodeId *nodeId, void **nodeContext);
+
+ /* Can be NULL. May replace the nodeContext. */
+ void (*destructor)(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionContext,
+ const UA_NodeId *typeNodeId, void *typeNodeContext,
+ const UA_NodeId *nodeId, void **nodeContext);
+} UA_NodeTypeLifecycle;
+
+/**
+ * ReferenceType Bitfield Representation
+ * -------------------------------------
+ * ReferenceTypes have an alternative represention as an index into a bitfield
+ * for fast comparison. The index is generated when the corresponding
+ * ReferenceTypeNode is added. By bounding the number of ReferenceTypes that can
+ * exist in the server, the bitfield can represent a set of an combination of
+ * ReferenceTypes.
+ *
+ * Every ReferenceTypeNode contains a bitfield with the set of all its subtypes.
+ * This speeds up the Browse services substantially.
+ *
+ * The following ReferenceTypes have a fixed index. The NS0 bootstrapping
+ * creates these ReferenceTypes in-order. */
+#define UA_REFERENCETYPEINDEX_REFERENCES 0
+#define UA_REFERENCETYPEINDEX_HASSUBTYPE 1
+#define UA_REFERENCETYPEINDEX_AGGREGATES 2
+#define UA_REFERENCETYPEINDEX_HIERARCHICALREFERENCES 3
+#define UA_REFERENCETYPEINDEX_NONHIERARCHICALREFERENCES 4
+#define UA_REFERENCETYPEINDEX_HASCHILD 5
+#define UA_REFERENCETYPEINDEX_ORGANIZES 6
+#define UA_REFERENCETYPEINDEX_HASEVENTSOURCE 7
+#define UA_REFERENCETYPEINDEX_HASMODELLINGRULE 8
+#define UA_REFERENCETYPEINDEX_HASENCODING 9
+#define UA_REFERENCETYPEINDEX_HASDESCRIPTION 10
+#define UA_REFERENCETYPEINDEX_HASTYPEDEFINITION 11
+#define UA_REFERENCETYPEINDEX_GENERATESEVENT 12
+#define UA_REFERENCETYPEINDEX_HASPROPERTY 13
+#define UA_REFERENCETYPEINDEX_HASCOMPONENT 14
+#define UA_REFERENCETYPEINDEX_HASNOTIFIER 15
+#define UA_REFERENCETYPEINDEX_HASORDEREDCOMPONENT 16
+#define UA_REFERENCETYPEINDEX_HASINTERFACE 17
+
+/* The maximum number of ReferrenceTypes. Must be a multiple of 32. */
+#define UA_REFERENCETYPESET_MAX 128
+typedef struct { UA_UInt32 bits[UA_REFERENCETYPESET_MAX / 32]; } UA_ReferenceTypeSet;
+
+static UA_INLINE void
+UA_ReferenceTypeSet_init(UA_ReferenceTypeSet *set) {
+ memset(set, 0, sizeof(UA_ReferenceTypeSet));
+}
+
+static UA_INLINE void
+UA_ReferenceTypeSet_any(UA_ReferenceTypeSet *set) {
+ memset(set, -1, sizeof(UA_ReferenceTypeSet));
+}
+
+static UA_INLINE UA_ReferenceTypeSet
+UA_REFTYPESET(UA_Byte index) {
+ UA_Byte i = index / 32, j = index % 32;
+ UA_ReferenceTypeSet set;
+ UA_ReferenceTypeSet_init(&set);
+ set.bits[i] |= ((UA_UInt32)1) << j;
+ return set;
+}
+
+static UA_INLINE UA_ReferenceTypeSet
+UA_ReferenceTypeSet_union(const UA_ReferenceTypeSet setA,
+ const UA_ReferenceTypeSet setB) {
+ UA_ReferenceTypeSet set;
+ for(size_t i = 0; i < UA_REFERENCETYPESET_MAX / 32; i++)
+ set.bits[i] = setA.bits[i] | setB.bits[i];
+ return set;
+}
+
+static UA_INLINE UA_Boolean
+UA_ReferenceTypeSet_contains(const UA_ReferenceTypeSet *set, UA_Byte index) {
+ UA_Byte i = index / 32, j = index % 32;
+ return !!(set->bits[i] & (((UA_UInt32)1) << j));
+}
+
+/**
+ * Node Pointer
+ * ============
+ *
+ * The "native" format for reference between nodes is the ExpandedNodeId. That
+ * is, references can also point to external servers. In practice, most
+ * references point to local nodes using numerical NodeIds from the
+ * standard-defined namespace zero. In order to save space (and time),
+ * pointer-tagging is used for compressed "NodePointer" representations.
+ * Numerical NodeIds are immediately contained in the pointer. Full NodeIds and
+ * ExpandedNodeIds are behind a pointer indirection. If the Nodestore supports
+ * it, a NodePointer can also be an actual pointer to the target node.
+ *
+ * Depending on the processor architecture, some numerical NodeIds don't fit
+ * into an immediate encoding and are kept as pointers. ExpandedNodeIds may be
+ * internally translated to "normal" NodeIds. Use the provided functions to
+ * generate NodePointers that fit the assumptions for the local architecture. */
+
+/* Forward declaration. All node structures begin with the NodeHead. */
+struct UA_NodeHead;
+typedef struct UA_NodeHead UA_NodeHead;
+
+/* Tagged Pointer structure. */
+typedef union {
+ uintptr_t immediate; /* 00: Small numerical NodeId */
+ const UA_NodeId *id; /* 01: Pointer to NodeId */
+ const UA_ExpandedNodeId *expandedId; /* 10: Pointer to ExternalNodeId */
+ const UA_NodeHead *node; /* 11: Pointer to a node */
+} UA_NodePointer;
+
+/* Sets the pointer to an immediate NodeId "ns=0;i=0" similar to a freshly
+ * initialized UA_NodeId */
+static UA_INLINE void
+UA_NodePointer_init(UA_NodePointer *np) { np->immediate = 0; }
+
+/* NodeId and ExpandedNodeId targets are freed */
+void UA_EXPORT
+UA_NodePointer_clear(UA_NodePointer *np);
+
+/* Makes a deep copy */
+UA_StatusCode UA_EXPORT
+UA_NodePointer_copy(UA_NodePointer in, UA_NodePointer *out);
+
+/* Test if an ExpandedNodeId or a local NodeId */
+UA_Boolean UA_EXPORT
+UA_NodePointer_isLocal(UA_NodePointer np);
+
+UA_Order UA_EXPORT
+UA_NodePointer_order(UA_NodePointer p1, UA_NodePointer p2);
+
+static UA_INLINE UA_Boolean
+UA_NodePointer_equal(UA_NodePointer p1, UA_NodePointer p2) {
+ return (UA_NodePointer_order(p1, p2) == UA_ORDER_EQ);
+}
+
+/* Cannot fail. The resulting NodePointer can point to the memory from the
+ * NodeId. Make a deep copy if required. */
+UA_NodePointer UA_EXPORT
+UA_NodePointer_fromNodeId(const UA_NodeId *id);
+
+/* Cannot fail. The resulting NodePointer can point to the memory from the
+ * ExpandedNodeId. Make a deep copy if required. */
+UA_NodePointer UA_EXPORT
+UA_NodePointer_fromExpandedNodeId(const UA_ExpandedNodeId *id);
+
+/* Can point to the memory from the NodePointer */
+UA_ExpandedNodeId UA_EXPORT
+UA_NodePointer_toExpandedNodeId(UA_NodePointer np);
+
+/* Can point to the memory from the NodePointer. Discards the ServerIndex and
+ * NamespaceUri of a potential ExpandedNodeId inside the NodePointer. Test
+ * before if the NodePointer is local. */
+UA_NodeId UA_EXPORT
+UA_NodePointer_toNodeId(UA_NodePointer np);
+
+/**
* Base Node Attributes
* --------------------
*
@@ -26922,50 +26101,77 @@ struct UA_MonitoredItem;
* not known or not important. The ``nodeClass`` attribute is used to ensure the
* correctness of casting from ``UA_Node`` to a specific node type. */
-/* Ordered tree structure for fast member check */
-typedef struct UA_ReferenceTarget {
- ZIP_ENTRY(UA_ReferenceTarget) idTreeFields;
- ZIP_ENTRY(UA_ReferenceTarget) nameTreeFields;
- UA_UInt32 targetIdHash; /* Hash of the target's NodeId */
- UA_UInt32 targetNameHash; /* Hash of the target's BrowseName */
- UA_ExpandedNodeId targetId;
+typedef struct {
+ UA_NodePointer targetId; /* Has to be the first entry */
+ UA_UInt32 targetNameHash; /* Hash of the target's BrowseName. Set to zero
+ * if the target is remote. */
} UA_ReferenceTarget;
-ZIP_HEAD(UA_ReferenceTargetIdTree, UA_ReferenceTarget);
-typedef struct UA_ReferenceTargetIdTree UA_ReferenceTargetIdTree;
-ZIP_PROTTYPE(UA_ReferenceTargetIdTree, UA_ReferenceTarget, UA_ReferenceTarget)
-
-ZIP_HEAD(UA_ReferenceTargetNameTree, UA_ReferenceTarget);
-typedef struct UA_ReferenceTargetNameTree UA_ReferenceTargetNameTree;
-ZIP_PROTTYPE(UA_ReferenceTargetNameTree, UA_ReferenceTarget, UA_UInt32)
-
-/* List of reference targets with the same reference type and direction */
typedef struct {
- UA_NodeId referenceTypeId;
+ UA_ReferenceTarget target; /* Has to be the first entry */
+ UA_UInt32 targetIdHash; /* Hash of the targetId */
+ struct aa_entry idTreeEntry; /* Binary-Tree for fast lookup */
+ struct aa_entry nameTreeEntry;
+} UA_ReferenceTargetTreeElem;
+
+/* List of reference targets with the same reference type and direction. Uses
+ * either an array or a tree structure. The SDK will not change the type of
+ * reference target structure internally. The nodestore implementations may
+ * switch internally when a node is updated.
+ *
+ * The recommendation is to switch to a tree once the number of refs > 8. */
+typedef struct {
+ union {
+ /* Organize the references in an array. Uses less memory, but incurs
+ * lookups in linear time. Recommended if the number of references is
+ * known to be small. */
+ UA_ReferenceTarget *array;
+
+ /* Organize the references in a tree for fast lookup */
+ struct {
+ struct aa_entry *idTreeRoot; /* Fast lookup based on the target id */
+ struct aa_entry *nameTreeRoot; /* Fast lookup based on the target browseName*/
+ } tree;
+ } targets;
+ size_t targetsSize;
+ UA_Boolean hasRefTree; /* RefTree or RefArray? */
+ UA_Byte referenceTypeIndex;
UA_Boolean isInverse;
- size_t refTargetsSize;
- UA_ReferenceTarget *refTargets;
- UA_ReferenceTargetIdTree refTargetsIdTree;
- UA_ReferenceTargetNameTree refTargetsNameTree;
} UA_NodeReferenceKind;
-#define UA_NODE_BASEATTRIBUTES \
- UA_NodeId nodeId; \
- UA_NodeClass nodeClass; \
- UA_QualifiedName browseName; \
- UA_LocalizedText displayName; \
- UA_LocalizedText description; \
- UA_UInt32 writeMask; \
- size_t referencesSize; \
- UA_NodeReferenceKind *references; \
- \
- /* Members specific to open62541 */ \
- void *context; \
- UA_Boolean constructed; /* Constructors were called */
+/* Iterate over the references. Assumes that "prev" points to a
+ * NodeReferenceKind. If prev == NULL, the first element is returned. At the end
+ * of the iteration, NULL is returned.
+ *
+ * Do not continue the iteration after the rk was modified. */
+UA_EXPORT const UA_ReferenceTarget *
+UA_NodeReferenceKind_iterate(const UA_NodeReferenceKind *rk,
+ const UA_ReferenceTarget *prev);
-typedef struct {
- UA_NODE_BASEATTRIBUTES
-} UA_Node;
+/* Switch between array and tree representation. Does nothing upon error (e.g.
+ * out-of-memory). */
+UA_EXPORT UA_StatusCode
+UA_NodeReferenceKind_switch(UA_NodeReferenceKind *rk);
+
+/* Every Node starts with these attributes */
+struct UA_NodeHead {
+ UA_NodeId nodeId;
+ UA_NodeClass nodeClass;
+ UA_QualifiedName browseName;
+ UA_LocalizedText displayName;
+ UA_LocalizedText description;
+ UA_UInt32 writeMask;
+ size_t referencesSize;
+ UA_NodeReferenceKind *references;
+
+ /* Members specific to open62541 */
+ void *context;
+ UA_Boolean constructed; /* Constructors were called */
+#ifdef UA_ENABLE_SUBSCRIPTIONS
+ UA_MonitoredItem *monitoredItems; /* MonitoredItems for Events and immediate
+ * DataChanges (no sampling interval). */
+#endif
+};
/**
* VariableNode
@@ -26986,7 +26192,7 @@ typedef struct {
* attributes.
*
* Data Type
- * ^^^^^^^^^
+ * ~~~~~~~~~
*
* The (scalar) data type of the variable is constrained to be of a specific
* type or one of its children in the type hierarchy. The data type is given as
@@ -27003,7 +26209,7 @@ typedef struct {
* :ref:`VariableTypeNode` is ensured.
*
* Value Rank
- * ^^^^^^^^^^
+ * ~~~~~~~~~~
*
* This attribute indicates whether the value attribute of the variable is an
* array and how many dimensions the array has. It may have the following
@@ -27019,7 +26225,7 @@ typedef struct {
* :ref:`variabletypenode` is ensured.
*
* Array Dimensions
- * ^^^^^^^^^^^^^^^^
+ * ~~~~~~~~~~~~~~~~
*
* If the value rank permits the value to be a (multi-dimensional) array, the
* exact length in each dimensions can be further constrained with this
@@ -27040,6 +26246,165 @@ typedef enum {
UA_VALUESOURCE_DATASOURCE
} UA_ValueSource;
+typedef struct {
+ /* Called before the value attribute is read. It is possible to write into the
+ * value attribute during onRead (using the write service). The node is
+ * re-opened afterwards so that changes are considered in the following read
+ * operation.
+ *
+ * @param handle Points to user-provided data for the callback.
+ * @param nodeid The identifier of the node.
+ * @param data Points to the current node value.
+ * @param range Points to the numeric range the client wants to read from
+ * (or NULL). */
+ void (*onRead)(UA_Server *server, const UA_NodeId *sessionId,
+ void *sessionContext, const UA_NodeId *nodeid,
+ void *nodeContext, const UA_NumericRange *range,
+ const UA_DataValue *value);
+
+ /* Called after writing the value attribute. The node is re-opened after
+ * writing so that the new value is visible in the callback.
+ *
+ * @param server The server executing the callback
+ * @sessionId The identifier of the session
+ * @sessionContext Additional data attached to the session
+ * in the access control layer
+ * @param nodeid The identifier of the node.
+ * @param nodeUserContext Additional data attached to the node by
+ * the user.
+ * @param nodeConstructorContext Additional data attached to the node
+ * by the type constructor(s).
+ * @param range Points to the numeric range the client wants to write to (or
+ * NULL). */
+ void (*onWrite)(UA_Server *server, const UA_NodeId *sessionId,
+ void *sessionContext, const UA_NodeId *nodeId,
+ void *nodeContext, const UA_NumericRange *range,
+ const UA_DataValue *data);
+} UA_ValueCallback;
+
+typedef struct {
+ /* Copies the data from the source into the provided value.
+ *
+ * !! ZERO-COPY OPERATIONS POSSIBLE !!
+ * It is not required to return a copy of the actual content data. You can
+ * return a pointer to memory owned by the user. Memory can be reused
+ * between read callbacks of a DataSource, as the result is already encoded
+ * on the network buffer between each read operation.
+ *
+ * To use zero-copy reads, set the value of the `value->value` Variant
+ * without copying, e.g. with `UA_Variant_setScalar`. Then, also set
+ * `value->value.storageType` to `UA_VARIANT_DATA_NODELETE` to prevent the
+ * memory being cleaned up. Don't forget to also set `value->hasValue` to
+ * true to indicate the presence of a value.
+ *
+ * @param server The server executing the callback
+ * @param sessionId The identifier of the session
+ * @param sessionContext Additional data attached to the session in the
+ * access control layer
+ * @param nodeId The identifier of the node being read from
+ * @param nodeContext Additional data attached to the node by the user
+ * @param includeSourceTimeStamp If true, then the datasource is expected to
+ * set the source timestamp in the returned value
+ * @param range If not null, then the datasource shall return only a
+ * selection of the (nonscalar) data. Set
+ * UA_STATUSCODE_BADINDEXRANGEINVALID in the value if this does not
+ * apply
+ * @param value The (non-null) DataValue that is returned to the client. The
+ * data source sets the read data, the result status and optionally a
+ * sourcetimestamp.
+ * @return Returns a status code for logging. Error codes intended for the
+ * original caller are set in the value. If an error is returned,
+ * then no releasing of the value is done
+ */
+ UA_StatusCode (*read)(UA_Server *server, const UA_NodeId *sessionId,
+ void *sessionContext, const UA_NodeId *nodeId,
+ void *nodeContext, UA_Boolean includeSourceTimeStamp,
+ const UA_NumericRange *range, UA_DataValue *value);
+
+ /* Write into a data source. This method pointer can be NULL if the
+ * operation is unsupported.
+ *
+ * @param server The server executing the callback
+ * @param sessionId The identifier of the session
+ * @param sessionContext Additional data attached to the session in the
+ * access control layer
+ * @param nodeId The identifier of the node being written to
+ * @param nodeContext Additional data attached to the node by the user
+ * @param range If not NULL, then the datasource shall return only a
+ * selection of the (nonscalar) data. Set
+ * UA_STATUSCODE_BADINDEXRANGEINVALID in the value if this does not
+ * apply
+ * @param value The (non-NULL) DataValue that has been written by the client.
+ * The data source contains the written data, the result status and
+ * optionally a sourcetimestamp
+ * @return Returns a status code for logging. Error codes intended for the
+ * original caller are set in the value. If an error is returned,
+ * then no releasing of the value is done
+ */
+ UA_StatusCode (*write)(UA_Server *server, const UA_NodeId *sessionId,
+ void *sessionContext, const UA_NodeId *nodeId,
+ void *nodeContext, const UA_NumericRange *range,
+ const UA_DataValue *value);
+} UA_DataSource;
+
+/**
+ * .. _value-callback:
+ *
+ * Value Callback
+ * ~~~~~~~~~~~~~~
+ * Value Callbacks can be attached to variable and variable type nodes. If
+ * not ``NULL``, they are called before reading and after writing respectively. */
+typedef struct {
+ /* Called before the value attribute is read. The external value source can be
+ * be updated and/or locked during this notification call. After this function returns
+ * to the core, the external value source is readed immediately.
+ */
+ UA_StatusCode (*notificationRead)(UA_Server *server, const UA_NodeId *sessionId,
+ void *sessionContext, const UA_NodeId *nodeid,
+ void *nodeContext, const UA_NumericRange *range);
+
+ /* Called after writing the value attribute. The node is re-opened after
+ * writing so that the new value is visible in the callback.
+ *
+ * @param server The server executing the callback
+ * @sessionId The identifier of the session
+ * @sessionContext Additional data attached to the session
+ * in the access control layer
+ * @param nodeid The identifier of the node.
+ * @param nodeUserContext Additional data attached to the node by
+ * the user.
+ * @param nodeConstructorContext Additional data attached to the node
+ * by the type constructor(s).
+ * @param range Points to the numeric range the client wants to write to (or
+ * NULL). */
+ UA_StatusCode (*userWrite)(UA_Server *server, const UA_NodeId *sessionId,
+ void *sessionContext, const UA_NodeId *nodeId,
+ void *nodeContext, const UA_NumericRange *range,
+ const UA_DataValue *data);
+} UA_ExternalValueCallback;
+
+typedef enum {
+ UA_VALUEBACKENDTYPE_NONE,
+ UA_VALUEBACKENDTYPE_INTERNAL,
+ UA_VALUEBACKENDTYPE_DATA_SOURCE_CALLBACK,
+ UA_VALUEBACKENDTYPE_EXTERNAL
+} UA_ValueBackendType;
+
+typedef struct {
+ UA_ValueBackendType backendType;
+ union {
+ struct {
+ UA_DataValue value;
+ UA_ValueCallback callback;
+ } internal;
+ UA_DataSource dataSource;
+ struct {
+ UA_DataValue **value;
+ UA_ExternalValueCallback callback;
+ } external;
+ } backend;
+} UA_ValueBackend;
+
#define UA_NODE_VARIABLEATTRIBUTES \
/* Constraints on possible values */ \
UA_NodeId dataType; \
@@ -27047,6 +26412,8 @@ typedef enum {
size_t arrayDimensionsSize; \
UA_UInt32 *arrayDimensions; \
\
+ UA_ValueBackend valueBackend; \
+ \
/* The current value */ \
UA_ValueSource valueSource; \
union { \
@@ -27058,11 +26425,18 @@ typedef enum {
} value;
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_NODE_VARIABLEATTRIBUTES
UA_Byte accessLevel;
UA_Double minimumSamplingInterval;
UA_Boolean historizing;
+
+ /* Members specific to open62541 */
+ UA_Boolean isDynamic; /* Some variables are "static" in the sense that they
+ * are not attached to a dynamic process in the
+ * background. Only dynamic variables conserve source
+ * and server timestamp for the value attribute.
+ * Static variables have timestamps of "now". */
} UA_VariableNode;
/**
@@ -27079,7 +26453,7 @@ typedef struct {
* instantiated from ``BaseDataVariable``. */
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_NODE_VARIABLEATTRIBUTES
UA_Boolean isAbstract;
@@ -27095,7 +26469,7 @@ typedef struct {
*
* Methods define callable functions and are invoked using the :ref:`Call
* <method-services>` service. MethodNodes may have special properties (variable
- * childen with a ``hasProperty`` reference) with the :ref:`qualifiedname` ``(0,
+ * children with a ``hasProperty`` reference) with the :ref:`qualifiedname` ``(0,
* "InputArguments")`` and ``(0, "OutputArguments")``. The input and output
* arguments are both described via an array of ``UA_Argument``. While the Call
* service uses a generic array of :ref:`variant` for input and output, the
@@ -27105,8 +26479,16 @@ typedef struct {
* object types). For this, the NodeId of the method *and of the object
* providing context* is part of a Call request message. */
+typedef 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);
+
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_Boolean executable;
/* Members specific to open62541 */
@@ -27126,10 +26508,7 @@ typedef struct {
* objects. */
typedef struct {
- UA_NODE_BASEATTRIBUTES
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
- struct UA_MonitoredItem *monitoredItemQueue;
-#endif
+ UA_NodeHead head;
UA_Byte eventNotifier;
} UA_ObjectNode;
@@ -27144,7 +26523,7 @@ typedef struct {
* destructor callbacks. */
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_Boolean isAbstract;
/* Members specific to open62541 */
@@ -27255,10 +26634,14 @@ typedef struct {
* based on a common understanding of just two custom reference types. */
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_Boolean isAbstract;
UA_Boolean symmetric;
UA_LocalizedText inverseName;
+
+ /* Members specific to open62541 */
+ UA_Byte referenceTypeIndex;
+ UA_ReferenceTypeSet subTypes; /* contains the type itself as well */
} UA_ReferenceTypeNode;
/**
@@ -27277,7 +26660,7 @@ typedef struct {
* ``UInt32``). */
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_Boolean isAbstract;
} UA_DataTypeNode;
@@ -27292,12 +26675,32 @@ typedef struct {
* open62541. */
typedef struct {
- UA_NODE_BASEATTRIBUTES
+ UA_NodeHead head;
UA_Byte eventNotifier;
UA_Boolean containsNoLoops;
} UA_ViewNode;
/**
+ * Node Union
+ * ----------
+ *
+ * A union that represents any kind of node. The node head can always be used.
+ * Check the NodeClass before accessing specific content.
+ */
+
+typedef union {
+ UA_NodeHead head;
+ UA_VariableNode variableNode;
+ UA_VariableTypeNode variableTypeNode;
+ UA_MethodNode methodNode;
+ UA_ObjectNode objectNode;
+ UA_ObjectTypeNode objectTypeNode;
+ UA_ReferenceTypeNode referenceTypeNode;
+ UA_DataTypeNode dataTypeNode;
+ UA_ViewNode viewNode;
+} UA_Node;
+
+/**
* Nodestore Plugin API
* --------------------
*
@@ -27351,6 +26754,11 @@ typedef struct {
/* Removes a node from the nodestore. */
UA_StatusCode (*removeNode)(void *nsCtx, const UA_NodeId *nodeId);
+ /* Maps the ReferenceTypeIndex used for the references to the NodeId of the
+ * ReferenceType. The returned pointer is stable until the Nodestore is
+ * deleted. */
+ const UA_NodeId * (*getReferenceTypeId)(void *nsCtx, UA_Byte refTypeIndex);
+
/* Execute a callback for every node in the nodestore. */
void (*iterate)(void *nsCtx, UA_NodestoreVisitor visitor,
void *visitorCtx);
@@ -27375,12 +26783,20 @@ UA_Node_copy_alloc(const UA_Node *src);
/* Add a single reference to the node */
UA_StatusCode UA_EXPORT
-UA_Node_addReference(UA_Node *node, const UA_AddReferencesItem *item,
+UA_Node_addReference(UA_Node *node, UA_Byte refTypeIndex, UA_Boolean isForward,
+ const UA_ExpandedNodeId *targetNodeId,
UA_UInt32 targetBrowseNameHash);
/* Delete a single reference from the node */
UA_StatusCode UA_EXPORT
-UA_Node_deleteReference(UA_Node *node, const UA_DeleteReferencesItem *item);
+UA_Node_deleteReference(UA_Node *node, UA_Byte refTypeIndex, UA_Boolean isForward,
+ const UA_ExpandedNodeId *targetNodeId);
+
+/* Deletes references from the node which are not matching any type in the given
+ * array. Could be used to e.g. delete all the references, except
+ * 'HASMODELINGRULE' */
+void UA_EXPORT
+UA_Node_deleteReferencesSubset(UA_Node *node, const UA_ReferenceTypeSet *keepSet);
/* Delete all references of the node */
void UA_EXPORT
@@ -27393,7 +26809,7 @@ UA_Node_clear(UA_Node *node);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/plugin/historydatabase.h" ***********************************/
+/**** amalgamated original file "/include/open62541/plugin/historydatabase.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -27439,28 +26855,18 @@ struct UA_HistoryDatabase {
*
* server is the server this node lives in.
* hdbContext is the context of the UA_HistoryDatabase.
- * sessionId and sessionContext identify the session which set this value.
* originId is the node id of the event's origin.
* emitterId is the node id of the event emitter.
- * eventId is the node id of the event that is being emitted.
- * willEventNodeBeDeleted specifies whether the event node will be deleted after
- * it has been triggered (this might be relevant for
- * in-memory storage).
* historicalEventFilter is the value of the HistoricalEventFilter property of
* the emitter (OPC UA Part 11, 5.3.2), it is NULL if
* the property does not exist or is not set.
* fieldList is the event field list returned after application of
- * historicalEventFilter to the event node
- * (NULL if historicalEventFilter is NULL or filtering was
- * unsuccessful); the fieldList is not deleted so
- * make sure to delete it when it is no longer needed. */
+ * historicalEventFilter to the event node. */
void
(*setEvent)(UA_Server *server,
void *hdbContext,
const UA_NodeId *originId,
const UA_NodeId *emitterId,
- const UA_NodeId *eventId,
- UA_Boolean willEventNodeBeDeleted,
const UA_EventFilter *historicalEventFilter,
UA_EventFieldList *fieldList);
@@ -27589,21 +26995,856 @@ struct UA_HistoryDatabase {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/server_config.h" ***********************************/
+/**** amalgamated original file "/include/open62541/server_pubsub.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
- * Copyright 2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
+ * Copyright (c) 2017-2018 Fraunhofer IOSB (Author: Andreas Ebner)
+ * Copyright (c) 2019 Kalycito Infotech Private Limited
+ * Copyright (c) 2021 Fraunhofer IOSB (Author: Jan Hermes)
+ */
+
+#ifndef UA_SERVER_PUBSUB_H
+#define UA_SERVER_PUBSUB_H
+
+
+_UA_BEGIN_DECLS
+
+#ifdef UA_ENABLE_PUBSUB
+
+/**
+ * .. _pubsub:
+ *
+ * PubSub
+ * ======
+ *
+ * In PubSub the participating OPC UA Applications take their roles as
+ * Publishers and Subscribers. Publishers are the sources of data, while
+ * Subscribers consume that data. Communication in PubSub is message-based.
+ * Publishers send messages to a Message Oriented Middleware, without knowledge
+ * of what, if any, Subscribers there may be. Similarly, Subscribers express
+ * interest in specific types of data, and process messages that contain this
+ * data, without knowledge of what Publishers there are.
+ *
+ * Message Oriented Middleware is software or hardware infrastructure that
+ * supports sending and receiving messages between distributed systems. OPC UA
+ * PubSub supports two different Message Oriented Middleware variants, namely
+ * the broker-less form and broker-based form. A broker-less form is where the
+ * Message Oriented Middleware is the network infrastructure that is able to
+ * route datagram-based messages. Subscribers and Publishers use datagram
+ * protocols like UDP. In a broker-based form, the core component of the Message
+ * Oriented Middleware is a message Broker. Subscribers and Publishers use
+ * standard messaging protocols like AMQP or MQTT to communicate with the
+ * Broker.
+ *
+ * This makes PubSub suitable for applications where location independence
+ * and/or scalability are required.
+ *
+ * The Publish/Subscribe (PubSub) extension for OPC UA enables fast and
+ * efficient 1:m communication. The PubSub extension is protocol agnostic and
+ * can be used with broker based protocols like MQTT and AMQP or brokerless
+ * implementations like UDP-Multicasting.
+ *
+ * The PubSub API uses the following scheme:
+ *
+ * 1. Create a configuration for the needed PubSub element.
+ *
+ * 2. Call the add[element] function and pass in the configuration.
+ *
+ * 3. The add[element] function returns the unique nodeId of the internally created element.
+ *
+ * Take a look on the PubSub Tutorials for more details about the API usage::
+ *
+ * +-----------+
+ * | UA_Server |
+ * +-----------+
+ * | |
+ * | |
+ * | |
+ * | | +----------------------+
+ * | +--> UA_PubSubConnection | UA_Server_addPubSubConnection
+ * | +----------------------+
+ * | | |
+ * | | | +----------------+
+ * | | +----> UA_WriterGroup | UA_PubSubConnection_addWriterGroup
+ * | | +----------------+
+ * | | |
+ * | | | +------------------+
+ * | | +----> UA_DataSetWriter | UA_WriterGroup_addDataSetWriter +-+
+ * | | +------------------+ |
+ * | | |
+ * | | +----------------+ | r
+ * | +---------> UA_ReaderGroup | UA_PubSubConnection_addReaderGroup | e
+ * | +----------------+ | f
+ * | | |
+ * | | +------------------+ |
+ * | +----> UA_DataSetReader | UA_ReaderGroup_addDataSetReader |
+ * | +------------------+ |
+ * | | |
+ * | | +----------------------+ |
+ * | +----> UA_SubscribedDataSet | |
+ * | +----------------------+ |
+ * | | |
+ * | | +----------------------------+ |
+ * | +----> UA_TargetVariablesDataType | |
+ * | | +----------------------------+ |
+ * | | |
+ * | | +------------------------------------+ |
+ * | +----> UA_SubscribedDataSetMirrorDataType | |
+ * | +------------------------------------+ |
+ * | |
+ * | +---------------------------+ |
+ * +-------> UA_PubSubPublishedDataSet | UA_Server_addPublishedDataSet <-+
+ * +---------------------------+
+ * |
+ * | +-----------------+
+ * +----> UA_DataSetField | UA_PublishedDataSet_addDataSetField
+ * +-----------------+
+ *
+ * PubSub Information Model Representation
+ * ---------------------------------------
+ * .. _pubsub_informationmodel:
+ *
+ * The complete PubSub configuration is available inside the information model.
+ * The entry point is the node 'PublishSubscribe', located under the Server
+ * node.
+ * The standard defines for PubSub no new Service set. The configuration can
+ * optionally be done over methods inside the information model.
+ * The information model representation of the current PubSub configuration is
+ * generated automatically. This feature can be enabled/disabled by changing the
+ * UA_ENABLE_PUBSUB_INFORMATIONMODEL option.
+ *
+ * Connections
+ * -----------
+ * The PubSub connections are the abstraction between the concrete transport protocol
+ * and the PubSub functionality. It is possible to create multiple connections with
+ * different transport protocols at runtime.
+ *
+ * Take a look on the PubSub Tutorials for mor details about the API usage.
+ */
+
+typedef enum {
+ UA_PUBSUB_COMPONENT_CONNECTION,
+ UA_PUBSUB_COMPONENT_WRITERGROUP,
+ UA_PUBSUB_COMPONENT_DATASETWRITER,
+ UA_PUBSUB_COMPONENT_READERGROUP,
+ UA_PUBSUB_COMPONENT_DATASETREADER
+} UA_PubSubComponentEnumType;
+
+typedef enum {
+ UA_PUBSUB_PUBLISHERID_NUMERIC,
+ UA_PUBSUB_PUBLISHERID_STRING
+} UA_PublisherIdType;
+
+struct UA_PubSubConnectionConfig {
+ UA_String name;
+ UA_Boolean enabled;
+ UA_PublisherIdType publisherIdType;
+ union { /* std: valid types UInt or String */
+ UA_UInt32 numeric;
+ UA_String string;
+ } publisherId;
+ UA_String transportProfileUri;
+ UA_Variant address;
+ size_t connectionPropertiesSize;
+ UA_KeyValuePair *connectionProperties;
+ UA_Variant connectionTransportSettings;
+};
+
+#ifdef UA_ENABLE_PUBSUB_MONITORING
+
+typedef enum {
+ UA_PUBSUB_MONITORING_MESSAGE_RECEIVE_TIMEOUT
+ // extend as needed
+} UA_PubSubMonitoringType;
+
+/* PubSub monitoring interface */
+typedef struct {
+ UA_StatusCode (*createMonitoring)(UA_Server *server, UA_NodeId Id,
+ UA_PubSubComponentEnumType eComponentType,
+ UA_PubSubMonitoringType eMonitoringType,
+ void *data, UA_ServerCallback callback);
+ UA_StatusCode (*startMonitoring)(UA_Server *server, UA_NodeId Id,
+ UA_PubSubComponentEnumType eComponentType,
+ UA_PubSubMonitoringType eMonitoringType, void *data);
+ UA_StatusCode (*stopMonitoring)(UA_Server *server, UA_NodeId Id,
+ UA_PubSubComponentEnumType eComponentType,
+ UA_PubSubMonitoringType eMonitoringType, void *data);
+ UA_StatusCode (*updateMonitoringInterval)(UA_Server *server, UA_NodeId Id,
+ UA_PubSubComponentEnumType eComponentType,
+ UA_PubSubMonitoringType eMonitoringType,
+ void *data);
+ UA_StatusCode (*deleteMonitoring)(UA_Server *server, UA_NodeId Id,
+ UA_PubSubComponentEnumType eComponentType,
+ UA_PubSubMonitoringType eMonitoringType, void *data);
+} UA_PubSubMonitoringInterface;
+
+#endif /* UA_ENABLE_PUBSUB_MONITORING */
+
+/* General PubSub configuration */
+struct UA_PubSubConfiguration {
+ /* PubSub network layer */
+ size_t transportLayersSize;
+ UA_PubSubTransportLayer *transportLayers;
+
+ /* Callback for PubSub component state changes: If provided this callback
+ * informs the application about PubSub component state changes. E.g. state
+ * change from operational to error in case of a DataSetReader
+ * MessageReceiveTimeout. The status code provides additional
+ * information. */
+ void (*stateChangeCallback)(UA_NodeId *Id, UA_PubSubState state,
+ UA_StatusCode status);
+ /* TODO: maybe status code provides not enough information about the state change */
+
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+ /* PubSub security policies */
+ size_t securityPoliciesSize;
+ UA_PubSubSecurityPolicy *securityPolicies;
+#endif
+
+#ifdef UA_ENABLE_PUBSUB_MONITORING
+ UA_PubSubMonitoringInterface monitoringInterface;
+#endif
+};
+
+
+/**
+ * The UA_ServerConfig_addPubSubTransportLayer is used to add a transport layer
+ * to the server configuration. The list memory is allocated and will be freed
+ * with UA_PubSubManager_delete.
+ *
+ * .. note:: If the UA_String transportProfileUri was dynamically allocated
+ * the memory has to be freed when no longer required.
+ *
+ * .. note:: This has to be done before the server is started with UA_Server_run. */
+
+UA_StatusCode UA_EXPORT
+UA_ServerConfig_addPubSubTransportLayer(UA_ServerConfig *config,
+ UA_PubSubTransportLayer pubsubTransportLayer);
+
+UA_StatusCode UA_EXPORT
+UA_Server_addPubSubConnection(UA_Server *server,
+ const UA_PubSubConnectionConfig *connectionConfig,
+ UA_NodeId *connectionIdentifier);
+
+/* Returns a deep copy of the config */
+UA_StatusCode UA_EXPORT
+UA_Server_getPubSubConnectionConfig(UA_Server *server,
+ const UA_NodeId connection,
+ UA_PubSubConnectionConfig *config);
+
+/* Remove Connection, identified by the NodeId. Deletion of Connection
+ * removes all contained WriterGroups and Writers. */
+UA_StatusCode UA_EXPORT
+UA_Server_removePubSubConnection(UA_Server *server, const UA_NodeId connection);
+
+/**
+ * PublishedDataSets
+ * -----------------
+ * The PublishedDataSets (PDS) are containers for the published information. The
+ * PDS contain the published variables and meta information. The metadata is
+ * commonly autogenerated or given as constant argument as part of the template
+ * functions. The template functions are standard defined and intended for
+ * configuration tools. You should normally create an empty PDS and call the
+ * functions to add new fields. */
+
+/* The UA_PUBSUB_DATASET_PUBLISHEDITEMS has currently no additional members and
+ * thus no dedicated config structure. */
+
+typedef enum {
+ UA_PUBSUB_DATASET_PUBLISHEDITEMS,
+ UA_PUBSUB_DATASET_PUBLISHEDEVENTS,
+ UA_PUBSUB_DATASET_PUBLISHEDITEMS_TEMPLATE,
+ UA_PUBSUB_DATASET_PUBLISHEDEVENTS_TEMPLATE,
+} UA_PublishedDataSetType;
+
+typedef struct {
+ UA_DataSetMetaDataType metaData;
+ size_t variablesToAddSize;
+ UA_PublishedVariableDataType *variablesToAdd;
+} UA_PublishedDataItemsTemplateConfig;
+
+typedef struct {
+ UA_NodeId eventNotfier;
+ UA_ContentFilter filter;
+} UA_PublishedEventConfig;
+
+typedef struct {
+ UA_DataSetMetaDataType metaData;
+ UA_NodeId eventNotfier;
+ size_t selectedFieldsSize;
+ UA_SimpleAttributeOperand *selectedFields;
+ UA_ContentFilter filter;
+} UA_PublishedEventTemplateConfig;
+
+/* Configuration structure for PublishedDataSet */
+typedef struct {
+ UA_String name;
+ UA_PublishedDataSetType publishedDataSetType;
+ union {
+ /* The UA_PUBSUB_DATASET_PUBLISHEDITEMS has currently no additional members
+ * and thus no dedicated config structure.*/
+ UA_PublishedDataItemsTemplateConfig itemsTemplate;
+ UA_PublishedEventConfig event;
+ UA_PublishedEventTemplateConfig eventTemplate;
+ } config;
+} UA_PublishedDataSetConfig;
+
+void UA_EXPORT
+UA_PublishedDataSetConfig_clear(UA_PublishedDataSetConfig *pdsConfig);
+
+typedef struct {
+ UA_StatusCode addResult;
+ size_t fieldAddResultsSize;
+ UA_StatusCode *fieldAddResults;
+ UA_ConfigurationVersionDataType configurationVersion;
+} UA_AddPublishedDataSetResult;
+
+UA_AddPublishedDataSetResult UA_EXPORT
+UA_Server_addPublishedDataSet(UA_Server *server,
+ const UA_PublishedDataSetConfig *publishedDataSetConfig,
+ UA_NodeId *pdsIdentifier);
+
+/* Returns a deep copy of the config */
+UA_StatusCode UA_EXPORT
+UA_Server_getPublishedDataSetConfig(UA_Server *server, const UA_NodeId pds,
+ UA_PublishedDataSetConfig *config);
+
+/* Returns a deep copy of the DataSetMetaData for an specific PDS */
+UA_StatusCode UA_EXPORT
+UA_Server_getPublishedDataSetMetaData(UA_Server *server, const UA_NodeId pds,
+ UA_DataSetMetaDataType *metaData);
+
+/* Remove PublishedDataSet, identified by the NodeId. Deletion of PDS removes
+ * all contained and linked PDS Fields. Connected WriterGroups will be also
+ * removed. */
+UA_StatusCode UA_EXPORT
+UA_Server_removePublishedDataSet(UA_Server *server, const UA_NodeId pds);
+
+/**
+ * DataSetFields
+ * -------------
+ * The description of published variables is named DataSetField. Each
+ * DataSetField contains the selection of one information model node. The
+ * DataSetField has additional parameters for the publishing, sampling and error
+ * handling process. */
+
+typedef struct{
+ UA_ConfigurationVersionDataType configurationVersion;
+ UA_String fieldNameAlias;
+ UA_Boolean promotedField;
+ UA_PublishedVariableDataType publishParameters;
+
+ /* non std. field */
+ struct {
+ UA_Boolean rtFieldSourceEnabled;
+ /* If the rtInformationModelNode is set, the nodeid in publishParameter must point
+ * to a node with external data source backend defined
+ * */
+ UA_Boolean rtInformationModelNode;
+ //TODO -> decide if suppress C++ warnings and use 'UA_DataValue * * const staticValueSource;'
+ UA_DataValue ** staticValueSource;
+ } rtValueSource;
+
+
+} UA_DataSetVariableConfig;
+
+typedef enum {
+ UA_PUBSUB_DATASETFIELD_VARIABLE,
+ UA_PUBSUB_DATASETFIELD_EVENT
+} UA_DataSetFieldType;
+
+typedef struct {
+ UA_DataSetFieldType dataSetFieldType;
+ union {
+ /* events need other config later */
+ UA_DataSetVariableConfig variable;
+ } field;
+} UA_DataSetFieldConfig;
+
+void UA_EXPORT
+UA_DataSetFieldConfig_clear(UA_DataSetFieldConfig *dataSetFieldConfig);
+
+typedef struct {
+ UA_StatusCode result;
+ UA_ConfigurationVersionDataType configurationVersion;
+} UA_DataSetFieldResult;
+
+UA_DataSetFieldResult UA_EXPORT
+UA_Server_addDataSetField(UA_Server *server,
+ const UA_NodeId publishedDataSet,
+ const UA_DataSetFieldConfig *fieldConfig,
+ UA_NodeId *fieldIdentifier);
+
+/* Returns a deep copy of the config */
+UA_StatusCode UA_EXPORT
+UA_Server_getDataSetFieldConfig(UA_Server *server, const UA_NodeId dsf,
+ UA_DataSetFieldConfig *config);
+
+UA_DataSetFieldResult UA_EXPORT
+UA_Server_removeDataSetField(UA_Server *server, const UA_NodeId dsf);
+
+/**
+ * Custom Callback Implementation
+ * ------------------------------
+ * The user can use his own callback implementation for publishing
+ * and subscribing. The user must take care of the callback to call for
+ * every publishing or subscibing interval */
+
+typedef struct {
+ /* User's callback implementation. The user configured base time and timer policy
+ * will be provided as an argument to this callback so that the user can
+ * implement his callback (thread) considering base time and timer policies */
+ UA_StatusCode (*addCustomCallback)(UA_Server *server, UA_NodeId identifier,
+ UA_ServerCallback callback,
+ void *data, UA_Double interval_ms,
+ UA_DateTime *baseTime, UA_TimerPolicy timerPolicy,
+ UA_UInt64 *callbackId);
+
+ UA_StatusCode (*changeCustomCallback)(UA_Server *server, UA_NodeId identifier,
+ UA_UInt64 callbackId, UA_Double interval_ms,
+ UA_DateTime *baseTime, UA_TimerPolicy timerPolicy);
+
+ void (*removeCustomCallback)(UA_Server *server, UA_NodeId identifier, UA_UInt64 callbackId);
+
+} UA_PubSub_CallbackLifecycle;
+
+/**
+ * WriterGroup
+ * -----------
+ * All WriterGroups are created within a PubSubConnection and automatically
+ * deleted if the connection is removed. The WriterGroup is primary used as
+ * container for :ref:`dsw` and network message settings. The WriterGroup can be
+ * imagined as producer of the network messages. The creation of network
+ * messages is controlled by parameters like the publish interval, which is e.g.
+ * contained in the WriterGroup. */
+
+typedef enum {
+ UA_PUBSUB_ENCODING_BINARY,
+ UA_PUBSUB_ENCODING_JSON,
+ UA_PUBSUB_ENCODING_UADP
+} UA_PubSubEncodingType;
+
+/**
+ * WriterGroup
+ * -----------
+ * The message publishing can be configured for realtime requirements. The RT-levels
+ * go along with different requirements. The below listed levels can be configured:
+ *
+ * UA_PUBSUB_RT_NONE -
+ * ---> Description: Default "none-RT" Mode
+ * ---> Requirements: -
+ * ---> Restrictions: -
+ * UA_PUBSUB_RT_DIRECT_VALUE_ACCESS (Preview - not implemented)
+ * ---> Description: Normally, the latest value for each DataSetField is read out of the information model. Within this RT-mode, the
+ * value source of each field configured as static pointer to an DataValue. The publish cycle won't use call the server read function.
+ * ---> Requirements: All fields must be configured with a 'staticValueSource'.
+ * ---> Restrictions: -
+ * UA_PUBSUB_RT_FIXED_LENGTH (Preview - not implemented)
+ * ---> Description: All DataSetFields have a known, non-changing length. The server will pre-generate some
+ * buffers and use only memcopy operations to generate requested PubSub packages.
+ * ---> Requirements: DataSetFields with variable size cannot be used within this mode.
+ * ---> Restrictions: The configuration must be frozen and changes are not allowed while the WriterGroup is 'Operational'.
+ * UA_PUBSUB_RT_DETERMINISTIC (Preview - not implemented)
+ * ---> Description: -
+ * ---> Requirements: -
+ * ---> Restrictions: -
+ *
+ * WARNING! For hard real time requirements the underlying system must be rt-capable.
+ *
+ */
+typedef enum {
+ UA_PUBSUB_RT_NONE = 0,
+ UA_PUBSUB_RT_DIRECT_VALUE_ACCESS = 1,
+ UA_PUBSUB_RT_FIXED_SIZE = 2,
+ UA_PUBSUB_RT_DETERMINISTIC = 4,
+} UA_PubSubRTLevel;
+
+typedef struct {
+ UA_String name;
+ UA_Boolean enabled;
+ UA_UInt16 writerGroupId;
+ UA_Duration publishingInterval;
+ UA_Double keepAliveTime;
+ UA_Byte priority;
+ UA_ExtensionObject transportSettings;
+ UA_ExtensionObject messageSettings;
+ size_t groupPropertiesSize;
+ UA_KeyValuePair *groupProperties;
+ UA_PubSubEncodingType encodingMimeType;
+ /* PubSub Manager Callback */
+ UA_PubSub_CallbackLifecycle pubsubManagerCallback;
+ /* non std. config parameter. maximum count of embedded DataSetMessage in
+ * one NetworkMessage */
+ UA_UInt16 maxEncapsulatedDataSetMessageCount;
+ /* non std. field */
+ UA_PubSubRTLevel rtLevel;
+
+ /* Message are encrypted if a SecurityPolicy is configured and the
+ * securityMode set accordingly. The symmetric key is a runtime information
+ * and has to be set via UA_Server_setWriterGroupEncryptionKey. */
+ UA_MessageSecurityMode securityMode; /* via the UA_WriterGroupDataType */
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+ UA_PubSubSecurityPolicy *securityPolicy;
+#endif
+} UA_WriterGroupConfig;
+
+void UA_EXPORT
+UA_WriterGroupConfig_clear(UA_WriterGroupConfig *writerGroupConfig);
+
+/* Add a new WriterGroup to an existing Connection */
+UA_StatusCode UA_EXPORT
+UA_Server_addWriterGroup(UA_Server *server, const UA_NodeId connection,
+ const UA_WriterGroupConfig *writerGroupConfig,
+ UA_NodeId *writerGroupIdentifier);
+
+/* Returns a deep copy of the config */
+UA_StatusCode UA_EXPORT
+UA_Server_getWriterGroupConfig(UA_Server *server, const UA_NodeId writerGroup,
+ UA_WriterGroupConfig *config);
+
+UA_StatusCode UA_EXPORT
+UA_Server_updateWriterGroupConfig(UA_Server *server, UA_NodeId writerGroupIdentifier,
+ const UA_WriterGroupConfig *config);
+
+/* Get state of WriterGroup */
+UA_StatusCode UA_EXPORT
+UA_Server_WriterGroup_getState(UA_Server *server, UA_NodeId writerGroupIdentifier,
+ UA_PubSubState *state);
+
+UA_StatusCode UA_EXPORT
+UA_Server_removeWriterGroup(UA_Server *server, const UA_NodeId writerGroup);
+
+UA_StatusCode UA_EXPORT
+UA_Server_freezeWriterGroupConfiguration(UA_Server *server, const UA_NodeId writerGroup);
+
+UA_StatusCode UA_EXPORT
+UA_Server_unfreezeWriterGroupConfiguration(UA_Server *server, const UA_NodeId writerGroup);
+
+UA_StatusCode UA_EXPORT
+UA_Server_setWriterGroupOperational(UA_Server *server, const UA_NodeId writerGroup);
+
+UA_StatusCode UA_EXPORT
+UA_Server_setWriterGroupDisabled(UA_Server *server, const UA_NodeId writerGroup);
+
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+/* Set the group key for the message encryption */
+UA_StatusCode UA_EXPORT
+UA_Server_setWriterGroupEncryptionKeys(UA_Server *server, const UA_NodeId writerGroup,
+ UA_UInt32 securityTokenId,
+ const UA_ByteString signingKey,
+ const UA_ByteString encryptingKey,
+ const UA_ByteString keyNonce);
+#endif
+
+/**
+ * .. _dsw:
+ *
+ * DataSetWriter
+ * -------------
+ * The DataSetWriters are the glue between the WriterGroups and the
+ * PublishedDataSets. The DataSetWriter contain configuration parameters and
+ * flags which influence the creation of DataSet messages. These messages are
+ * encapsulated inside the network message. The DataSetWriter must be linked
+ * with an existing PublishedDataSet and be contained within a WriterGroup. */
+
+typedef struct {
+ UA_String name;
+ UA_UInt16 dataSetWriterId;
+ UA_DataSetFieldContentMask dataSetFieldContentMask;
+ UA_UInt32 keyFrameCount;
+ UA_ExtensionObject messageSettings;
+ UA_ExtensionObject transportSettings;
+ UA_String dataSetName;
+ size_t dataSetWriterPropertiesSize;
+ UA_KeyValuePair *dataSetWriterProperties;
+} UA_DataSetWriterConfig;
+
+void UA_EXPORT
+UA_DataSetWriterConfig_clear(UA_DataSetWriterConfig *pdsConfig);
+
+/* Add a new DataSetWriter to an existing WriterGroup. The DataSetWriter must be
+ * coupled with a PublishedDataSet on creation.
+ *
+ * Part 14, 7.1.5.2.1 defines: The link between the PublishedDataSet and
+ * DataSetWriter shall be created when an instance of the DataSetWriterType is
+ * created. */
+UA_StatusCode UA_EXPORT
+UA_Server_addDataSetWriter(UA_Server *server,
+ const UA_NodeId writerGroup, const UA_NodeId dataSet,
+ const UA_DataSetWriterConfig *dataSetWriterConfig,
+ UA_NodeId *writerIdentifier);
+
+/* Returns a deep copy of the config */
+UA_StatusCode UA_EXPORT
+UA_Server_getDataSetWriterConfig(UA_Server *server, const UA_NodeId dsw,
+ UA_DataSetWriterConfig *config);
+
+/* Get state of DataSetWriter */
+UA_StatusCode UA_EXPORT
+UA_Server_DataSetWriter_getState(UA_Server *server, UA_NodeId dataSetWriterIdentifier,
+ UA_PubSubState *state);
+
+UA_StatusCode UA_EXPORT
+UA_Server_removeDataSetWriter(UA_Server *server, const UA_NodeId dsw);
+
+/**
+ * SubscribedDataSet
+ * -----------------
+ * SubscribedDataSet describes the processing of the received DataSet.
+ * SubscribedDataSet defines which field in the DataSet is mapped to which
+ * Variable in the OPC UA Application. SubscribedDataSet has two sub-types
+ * called the TargetVariablesType and SubscribedDataSetMirrorType.
+ * SubscribedDataSetMirrorType is currently not supported. SubscribedDataSet is
+ * set to TargetVariablesType and then the list of target Variables are created
+ * in the Subscriber AddressSpace. TargetVariables are a list of variables that
+ * are to be added in the Subscriber AddressSpace. It defines a list of Variable
+ * mappings between received DataSet fields and added Variables in the
+ * Subscriber AddressSpace. */
+
+/* SubscribedDataSetDataType Definition */
+typedef enum {
+ UA_PUBSUB_SDS_TARGET,
+ UA_PUBSUB_SDS_MIRROR
+} UA_SubscribedDataSetEnumType;
+
+typedef struct {
+ /* Standard-defined FieldTargetDataType */
+ UA_FieldTargetDataType targetVariable;
+
+ /* If realtime-handling is required, set this pointer non-NULL and it will be used
+ * to memcpy the value instead of using the Write service.
+ * If the beforeWrite method pointer is set, it will be called before a memcpy update
+ * to the value. But param externalDataValue already contains the new value.
+ * If the afterWrite method pointer is set, it will be called after a memcpy update
+ * to the value. */
+ UA_DataValue **externalDataValue;
+ void *targetVariableContext; /* user-defined pointer */
+ void (*beforeWrite)(UA_Server *server,
+ const UA_NodeId *readerIdentifier,
+ const UA_NodeId *readerGroupIdentifier,
+ const UA_NodeId *targetVariableIdentifier,
+ void *targetVariableContext,
+ UA_DataValue **externalDataValue);
+ void (*afterWrite)(UA_Server *server,
+ const UA_NodeId *readerIdentifier,
+ const UA_NodeId *readerGroupIdentifier,
+ const UA_NodeId *targetVariableIdentifier,
+ void *targetVariableContext,
+ UA_DataValue **externalDataValue);
+} UA_FieldTargetVariable;
+
+typedef struct {
+ size_t targetVariablesSize;
+ UA_FieldTargetVariable *targetVariables;
+} UA_TargetVariables;
+
+/* Return Status Code after creating TargetVariables in Subscriber AddressSpace */
+UA_StatusCode UA_EXPORT
+UA_Server_DataSetReader_createTargetVariables(UA_Server *server,
+ UA_NodeId dataSetReaderIdentifier,
+ size_t targetVariablesSize,
+ const UA_FieldTargetVariable *targetVariables);
+
+/* To Do:Implementation of SubscribedDataSetMirrorType
+ * UA_StatusCode
+ * A_PubSubDataSetReader_createDataSetMirror(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
+ * UA_SubscribedDataSetMirrorDataType* mirror) */
+
+/**
+ * DataSetReader
+ * -------------
+ * DataSetReader can receive NetworkMessages with the DataSetMessage
+ * of interest sent by the Publisher. DataSetReaders represent
+ * the configuration necessary to receive and process DataSetMessages
+ * on the Subscriber side. DataSetReader must be linked with a
+ * SubscribedDataSet and be contained within a ReaderGroup. */
+
+/* Parameters for PubSubSecurity */
+typedef struct {
+ UA_Int32 securityMode; /* placeholder datatype 'MessageSecurityMode' */
+ UA_String securityGroupId;
+ size_t keyServersSize;
+ UA_Int32 *keyServers;
+} UA_PubSubSecurityParameters;
+
+typedef enum {
+ UA_PUBSUB_RT_UNKNOWN = 0,
+ UA_PUBSUB_RT_VARIANT = 1,
+ UA_PUBSUB_RT_DATA_VALUE = 2,
+ UA_PUBSUB_RT_RAW = 4,
+} UA_PubSubRtEncoding;
+
+/* Parameters for PubSub DataSetReader Configuration */
+typedef struct {
+ UA_String name;
+ UA_Variant publisherId;
+ UA_UInt16 writerGroupId;
+ UA_UInt16 dataSetWriterId;
+ UA_DataSetMetaDataType dataSetMetaData;
+ UA_DataSetFieldContentMask dataSetFieldContentMask;
+ UA_Double messageReceiveTimeout;
+ UA_PubSubSecurityParameters securityParameters;
+ UA_ExtensionObject messageSettings;
+ UA_ExtensionObject transportSettings;
+ UA_SubscribedDataSetEnumType subscribedDataSetType;
+ /* TODO UA_SubscribedDataSetMirrorDataType subscribedDataSetMirror */
+ union {
+ UA_TargetVariables subscribedDataSetTarget;
+ // UA_SubscribedDataSetMirrorDataType subscribedDataSetMirror;
+ } subscribedDataSet;
+ /* non std. fields */
+ UA_PubSubRtEncoding expectedEncoding;
+} UA_DataSetReaderConfig;
+
+/* Update configuration to the dataSetReader */
+UA_StatusCode UA_EXPORT
+UA_Server_DataSetReader_updateConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
+ UA_NodeId readerGroupIdentifier,
+ const UA_DataSetReaderConfig *config);
+
+/* Get configuration of the dataSetReader */
+UA_StatusCode UA_EXPORT
+UA_Server_DataSetReader_getConfig(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
+ UA_DataSetReaderConfig *config);
+
+/* Get state of DataSetReader */
+UA_StatusCode UA_EXPORT
+UA_Server_DataSetReader_getState(UA_Server *server, UA_NodeId dataSetReaderIdentifier,
+ UA_PubSubState *state);
+
+/**
+ * ReaderGroup
+ * -----------
+
+ * ReaderGroup is used to group a list of DataSetReaders. All ReaderGroups are
+ * created within a PubSubConnection and automatically deleted if the connection
+ * is removed. All network message related filters are only available in the
+ * DataSetReader.
+ *
+ * The RT-levels go along with different requirements. The below listed levels
+ * can be configured for a ReaderGroup.
+ *
+ * - UA_PUBSUB_RT_NONE: RT applied to this level
+ * - PUBSUB_CONFIG_FASTPATH_FIXED_OFFSETS: Extends PubSub RT functionality and
+ * implements fast path message decoding in the Subscriber. Uses a buffered
+ * network message and only decodes the necessary offsets stored in an offset
+ * buffer. */
+
+/* ReaderGroup configuration */
+typedef struct {
+ UA_String name;
+ UA_PubSubSecurityParameters securityParameters;
+ /* PubSub Manager Callback */
+ UA_PubSub_CallbackLifecycle pubsubManagerCallback;
+ /* non std. field */
+ UA_Duration subscribingInterval; // Callback interval for subscriber: set the least publishingInterval value of all DSRs in this RG
+ UA_Boolean enableBlockingSocket; // To enable or disable blocking socket option
+ UA_UInt32 timeout; // Timeout for receive to wait for the packets
+ UA_PubSubRTLevel rtLevel;
+ size_t groupPropertiesSize;
+ UA_KeyValuePair *groupProperties;
+
+ /* Messages are decrypted if a SecurityPolicy is configured and the
+ * securityMode set accordingly. The symmetric key is a runtime information
+ * and has to be set via UA_Server_setReaderGroupEncryptionKey. */
+ UA_MessageSecurityMode securityMode;
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+ UA_PubSubSecurityPolicy *securityPolicy;
+#endif
+} UA_ReaderGroupConfig;
+
+void UA_EXPORT
+UA_ReaderGroupConfig_clear(UA_ReaderGroupConfig *readerGroupConfig);
+
+/* Add DataSetReader to the ReaderGroup */
+UA_StatusCode UA_EXPORT
+UA_Server_addDataSetReader(UA_Server *server, UA_NodeId readerGroupIdentifier,
+ const UA_DataSetReaderConfig *dataSetReaderConfig,
+ UA_NodeId *readerIdentifier);
+
+/* Remove DataSetReader from ReaderGroup */
+UA_StatusCode UA_EXPORT
+UA_Server_removeDataSetReader(UA_Server *server, UA_NodeId readerIdentifier);
+
+/* To Do: Update Configuration of ReaderGroup
+ * UA_StatusCode UA_EXPORT
+ * UA_Server_ReaderGroup_updateConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
+ * const UA_ReaderGroupConfig *config);
+ */
+
+/* Get configuraiton of ReaderGroup */
+UA_StatusCode UA_EXPORT
+UA_Server_ReaderGroup_getConfig(UA_Server *server, UA_NodeId readerGroupIdentifier,
+ UA_ReaderGroupConfig *config);
+
+/* Get state of ReaderGroup */
+UA_StatusCode UA_EXPORT
+UA_Server_ReaderGroup_getState(UA_Server *server, UA_NodeId readerGroupIdentifier,
+ UA_PubSubState *state);
+
+/* Add ReaderGroup to the created connection */
+UA_StatusCode UA_EXPORT
+UA_Server_addReaderGroup(UA_Server *server, UA_NodeId connectionIdentifier,
+ const UA_ReaderGroupConfig *readerGroupConfig,
+ UA_NodeId *readerGroupIdentifier);
+
+/* Remove ReaderGroup from connection */
+UA_StatusCode UA_EXPORT
+UA_Server_removeReaderGroup(UA_Server *server, UA_NodeId groupIdentifier);
+
+UA_StatusCode UA_EXPORT
+UA_Server_freezeReaderGroupConfiguration(UA_Server *server, const UA_NodeId readerGroupId);
+
+UA_StatusCode UA_EXPORT
+UA_Server_unfreezeReaderGroupConfiguration(UA_Server *server, const UA_NodeId readerGroupId);
+
+UA_StatusCode UA_EXPORT
+UA_Server_setReaderGroupOperational(UA_Server *server, const UA_NodeId readerGroupId);
+
+UA_StatusCode UA_EXPORT
+UA_Server_setReaderGroupDisabled(UA_Server *server, const UA_NodeId readerGroupId);
+
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+/* Set the group key for the message encryption */
+UA_StatusCode UA_EXPORT
+UA_Server_setReaderGroupEncryptionKeys(UA_Server *server, UA_NodeId readerGroup,
+ UA_UInt32 securityTokenId,
+ UA_ByteString signingKey,
+ UA_ByteString encryptingKey,
+ UA_ByteString keyNonce);
+#endif
+
+
+#endif /* UA_ENABLE_PUBSUB */
+
+_UA_END_DECLS
+
+#endif /* UA_SERVER_PUBSUB_H */
+
+/**** amalgamated original file "/include/open62541/server.h" ****/
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2014-2020 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
+ * Copyright 2015-2016 (c) Sten Grüner
+ * Copyright 2014-2015, 2017 (c) Florian Palm
+ * Copyright 2015-2016 (c) Chris Iatrou
+ * Copyright 2015-2016 (c) Oleksiy Vasylyev
+ * Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
* Copyright 2017 (c) Henrik Norrman
* Copyright 2018 (c) Fabian Arndt, Root-Core
- * Copyright 2019 (c) HMS Industrial Networks AB (Author: Jonas Green)
+ * Copyright 2017-2020 (c) HMS Industrial Networks AB (Author: Jonas Green)
+ * Copyright 2020-2021 (c) Christian von Arnim, ISW University of Stuttgart (for VDW and umati)
*/
+
#ifdef UA_ENABLE_PUBSUB
#endif
@@ -27612,12 +27853,32 @@ _UA_END_DECLS
_UA_BEGIN_DECLS
+/* Forward declarations */
+struct UA_PubSubConfiguration;
+typedef struct UA_PubSubConfiguration UA_PubSubConfiguration;
+
+typedef void (*UA_Server_AsyncOperationNotifyCallback)(UA_Server *server);
+
+typedef struct {
+ UA_UInt32 min;
+ UA_UInt32 max;
+} UA_UInt32Range;
+
+typedef struct {
+ UA_Duration min;
+ UA_Duration max;
+} UA_DurationRange;
+
/**
+ * .. _server:
+ *
+ * Server
+ * ======
+ *
* .. _server-configuration:
*
* Server Configuration
* --------------------
-
* The configuration structure is passed to the server during initialization.
* The server expects that the configuration is not modified during runtime.
* Currently, only one server can use a configuration at a time. During
@@ -27634,91 +27895,76 @@ _UA_BEGIN_DECLS
*
* The :ref:`tutorials` provide a good starting point for this. */
-typedef struct {
- UA_UInt32 min;
- UA_UInt32 max;
-} UA_UInt32Range;
-
-typedef struct {
- UA_Duration min;
- UA_Duration max;
-} UA_DurationRange;
-
-#ifdef UA_ENABLE_DISCOVERY
-typedef struct {
-
- /* Timeout in seconds when to automatically remove a registered server from
- * the list, if it doesn't re-register within the given time frame. A value
- * of 0 disables automatic removal. Default is 60 Minutes (60*60). Must be
- * bigger than 10 seconds, because cleanup is only triggered approximately
- * every 10 seconds. The server will still be removed depending on the
- * state of the semaphore file. */
- UA_UInt32 cleanupTimeout;
-
- /* Enable mDNS announce and response to queries */
- bool mdnsEnable;
-
-#ifdef UA_ENABLE_DISCOVERY_MULTICAST
- UA_MdnsDiscoveryConfiguration mdns;
- UA_String mdnsInterfaceIP;
-# if !defined(UA_HAS_GETIFADDR)
- uint32_t *ipAddressList;
- size_t ipAddressListSize;
-# endif
-#endif
-
-} UA_ServerConfig_Discovery;
-
-#endif
-
-typedef void
-(*UA_Server_AsyncOperationNotifyCallback)(UA_Server *server);
-
struct UA_ServerConfig {
- UA_UInt16 nThreads; /* only if multithreading is enabled */
UA_Logger logger;
- /* Server Description:
- * The description must be internally consistent.
- * - The ApplicationUri set in the ApplicationDescription must match the
- * URI set in the server certificate */
+ /**
+ * Server Description
+ * ^^^^^^^^^^^^^^^^^^
+ * The description must be internally consistent. The ApplicationUri set in
+ * the ApplicationDescription must match the URI set in the server
+ * certificate. */
UA_BuildInfo buildInfo;
UA_ApplicationDescription applicationDescription;
UA_ByteString serverCertificate;
- UA_Double shutdownDelay; /* Delay in ms from the shutdown signal (ctrl-c)
- until the actual shutdown. Clients need to be
- able to get a notification ahead of time. */
+ /**
+ * Timeouts and Delays
+ * ^^^^^^^^^^^^^^^^^^^ */
+ /* Delay in ms from the shutdown signal (ctrl-c) until the actual shutdown.
+ * Clients need to be able to get a notification ahead of time. */
+ UA_Double shutdownDelay;
- /* Rule Handling */
- UA_RuleHandling verifyRequestTimestamp; /* Verify that the server sends a
- * timestamp in the request header */
+ /**
+ * Rule Handling
+ * ^^^^^^^^^^^^^
+ * Override the handling of standard-defined behavior. These settings are
+ * used to balance the following contradicting requirements:
+ *
+ * - Strict conformance with the standard (for certification).
+ * - Ensure interoperability with old/non-conforming implementations
+ * encountered in the wild.
+ *
+ * The defaults are set for compatibility with the largest number of OPC UA
+ * vendors (with log warnings activated). Cf. Postel's Law "be conservative
+ * in what you send, be liberal in what you accept".
+ *
+ * See the section :ref:`rule-handling` for the possible settings. */
- /* Custom DataTypes. Attention! Custom datatypes are not cleaned up together
- * with the configuration. So it is possible to allocate them on ROM. */
- const UA_DataTypeArray *customDataTypes;
+ /* Verify that the server sends a timestamp in the request header */
+ UA_RuleHandling verifyRequestTimestamp;
+
+ /* Variables (that don't have a DataType of BaseDataType) must not have an
+ * empty variant value. The default behaviour is to auto-create a matching
+ * zeroed-out value for empty VariableNodes when they are added. */
+ UA_RuleHandling allowEmptyVariables;
/**
- * .. note:: See the section on :ref:`generic-types`. Examples for working
- * with custom data types are provided in
- * ``/examples/custom_datatype/``. */
+ * Custom Data Types
+ * ^^^^^^^^^^^^^^^^^
+ * The following is a linked list of arrays with custom data types. All data
+ * types that are accessible from here are automatically considered for the
+ * decoding of received messages. Custom data types are not cleaned up
+ * together with the configuration. So it is possible to allocate them on
+ * ROM.
+ *
+ * See the section on :ref:`generic-types`. Examples for working with custom
+ * data types are provided in ``/examples/custom_datatype/``. */
+ const UA_DataTypeArray *customDataTypes;
- /* Networking */
+ /**
+ * Networking
+ * ^^^^^^^^^^ */
size_t networkLayersSize;
UA_ServerNetworkLayer *networkLayers;
UA_String customHostname;
-#ifdef UA_ENABLE_PUBSUB
- /*PubSub network layer */
- size_t pubsubTransportLayersSize;
- UA_PubSubTransportLayer *pubsubTransportLayers;
-#endif
-
- /* Available security policies */
+ /**
+ * Security and Encryption
+ * ^^^^^^^^^^^^^^^^^^^^^^^ */
size_t securityPoliciesSize;
UA_SecurityPolicy* securityPolicies;
- /* Available endpoints */
size_t endpointsSize;
UA_EndpointDescription *endpoints;
@@ -27731,44 +27977,33 @@ struct UA_ServerConfig {
* securityPolicies list. */
UA_Boolean securityPolicyNoneDiscoveryOnly;
- /* Node Lifecycle callbacks */
- UA_GlobalNodeLifecycle nodeLifecycle;
+ UA_CertificateVerification certificateVerification;
/**
- * .. note:: See the section for :ref:`node lifecycle
- * handling<node-lifecycle>`. */
-
- /* Access Control */
+ * See the section for :ref:`access-control
+ * handling<access-control>`. */
UA_AccessControl accessControl;
/**
- * .. note:: See the section for :ref:`access-control
- * handling<access-control>`. */
-
- /* Async Operations */
-#if UA_MULTITHREADING >= 100
- UA_Double asyncOperationTimeout; /* in ms, 0 => unlimited */
- size_t maxAsyncOperationQueueSize; /* 0 => unlimited */
- UA_DEPRECATED UA_Double asyncCallRequestTimeout; /* in ms, 0 => unlimited */
- /* Notify workers when an async operation was enqueued */
- UA_Server_AsyncOperationNotifyCallback asyncOperationNotifyCallback;
-#endif
-
- /**
- * .. note:: See the section for :ref:`async
- * operations<async-operations>`. */
-
- /* Nodestore */
+ * Nodes and Node Lifecycle
+ * ^^^^^^^^^^^^^^^^^^^^^^^^
+ * See the section for :ref:`node lifecycle handling<node-lifecycle>`. */
UA_Nodestore nodestore;
+ UA_GlobalNodeLifecycle nodeLifecycle;
- /* Certificate Verification */
- UA_CertificateVerification certificateVerification;
-
- /* Relax constraints for the InformationModel */
- UA_Boolean relaxEmptyValueConstraint; /* Nominally, only variables with data
- * type BaseDataType can have an empty
- * value. */
+ /**
+ * Copy the HasModellingRule reference in instances from the type
+ * definition in UA_Server_addObjectNode and UA_Server_addVariableNode.
+ *
+ * Part 3 - 6.4.4: [...] it is not required that newly created or referenced
+ * instances based on InstanceDeclarations have a ModellingRule, however, it
+ * is allowed that they have any ModellingRule independent of the
+ * ModellingRule of their InstanceDeclaration */
+ UA_Boolean modellingRulesOnInstances;
+ /**
+ * Limits
+ * ^^^^^^ */
/* Limits for SecureChannels */
UA_UInt16 maxSecureChannels;
UA_UInt32 maxSecurityTokenLifetime; /* in ms */
@@ -27790,6 +28025,44 @@ struct UA_ServerConfig {
/* Limits for Requests */
UA_UInt32 maxReferencesPerNode;
+ /**
+ * Async Operations
+ * ^^^^^^^^^^^^^^^^
+ * See the section for :ref:`async operations<async-operations>`. */
+#if UA_MULTITHREADING >= 100
+ UA_Double asyncOperationTimeout; /* in ms, 0 => unlimited */
+ size_t maxAsyncOperationQueueSize; /* 0 => unlimited */
+ /* Notify workers when an async operation was enqueued */
+ UA_Server_AsyncOperationNotifyCallback asyncOperationNotifyCallback;
+#endif
+
+ /**
+ * Discovery
+ * ^^^^^^^^^ */
+#ifdef UA_ENABLE_DISCOVERY
+ /* Timeout in seconds when to automatically remove a registered server from
+ * the list, if it doesn't re-register within the given time frame. A value
+ * of 0 disables automatic removal. Default is 60 Minutes (60*60). Must be
+ * bigger than 10 seconds, because cleanup is only triggered approximately
+ * every 10 seconds. The server will still be removed depending on the
+ * state of the semaphore file. */
+ UA_UInt32 discoveryCleanupTimeout;
+
+# ifdef UA_ENABLE_DISCOVERY_MULTICAST
+ UA_Boolean mdnsEnabled;
+ UA_MdnsDiscoveryConfiguration mdnsConfig;
+ UA_String mdnsInterfaceIP;
+# if !defined(UA_HAS_GETIFADDR)
+ size_t mdnsIpAddressListSize;
+ UA_UInt32 *mdnsIpAddressList;
+# endif
+# endif
+#endif
+
+ /**
+ * Subscriptions
+ * ^^^^^^^^^^^^^ */
+#ifdef UA_ENABLE_SUBSCRIPTIONS
/* Limits for Subscriptions */
UA_UInt32 maxSubscriptions;
UA_UInt32 maxSubscriptionsPerSession;
@@ -27799,9 +28072,9 @@ struct UA_ServerConfig {
UA_UInt32 maxNotificationsPerPublish;
UA_Boolean enableRetransmissionQueue;
UA_UInt32 maxRetransmissionQueueSize; /* 0 -> unlimited size */
-#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
+# ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
UA_UInt32 maxEventsPerNode; /* 0 -> unlimited size */
-#endif
+# endif
/* Limits for MonitoredItems */
UA_UInt32 maxMonitoredItems;
@@ -27812,30 +28085,38 @@ struct UA_ServerConfig {
/* Limits for PublishRequests */
UA_UInt32 maxPublishReqPerSession;
- /* Discovery */
-#ifdef UA_ENABLE_DISCOVERY
- UA_ServerConfig_Discovery discovery;
-#endif
-
-#ifdef UA_ENABLE_SUBSCRIPTIONS
/* Register MonitoredItem in Userland
*
* @param server Allows the access to the server object
* @param sessionId The session id, represented as an node id
- * @param sessionContext An optional pointer to user-defined data for the specific data source
+ * @param sessionContext An optional pointer to user-defined data for the
+ * specific data source
* @param nodeid Id of the node in question
* @param nodeidContext An optional pointer to user-defined data, associated
- * with the node in the nodestore. Note that, if the node has already been removed,
- * this value contains a NULL pointer.
- * @param attributeId Identifies which attribute (value, data type etc.) is monitored
+ * with the node in the nodestore. Note that, if the node has already
+ * been removed, this value contains a NULL pointer.
+ * @param attributeId Identifies which attribute (value, data type etc.) is
+ * monitored
* @param removed Determines if the MonitoredItem was removed or created. */
void (*monitoredItemRegisterCallback)(UA_Server *server,
- const UA_NodeId *sessionId, void *sessionContext,
- const UA_NodeId *nodeId, void *nodeContext,
- UA_UInt32 attibuteId, UA_Boolean removed);
+ const UA_NodeId *sessionId,
+ void *sessionContext,
+ const UA_NodeId *nodeId,
+ void *nodeContext,
+ UA_UInt32 attibuteId,
+ UA_Boolean removed);
+#endif
+
+ /**
+ * PubSub
+ * ^^^^^^ */
+#ifdef UA_ENABLE_PUBSUB
+ UA_PubSubConfiguration pubSubConfig;
#endif
- /* Historical Access */
+ /**
+ * Historical Access
+ * ^^^^^^^^^^^^^^^^^ */
#ifdef UA_ENABLE_HISTORIZING
UA_HistoryDatabase historyDatabase;
@@ -27864,34 +28145,1484 @@ struct UA_ServerConfig {
void UA_EXPORT
UA_ServerConfig_clean(UA_ServerConfig *config);
-/* Set a custom hostname in server configuration */
-UA_EXPORT void
-UA_ServerConfig_setCustomHostname(UA_ServerConfig *config,
- const UA_String customHostname);
+/**
+ * .. _server-lifecycle:
+ *
+ * Server Lifecycle
+ * ---------------- */
+
+/* The method UA_Server_new is defined in server_config_default.h. So default
+ * plugins outside of the core library (for logging, etc) are already available
+ * during the initialization.
+ *
+ * UA_Server UA_EXPORT * UA_Server_new(void);
+ */
+
+/* Creates a new server. Moves the config into the server with a shallow copy.
+ * The config content is cleared together with the server. */
+UA_Server UA_EXPORT *
+UA_Server_newWithConfig(UA_ServerConfig *config);
+
+void UA_EXPORT UA_Server_delete(UA_Server *server);
+
+UA_ServerConfig UA_EXPORT *
+UA_Server_getConfig(UA_Server *server);
+
+/* Runs the main loop of the server. In each iteration, this calls into the
+ * networklayers to see if messages have arrived.
+ *
+ * @param server The server object.
+ * @param running The loop is run as long as *running is true.
+ * Otherwise, the server shuts down.
+ * @return Returns the statuscode of the UA_Server_run_shutdown method */
+UA_StatusCode UA_EXPORT
+UA_Server_run(UA_Server *server, const volatile UA_Boolean *running);
+
+/* The prologue part of UA_Server_run (no need to use if you call
+ * UA_Server_run) */
+UA_StatusCode UA_EXPORT
+UA_Server_run_startup(UA_Server *server);
+
+/* Executes a single iteration of the server's main loop.
+ *
+ * @param server The server object.
+ * @param waitInternal Should we wait for messages in the networklayer?
+ * Otherwise, the timouts for the networklayers are set to zero.
+ * The default max wait time is 50millisec.
+ * @return Returns how long we can wait until the next scheduled
+ * callback (in ms) */
+UA_UInt16 UA_EXPORT
+UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal);
+
+/* The epilogue part of UA_Server_run (no need to use if you call
+ * UA_Server_run) */
+UA_StatusCode UA_EXPORT
+UA_Server_run_shutdown(UA_Server *server);
+
+/**
+ * Timed Callbacks
+ * ---------------
+ * Add a callback to the server that is executed at a defined time.
+ * The callback can also be registered with a cyclic interval. */
+
+/* Add a callback for execution at a specified time. If the indicated time lies
+ * in the past, then the callback is executed at the next iteration of the
+ * server's main loop.
+ *
+ * @param server The server object.
+ * @param callback The callback that shall be added.
+ * @param data Data that is forwarded to the callback.
+ * @param date The timestamp for the execution time.
+ * @param callbackId Set to the identifier of the repeated callback . This can
+ * be used to cancel the callback later on. If the pointer is null, the
+ * identifier is not set.
+ * @return Upon success, ``UA_STATUSCODE_GOOD`` is returned. An error code
+ * otherwise. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_addTimedCallback(UA_Server *server, UA_ServerCallback callback,
+ void *data, UA_DateTime date, UA_UInt64 *callbackId);
+
+/* Add a callback for cyclic repetition to the server.
+ *
+ * @param server The server object.
+ * @param callback The callback that shall be added.
+ * @param data Data that is forwarded to the callback.
+ * @param interval_ms The callback shall be repeatedly executed with the given
+ * interval (in ms). The interval must be positive. The first execution
+ * occurs at now() + interval at the latest.
+ * @param callbackId Set to the identifier of the repeated callback . This can
+ * be used to cancel the callback later on. If the pointer is null, the
+ * identifier is not set.
+ * @return Upon success, ``UA_STATUSCODE_GOOD`` is returned. An error code
+ * otherwise. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
+ void *data, UA_Double interval_ms,
+ UA_UInt64 *callbackId);
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
+ UA_Double interval_ms);
+
+/* Remove a repeated callback. Does nothing if the callback is not found.
+ *
+ * @param server The server object.
+ * @param callbackId The id of the callback */
+void UA_EXPORT UA_THREADSAFE
+UA_Server_removeCallback(UA_Server *server, UA_UInt64 callbackId);
+
+#define UA_Server_removeRepeatedCallback(server, callbackId) \
+ UA_Server_removeCallback(server, callbackId);
+
+/**
+ * Session Handling
+ * ----------------
+ * A new session is announced via the AccessControl plugin. The session
+ * identifier is forwarded to the relevant callbacks back into userland. The
+ * following methods enable an interaction with a particular session. */
+
+/* Manually close a session */
+UA_EXPORT UA_StatusCode UA_THREADSAFE
+UA_Server_closeSession(UA_Server *server, const UA_NodeId *sessionId);
+
+/* Session Parameters: Besides the user-definable session context pointer,
+ * so-called session parameters are a way to attach key-value parameters to a
+ * session. This enables "plugins" to attach data to a session without impacting
+ * the user-definedable session context pointer. */
+
+UA_EXPORT UA_StatusCode UA_THREADSAFE
+UA_Server_setSessionParameter(UA_Server *server, const UA_NodeId *sessionId,
+ const char *name, const UA_Variant *parameter);
+
+UA_EXPORT void UA_THREADSAFE
+UA_Server_deleteSessionParameter(UA_Server *server, const UA_NodeId *sessionId,
+ const char *name);
+
+/* Returns NULL if the session or the parameter are not defined. Returns a deep
+ * copy otherwise */
+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 parameter is not defined or not of the right datatype */
+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);
+
+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);
+
+/**
+ * Reading and Writing Node Attributes
+ * -----------------------------------
+ * The functions for reading and writing node attributes call the regular read
+ * and write service in the background that are also used over the network.
+ *
+ * The following attributes cannot be read, since the local "admin" user always
+ * has full rights.
+ *
+ * - UserWriteMask
+ * - UserAccessLevel
+ * - UserExecutable */
+/* Read an attribute of a node. The specialized functions below provide a more
+ * concise syntax.
+ *
+ * @param server The server object.
+ * @param item ReadValueIds contain the NodeId of the target node, the id of the
+ * attribute to read and (optionally) an index range to read parts
+ * of an array only. See the section on NumericRange for the format
+ * used for array ranges.
+ * @param timestamps Which timestamps to return for the attribute.
+ * @return Returns a DataValue that contains either an error code, or a variant
+ * with the attribute value and the timestamps. */
+UA_DataValue UA_EXPORT UA_THREADSAFE
+UA_Server_read(UA_Server *server, const UA_ReadValueId *item,
+ UA_TimestampsToReturn timestamps);
+
+/* Don't use this function. There are typed versions for every supported
+ * attribute. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+__UA_Server_read(UA_Server *server, const UA_NodeId *nodeId,
+ UA_AttributeId attributeId, void *v);
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readNodeId(UA_Server *server, const UA_NodeId nodeId,
+ UA_NodeId *outNodeId) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODEID, outNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readNodeClass(UA_Server *server, const UA_NodeId nodeId,
+ UA_NodeClass *outNodeClass) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_NODECLASS,
+ outNodeClass);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readBrowseName(UA_Server *server, const UA_NodeId nodeId,
+ UA_QualifiedName *outBrowseName) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
+ outBrowseName);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readDisplayName(UA_Server *server, const UA_NodeId nodeId,
+ UA_LocalizedText *outDisplayName) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
+ outDisplayName);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readDescription(UA_Server *server, const UA_NodeId nodeId,
+ UA_LocalizedText *outDescription) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
+ outDescription);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readWriteMask(UA_Server *server, const UA_NodeId nodeId,
+ UA_UInt32 *outWriteMask) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
+ outWriteMask);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readIsAbstract(UA_Server *server, const UA_NodeId nodeId,
+ UA_Boolean *outIsAbstract) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
+ outIsAbstract);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readSymmetric(UA_Server *server, const UA_NodeId nodeId,
+ UA_Boolean *outSymmetric) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_SYMMETRIC,
+ outSymmetric);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readInverseName(UA_Server *server, const UA_NodeId nodeId,
+ UA_LocalizedText *outInverseName) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
+ outInverseName);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readContainsNoLoops(UA_Server *server, const UA_NodeId nodeId,
+ UA_Boolean *outContainsNoLoops) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS,
+ outContainsNoLoops);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readEventNotifier(UA_Server *server, const UA_NodeId nodeId,
+ UA_Byte *outEventNotifier) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
+ outEventNotifier);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readValue(UA_Server *server, const UA_NodeId nodeId,
+ UA_Variant *outValue) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUE, outValue);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readDataType(UA_Server *server, const UA_NodeId nodeId,
+ UA_NodeId *outDataType) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
+ outDataType);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readValueRank(UA_Server *server, const UA_NodeId nodeId,
+ UA_Int32 *outValueRank) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
+ outValueRank);
+}
+
+/* Returns a variant with an int32 array */
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
+ UA_Variant *outArrayDimensions) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
+ outArrayDimensions);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readAccessLevel(UA_Server *server, const UA_NodeId nodeId,
+ UA_Byte *outAccessLevel) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
+ outAccessLevel);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
+ UA_Double *outMinimumSamplingInterval) {
+ return __UA_Server_read(server, &nodeId,
+ UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
+ outMinimumSamplingInterval);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readHistorizing(UA_Server *server, const UA_NodeId nodeId,
+ UA_Boolean *outHistorizing) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_HISTORIZING,
+ outHistorizing);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_readExecutable(UA_Server *server, const UA_NodeId nodeId,
+ UA_Boolean *outExecutable) {
+ return __UA_Server_read(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
+ outExecutable);
+}
+
+/**
+ * The following node attributes cannot be changed once a node has been created:
+ *
+ * - NodeClass
+ * - NodeId
+ * - Symmetric
+ * - ContainsNoLoops
+ *
+ * The following attributes cannot be written from the server, as they are
+ * specific to the different users and set by the access control callback:
+ *
+ * - UserWriteMask
+ * - UserAccessLevel
+ * - UserExecutable
+ */
+
+/* Overwrite an attribute of a node. The specialized functions below provide a
+ * more concise syntax.
+ *
+ * @param server The server object.
+ * @param value WriteValues contain the NodeId of the target node, the id of the
+ * attribute to overwritten, the actual value and (optionally) an
+ * index range to replace parts of an array only. of an array only.
+ * See the section on NumericRange for the format used for array
+ * ranges.
+ * @return Returns a status code. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_write(UA_Server *server, const UA_WriteValue *value);
+
+/* Don't use this function. There are typed versions with no additional
+ * overhead. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+__UA_Server_write(UA_Server *server, const UA_NodeId *nodeId,
+ const UA_AttributeId attributeId,
+ const UA_DataType *attr_type, const void *attr);
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeBrowseName(UA_Server *server, const UA_NodeId nodeId,
+ const UA_QualifiedName browseName) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_BROWSENAME,
+ &UA_TYPES[UA_TYPES_QUALIFIEDNAME], &browseName);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeDisplayName(UA_Server *server, const UA_NodeId nodeId,
+ const UA_LocalizedText displayName) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME,
+ &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &displayName);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeDescription(UA_Server *server, const UA_NodeId nodeId,
+ const UA_LocalizedText description) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DESCRIPTION,
+ &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &description);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeWriteMask(UA_Server *server, const UA_NodeId nodeId,
+ const UA_UInt32 writeMask) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_WRITEMASK,
+ &UA_TYPES[UA_TYPES_UINT32], &writeMask);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeIsAbstract(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Boolean isAbstract) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ISABSTRACT,
+ &UA_TYPES[UA_TYPES_BOOLEAN], &isAbstract);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeInverseName(UA_Server *server, const UA_NodeId nodeId,
+ const UA_LocalizedText inverseName) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_INVERSENAME,
+ &UA_TYPES[UA_TYPES_LOCALIZEDTEXT], &inverseName);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeEventNotifier(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Byte eventNotifier) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER,
+ &UA_TYPES[UA_TYPES_BYTE], &eventNotifier);
+}
+
+/**
+ * Writes an UA_Variant to a variable/variableType node.
+ * StatusCode is set to ``UA_STATUSCODE_GOOD``, sourceTimestamp and
+ * serverTimestamp are set to UA_DateTime_now()
+ */
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeValue(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Variant value) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
+ &UA_TYPES[UA_TYPES_VARIANT], &value);
+}
+
+/**
+ * Writes an UA_DataValue to a variable/variableType node.
+ * In contrast to UA_Server_writeValue, this functions can also write
+ * sourceTimestamp, serverTimestamp and statusCode.
+ */
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeDataValue(UA_Server *server, const UA_NodeId nodeId,
+ const UA_DataValue value) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUE,
+ &UA_TYPES[UA_TYPES_DATAVALUE], &value);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeDataType(UA_Server *server, const UA_NodeId nodeId,
+ const UA_NodeId dataType) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_DATATYPE,
+ &UA_TYPES[UA_TYPES_NODEID], &dataType);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeValueRank(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Int32 valueRank) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_VALUERANK,
+ &UA_TYPES[UA_TYPES_INT32], &valueRank);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeArrayDimensions(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Variant arrayDimensions) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ARRAYDIMENSIONS,
+ &UA_TYPES[UA_TYPES_VARIANT], &arrayDimensions);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeAccessLevel(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Byte accessLevel) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL,
+ &UA_TYPES[UA_TYPES_BYTE], &accessLevel);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeMinimumSamplingInterval(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Double miniumSamplingInterval) {
+ return __UA_Server_write(server, &nodeId,
+ UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
+ &UA_TYPES[UA_TYPES_DOUBLE],
+ &miniumSamplingInterval);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeHistorizing(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Boolean historizing) {
+ return __UA_Server_write(server, &nodeId,
+ UA_ATTRIBUTEID_HISTORIZING,
+ &UA_TYPES[UA_TYPES_BOOLEAN],
+ &historizing);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_writeExecutable(UA_Server *server, const UA_NodeId nodeId,
+ const UA_Boolean executable) {
+ return __UA_Server_write(server, &nodeId, UA_ATTRIBUTEID_EXECUTABLE,
+ &UA_TYPES[UA_TYPES_BOOLEAN], &executable); }
+
+/**
+ * Browsing
+ * -------- */
+
+/* Browse the references of a particular node. See the definition of
+ * BrowseDescription structure for details. */
+UA_BrowseResult UA_EXPORT UA_THREADSAFE
+UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences,
+ const UA_BrowseDescription *bd);
+
+UA_BrowseResult UA_EXPORT UA_THREADSAFE
+UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint,
+ const UA_ByteString *continuationPoint);
+
+/* Non-standard version of the Browse service that recurses into child nodes.
+ *
+ * Possible loops (that can occur for non-hierarchical references) are handled
+ * internally. Every node is added at most once to the results array.
+ *
+ * Nodes are only added if they match the NodeClassMask in the
+ * BrowseDescription. However, child nodes are still recursed into if the
+ * NodeClass does not match. So it is possible, for example, to get all
+ * VariableNodes below a certain ObjectNode, with additional objects in the
+ * hierarchy below. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_browseRecursive(UA_Server *server, const UA_BrowseDescription *bd,
+ size_t *resultsSize, UA_ExpandedNodeId **results);
+
+UA_BrowsePathResult UA_EXPORT UA_THREADSAFE
+UA_Server_translateBrowsePathToNodeIds(UA_Server *server,
+ const UA_BrowsePath *browsePath);
+
+/* A simplified TranslateBrowsePathsToNodeIds based on the
+ * SimpleAttributeOperand type (Part 4, 7.4.4.5).
+ *
+ * This specifies a relative path using a list of BrowseNames instead of the
+ * RelativePath structure. The list of BrowseNames is equivalent to a
+ * RelativePath that specifies forward references which are subtypes of the
+ * HierarchicalReferences ReferenceType. All Nodes followed by the browsePath
+ * shall be of the NodeClass Object or Variable. */
+UA_BrowsePathResult UA_EXPORT UA_THREADSAFE
+UA_Server_browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
+ size_t browsePathSize,
+ const UA_QualifiedName *browsePath);
+
+#ifndef HAVE_NODEITER_CALLBACK
+#define HAVE_NODEITER_CALLBACK
+/* Iterate over all nodes referenced by parentNodeId by calling the callback
+ * function for each child node (in ifdef because GCC/CLANG handle include order
+ * differently) */
+typedef UA_StatusCode
+(*UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse,
+ UA_NodeId referenceTypeId, void *handle);
+#endif
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId,
+ UA_NodeIteratorCallback callback, void *handle);
+
+#ifdef UA_ENABLE_DISCOVERY
+
+/**
+ * Discovery
+ * --------- */
+/* Register the given server instance at the discovery server.
+ * This should be called periodically.
+ * The semaphoreFilePath is optional. If the given file is deleted,
+ * the server will automatically be unregistered. This could be
+ * for example a pid file which is deleted if the server crashes.
+ *
+ * When the server shuts down you need to call unregister.
+ *
+ * @param server
+ * @param client the client which is used to call the RegisterServer. It must
+ * already be connected to the correct endpoint
+ * @param semaphoreFilePath optional parameter pointing to semaphore file. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_register_discovery(UA_Server *server, struct UA_Client *client,
+ const char* semaphoreFilePath);
+
+/* Unregister the given server instance from the discovery server.
+ * This should only be called when the server is shutting down.
+ * @param server
+ * @param client the client which is used to call the RegisterServer. It must
+ * already be connected to the correct endpoint */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_unregister_discovery(UA_Server *server, struct UA_Client *client);
+
+ /* Adds a periodic callback to register the server with the LDS (local
+ * discovery server) periodically. The interval between each register call is
+ * given as second parameter. It should be 10 minutes by default (=
+ * 10*60*1000).
+ *
+ * The delayFirstRegisterMs parameter indicates the delay for the first
+ * register call. If it is 0, the first register call will be after intervalMs
+ * milliseconds, otherwise the server's first register will be after
+ * delayFirstRegisterMs.
+ *
+ * When you manually unregister the server, you also need to cancel the
+ * periodic callback, otherwise it will be automatically be registered again.
+ *
+ * If you call this method multiple times for the same discoveryServerUrl, the
+ * older periodic callback will be removed.
+ *
+ * @param server
+ * @param client the client which is used to call the RegisterServer. It must
+ * not yet be connected and will be connected for every register call
+ * to the given discoveryServerUrl.
+ * @param discoveryServerUrl where this server should register itself. The
+ * string will be copied internally. Therefore you can free it after
+ * calling this method.
+ * @param intervalMs
+ * @param delayFirstRegisterMs
+ * @param periodicCallbackId */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_addPeriodicServerRegisterCallback(UA_Server *server,
+ struct UA_Client *client,
+ const char* discoveryServerUrl,
+ UA_Double intervalMs,
+ UA_Double delayFirstRegisterMs,
+ UA_UInt64 *periodicCallbackId);
+
+/* Callback for RegisterServer. Data is passed from the register call */
+typedef void
+(*UA_Server_registerServerCallback)(const UA_RegisteredServer *registeredServer,
+ void* data);
+
+/* Set the callback which is called if another server registeres or unregisters
+ * with this instance. This callback is called every time the server gets a
+ * register call. This especially means that for every periodic server register
+ * the callback will be called.
+ *
+ * @param server
+ * @param cb the callback
+ * @param data data passed to the callback
+ * @return ``UA_STATUSCODE_SUCCESS`` on success */
+void UA_EXPORT UA_THREADSAFE
+UA_Server_setRegisterServerCallback(UA_Server *server,
+ UA_Server_registerServerCallback cb, void* data);
+
+#ifdef UA_ENABLE_DISCOVERY_MULTICAST
+
+/* Callback for server detected through mDNS. Data is passed from the register
+ * call
+ *
+ * @param isServerAnnounce indicates if the server has just been detected. If
+ * set to false, this means the server is shutting down.
+ * @param isTxtReceived indicates if we already received the corresponding TXT
+ * record with the path and caps data */
+typedef void
+(*UA_Server_serverOnNetworkCallback)(const UA_ServerOnNetwork *serverOnNetwork,
+ UA_Boolean isServerAnnounce,
+ UA_Boolean isTxtReceived, void* data);
+
+/* Set the callback which is called if another server is found through mDNS or
+ * deleted. It will be called for any mDNS message from the remote server, thus
+ * it may be called multiple times for the same instance. Also the SRV and TXT
+ * records may arrive later, therefore for the first call the server
+ * capabilities may not be set yet. If called multiple times, previous data will
+ * be overwritten.
+ *
+ * @param server
+ * @param cb the callback
+ * @param data data passed to the callback
+ * @return ``UA_STATUSCODE_SUCCESS`` on success */
+void UA_EXPORT UA_THREADSAFE
+UA_Server_setServerOnNetworkCallback(UA_Server *server,
+ UA_Server_serverOnNetworkCallback cb,
+ void* data);
+
+#endif /* UA_ENABLE_DISCOVERY_MULTICAST */
+
+#endif /* UA_ENABLE_DISCOVERY */
+
+/**
+ * Information Model Callbacks
+ * ---------------------------
+ *
+ * There are three places where a callback from an information model to
+ * user-defined code can happen.
+ *
+ * - Custom node constructors and destructors
+ * - Linking VariableNodes with an external data source
+ * - MethodNode callbacks
+ */
+
+void UA_EXPORT
+UA_Server_setAdminSessionContext(UA_Server *server,
+ void *context);
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId,
+ UA_NodeTypeLifecycle lifecycle);
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_getNodeContext(UA_Server *server, UA_NodeId nodeId,
+ void **nodeContext);
+
+/* Careful! The user has to ensure that the destructor callbacks still work. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_setNodeContext(UA_Server *server, UA_NodeId nodeId,
+ void *nodeContext);
+
+/**
+ * .. _datasource:
+ *
+ * Data Source Callback
+ * ^^^^^^^^^^^^^^^^^^^^
+ *
+ * The server has a unique way of dealing with the content of variables. Instead
+ * of storing a variant attached to the variable node, the node can point to a
+ * function with a local data provider. Whenever the value attribute is read,
+ * the function will be called and asked to provide a UA_DataValue return value
+ * that contains the value content and additional timestamps.
+ *
+ * It is expected that the read callback is implemented. The write callback can
+ * be set to a null-pointer. */
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId,
+ const UA_DataSource dataSource);
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_setVariableNode_valueCallback(UA_Server *server,
+ const UA_NodeId nodeId,
+ const UA_ValueCallback callback);
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_setVariableNode_valueBackend(UA_Server *server,
+ const UA_NodeId nodeId,
+ const UA_ValueBackend valueBackend);
+
+/**
+ * .. _local-monitoreditems:
+ *
+ * Local MonitoredItems
+ * ^^^^^^^^^^^^^^^^^^^^
+ *
+ * MonitoredItems are used with the Subscription mechanism of OPC UA to
+ * transported notifications for data changes and events. MonitoredItems can
+ * also be registered locally. Notifications are then forwarded to a
+ * user-defined callback instead of a remote client. */
+
+#ifdef UA_ENABLE_SUBSCRIPTIONS
+
+typedef 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);
+
+typedef void (*UA_Server_EventNotificationCallback)
+ (UA_Server *server, UA_UInt32 monId, void *monContext,
+ size_t nEventFields, const UA_Variant *eventFields);
+
+/* Create a local MonitoredItem with a sampling interval that detects data
+ * changes.
+ *
+ * @param server The server executing the MonitoredItem
+ * @timestampsToReturn Shall timestamps be added to the value for the callback?
+ * @item The parameters of the new MonitoredItem. Note that the attribute of the
+ * ReadValueId (the node that is monitored) can not be
+ * ``UA_ATTRIBUTEID_EVENTNOTIFIER``. A different callback type needs to be
+ * registered for event notifications.
+ * @monitoredItemContext A pointer that is forwarded with the callback
+ * @callback The callback that is executed on detected data changes
+ *
+ * @return Returns a description of the created MonitoredItem. The structure
+ * also contains a StatusCode (in case of an error) and the identifier of the
+ * new MonitoredItem. */
+UA_MonitoredItemCreateResult UA_EXPORT UA_THREADSAFE
+UA_Server_createDataChangeMonitoredItem(UA_Server *server,
+ UA_TimestampsToReturn timestampsToReturn,
+ const UA_MonitoredItemCreateRequest item,
+ void *monitoredItemContext,
+ UA_Server_DataChangeNotificationCallback callback);
+
+/* UA_MonitoredItemCreateResult UA_EXPORT */
+/* UA_Server_createEventMonitoredItem(UA_Server *server, */
+/* UA_TimestampsToReturn timestampsToReturn, */
+/* const UA_MonitoredItemCreateRequest item, void *context, */
+/* UA_Server_EventNotificationCallback callback); */
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_deleteMonitoredItem(UA_Server *server, UA_UInt32 monitoredItemId);
+
+#endif
+
+/**
+ * Method Callbacks
+ * ^^^^^^^^^^^^^^^^
+ * Method callbacks are set to `NULL` (not executable) when a method node is
+ * added over the network. In theory, it is possible to add a callback via
+ * ``UA_Server_setMethodNode_callback`` within the global constructor when
+ * adding methods over the network is really wanted. See the Section
+ * :ref:`object-interaction` for calling methods on an object. */
+
+#ifdef UA_ENABLE_METHODCALLS
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_setMethodNodeCallback(UA_Server *server,
+ const UA_NodeId methodNodeId,
+ UA_MethodCallback methodCallback);
+
+/* Backwards compatibility definition */
+#define UA_Server_setMethodNode_callback(server, methodNodeId, methodCallback) \
+ UA_Server_setMethodNodeCallback(server, methodNodeId, methodCallback)
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_getMethodNodeCallback(UA_Server *server,
+ const UA_NodeId methodNodeId,
+ UA_MethodCallback *outMethodCallback);
+
+UA_CallMethodResult UA_EXPORT UA_THREADSAFE
+UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request);
+#endif
+
+/**
+ * .. _object-interaction:
+ *
+ * Interacting with Objects
+ * ------------------------
+ * Objects in the information model are represented as ObjectNodes. Some
+ * convenience functions are provided to simplify the interaction with objects.
+ */
+
+/* Write an object property. The property is represented as a VariableNode with
+ * a ``HasProperty`` reference from the ObjectNode. The VariableNode is
+ * identified by its BrowseName. Writing the property sets the value attribute
+ * of the VariableNode.
+ *
+ * @param server The server object
+ * @param objectId The identifier of the object (node)
+ * @param propertyName The name of the property
+ * @param value The value to be set for the event attribute
+ * @return The StatusCode for setting the event attribute */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_writeObjectProperty(UA_Server *server, const UA_NodeId objectId,
+ const UA_QualifiedName propertyName,
+ const UA_Variant value);
+
+/* Directly point to the scalar value instead of a variant */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_writeObjectProperty_scalar(UA_Server *server, const UA_NodeId objectId,
+ const UA_QualifiedName propertyName,
+ const void *value, const UA_DataType *type);
+
+/* Read an object property.
+ *
+ * @param server The server object
+ * @param objectId The identifier of the object (node)
+ * @param propertyName The name of the property
+ * @param value Contains the property value after reading. Must not be NULL.
+ * @return The StatusCode for setting the event attribute */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_readObjectProperty(UA_Server *server, const UA_NodeId objectId,
+ const UA_QualifiedName propertyName,
+ UA_Variant *value);
+
+/**
+ * .. _addnodes:
+ *
+ * Node Addition and Deletion
+ * --------------------------
+ * When creating dynamic node instances at runtime, chances are that you will
+ * not care about the specific NodeId of the new node, as long as you can
+ * reference it later. When passing numeric NodeIds with a numeric identifier 0,
+ * the stack evaluates this as "select a random unassigned numeric NodeId in
+ * that namespace". To find out which NodeId was actually assigned to the new
+ * node, you may pass a pointer `outNewNodeId`, which will (after a successful
+ * node insertion) contain the nodeId of the new node. You may also pass a
+ * ``NULL`` pointer if this result is not needed.
+ *
+ * See the Section :ref:`node-lifecycle` on constructors and on attaching
+ * user-defined data to nodes.
+ *
+ * The methods for node addition and deletion take mostly const arguments that
+ * are not modified. When creating a node, a deep copy of the node identifier,
+ * node attributes, etc. is created. Therefore, it is possible to call for
+ * example ``UA_Server_addVariablenode`` with a value attribute (a
+ * :ref:`variant`) pointing to a memory location on the stack. If you need
+ * changes to a variable value to manifest at a specific memory location, please
+ * use a :ref:`datasource` or a :ref:`value-callback`. */
+
+/* Protect against redundant definitions for server/client */
+#ifndef UA_DEFAULT_ATTRIBUTES_DEFINED
+#define UA_DEFAULT_ATTRIBUTES_DEFINED
+/* The default for variables is "BaseDataType" for the datatype, -2 for the
+ * valuerank and a read-accesslevel. */
+UA_EXPORT extern const UA_VariableAttributes UA_VariableAttributes_default;
+UA_EXPORT extern const UA_VariableTypeAttributes UA_VariableTypeAttributes_default;
+/* Methods are executable by default */
+UA_EXPORT extern const UA_MethodAttributes UA_MethodAttributes_default;
+/* The remaining attribute definitions are currently all zeroed out */
+UA_EXPORT extern const UA_ObjectAttributes UA_ObjectAttributes_default;
+UA_EXPORT extern const UA_ObjectTypeAttributes UA_ObjectTypeAttributes_default;
+UA_EXPORT extern const UA_ReferenceTypeAttributes UA_ReferenceTypeAttributes_default;
+UA_EXPORT extern const UA_DataTypeAttributes UA_DataTypeAttributes_default;
+UA_EXPORT extern const UA_ViewAttributes UA_ViewAttributes_default;
+#endif
+
+/* Don't use this function. There are typed versions as inline functions. */
+UA_StatusCode UA_EXPORT 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);
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addVariableNode(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,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_VARIABLE, &requestedNewNodeId,
+ &parentNodeId, &referenceTypeId, browseName,
+ &typeDefinition, (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addVariableTypeNode(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_VariableTypeAttributes attr,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_VARIABLETYPE,
+ &requestedNewNodeId, &parentNodeId, &referenceTypeId,
+ browseName, &typeDefinition,
+ (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addObjectNode(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_ObjectAttributes attr,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_OBJECT, &requestedNewNodeId,
+ &parentNodeId, &referenceTypeId, browseName,
+ &typeDefinition, (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addObjectTypeNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
+ const UA_NodeId parentNodeId,
+ const UA_NodeId referenceTypeId,
+ const UA_QualifiedName browseName,
+ const UA_ObjectTypeAttributes attr,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_OBJECTTYPE, &requestedNewNodeId,
+ &parentNodeId, &referenceTypeId, browseName,
+ &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addViewNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
+ const UA_NodeId parentNodeId,
+ const UA_NodeId referenceTypeId,
+ const UA_QualifiedName browseName,
+ const UA_ViewAttributes attr,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_VIEW, &requestedNewNodeId,
+ &parentNodeId, &referenceTypeId, browseName,
+ &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_VIEWATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addReferenceTypeNode(UA_Server *server,
+ const UA_NodeId requestedNewNodeId,
+ const UA_NodeId parentNodeId,
+ const UA_NodeId referenceTypeId,
+ const UA_QualifiedName browseName,
+ const UA_ReferenceTypeAttributes attr,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_REFERENCETYPE,
+ &requestedNewNodeId, &parentNodeId, &referenceTypeId,
+ browseName, &UA_NODEID_NULL,
+ (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addDataTypeNode(UA_Server *server,
+ const UA_NodeId requestedNewNodeId,
+ const UA_NodeId parentNodeId,
+ const UA_NodeId referenceTypeId,
+ const UA_QualifiedName browseName,
+ const UA_DataTypeAttributes attr,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return __UA_Server_addNode(server, UA_NODECLASS_DATATYPE, &requestedNewNodeId,
+ &parentNodeId, &referenceTypeId, browseName,
+ &UA_NODEID_NULL, (const UA_NodeAttributes*)&attr,
+ &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES],
+ nodeContext, outNewNodeId);
+}
+
+UA_StatusCode UA_EXPORT 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);
+
+#ifdef UA_ENABLE_METHODCALLS
+
+UA_StatusCode UA_EXPORT 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);
+
+static UA_INLINE UA_THREADSAFE UA_StatusCode
+UA_Server_addMethodNode(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,
+ size_t outputArgumentsSize, const UA_Argument *outputArguments,
+ void *nodeContext, UA_NodeId *outNewNodeId) {
+ return UA_Server_addMethodNodeEx(server, requestedNewNodeId, parentNodeId,
+ referenceTypeId, browseName, attr, method,
+ inputArgumentsSize, inputArguments,
+ UA_NODEID_NULL, NULL,
+ outputArgumentsSize, outputArguments,
+ UA_NODEID_NULL, NULL,
+ nodeContext, outNewNodeId);
+}
+
+#endif
+
+
+/**
+ * The method pair UA_Server_addNode_begin and _finish splits the AddNodes
+ * service in two parts. This is useful if the node shall be modified before
+ * finish the instantiation. For example to add children with specific NodeIds.
+ * Otherwise, mandatory children (e.g. of an ObjectType) are added with
+ * pseudo-random unique NodeIds. Existing children are detected during the
+ * _finish part via their matching BrowseName.
+ *
+ * The _begin method:
+ * - prepares the node and adds it to the nodestore
+ * - copies some unassigned attributes from the TypeDefinition node internally
+ * - adds the references to the parent (and the TypeDefinition if applicable)
+ * - performs type-checking of variables.
+ *
+ * You can add an object node without a parent if you set the parentNodeId and
+ * referenceTypeId to UA_NODE_ID_NULL. Then you need to add the parent reference
+ * and hasTypeDef reference yourself before calling the _finish method.
+ * Not that this is only allowed for object nodes.
+ *
+ * The _finish method:
+ * - copies mandatory children
+ * - calls the node constructor(s) at the end
+ * - may remove the node if it encounters an error.
+ *
+ * The special UA_Server_addMethodNode_finish method needs to be used for method
+ * nodes, since there you need to explicitly specifiy the input and output
+ * arguments which are added in the finish step (if not yet already there) */
+
+/* The ``attr`` argument must have a type according to the NodeClass.
+ * ``VariableAttributes`` for variables, ``ObjectAttributes`` for objects, and
+ * so on. Missing attributes are taken from the TypeDefinition node if
+ * applicable. */
+UA_StatusCode UA_EXPORT 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);
+
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId);
+
+#ifdef UA_ENABLE_METHODCALLS
+
+UA_StatusCode UA_EXPORT 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);
+
+#endif
+
+/* Deletes a node and optionally all references leading to the node. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId,
+ UA_Boolean deleteReferences);
+
+/**
+ * Reference Management
+ * -------------------- */
+UA_StatusCode UA_EXPORT 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_EXPORT 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);
+
+/**
+ * .. _events:
+ *
+ * Events
+ * ------
+ * The method ``UA_Server_createEvent`` creates an event and represents it as
+ * node. The node receives a unique `EventId` which is automatically added to
+ * the node. The method returns a `NodeId` to the object node which represents
+ * the event through ``outNodeId``. The `NodeId` can be used to set the
+ * attributes of the event. The generated `NodeId` is always numeric.
+ * ``outNodeId`` cannot be ``NULL``.
+ *
+ * Note: In order to see an event in UAExpert, the field `Time` must be given a
+ * value!
+ *
+ * The method ``UA_Server_triggerEvent`` "triggers" an event by adding it to all
+ * monitored items of the specified origin node and those of all its parents.
+ * Any filters specified by the monitored items are automatically applied. Using
+ * this method deletes the node generated by ``UA_Server_createEvent``. The
+ * `EventId` for the new event is generated automatically and is returned
+ * through ``outEventId``. ``NULL`` can be passed if the `EventId` is not
+ * needed. ``deleteEventNode`` specifies whether the node representation of the
+ * event should be deleted after invoking the method. This can be useful if
+ * events with the similar attributes are triggered frequently. ``UA_TRUE``
+ * would cause the node to be deleted. */
+
+#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
+
+/* Creates a node representation of an event
+ *
+ * @param server The server object
+ * @param eventType The type of the event for which a node should be created
+ * @param outNodeId The NodeId of the newly created node for the event
+ * @return The StatusCode of the UA_Server_createEvent method */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_createEvent(UA_Server *server, const UA_NodeId eventType,
+ UA_NodeId *outNodeId);
+
+/* Triggers a node representation of an event by applying EventFilters and
+ * adding the event to the appropriate queues.
+ *
+ * @param server The server object
+ * @param eventNodeId The NodeId of the node representation of the event which
+ * should be triggered
+ * @param outEvent the EventId of the new event
+ * @param deleteEventNode Specifies whether the node representation of the event
+ * should be deleted
+ * @return The StatusCode of the UA_Server_triggerEvent method */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_triggerEvent(UA_Server *server, const UA_NodeId eventNodeId,
+ const UA_NodeId originId, UA_ByteString *outEventId,
+ const UA_Boolean deleteEventNode);
+
+#endif /* UA_ENABLE_SUBSCRIPTIONS_EVENTS */
+
+#ifdef UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS
+typedef enum UA_TwoStateVariableCallbackType {
+ UA_ENTERING_ENABLEDSTATE,
+ UA_ENTERING_ACKEDSTATE,
+ UA_ENTERING_CONFIRMEDSTATE,
+ UA_ENTERING_ACTIVESTATE
+} UA_TwoStateVariableCallbackType;
+
+/* Callback prototype to set user specific callbacks */
+typedef UA_StatusCode
+(*UA_TwoStateVariableChangeCallback)(UA_Server *server, const UA_NodeId *condition);
+
+/* Create condition instance. The function checks first whether the passed
+ * conditionType is a subType of ConditionType. Then checks whether the
+ * condition source has HasEventSource reference to its parent. If not, a
+ * HasEventSource reference will be created between condition source and server
+ * object. To expose the condition in address space, a hierarchical
+ * ReferenceType should be passed to create the reference to condition source.
+ * Otherwise, UA_NODEID_NULL should be passed to make the condition not exposed.
+ *
+ * @param server The server object
+ * @param conditionId The NodeId of the requested Condition Object. When passing
+ * UA_NODEID_NUMERIC(X,0) an unused nodeid in namespace X will be used.
+ * E.g. passing UA_NODEID_NULL will result in a NodeId in namespace 0.
+ * @param conditionType The NodeId of the node representation of the ConditionType
+ * @param conditionName The name of the condition to be created
+ * @param conditionSource The NodeId of the Condition Source (Parent of the Condition)
+ * @param hierarchialReferenceType The NodeId of Hierarchical ReferenceType
+ * between Condition and its source
+ * @param outConditionId The NodeId of the created Condition
+ * @return The StatusCode of the UA_Server_createCondition method */
+UA_StatusCode UA_EXPORT
+UA_Server_createCondition(UA_Server *server,
+ const UA_NodeId conditionId,
+ const UA_NodeId conditionType,
+ const UA_QualifiedName conditionName,
+ const UA_NodeId conditionSource,
+ const UA_NodeId hierarchialReferenceType,
+ UA_NodeId *outConditionId);
+
+/* Set the value of condition field.
+ *
+ * @param server The server object
+ * @param condition The NodeId of the node representation of the Condition Instance
+ * @param value Variant Value to be written to the Field
+ * @param fieldName Name of the Field in which the value should be written
+ * @return The StatusCode of the UA_Server_setConditionField method*/
+UA_StatusCode UA_EXPORT
+UA_Server_setConditionField(UA_Server *server,
+ const UA_NodeId condition,
+ const UA_Variant *value,
+ const UA_QualifiedName fieldName);
+
+/* Set the value of property of condition field.
+ *
+ * @param server The server object
+ * @param condition The NodeId of the node representation of the Condition
+ * Instance
+ * @param value Variant Value to be written to the Field
+ * @param variableFieldName Name of the Field which has a property
+ * @param variablePropertyName Name of the Field Property in which the value
+ * should be written
+ * @return The StatusCode of the UA_Server_setConditionVariableFieldProperty*/
+UA_StatusCode UA_EXPORT
+UA_Server_setConditionVariableFieldProperty(UA_Server *server,
+ const UA_NodeId condition,
+ const UA_Variant *value,
+ const UA_QualifiedName variableFieldName,
+ const UA_QualifiedName variablePropertyName);
+
+/* Triggers an event only for an enabled condition. The condition list is
+ * updated then with the last generated EventId.
+ *
+ * @param server The server object
+ * @param condition The NodeId of the node representation of the Condition Instance
+ * @param conditionSource The NodeId of the node representation of the Condition Source
+ * @param outEventId last generated EventId
+ * @return The StatusCode of the UA_Server_triggerConditionEvent method */
+UA_StatusCode UA_EXPORT
+UA_Server_triggerConditionEvent(UA_Server *server,
+ const UA_NodeId condition,
+ const UA_NodeId conditionSource,
+ UA_ByteString *outEventId);
+
+/* Add an optional condition field using its name. (TODO Adding optional methods
+ * is not implemented yet)
+ *
+ * @param server The server object
+ * @param condition The NodeId of the node representation of the Condition Instance
+ * @param conditionType The NodeId of the node representation of the Condition Type
+ * from which the optional field comes
+ * @param fieldName Name of the optional field
+ * @param outOptionalVariable The NodeId of the created field (Variable Node)
+ * @return The StatusCode of the UA_Server_addConditionOptionalField method */
+UA_StatusCode UA_EXPORT
+UA_Server_addConditionOptionalField(UA_Server *server,
+ const UA_NodeId condition,
+ const UA_NodeId conditionType,
+ const UA_QualifiedName fieldName,
+ UA_NodeId *outOptionalVariable);
+
+/* Function used to set a user specific callback to TwoStateVariable Fields of a
+ * condition. The callbacks will be called before triggering the events when
+ * transition to true State of EnabledState/Id, AckedState/Id, ConfirmedState/Id
+ * and ActiveState/Id occurs.
+ *
+ * @param server The server object
+ * @param condition The NodeId of the node representation of the Condition Instance
+ * @param conditionSource The NodeId of the node representation of the Condition Source
+ * @param removeBranch (Not Implemented yet)
+ * @param callback User specific callback function
+ * @param callbackType Callback function type, indicates where it should be called
+ * @return The StatusCode of the UA_Server_setConditionTwoStateVariableCallback method */
+UA_StatusCode UA_EXPORT
+UA_Server_setConditionTwoStateVariableCallback(UA_Server *server,
+ const UA_NodeId condition,
+ const UA_NodeId conditionSource,
+ UA_Boolean removeBranch,
+ UA_TwoStateVariableChangeCallback callback,
+ UA_TwoStateVariableCallbackType callbackType);
+
+/* Delete a condition from the address space and the internal lists.
+ *
+ * @param server The server object
+ * @param condition The NodeId of the node representation of the Condition Instance
+ * @param conditionSource The NodeId of the node representation of the Condition Source
+ * @return ``UA_STATUSCODE_GOOD`` on success */
+UA_StatusCode UA_EXPORT
+UA_Server_deleteCondition(UA_Server *server,
+ const UA_NodeId condition,
+ const UA_NodeId conditionSource);
+
+#endif /* UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS */
+
+/**
+ * Update the Server Certificate at Runtime
+ * ---------------------------------------- */
+UA_StatusCode UA_EXPORT
+UA_Server_updateCertificate(UA_Server *server,
+ const UA_ByteString *oldCertificate,
+ const UA_ByteString *newCertificate,
+ const UA_ByteString *newPrivateKey,
+ UA_Boolean closeSessions,
+ UA_Boolean closeSecureChannels);
+
+/**
+ * Utility Functions
+ * ----------------- */
+/* Lookup a datatype by its NodeId. Takes the custom types in the server
+ * configuration into account. Return NULL if none found. */
+UA_EXPORT const UA_DataType *
+UA_Server_findDataType(UA_Server *server, const UA_NodeId *typeId);
+
+/* Add a new namespace to the server. Returns the index of the new namespace */
+UA_UInt16 UA_EXPORT UA_THREADSAFE
+UA_Server_addNamespace(UA_Server *server, const char* name);
+
+/* Get namespace by name from the server. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_getNamespaceByName(UA_Server *server, const UA_String namespaceUri,
+ size_t* foundIndex);
+
+/* Get namespace by id from the server. */
+UA_StatusCode UA_EXPORT UA_THREADSAFE
+UA_Server_getNamespaceByIndex(UA_Server *server, const size_t namespaceIndex,
+ UA_String *foundUri);
+
+/**
+* .. _async-operations:
+*
+* Async Operations
+* ----------------
+* Some operations (such as reading out a sensor that needs to warm up) can take
+* quite some time. In order not to block the server during such an operation, it
+* can be "outsourced" to a worker thread.
+*
+* Take the example of a CallRequest. It is split into the individual method call
+* operations. If the method is marked as async, then the operation is put into a
+* queue where it is be retrieved by a worker. The worker returns the result when
+* ready. See the examples in ``/examples/tutorial_server_method_async.c`` for
+* the usage.
+*
+* Note that the operation can time out (see the asyncOperationTimeout setting in
+* the server config) also when it has been retrieved by the worker. */
+
+#if UA_MULTITHREADING >= 100
+
+/* Set the async flag in a method node */
+UA_StatusCode UA_EXPORT
+UA_Server_setMethodNodeAsync(UA_Server *server, const UA_NodeId id,
+ UA_Boolean isAsync);
+
+typedef enum {
+ UA_ASYNCOPERATIONTYPE_INVALID, /* 0, the default */
+ UA_ASYNCOPERATIONTYPE_CALL
+ /* UA_ASYNCOPERATIONTYPE_READ, */
+ /* UA_ASYNCOPERATIONTYPE_WRITE, */
+} UA_AsyncOperationType;
+
+typedef union {
+ UA_CallMethodRequest callMethodRequest;
+ /* UA_ReadValueId readValueId; */
+ /* UA_WriteValue writeValue; */
+} UA_AsyncOperationRequest;
+
+typedef union {
+ UA_CallMethodResult callMethodResult;
+ /* UA_DataValue readResult; */
+ /* UA_StatusCode writeResult; */
+} UA_AsyncOperationResponse;
+
+/* Get the next async operation without blocking
+ *
+ * @param server The server object
+ * @param type The type of the async operation
+ * @param request Receives pointer to the operation
+ * @param context Receives the pointer to the operation context
+ * @param timeout The timestamp when the operation times out and can
+ * no longer be returned to the client. The response has to
+ * be set in UA_Server_setAsyncOperationResult in any case.
+ * @return false if queue is empty, true else */
+UA_Boolean UA_EXPORT
+UA_Server_getAsyncOperationNonBlocking(UA_Server *server, UA_AsyncOperationType *type,
+ const UA_AsyncOperationRequest **request,
+ void **context, UA_DateTime *timeout);
+
+/* UA_Boolean UA_EXPORT */
+/* UA_Server_getAsyncOperationBlocking(UA_Server *server, UA_AsyncOperationType *type, */
+/* const UA_AsyncOperationRequest **request, */
+/* void **context, UA_DateTime *timeout); */
+
+/* Submit an async operation result
+ *
+ * @param server The server object
+ * @param response Pointer to the operation result
+ * @param context Pointer to the operation context */
+void UA_EXPORT
+UA_Server_setAsyncOperationResult(UA_Server *server,
+ const UA_AsyncOperationResponse *response,
+ void *context);
+
+#endif /* !UA_MULTITHREADING >= 100 */
+
+/**
+* Statistics
+* ----------
+*
+* Statistic counters keeping track of the current state of the stack. Counters
+* are structured per OPC UA communication layer. */
+
+typedef struct {
+ UA_NetworkStatistics ns;
+ UA_SecureChannelStatistics scs;
+ UA_SessionStatistics ss;
+} UA_ServerStatistics;
+
+UA_ServerStatistics UA_EXPORT
+UA_Server_getStatistics(UA_Server *server);
_UA_END_DECLS
+#ifdef UA_ENABLE_PUBSUB
+#endif
+
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/client_config.h" ***********************************/
+/**** amalgamated original file "/include/open62541/client.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
- * Copyright 2018 (c) Stefan Profanter, fortiss GmbH
+ * Copyright 2015-2020 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
+ * Copyright 2015-2016 (c) Sten Grüner
+ * Copyright 2015-2016 (c) Chris Iatrou
+ * Copyright 2015-2017 (c) Florian Palm
+ * Copyright 2015 (c) Holger Jeromin
+ * Copyright 2015 (c) Oleksiy Vasylyev
+ * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
+ * Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
* Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
+ * Copyright 2018 (c) Kalycito Infotech Private Limited
+ * Copyright 2020 (c) Christian von Arnim, ISW University of Stuttgart
*/
-#ifndef UA_CLIENT_CONFIG_H
-#define UA_CLIENT_CONFIG_H
-_UA_BEGIN_DECLS
-struct UA_Client;
-typedef struct UA_Client UA_Client;
+_UA_BEGIN_DECLS
/**
+ * .. _client:
+ *
+ * Client
+ * ======
+ *
+ * The client implementation allows remote access to all OPC UA services. For
+ * convenience, some functionality has been wrapped in :ref:`high-level
+ * abstractions <client-highlevel>`.
+ *
+ * **However**: At this time, the client does not yet contain its own thread or
+ * event-driven main-loop, meaning that the client will not perform any actions
+ * automatically in the background. This is especially relevant for
+ * connection/session management and subscriptions. The user will have to
+ * periodically call `UA_Client_run_iterate` to ensure that asynchronous events
+ * are handled, including keeping a secure connection established.
+ * See more about :ref:`asynchronicity<client-async-services>` and
+ * :ref:`subscriptions<client-subscriptions>`.
+ *
* .. _client-config:
*
* Client Configuration
@@ -27913,17 +29644,23 @@ typedef struct UA_Client UA_Client;
* The :ref:`tutorials` provide a good starting point for this. */
typedef struct {
- /* Basic client configuration */
- void *clientContext; /* User-defined data attached to the client */
- UA_Logger logger; /* Logger used by the client */
- UA_UInt32 timeout; /* Response timeout in ms */
+ void *clientContext; /* User-defined pointer attached to the client */
+ UA_Logger logger; /* Logger used by the client */
+ UA_UInt32 timeout; /* Response timeout in ms */
/* The description must be internally consistent.
* - The ApplicationUri set in the ApplicationDescription must match the
- * URI set in the server certificate */
+ * URI set in the certificate */
UA_ApplicationDescription clientDescription;
- /* Basic connection configuration */
+ /**
+ * Connection configuration
+ * ~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * The following configuration elements reduce the "degrees of freedom" the
+ * client has when connecting to a server. If no connection can be made
+ * under these restrictions, then the connection will abort with an error
+ * message. */
UA_ExtensionObject userIdentityToken; /* Configured User-Identity Token */
UA_MessageSecurityMode securityMode; /* None, Sign, SignAndEncrypt. The
* default is invalid. This indicates
@@ -27933,8 +29670,7 @@ typedef struct {
* empty string indicates the client to select
* any matching SecurityPolicy. */
- /* Advanced connection configuration
- *
+ /**
* If either endpoint or userTokenPolicy has been set (at least one non-zero
* byte in either structure), then the selected Endpoint and UserTokenPolicy
* overwrite the settings in the basic connection configuration. The
@@ -27949,7 +29685,22 @@ typedef struct {
UA_EndpointDescription endpoint;
UA_UserTokenPolicy userTokenPolicy;
- /* Advanced client configuration */
+ /**
+ * Custom Data Types
+ * ~~~~~~~~~~~~~~~~~
+ * The following is a linked list of arrays with custom data types. All data
+ * types that are accessible from here are automatically considered for the
+ * decoding of received messages. Custom data types are not cleaned up
+ * together with the configuration. So it is possible to allocate them on
+ * ROM.
+ *
+ * See the section on :ref:`generic-types`. Examples for working with custom
+ * data types are provided in ``/examples/custom_datatype/``. */
+ const UA_DataTypeArray *customDataTypes;
+
+ /**
+ * Advanced Client Configuration
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
UA_UInt32 secureChannelLifeTime; /* Lifetime in ms (then the channel needs
to be renewed) */
@@ -27957,12 +29708,6 @@ typedef struct {
UA_ConnectionConfig localConnectionConfig;
UA_UInt32 connectivityCheckInterval; /* Connectivity check interval in ms.
* 0 = background task disabled */
- const UA_DataTypeArray *customDataTypes; /* Custom DataTypes. Attention!
- * Custom datatypes are not cleaned
- * up together with the
- * configuration. So it is possible
- * to allocate them on ROM. */
-
/* Available SecurityPolicies */
size_t securityPoliciesSize;
UA_SecurityPolicy *securityPolicies;
@@ -27972,8 +29717,9 @@ typedef struct {
/* Callbacks for async connection handshakes */
UA_ConnectClientConnection initConnectionFunc;
- UA_StatusCode (*pollConnectionFunc)(UA_Client *client, void *context,
- UA_UInt32 timeout);
+ UA_StatusCode (*pollConnectionFunc)(UA_Connection *connection,
+ UA_UInt32 timeout,
+ const UA_Logger *logger);
/* Callback for state changes. The client state is differentated into the
* SecureChannel state and the Session state. The connectStatus is set if
@@ -27986,7 +29732,7 @@ typedef struct {
UA_StatusCode connectStatus);
/* When connectivityCheckInterval is greater than 0, every
- * connectivityCheckInterval (in ms), a async read request is performed on
+ * connectivityCheckInterval (in ms), an async read request is performed on
* the server. inactivityCallback is called when the client receive no
* response for this read request The connection can be closed, this in an
* attempt to recreate a healthy connection. */
@@ -28004,54 +29750,12 @@ typedef struct {
UA_UInt32 subscriptionId,
void *subContext);
#endif
-} UA_ClientConfig;
-
-_UA_END_DECLS
-
-#endif /* UA_CLIENT_CONFIG_H */
-
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/client.h" ***********************************/
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright 2015-2020 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
- * Copyright 2015-2016 (c) Sten Grüner
- * Copyright 2015-2016 (c) Chris Iatrou
- * Copyright 2015-2017 (c) Florian Palm
- * Copyright 2015 (c) Holger Jeromin
- * Copyright 2015 (c) Oleksiy Vasylyev
- * Copyright 2017 (c) Stefan Profanter, fortiss GmbH
- * Copyright 2017 (c) Mark Giraud, Fraunhofer IOSB
- * Copyright 2018 (c) Thomas Stalder, Blue Time Concept SA
- * Copyright 2018 (c) Kalycito Infotech Private Limited
- */
-
-
-_UA_BEGIN_DECLS
+ UA_LocaleId *sessionLocaleIds;
+ size_t sessionLocaleIdsSize;
+} UA_ClientConfig;
-/**
- * .. _client:
- *
- * Client
- * ======
- *
- * The client implementation allows remote access to all OPC UA services. For
- * convenience, some functionality has been wrapped in :ref:`high-level
- * abstractions <client-highlevel>`.
- *
- * **However**: At this time, the client does not yet contain its own thread or
- * event-driven main-loop. So the client will not perform any actions
- * automatically in the background. This is especially relevant for
- * subscriptions. The user will have to periodically call
- * `UA_Client_Subscriptions_manuallySendPublishRequest`. See also :ref:`here
- * <client-subscriptions>`.
- *
- *
- * .. include:: client_config.rst
- *
+ /**
* Client Lifecycle
* ---------------- */
@@ -28165,35 +29869,6 @@ UA_Client_disconnectAsync(UA_Client *client);
UA_StatusCode UA_EXPORT
UA_Client_disconnectSecureChannel(UA_Client *client);
-/* Deprecated methods */
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_connect_async(UA_Client *client, const char *endpointUrl) {
- return UA_Client_connectAsync(client, endpointUrl);
-}
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_connect_noSession(UA_Client *client, const char *endpointUrl) {
- return UA_Client_connectSecureChannel(client, endpointUrl);
-}
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_connect_username(UA_Client *client, const char *endpointUrl,
- const char *username, const char *password) {
- return UA_Client_connectUsername(client, endpointUrl,
- username, password);
-}
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_disconnect_async(UA_Client *client, UA_UInt32 *requestId) {
- return UA_Client_disconnect(client);
-}
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_close(UA_Client *client) {
- return UA_Client_disconnect(client);
-}
-
/**
* Discovery
* --------- */
@@ -28452,8 +30127,22 @@ UA_Client_Service_queryNext(UA_Client *client,
* Asynchronous Services
* ---------------------
* All OPC UA services are asynchronous in nature. So several service calls can
- * be made without waiting for a response first. Responess may come in a
- * different ordering. */
+ * be made without waiting for the individual responses. Depending on the
+ * server's priorities responses may come in a different ordering than sent.
+ *
+ * As noted in :ref:`the client overview<client>` currently no means
+ * of handling asynchronous events automatically is provided. However, some
+ * synchronous function calls will trigger handling, but to ensure this
+ * happens a client should periodically call `UA_Client_run_iterate`
+ * explicitly.
+ *
+ * Connection and session management are also performed in
+ * `UA_Client_run_iterate`, so to keep a connection healthy any client need to
+ * consider how and when it is appropriate to do the call.
+ * This is especially true for the periodic renewal of a SecureChannel's
+ * SecurityToken which is designed to have a limited lifetime and will
+ * invalidate the connection if not renewed.
+ */
/* Use the type versions of this method. See below. However, the general
* mechanism of async service calls is explained here.
@@ -28477,7 +30166,7 @@ UA_Client_Service_queryNext(UA_Client *client,
* The userdata and requestId arguments can be NULL. */
typedef void (*UA_ClientAsyncServiceCallback)(UA_Client *client, void *userdata,
- UA_UInt32 requestId, void *response);
+ UA_UInt32 requestId, void *response);
UA_StatusCode UA_EXPORT
__UA_Client_AsyncService(UA_Client *client, const void *request,
@@ -28491,21 +30180,36 @@ UA_Client_sendAsyncRequest(UA_Client *client, const void *request,
const UA_DataType *requestType, UA_ClientAsyncServiceCallback callback,
const UA_DataType *responseType, void *userdata, UA_UInt32 *requestId);
+/* Set new userdata and callback for an existing request.
+ *
+ * @param client Pointer to the UA_Client
+ * @param requestId RequestId of the request, which was returned by
+ * UA_Client_sendAsyncRequest before
+ * @param userdata The new userdata.
+ * @param callback The new callback
+ * @return UA_StatusCode UA_STATUSCODE_GOOD on success
+ * UA_STATUSCODE_BADNOTFOUND when no request with requestId is found. */
+UA_StatusCode UA_EXPORT
+UA_Client_modifyAsyncCallback(UA_Client *client, UA_UInt32 requestId,
+ void *userdata, UA_ClientAsyncServiceCallback callback);
+
/* Listen on the network and process arriving asynchronous responses in the
* background. Internal housekeeping, renewal of SecureChannels and subscription
* management is done as well. */
UA_StatusCode UA_EXPORT
UA_Client_run_iterate(UA_Client *client, UA_UInt32 timeout);
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_runAsync(UA_Client *client, UA_UInt32 timeout) {
- return UA_Client_run_iterate(client, timeout);
-}
-
-UA_DEPRECATED static UA_INLINE UA_StatusCode
-UA_Client_manuallyRenewSecureChannel(UA_Client *client) {
- return UA_Client_run_iterate(client, 0);
-}
+/* Force the manual renewal of the SecureChannel. This is useful to renew the
+ * SecureChannel during a downtime when no time-critical operations are
+ * performed. This method is asynchronous. The renewal is triggered (the OPN
+ * message is sent) but not completed. The OPN response is handled with
+ * ``UA_Client_run_iterate`` or a synchronous servica-call operation.
+ *
+ * @return The return value is UA_STATUSCODE_GOODCALLAGAIN if the SecureChannel
+ * has not elapsed at least 75% of its lifetime. Otherwise the
+ * ``connectStatus`` is returned. */
+UA_StatusCode UA_EXPORT
+UA_Client_renewSecureChannel(UA_Client *client);
/* Use the type versions of this method. See below. However, the general
* mechanism of async service calls is explained here.
@@ -28585,10 +30289,14 @@ UA_Client_changeRepeatedCallbackInterval(UA_Client *client,
void UA_EXPORT
UA_Client_removeCallback(UA_Client *client, UA_UInt64 callbackId);
-UA_DEPRECATED static UA_INLINE void
-UA_Client_removeRepeatedCallback(UA_Client *client, UA_UInt64 callbackId) {
- UA_Client_removeCallback(client, callbackId);
-}
+/**
+ * Client Utility Functions
+ * ------------------------ */
+
+/* Lookup a datatype by its NodeId. Takes the custom types in the client
+ * configuration into account. Return NULL if none found. */
+UA_EXPORT const UA_DataType *
+UA_Client_findDataType(UA_Client *client, const UA_NodeId *typeId);
/**
* .. toctree::
@@ -28599,7 +30307,7 @@ UA_Client_removeRepeatedCallback(UA_Client *client, UA_UInt64 callbackId) {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/client_highlevel.h" ***********************************/
+/**** amalgamated original file "/include/open62541/client_highlevel.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -29258,7 +30966,7 @@ UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId,
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/client_subscriptions.h" ***********************************/
+/**** amalgamated original file "/include/open62541/client_subscriptions.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -29289,7 +30997,9 @@ _UA_BEGIN_DECLS
* The client automatically processes PublishResponses (with a callback) in the
* background and keeps enough PublishRequests in transit. The PublishResponses
* may be recieved during a synchronous service call or in
- * ``UA_Client_runAsync``. */
+ * ``UA_Client_run_iterate``. See more about
+ * :ref:`asynchronicity<client-async-services>`.
+ */
/* Callbacks defined for Subscriptions */
typedef void (*UA_Client_DeleteSubscriptionCallback)
@@ -29398,7 +31108,7 @@ UA_MonitoredItemCreateRequest_default(UA_NodeId nodeId) {
}
/**
- * The clientHandle parameter can't be set by the user, any value will be replaced
+ * The clientHandle parameter cannot be set by the user, any value will be replaced
* by the client before sending the request to the server. */
/* Callback for the deletion of a MonitoredItem */
@@ -29546,7 +31256,7 @@ UA_Client_MonitoredItems_setTriggering_async(UA_Client *client,
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/client_highlevel_async.h" ***********************************/
+/**** amalgamated original file "/include/open62541/client_highlevel_async.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -29561,8 +31271,11 @@ _UA_END_DECLS
_UA_BEGIN_DECLS
/**
- * Raw Services
- * ^^^^^^^^^^^^ */
+ * Async Services
+ * ^^^^^^^^^^^^^^
+ *
+ * Call OPC UA Services asynchronously with a callback. The (optional) requestId
+ * output can be used to cancel the service while it is still pending. */
typedef void (*UA_ClientAsyncReadCallback)(UA_Client *client, void *userdata,
UA_UInt32 requestId, UA_ReadResponse *rr);
@@ -29599,287 +31312,256 @@ UA_Client_sendAsyncBrowseRequest(UA_Client *client, UA_BrowseRequest *request,
}
/**
+ * Asynchronous Operations
+ * ^^^^^^^^^^^^^^^^^^^^^^^
+ *
+ * Many Services can be called with an array of operations. For example, a
+ * request to the Read Service contains an array of ReadValueId, each
+ * corresponding to a single read operation. For convenience, wrappers are
+ * provided to call single operations for the most common Services.
+ *
+ * All async operations have a callback of the following structure: The returned
+ * StatusCode is split in two parts. The status indicates the overall success of
+ * the request and the operation. The result argument is non-NULL only if the
+ * status is no good. */
+typedef void
+(*UA_ClientAsyncOperationCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ void *result);
+
+/**
* Read Attribute
- * ^^^^^^^^^^^^^^ */
+ * ^^^^^^^^^^^^^^
+ *
+ * Asynchronously read a single attribute. The attribute is unpacked from the
+ * response as the datatype of the attribute is known ahead of time. Value
+ * attributes are variants.
+ *
+ * Note that the last argument (value pointer) of the callbacks can be NULL if
+ * the status of the operation is not good. */
+
+/* Reading a single attribute */
+typedef void
+(*UA_ClientAsyncReadAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_DataValue *attribute);
UA_StatusCode UA_EXPORT
-__UA_Client_readAttribute_async(UA_Client *client, const UA_NodeId *nodeId,
- UA_AttributeId attributeId,
- const UA_DataType *outDataType,
- UA_ClientAsyncServiceCallback callback, void *userdata,
- UA_UInt32 *reqId);
-
-typedef void (*UA_ClientAsyncReadDataTypeAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_NodeId *var);
-static UA_INLINE UA_StatusCode
-UA_Client_readDataTypeAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadDataTypeAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_DATATYPE, &UA_TYPES[UA_TYPES_NODEID],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
+UA_Client_readAttribute_async(UA_Client *client, const UA_ReadValueId *rvi,
+ UA_TimestampsToReturn timestampsToReturn,
+ UA_ClientAsyncReadAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
-typedef void (*UA_ClientAsyncReadValueAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Variant *var);
-static UA_INLINE UA_StatusCode
+/* Read a single Value attribute */
+typedef void
+(*UA_ClientAsyncReadValueAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_DataValue *value);
+UA_StatusCode UA_EXPORT
UA_Client_readValueAttribute_async(UA_Client *client, const UA_NodeId nodeId,
UA_ClientAsyncReadValueAttributeCallback callback,
- void *userdata, UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_VALUE, &UA_TYPES[UA_TYPES_VARIANT],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single DataType attribute */
+typedef void
+(*UA_ClientAsyncReadDataTypeAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_NodeId *dataType);
+UA_StatusCode UA_EXPORT
+UA_Client_readDataTypeAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadDataTypeAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single ArrayDimensions attribute. If the status is good, the variant
+ * carries an UInt32 array. */
+typedef void
+(*UA_ClientReadArrayDimensionsAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Variant *arrayDimensions);
+UA_StatusCode UA_EXPORT
+UA_Client_readArrayDimensionsAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientReadArrayDimensionsAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single NodeClass attribute */
+typedef void
+(*UA_ClientAsyncReadNodeClassAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_NodeClass *nodeClass);
+UA_StatusCode UA_EXPORT
+UA_Client_readNodeClassAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadNodeClassAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single BrowseName attribute */
+typedef void
+(*UA_ClientAsyncReadBrowseNameAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_QualifiedName *browseName);
+UA_StatusCode UA_EXPORT
+UA_Client_readBrowseNameAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadBrowseNameAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single DisplayName attribute */
+typedef void
+(*UA_ClientAsyncReadDisplayNameAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_LocalizedText *displayName);
+UA_StatusCode UA_EXPORT
+UA_Client_readDisplayNameAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadDisplayNameAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single Description attribute */
+typedef void
+(*UA_ClientAsyncReadDescriptionAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_LocalizedText *description);
+UA_StatusCode UA_EXPORT
+UA_Client_readDescriptionAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadDescriptionAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single WriteMask attribute */
+typedef void
+(*UA_ClientAsyncReadWriteMaskAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_UInt32 *writeMask);
+UA_StatusCode UA_EXPORT
+UA_Client_readWriteMaskAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadWriteMaskAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single UserWriteMask attribute */
+typedef void
+(*UA_ClientAsyncReadUserWriteMaskAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_UInt32 *writeMask);
+UA_StatusCode UA_EXPORT
+UA_Client_readUserWriteMaskAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadUserWriteMaskAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single IsAbstract attribute */
+typedef void
+(*UA_ClientAsyncReadIsAbstractAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Boolean *isAbstract);
+UA_StatusCode UA_EXPORT
+UA_Client_readIsAbstractAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadIsAbstractAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single Symmetric attribute */
+typedef void
+(*UA_ClientAsyncReadSymmetricAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Boolean *symmetric);
+UA_StatusCode UA_EXPORT
+UA_Client_readSymmetricAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadSymmetricAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single InverseName attribute */
+typedef void
+(*UA_ClientAsyncReadInverseNameAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_LocalizedText *inverseName);
+UA_StatusCode UA_EXPORT
+UA_Client_readInverseNameAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadInverseNameAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single ContainsNoLoops attribute */
+typedef void
+(*UA_ClientAsyncReadContainsNoLoopsAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Boolean *containsNoLoops);
+UA_StatusCode UA_EXPORT
+UA_Client_readContainsNoLoopsAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadContainsNoLoopsAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single EventNotifier attribute */
+typedef void
+(*UA_ClientAsyncReadEventNotifierAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Byte *eventNotifier);
+UA_StatusCode UA_EXPORT
+UA_Client_readEventNotifierAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadEventNotifierAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single ValueRank attribute */
+typedef void
+(*UA_ClientAsyncReadValueRankAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Int32 *valueRank);
+UA_StatusCode UA_EXPORT
+UA_Client_readValueRankAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadValueRankAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single AccessLevel attribute */
+typedef void
+(*UA_ClientAsyncReadAccessLevelAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Byte *accessLevel);
+UA_StatusCode UA_EXPORT
+UA_Client_readAccessLevelAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadAccessLevelAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single UserAccessLevel attribute */
+typedef void
+(*UA_ClientAsyncReadUserAccessLevelAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Byte *userAccessLevel);
+UA_StatusCode UA_EXPORT
+UA_Client_readUserAccessLevelAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadUserAccessLevelAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single MinimumSamplingInterval attribute */
+typedef void
+(*UA_ClientAsyncReadMinimumSamplingIntervalAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Double *minimumSamplingInterval);
+UA_StatusCode UA_EXPORT
+UA_Client_readMinimumSamplingIntervalAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadMinimumSamplingIntervalAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single Historizing attribute */
+typedef void
+(*UA_ClientAsyncReadHistorizingAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Boolean *historizing);
+UA_StatusCode UA_EXPORT
+UA_Client_readHistorizingAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadHistorizingAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single Executable attribute */
+typedef void
+(*UA_ClientAsyncReadExecutableAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Boolean *executable);
+UA_StatusCode UA_EXPORT
+UA_Client_readExecutableAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadExecutableAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
+
+/* Read a single UserExecutable attribute */
+typedef void
+(*UA_ClientAsyncReadUserExecutableAttributeCallback)(UA_Client *client, void *userdata,
+ UA_UInt32 requestId, UA_StatusCode status,
+ UA_Boolean *userExecutable);
+UA_StatusCode UA_EXPORT
+UA_Client_readUserExecutableAttribute_async(UA_Client *client, const UA_NodeId nodeId,
+ UA_ClientAsyncReadUserExecutableAttributeCallback callback,
+ void *userdata, UA_UInt32 *requestId);
-typedef void (*UA_ClientAsyncReadNodeIdAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_NodeId *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readNodeIdAttribute_async(UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadNodeIdAttributeCallback callback,
- void *userdata, UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_NODEID, &UA_TYPES[UA_TYPES_NODEID],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadNodeClassAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_NodeClass *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readNodeClassAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadNodeClassAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_NODECLASS, &UA_TYPES[UA_TYPES_NODECLASS],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadBrowseNameAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_QualifiedName *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readBrowseNameAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadBrowseNameAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_BROWSENAME, &UA_TYPES[UA_TYPES_QUALIFIEDNAME],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadDisplayNameAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_LocalizedText *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readDisplayNameAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadDisplayNameAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_DISPLAYNAME, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadDescriptionAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_LocalizedText *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readDescriptionAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadDescriptionAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_DESCRIPTION, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadWriteMaskAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_UInt32 *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readWriteMaskAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadWriteMaskAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_WRITEMASK, &UA_TYPES[UA_TYPES_UINT32],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadUserWriteMaskAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_UInt32 *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readUserWriteMaskAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadUserWriteMaskAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_USERWRITEMASK, &UA_TYPES[UA_TYPES_UINT32],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadIsAbstractAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readIsAbstractAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadIsAbstractAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_ISABSTRACT, &UA_TYPES[UA_TYPES_BOOLEAN],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadSymmetricAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readSymmetricAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadSymmetricAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_SYMMETRIC, &UA_TYPES[UA_TYPES_BOOLEAN],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadInverseNameAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_LocalizedText *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readInverseNameAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadInverseNameAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_INVERSENAME, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadContainsNoLoopsAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readContainsNoLoopsAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadContainsNoLoopsAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_CONTAINSNOLOOPS, &UA_TYPES[UA_TYPES_BOOLEAN],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadEventNotifierAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Byte *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readEventNotifierAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadEventNotifierAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_EVENTNOTIFIER, &UA_TYPES[UA_TYPES_BYTE],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadValueRankAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Int32 *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readValueRankAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadValueRankAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_VALUERANK, &UA_TYPES[UA_TYPES_INT32],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadAccessLevelAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Byte *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readAccessLevelAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadAccessLevelAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_ACCESSLEVEL, &UA_TYPES[UA_TYPES_BYTE],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadUserAccessLevelAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Byte *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readUserAccessLevelAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadUserAccessLevelAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_USERACCESSLEVEL, &UA_TYPES[UA_TYPES_BYTE],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadMinimumSamplingIntervalAttributeCallback)(
- UA_Client *client, void *userdata, UA_UInt32 requestId, UA_Double *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readMinimumSamplingIntervalAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadMinimumSamplingIntervalAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
- &UA_TYPES[UA_TYPES_DOUBLE], (UA_ClientAsyncServiceCallback)callback, userdata,
- reqId);
-}
-typedef void (*UA_ClientAsyncReadHistorizingAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readHistorizingAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadHistorizingAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_HISTORIZING, &UA_TYPES[UA_TYPES_BOOLEAN],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadExecutableAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readExecutableAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadExecutableAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_EXECUTABLE, &UA_TYPES[UA_TYPES_BOOLEAN],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
-typedef void (*UA_ClientAsyncReadUserExecutableAttributeCallback)(UA_Client *client,
- void *userdata,
- UA_UInt32 requestId,
- UA_Boolean *out);
-static UA_INLINE UA_StatusCode
-UA_Client_readUserExecutableAttribute_async(
- UA_Client *client, const UA_NodeId nodeId,
- UA_ClientAsyncReadUserExecutableAttributeCallback callback, void *userdata,
- UA_UInt32 *reqId) {
- return __UA_Client_readAttribute_async(
- client, &nodeId, UA_ATTRIBUTEID_USEREXECUTABLE, &UA_TYPES[UA_TYPES_BOOLEAN],
- (UA_ClientAsyncServiceCallback)callback, userdata, reqId);
-}
/**
* Write Attribute
* ^^^^^^^^^^^^^^ */
@@ -30244,26 +31926,20 @@ UA_Client_addMethodNode_async(UA_Client *client, const UA_NodeId requestedNewNod
* Misc Functionalities
* ^^^^^^^^^^^^^^^^^^^^ */
-UA_DEPRECATED UA_StatusCode UA_EXPORT
-__UA_Client_translateBrowsePathsToNodeIds_async(UA_Client *client, char *paths[],
- UA_UInt32 ids[], size_t pathSize,
- UA_ClientAsyncServiceCallback callback,
- void *userdata, UA_UInt32 *reqId);
-
-typedef void (*UA_ClientAsyncTranslateCallback)(
- UA_Client *client, void *userdata, UA_UInt32 requestId,
- UA_TranslateBrowsePathsToNodeIdsResponse *tr);
+/* typedef void (*UA_ClientAsyncTranslateCallback)( */
+/* UA_Client *client, void *userdata, UA_UInt32 requestId, */
+/* UA_TranslateBrowsePathsToNodeIdsResponse *tr); */
-UA_DEPRECATED UA_StatusCode UA_EXPORT
-UA_Cient_translateBrowsePathsToNodeIds_async(UA_Client *client, char **paths,
- UA_UInt32 *ids, size_t pathSize,
- UA_ClientAsyncTranslateCallback callback,
- void *userdata, UA_UInt32 *reqId);
+/* UA_DEPRECATED UA_StatusCode UA_EXPORT */
+/* UA_Cient_translateBrowsePathsToNodeIds_async(UA_Client *client, char **paths, */
+/* UA_UInt32 *ids, size_t pathSize, */
+/* UA_ClientAsyncTranslateCallback callback, */
+/* void *userdata, UA_UInt32 *reqId); */
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/accesscontrol_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/accesscontrol_default.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30282,9 +31958,14 @@ typedef struct {
} UA_UsernamePasswordLogin;
/* Default access control. The log-in can be anonymous or username-password. A
- * logged-in user has all access rights. */
+ * logged-in user has all access rights.
+ *
+ * The certificate verification plugin lifecycle is moved to the access control
+ * system. So it is cleared up eventually together with the AccessControl. */
UA_EXPORT UA_StatusCode
-UA_AccessControl_default(UA_ServerConfig *config, UA_Boolean allowAnonymous,
+UA_AccessControl_default(UA_ServerConfig *config,
+ UA_Boolean allowAnonymous,
+ UA_CertificateVerification *verifyX509,
const UA_ByteString *userTokenPolicyUri,
size_t usernamePasswordLoginSize,
const UA_UsernamePasswordLogin *usernamePasswordLogin);
@@ -30292,7 +31973,7 @@ UA_AccessControl_default(UA_ServerConfig *config, UA_Boolean allowAnonymous,
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/pki_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/pki_default.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30311,9 +31992,6 @@ UA_CertificateVerification_AcceptAll(UA_CertificateVerification *cv);
#ifdef UA_ENABLE_ENCRYPTION
-const unsigned char *
-UA_Bstrstr(const unsigned char *s1, size_t l1, const unsigned char *s2, size_t l2);
-
/* Accept certificates based on a trust-list and a revocation-list. Based on
* mbedTLS. */
UA_EXPORT UA_StatusCode
@@ -30338,7 +32016,7 @@ UA_CertificateVerification_CertFolders(UA_CertificateVerification *cv,
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/log_stdout.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/log_stdout.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30369,7 +32047,7 @@ UA_EXPORT UA_Logger UA_Log_Stdout_withLevel(UA_LogLevel minlevel);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/nodestore_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/nodestore_default.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30400,7 +32078,7 @@ UA_Nodestore_ZipTree(UA_Nodestore *ns);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/server_config_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/server_config_default.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30519,11 +32197,13 @@ UA_ServerConfig_addNetworkLayerTCP(UA_ServerConfig *conf, UA_UInt16 portNumber,
* to use defaults.
* @param recvBufferSize The size in bytes for the network receive buffer.
* Pass 0 to use defaults.
+ * @param certificate certificate data. Pass NULL to disable WS security
+ * @param privateKey privateKey data. Pass NULL to disable WS security
*/
UA_EXPORT UA_StatusCode
UA_ServerConfig_addNetworkLayerWS(UA_ServerConfig *conf, UA_UInt16 portNumber,
- UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize);
+ UA_UInt32 sendBufferSize, UA_UInt32 recvBufferSize, const UA_ByteString* certificate, const UA_ByteString* privateKey);
#endif
/* Adds the security policy ``SecurityPolicy#None`` to the server. A
@@ -30583,6 +32263,21 @@ UA_ServerConfig_addSecurityPolicyBasic256Sha256(UA_ServerConfig *config,
const UA_ByteString *certificate,
const UA_ByteString *privateKey);
+/* Adds the security policy ``SecurityPolicy#Aes128Sha256RsaOaep`` to the server. A
+ * server certificate may be supplied but is optional.
+ *
+ * Certificate verification should be configured before calling this
+ * function. See PKI plugin.
+ *
+ * @param config The configuration to manipulate
+ * @param certificate The server certificate.
+ * @param privateKey The private key that corresponds to the certificate.
+ */
+UA_EXPORT UA_StatusCode
+UA_ServerConfig_addSecurityPolicyAes128Sha256RsaOaep(UA_ServerConfig *config,
+ const UA_ByteString *certificate,
+ const UA_ByteString *privateKey);
+
/* Adds all supported security policies and sets up certificate
* validation procedures.
*
@@ -30625,7 +32320,7 @@ UA_ServerConfig_addAllEndpoints(UA_ServerConfig *config);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/client_config_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/client_config_default.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30655,7 +32350,7 @@ UA_ClientConfig_setDefaultEncryption(UA_ClientConfig *config,
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/securitypolicy_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/securitypolicy_default.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30694,12 +32389,40 @@ UA_SecurityPolicy_Basic256Sha256(UA_SecurityPolicy *policy,
const UA_ByteString localPrivateKey,
const UA_Logger *logger);
+UA_EXPORT UA_StatusCode
+UA_SecurityPolicy_Aes128Sha256RsaOaep(UA_SecurityPolicy *policy,
+ const UA_ByteString localCertificate,
+ const UA_ByteString localPrivateKey,
+ const UA_Logger *logger);
+
+#endif
+
+#ifdef UA_ENABLE_PUBSUB_ENCRYPTION
+
+UA_EXPORT UA_StatusCode
+UA_PubSubSecurityPolicy_Aes128Ctr(UA_PubSubSecurityPolicy *policy,
+ const UA_Logger *logger);
+UA_EXPORT UA_StatusCode
+UA_PubSubSecurityPolicy_Aes256Ctr(UA_PubSubSecurityPolicy *policy,
+ const UA_Logger *logger);
+
+#endif
+
+#ifdef UA_ENABLE_TPM2_SECURITY
+
+UA_EXPORT UA_StatusCode
+UA_PubSubSecurityPolicy_Aes128CtrTPM(UA_PubSubSecurityPolicy *policy, char *userpin, unsigned long slotId,
+ char *encryptionKeyLabel, char *signingKeyLabel, const UA_Logger *logger);
+UA_EXPORT UA_StatusCode
+UA_PubSubSecurityPolicy_Aes256CtrTPM(UA_PubSubSecurityPolicy *policy, char *userpin, unsigned long slotId,
+ char *encryptionKeyLabel, char *signingKeyLabel, const UA_Logger *logger);
+
#endif
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/log_syslog.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/log_syslog.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -30713,7 +32436,7 @@ _UA_BEGIN_DECLS
/* Syslog-logging is available only for Linux/Unices.
*
- * open62541 log-levels are translated to syslog-levels as follows:
+ * open62541 log levels are translated to syslog levels as follows:
*
* UA_LOGLEVEL_TRACE => not available for syslog
* UA_LOGLEVEL_DEBUG => LOG_DEBUG
@@ -30740,7 +32463,50 @@ UA_Log_Syslog(void);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/historydata/history_data_backend.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/create_certificate.h" ****/
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2021 (c) Christian von Arnim, ISW University of Stuttgart (for VDW and umati)
+ */
+
+
+
+_UA_BEGIN_DECLS
+
+#ifdef UA_ENABLE_ENCRYPTION
+typedef enum {
+ UA_CERTIFICATEFORMAT_DER,
+ UA_CERTIFICATEFORMAT_PEM
+} UA_CertificateFormat;
+
+/**
+ * Create a self-signed certificate
+ *
+ * It is recommended to store the generated certificate on disk for reuse, so the
+ * application can be recognized across several executions.
+ *
+ * \param subject Elements for the subject,
+ * e.g. ["C=DE", "O=SampleOrganization", "CN=Open62541Server@localhost"]
+ * \param subjectAltName Elements for SubjectAltName,
+ * e.g. ["DNS:localhost", "URI:urn:open62541.server.application"]
+ * \param keySizeBits Size of the generated key in bits. If set to 0, the maximum key
+ * size is used. Possible values are: [0, 1024 (deprecated), 2048, 4096]
+ */
+UA_StatusCode UA_EXPORT
+UA_CreateCertificate(const UA_Logger *logger,
+ const UA_String *subject, size_t subjectSize,
+ const UA_String *subjectAltName, size_t subjectAltNameSize,
+ size_t keySizeBits, UA_CertificateFormat certFormat,
+ UA_ByteString *outPrivateKey, UA_ByteString *outCertificate);
+#endif
+
+_UA_END_DECLS
+
+
+/**** amalgamated original file "/plugins/include/open62541/plugin/historydata/history_data_backend.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -31030,7 +32796,7 @@ struct UA_HistoryDataBackend {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/historydata/history_data_gathering.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -31149,7 +32915,7 @@ struct UA_HistoryDataGathering {
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/historydata/history_database_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/historydata/history_database_default.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -31169,7 +32935,7 @@ UA_HistoryDatabase_default(UA_HistoryDataGathering gathering);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/historydata/history_data_gathering_default.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/historydata/history_data_gathering_default.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -31188,7 +32954,7 @@ UA_HistoryDataGathering_Default(size_t initialNodeIdStoreSize);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/plugins/include/open62541/plugin/historydata/history_data_backend_memory.h" ***********************************/
+/**** amalgamated original file "/plugins/include/open62541/plugin/historydata/history_data_backend_memory.h" ****/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -31207,12 +32973,12 @@ UA_HistoryDataBackend UA_EXPORT
UA_HistoryDataBackend_Memory(size_t initialNodeIdStoreSize, size_t initialDataStoreSize);
void UA_EXPORT
-UA_HistoryDataBackend_Memory_deleteMembers(UA_HistoryDataBackend *backend);
+UA_HistoryDataBackend_Memory_clear(UA_HistoryDataBackend *backend);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/network_tcp.h" ***********************************/
+/**** amalgamated original file "/include/open62541/network_tcp.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -31236,23 +33002,26 @@ _UA_BEGIN_DECLS
* @return Returns the network layer instance */
UA_ServerNetworkLayer UA_EXPORT
UA_ServerNetworkLayerTCP(UA_ConnectionConfig config, UA_UInt16 port,
- UA_UInt16 maxConnections, UA_Logger *logger);
+ UA_UInt16 maxConnections);
+/* Open a non-blocking client TCP socket. The connection might not be fully
+ * opened yet. Drop into the _poll function withe a timeout to complete the
+ * connection. */
UA_Connection UA_EXPORT
-UA_ClientConnectionTCP(UA_ConnectionConfig config, const UA_String endpointUrl,
- UA_UInt32 timeout, UA_Logger *logger);
+UA_ClientConnectionTCP_init(UA_ConnectionConfig config, const UA_String endpointUrl,
+ UA_UInt32 timeout, const UA_Logger *logger);
+/* Wait for a half-opened connection to fully open. Returns UA_STATUSCODE_GOOD
+ * even if the timeout was hit. Returns UA_STATUSCODE_BADDISCONNECT if the
+ * connection is lost. */
UA_StatusCode UA_EXPORT
-UA_ClientConnectionTCP_poll(UA_Client *client, void *data, UA_UInt32 timeout);
-
-UA_Connection UA_EXPORT
-UA_ClientConnectionTCP_init(UA_ConnectionConfig config, const UA_String endpointUrl,
- UA_UInt32 timeout, UA_Logger *logger);
+UA_ClientConnectionTCP_poll(UA_Connection *connection, UA_UInt32 timeout,
+ const UA_Logger *logger);
_UA_END_DECLS
-/*********************************** amalgamated original file "/home/pdie/sonstiges/qtopcua/repos/open62541/include/open62541/architecture_functions.h" ***********************************/
+/**** amalgamated original file "/include/open62541/architecture_functions.h" ****/
/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
@@ -31261,75 +33030,27 @@ _UA_END_DECLS
*/
/*
- * This header has all the functions that are architecture dependent. The declaration is behind a ifndef since
- * they can be previously defined in the ua_architecture.h which include this files at the end
+ * This header has all the functions that are architecture dependent. The
+ * declaration is behind an ifndef since they can be previously defined in the
+ * ua_architecture.h which include this files at the end
*/
_UA_BEGIN_DECLS
-/*
- * Allocation functions
- */
-
-#ifndef UA_malloc
-void* UA_malloc(size_t size); //allocate memory in the heap with size bytes
-#endif
-
-#ifndef UA_calloc
-void* UA_calloc(size_t num, size_t size); //allocate memory in the heap with size*num bytes and set the memory to zero
-#endif
-
-#ifndef UA_realloc
-void* UA_realloc(void *ptr, size_t new_size);//re-allocate memory in the heap with new_size bytes from previously allocated memory ptr
-#endif
-
-#ifndef UA_free
-void UA_free(void* ptr); //de-allocate memory previously allocated with UA_malloc, UA_calloc or UA_realloc
-#endif
-
-#ifndef UA_alloca
-# if defined(__GNUC__) || defined(__clang__)
-# define UA_alloca(size) __builtin_alloca (size)
-# elif defined(_WIN32)
-# define UA_alloca(SIZE) _alloca(SIZE)
-# else
-# include <alloca.h>
-# define UA_alloca(SIZE) alloca(SIZE)
-# endif
-#endif
-
-#ifndef UA_STACKARRAY
-/* Stack-allocation of memory. Use C99 variable-length arrays if possible.
- * Otherwise revert to alloca. Note that alloca is not supported on some
- * plattforms. */
-# if defined(__GNUC__) || defined(__clang__)
-# define UA_STACKARRAY(TYPE, NAME, SIZE) TYPE NAME[SIZE]
-# else
-# define UA_STACKARRAY(TYPE, NAME, SIZE) \
- TYPE *NAME = (TYPE*)UA_alloca(sizeof(TYPE) * SIZE)
-# endif
-#endif
-
-/*
- * Sleep function
- */
-
+/* Sleep function */
#ifndef UA_sleep_ms
int UA_sleep_ms(unsigned int miliSeconds); //suspend the thread for a certain amount of mili seconds
#endif
-/*
- * Socket functions
- */
-
+/* Socket functions */
#ifndef UA_send
ssize_t UA_send(UA_SOCKET sockfd, const void *buf, size_t len, int flags); //equivalent to posix send implementation
#endif
#ifndef UA_sendto
-ssize_t sendto(UA_SOCKET sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); //equivalent to posix sendto implementation
+ssize_t UA_sendto(UA_SOCKET sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); //equivalent to posix sendto implementation
#endif
#ifndef UA_select
@@ -31341,7 +33062,11 @@ ssize_t UA_recv(UA_SOCKET sockfd, void *buf, size_t len, int flags); //equivalen
#endif
#ifndef UA_recvfrom
-ssize_t recvfrom(UA_SOCKET sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
+ssize_t UA_recvfrom(UA_SOCKET sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);//equivalent to posix recvfrom implementation
+#endif
+
+#ifndef UA_recvmsg
+ssize_t UA_recvmsg(int sockfd, struct msghdr *msg, int flags);//equivalent to posix recvmsg implementation
#endif
#ifndef UA_shutdown
@@ -31410,6 +33135,10 @@ unsigned int UA_socket_set_blocking(UA_SOCKET sockfd);//set a socket as blocking
unsigned int UA_socket_set_nonblocking(UA_SOCKET sockfd);//set a socket as non-blocking. Returns 0 if OK, other value otherwise
#endif
+#ifndef UA_ioctl
+int UA_ioctl(int fildes, int request, ...);//equivalent to posix ioctl implementation
+#endif
+
#ifndef UA_getsockopt
int UA_getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); //equivalent to posix getsockopt implementation. Only in non windows architectures
#endif
@@ -31419,7 +33148,7 @@ int UA_setsockopt(int sockfd, int level, int optname, const void *optval, sockle
#endif
#ifndef UA_freeaddrinfo
-void UA_freeaddrinfo(struct addrinfo *res);//equivalent to posix freeaddrinfo implementatio
+void UA_freeaddrinfo(struct addrinfo *res);//equivalent to posix freeaddrinfo implementation
#endif
#ifndef UA_gethostname
@@ -31438,17 +33167,16 @@ void UA_initialize_architecture_network(void);//initializes all needed for using
void UA_deinitialize_architecture_network(void);//de-initializes the network interfaces
#endif
-/*
- * Print function
- */
+/* Print function */
#ifndef UA_snprintf
int UA_snprintf(char* pa_stream, size_t pa_size, const char* pa_format, ...); //prints text to output
#endif
-/*
- * Access to file function
- */
+#ifndef UA_strncasecmp
+int UA_strncasecmp(const char* s1, const char* s2, size_t n);
+#endif
+/* Access to file function */
#ifndef UA_access
int UA_access(const char *pathname, int mode); //equivalent implementation of https://linux.die.net/man/2/access
#endif