High Performance SDK V1.3.0 =========================== New Features: ------------- * general: C++ support - Using UA_BEGIN_EXTERN_C in headers and removal of enum forward declaration * uabase: add new ua_variant_get_extensionobject function * uabase: add new ua_variant_detach_extensionobject_of_type function * uabase: add new ua_variant_set_extensionobject_binary function for setting pre-encoded structures * uabase: split variant code into multiple files * uabase: add new ua_string_trim function * uaserver: X509 UserToken support * uaserver: Loading multiple PKI store instances * uaserver: Loading multiple UA binary files into a single namespace * uaserver: NamespaceIndex mapping for NodeId, QualifiedName when loading UA binary files * uaserver: New ua_addressspace_load_file_ext function with support for handling * uaserver: Address Space Update to specification V1.04 * uaserver: Triggering support for monitored items (optional) * uaserver: PercentDeadband filter in monitored items (optional) * uaserver: Add support for ArrayDimensions * uaserver: Many new utility functions to simplify typical tasks * uaserver: Add new object instantiation code which allows better control on how instances declarations are created. * uaclient: Stabilization. The client is now able to survive the 72h test with network interruptions. * uaclient: Added security support. Client Getting Started Lesson02 demonstrates this feature. * uaclient: Added user authentication support. Client Getting Started Lesson03 demonstrates this feature. * uafileformat: New XML extension support in UA binary files. * xml2bin/xml2c: Add category filter which allows to filter by category (see UANodeset.xsd) * xml2bin/xml2c: Add option to strip unused types from model. This is important to reduce the sice of NS0 for embedded devices. This can be used also for other information models. This feature is still experimental and requires good knowledge of information models. * xml2bin/xml2c: Add support for structure with optional fields. * xml2bin/xml2c: Improve error output. * xml2c: Add support for arraydimensions. The tool now generates tables for array dimensions, which are referenced by the variable/variabletype tables. All redundancies get eliminated, which means each combination of arraydimensions exists only one time per namespace. * doc: Add new examples and API documentation for client side. Add general chapters for troubleshooting, configuring secure connections, unit testing and many minor fixes. * timer: performance improvement of timer processing when there are not many timers active. High Performance SDK V1.2.2 (candidate) =========================== Fixes: ------ * uasession: Fix improper timeout calculation when choosing deletable secure channels. * uatcp: Fix NULL pointer access during protocol handshake (#10906) * uatcp: Add missing request timeout handling for client. * uatcp: Fix compilation with client disabled. New Features: ------------- * general: Add support for additional security policies. * client: Add secure conversation to client functionality. High Performance SDK V1.2.1 =========================== Bugfix release for 1.2.x series. Fixes: ------ * general: fix compilation with disabled TO_STRING/FROM_STRING support * general: Fix various issues and warnings reported by PVS Studio * client: Fix client reconnect issues * client: Fix memory leak in client example when exiting without deleting subscription * uaclient: fix memory allocation of ACK array in publish * uaserver: remove obsolete methodpool * uaserver: fix 8bit datatypes in pointerstore * uaserver: fix wrong comparison in ua_addr_ht_key_compar * uaserver: fix potential nullptr deref in internal authentication backend * uaserver: change ua_node_set_nodeid to remove node from index only with NULL NodeId. * demoserver: fix memory leaks * uaapplication: fix invalid IPC_CLEAR call of g_pool_cfg * pki_store: fix malloc error check (found with PVS) * pki_store: fix sign of sscanf argument * ipc: fix format specifier of sem_name * trace: fix format specifier * uanetwork: fix potential nullptr deref of a_pSocket->pCurrentSend * uaseconv: fix potential nullptr deref of chan->channel_id * uafileformat: fix missing header field for file extensions (num_extnamespaces) - this field was already specified in previous version but missing - increased file version to be able to distinguish old files version with missing field from newer versions - the library can load both variants now * xmlparser: change malloc() include to use stdlib.h instead of malloc.c (fixes vxWorks build) * xmlparser: fix bug in xml_string_html_decode (invalid length in memcmp) * xmlparser: fix bug in xml_node_attribute_count. Type check was using wrong type. xml2c: * Fix wrong nsidx in encoding tables when subtypes of built-in types are used as structure fields * Fix sorting order of type_identifier.h to be consistent with type_table.c * Use symbolicname instead of browsename when generating defines for type-ids * add code to provider skeleton to register type tables * change default bin file name to use model prefix as basename (e.g. lead 'di.bin' instead of 'ns2.bin') * add missing function prototypes for union types * add missing file header to generated code xml2bin: * fix usage output (-h) * fix missing break in command line argument parser * fix hashing of GUID nodeids uapasswd: * use ua_mem_clear_s instead of ua_memset to securely remove passwords from memory documentation: * improve documentation of ua_reference_remove New Features: ------------- The SDK does not get new features in a bugfix release. Tools and examples delivered with the SDK are an exception to this rule. xml2bin: * Add support for node extensions - General extension handling and skipping - Node Access Info (access permissions) - Generator extension - Runtime address extension - Documentation extension Examples: * improve file writer example to show usage of extensions * enhance file_test application to display new information xml2c: * Add code to generate symbolicnames from browsenames when symbolicnames are missing in XML nodeset - perform Unicode decomposition to remove accents from letters (e.g. รค -> a) - remove remaining invalid ASCII symbols High Performance SDK V1.2.0 =========================== Highlights: * Support for events - Usage of events is explained in the new server gettingstarted lesson04 - The new configuration settings num_eventnotifiers and num_eventfields must be set - Events are enabled by default, but can be disabled with the cmake option UASERVER_SUPPORT_EVENTS * Implementations for new valuestores - floatstore: Stores float data types - uint32store: Stores uint32 data types - pointerstore: Stores pointers to existing C variables * New function to check matching data types: The write service allows only values that match the data type attribute, the new function uaserver_write_matches_datatype() implements an OPC UA Specification conform match check, for easy integration into the application. General: * Add example for the filewriter * Add target config debian_qemu Linux PL: * Remove deprecated definitions for unsafe functions, which caused warnings with new clang compilers. Use static analyzers instead. uabase library: * Add ua_bytestring_set_null() to set NULL bytestrings * Add ua_bytestring_append() to append a bytestring to another bytestring * Add ua_extensionobject_get_object() to get objects when the type matches * Add ua_nodeid_compare_numeric() and ua_nodeid_compare_string() convenience functions * Remove defines to disable arrays and matrices, these are always enabled now * Add new array and matrix handling functions to variant * Add getter functions for scalars to variant server library: * Remove old nodeid from hashtable index when changing a nodeid with ua_node_set_nodeid() * Fix for ua_reference_remove() when removing references between different name spaces * Fix naming of UA_SUPPORT_DESCRIPTION option * Fix objectpool cleanup for certain node classes in ua_node_delete() * Remove old nodeid from hashtable index when deleting a node * Skip the application URI check when the crypto backend does not support it * Add cmake option UASERVER_SUPPORT_LARGE_TABLES that allows more nodes in a single name space client library: * The client side is still considered beta and not recommended for production use * Improve interoperability to .Net and Java based servers * Fix content of the client description transferred during session creation Server-Provider: * Add values for the LocaleIdArray and ServerProfileArray Demo-Provider: * Show usage of array and matrix in variant * Set permissions in the AccessRights folder * Implement the method to change simulation speed xml2bin/xml2c: * Remove dependency to OpenSSL * Add UA_DESCRIPTION_C macro in generated code to make description strings optional. * Implement correct mapping of NsIdx in Variant values containing Argument Structures and ExtensionObjects * Doen't generate a static store anymore of the XML file does not contain any values. * Generated provider skeleton (-m switch) does not generate code which works for static and dynamic address spaces. * Reuse existing namespace indeces. When loading multiple XML files which contain the entries for the same namespace URIs, the assigned SDK NsIdx is reused instead of adding new ones. This fixes an issue with unnecessary empty namespace table entries. * Implement parsing of the EventNotifier attribute of Object nodes. * Correctly escape unicode characaters in string literals of string table. UATCP: * Let client start with message sequence number 1 * Fix install path for headers * Improve calculation of connection limits for the client Unit Test: * Add unit tests for new features and functions * Various fixes and improvement to existing unit tests Trace: * Improved File-Trace backend with file rotation and configuration file. * Improved trace documentation. High Performance SDK V1.1.1 =========================== General: * Add new profile_config files and update existing ones. * Improve traces * Fix warnings when trace is disabled Platform Layer Frontend: * Fix bug in ua_file_mkpath when the first folder does not exist. * Fix handling of absolute paths in ua_file_mkpath. * Add new function ua_file_path_is_absolute * Remove double definitions of defines in template file platform_config.h.in Windows PL: * Make private semaphores working on Windows. Linux PL: * Add missing registration of SIGHUP signal. * Fix unknown pid_t type compiler error when compiling with -std=c99 instead of gnu99 IPC library: * Make semaphore in IPC queue private if MEMORY_USE_SHM is disabled. uabase library: * Allow ua_bytestring_set to be called with NULL ptr, which will create a NULL-ByteString now. * Make ua_variant_set_array a public function. * Change back ua_string_compare() to old behaviour without lexicographical order, which is faster. * Add new ua_string_compare_lex() for sorting lexicographic order. * Add errorcode to ua_statuscode mapping function * fix wrong build number in template file base_config.h.in * Make ua_guid_from_string accept longer strings. This is useful if parsing a guid which contains more additional data. server library: * Remove unnamed union/struct fields as this not supported by all compilers * Fix trace facilities in uasession which use TRACE_FAC_SESSION now. * Fix trace facilities in uatcp which use TRACE_FAC_UATCP now. * Fix returned statuscode in TranslateBrowsePathToNodeIds if authorization is disabled. * Fix ua_node_delete_internal to remove the browsename string from correct namespace specific hashtable * Fix issue in static store, when reading array elements with index range the returned size was one byte too small. * Make session lifetime configurable via appconfig and config file * Add calculation to set missing security level in discovery service. * Make utility function ua_addressspace_traverse for recursive browsing a public function * Add service event hook to allows to monitor each called service * Add session event hook which allows to monitor session and securechannel events. This also gives you the information about securechannel and session relations. DemoServer (uaserverhp): * add restart loop using SIGHUP for testing soft restarts Server-Provider: * Fix Build-Date in ServerStatus * Make SoftwareVersion and BuildNumber configurable via appconfig Demo-Provider: * implement Multiply method xml2c: * Replace size_t format specifier (%zu) with PRIuSIZE_T define, because %zu is not supported by Visual Studio. * Allows generation of multiple namespaces in one call * Add checksum to validate consistent namespaces * Move ns0.c from server provider to examples/ns0 Static namespaces now need to recompile the static NS0 with the application to guarantee consistency * Fix issue with VS, as it does not compile empty arrays '{ }', if one pool is empty, which works fine with GCC and Clang. The solution is now to omit the braces completely, if a pool is empty. * Make the bytestring limit for filtering large bytestrings configurable. * Add missing headerfile common/errors.h to generated code. * Add missing headerfile trace/trace.h to generated provider skeleton. xml2bin: * Fix parsing of the event_notifier attribute in nodeclass Object. UATCP: * fix compiler error when BYTEORDER is configured as BIGENDIAN * add more traces * add more sanity checks Network/Berkeley: * Fix IPV6 support. * Fix DGRAM size in buffer when receiving UDP data. Security: * Fix CVE-2018-7559 which allowed to attack the deprecated security policy Basic128Rsa15. This was already disabled by default in the HP-SDK, but users could enable it. A fix was implemented to mitigate this issue. However it is not recommended to use this policy anyway, because it was deprecated years ago. * Add 'allow_deprecated_policies' switch. This prevents enabling deprecated policies accidentally, which could happen after a software upgrade and keeping old configuration files. The server will only enable configured deprecated policies if the user has explicitly enabled this. Otherwise the server will terminate with a configuration error, if deprecated policies have been configured. PKI: * Fix ASN1 time conversion in OpenSSL backend (adds sanity checks). Month was off by 1 because util_utctime_to_time_t requires January to be 0. Also adds range checks to time values. Unit Test: * Fix memory leak in PKI unit test. High Performance SDK V1.1.0 =========================== New Features: ------------- * New Client SDK * New UaApplication object for SDK initialization * New OPC UA Binary File Format for Information Models * New Platform support for Segger embOS and embOS/IP * New Crypto and PKI backends for Mocana NanoCrypto library * Generic structure encoder/decoder which allows to handle new types at runtime. This also reduces code size for all built-in types in NS0. * New binary file format, which is now a serialized cross-platform file format. V1.0.0 used memory pool dumps which worked not across different hardware platforms. * New xml2bin tool which converts XML Nodeset files into the new binary file format. * New xml2c tool which generates static address spaces. An addition to the address space C file it now also generates C code for all datatypes and type tables for the generic encoder/decoder. - New datatype "class" generation: C data structures and functions. - Support for enums, structures, structures with optional fields and unions. - Supports also inherited datatypes. - Type tables generation - CMake project generation to build complete libraries for type systems. * New examples: - Sensor Model Server: Demonstrate usage of dynamic and static type systems, as well as type instantiation. - History Example Server: Demonstrates how to implement UA history and how to implement underlying protocols using the SDK's network API. - Client Getting Started Tutorial - HP SDK Sample Client * More documentation Bugfixes: --------- We've fixed a large number of bugs found in V1.0.0 and improved the overall performance and stability. Breaking Changes: ----------------- The Client SDK required to change the way the application gets initialized. There is now a new 'uaapplication' object which must be created and which initializes the SDK. This simplifies application initialization and works for both client and server side. Please have a look into the examples/ folder for an example. High Performance SDK V1.0.0 =========================== Welcome to our first release of the High Performance OPC UA SDK. This SDK was tested on the following platforms: * Linux (PC,x86/x86-64): GCC, Clang * Linux (Raspberry PI, ARM): GCC * Windows (PC, x86/x86-64): Visual Studio 2008 - 2015 Supported Profiles: ------------------- * Nano Embedded Device Server Profile * Micro Embedded Device Server Profile * Embedded UA Server Profile (not yet, due to missing Monitor Triggering) * Standard UA Server Profile (not yet, due to missing Monitor Triggering) Supported Protocols: -------------------- * OPC UA TCP Supported Encodings: -------------------- * OPC UA Binary Supported Security Policies: ---------------------------- * None (not secure by design) * Basic128Rsa15 (not recommended, weak algorithms) * Basic256 * Basic256Sha256 Supported User Token Types: --------------------------- * Anonymous * Username Supported UA Services: ---------------------- * Discovery Service Set: FindServers, GetEndpoints * Secure Channel Service Set: OpenSecureChannel, CloseSecureChannel * Session Service Set: CreateSession, ActivateSession, CloseSession * View Service Set: Browse, BrowseNext, TranslateBrowsePathToNodeIds, RegisterNodes, UnregisterNodes * Attribute Service Set: Read, Write * Method Service Set: Call * MonitoredItem Service Set: CreateMonitoredItems, ModifyMonitoredItems, DeleteMonitoredItems, SetMonitoringMode * Subscription Service Set: CreateSubscription, ModifySubscription, DeleteSubscription, SetPublishingMode, Publish, Republish Unsupported Services: --------------------- * Query Service Set: QueryFirst, QueryNext * Attribute Service Set: HistoryRead, HistoryUpdate * MonitoredItem Service Set: SetTriggering * Subscription Service Set: TransferSubscription Supported NodeIds: ------------------ * Numeric * String * Guid * Opaque (not supported for static address spaces yet) Available Platform Backends: ---------------------------- * Linux * Windows Available Crypto Backends: -------------------------- * OpenSSL * mbedTLS (not stable yet) Available PKI Backends: ----------------------- * OpenSSL * mbedTLS (not stable yet) Available PKI Store Backends: ----------------------------- * file Available Trace Backends: ------------------------- * stderr * file * syslog (Linux only) Available Timer Backends: ------------------------- * soft Available Network Backends: --------------------------- * berkeley * epool (Linux only) Available Authentication Backends: ---------------------------------- * internal (file based user management) Available Authorization Backends: --------------------------------- * inode Additional Features: -------------------- * Configurable memory pools to avoid memory usage and fragmentation * Address Space can be compiled into binary (ROM based address space) * Loading binary address space file * XML to binary file converter * XML to C code converter * IPC framework * Sandbox mechanism * Portable XML parser * Unit test framework * Extensive unit test suite to support porting the SDK * Extensive API documentation and examples and tutorials * Structured type support * Dynamic object instantiation support Missing Features: ----------------- The following bullet points list missing features that will be added in future versions of the SDK. * Client side SDK for implementing OPC UA Clients * Event support: creating, sending and filtering of events * Alarm support: this depends on events * State machine framework * Triggering for monitored items * Structure support with optional fields * Union support * PLCOpen example * AutoId example (requires structures with optional fields, unions, and events)