This open62541 release v1.5.6 is the sixth maintenance release of the 1.5 release series.
open62541 (http://open62541.org) is an open source implementation of OPC UA (OPC Unified Architecture / IEC 62541) written in the C language. The library is usable with all major compilers and provides the necessary tools to implement dedicated OPC UA clients and servers, or to integrate OPC UA-based communication into existing applications. The open62541 library is platform independent: All platform-specific functionality is implemented via exchangeable plugins for easy porting to different (embedded) targets.
open62541 is licensed under the Mozilla Public License v2.0 (MPLv2). This allows the open62541 library to be combined and distributed with any proprietary software. Only changes to the open62541 library itself need to be licensed under the MPLv2 when copied and distributed. The plugins, as well as the server and client examples are in the public domain (CC0 license). They can be reused under any license and changes do not have to be published.
Important changes compared to the previous v1.5.5 release include:
- core: Reject overflowing arrayDimensions product in Variant en/decoding
- core: Reset zero pointers and sizes in UA_NamespaceMapping_clear
- core: Fix bogus free-on-error in UA_QualifiedName_printEx
- core: Properly guard against builtinType == 0 in ua_types_definition.c
- core: Use correct size in memset after moving Variant array elements
- arch: Correct static buffer defaults and dedupe allocation across eventloops
- arch: Allow custom memory allocators via custom architecture header
- server: Cap default outstanding PublishRequest count per session
- server: Migrate samplingMonitoredItems in TransferSubscriptions
- server: Initialize the server object for MINIMAL namespace zero
- server: Reclaim old unused ContinuationPoints
- server: Migrate samplingMonitoredItems in TransferSubscriptions
- server: Correct UA_DETECT_DEADBAND to avoid signed overflow and 2^53 precision loss
- server: Guard NULL session id in closeSession getSessionById
- server: Reject NULL sessionId in attribute setters and getters
- server: Clear up TypeDescription in error path of ReadWithNodeMaybeAsync
- server: Cap SecureChannel buffers to CM static-buffer sizes
- server: Skip event-field evaluation for subscriptions without an attached session
- server: Always allocate a static tx buffer to avoid per-send allocations
- client: Use authSecurityPolicies for non-X509 token authentication
- client: Double-buffer monitored-item modifications
- pubsub: Check message length before signature size subtraction
- pubsub: Allow saving configurations without published datasets
- pubsub: Expand coverage of state-machine, encoding, PDS and writer/reader APIs
- pubsub: Validate metaDataSize and pointer in UA_NetworkMessage_makeSyntheticPayloadHeader
- pubsub: Free partially-constructed components on create abort paths
- deps: Move libmdnsd dependency to the upstream
- deps: Fix a fuzzing issue in mdnsd's _cache()
- deps: Always NUL-terminate cj5_get_str() output buffer
- plugins: Sanitize CN in getCertFileName
- plugins: Bounds-check token stream reads in JSON5 config parser
- plugins: Manage PubSub AES contexts correctly
- plugin: Invoke login callback for anonymous user authentication
- plugin: Handle empty and unparseable certs in SecurityPolicy_None (#8160)
- plugins: Reject non-block-aligned RSA decrypt input
- plugins: Heap-allocate IP buffer for SAN list to avoid stack-use-after-scope
Diff stat: 151 files changed, 14924 insertions(+), 694 deletions(-)
Diff stat in /include and /src: 36 files changed, 719 insertions(+), 297 deletions(-)
New features and major changes compared to the previous 1.4 release series include:
- core: JSON de/encoding according to the OPC UA 1.05 specification
- core: XML de/encoding of Variants (also with multi-dimensional arrays) and structure-types
- core: UA_String_format with shorthands to print OPC UA builtin types
- arch: Support for FreeRTOS (using the lwip EventLoop)
- arch: Support for QNX
- arch: Support for Zephyr
- server: Support for "local" Event-MonitoredItems
- server: Extended async operations (read/write/call)
- server: Improved value source API for VariableNodes
- server: Implement CertificateGroup handling
- server: Support for GDS push operations
- client: Transparent mapping between local and remote namespace-indices
- client: Automatically read the NamespaceArray during connect (add to the namespace mapping)
- client: Support for Event-MonitoredItems
- client: All async service APIs are typed
- client: Load DataTypeDefinitions from the server at runtime
- pubsub: Support for manual de/encoding of PubSub messages
- pubsub: Custom state machine for PubSubComponents to integrate communication backends
- pubsub: Public API to compute offset tables for fixed Network-/DataSetMessages
- pubsub: Improved loading of PubSub configurations from a (binary) file
- pubsub: Initial support for SKS
- nodeset-compiler: Use the native XML decoding to parse attributes at runtime
- util: Query language (and parser) for EventFilter, RelativePath, etc.
- util: Convert DataTypeDefinition into UA_DataType (internal representation)
- eventloop: EventLoop can be cancelled to immediately return from a "poll-sleep"
- eventloop: Option to limit the number of sockets open at the same time
- eventloop: Support for lwip-based EventLoop
- plugins: Crypto PKI/SecurityGroup with a file-system storage backend
- plugins: Support for ECC-based SecurityPolicies (OpenSSL only)
- tools: "Shell mode" for the ua-cli terminal client