******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.2 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Bugfixes ------------------------ * Fix data change filter if Deadband and Status/Value/Timestamp is configured ******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.1 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Changes ------------------------ * Aborting startup if initialize provider fails * Removing references when deleting an OpcUa_BaseNode ------------------------ Bugfixes ------------------------ * Fix handling of TimeoutHint==0 in PublishRequests * Fix build with OPCUA_USE_SYNCHRONISATION enabled * Fix crash in GetEndpoints if EndpointURL is empty * Fix check for forward/inverse references in TranslateBrowsePathsToNodeIds * Fix namespace check in TranslateBrowsePathsToNodeIds * Check for correct data type on write to MinimumSamplingInterval * Check reference type before deleting inverse reference * Remove needless trace messages * Fix OpcUa_BaseNode_AddReferenceToNode behavior if no inverse reference is created * Fix endianness check in UaServer_P_TimeTFromDateTime * Fix UserExecutable attribute when built with authorization * DemoProvider: - Review address space - Set reasonable values for EURange and DiscreteTypes - Using AlarmType instead of AcknowledgeableConditionType, fix state strings - Set correct event type of SampleEvent - Check method access rights when built with authorization ------------------------ New Features ------------------------ * Add function UaServer_Shutdown for automatic shutdown after defined interval * Replace hostname in FindServers like in GetEndpoints * Add GetNodeById function to ProviderCBInterface * Add function UaServer_TurboList_GetNext * Add function UaServer_Session_GetContinuationPoints * Register server again at LDS with isOnline == false on shutdown * Update UA namespace to include Complex and DoubleComplexNumberType ******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.0 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Changes ------------------------ * BREAKING CHANGE: Changed the type of the last value stored at data monitored items to use OpcUa_DataValue to allow storing timestamps and status code together with the last value. Use the new UaServer_NewItemValue function to let the SDK detect data changes. * IMPORTANT: Using new stack functions for copying UA structures. The XYZ_Clone methods (e.g. OpcUa_NodeId_Clone) are deprecated, use the new XYZ_CopyTo methods instead * Removed unused history helper functions (HistoryReadEventInternal, HistoryReadRawModifiedInternal, HistoryReadProcessedInternal, ReadAtTimeInternal, HistoryUpdateInternal) * Updated UA address space to UA Specification 1.02 * UaServer_Events_GetEventField can now be used to retrieve event field values using their local index * Change timeout checks of session and subscription to use monotonic GetTickCount, avoiding system time change issues ------------------------ Bugfixes ------------------------ * IMPORTANT: Fixed the creation of the extensions of certificates. It is recommended to recreate existing application instance certificates in order to contain correct extensions. Without this extension multiple certificates with the same identity might not work. * Checking the client signature in ActivateSession * Creating a new ServerNonce with each ActivateSession call * Fixed 64 bit compilation warnings * Fixed Compliance Test Tool errors * Aborting all outstanding publish requests if the last subscription of a session is deleted * Fixed connection loss after call to unsupported service * Added check for minimum length of the client nonce * Deleting session when being used without activation * Fixed status code returned on close session if session was not activated * Returning correct user access rights if UASERVER_SUPPORT_AUTHORIZATION is enabled * Startup flag status is correctly copied in ModifyMonitoredItems * Fixed deadband filter behavior after call to ModifyMonitoredItems * Fixed index range handling for String and ByteString values * Fixed crash if client certificate is empty * Returning correct status code for non-applicable IndexRange * Using GetTickCount as starting value for SubscriptionIds * Using ApplicationUri in server array node * Fixed TranslateBrowsePaths for PLCOpen and DI nodes * Implemented special handling for access to the server's CurrentTime node to be as accurate as possible * Windows: - Removes wrong endianess check in UaServer_P_TimeTFromDateTime ------------------------ New Features ------------------------ * IMPORTANT: UaServer_SetUserAuthenticationType is deprecated, use UaServer_SetUserAuthenticationTypeEx instead for using X509 authentication tokens * New helper function UaServer_NewItemValue that can be used instead of UaServer_DataChanged that allows to move data change detection to the SDK. * New DataLogger module for logging and reading history data * Added GettingStarted lessons explaining the usage of the SDK in detail * Publishing and sampling timers now use one timer per interval, so independent intervals can now be used * Added support for Units * Added support for DeadbandPercent * X509 authentication possible using the internal authentication module, added helper function UaServer_VerifySignature * New Demo provider with a more complex address space, providing all nodes needed for Compliance Testing * New UA method GetMonitoredItems allows retrieving of all MonitoredItems in a subscription * Added define UASERVER_MAX_PUBLISH_PER_SESSION for limiting the number of outstanding publish requests * Added define UASERVER_MAX_SESSIONS for limiting the number of sessions * Added define UASERVER_MAX_REJECTED_CERTIFICATES to limit the number of stored rejected certificates * Added define UASERVER_SUPPORT_DISCOVERY (CMake option BUILD_WITH_DISCOVERY) for disabling registration at the local discovery server * Added functions UaServer_P_InitShutdownFlag, UaServer_P_IsShutdownFlagSet and UaServer_P_ClearShutdownFlag for platform independent detection of shutdown keystrokes * Added functions UaServer_Session_IsEncrypted and UaServer_Session_IsSigned * Added function UaServer_Session_SetCurrentClientUserId to set the current user's name in the session diagnostic object * Providers can now be deleted during runtime * Setting client's SessionName as DisplayName and BrowseName of session node * Added version info defines to uaserver_config.h * Added SessionDiagnostics and SessionSecurityDiagnostics nodes * Replacing the hostname in the GetEndpoints response if EndpointUrl is set in request * Added new FindUASDK.cmake CMake module, making the CMakeLists.txt easier to read * CMake generates a uaserver_cmake_config.h header which can be included in other projects linking against the SDK. This way the SDK specific preprocessor defines don't have to be specified in other projects. Simply define UASERVER_HAVE_CONFIG in the other project to use the generated header. * Optimized UA, PLCOpen and DI address space tables * Optimized grow strategy in UaServer_Vector (used for storing references) * NEW convenience functions for creating NodeIds, LocalizedTexts, and QualifiedNames. This is useful for creating address spaces in less lines: - UaServer_SetDefaultNamespace - UaServer_GetDefaultNamespace - UaServer_CreateStringNodeId - UaServer_CreateStringNodeIdEx - UaServer_CreateNumericNodeId - UaServer_CreateNumericNodeIdEx - UaServer_CreateLocalizedText - UaServer_CreateQualifiedName See API reference documentation for more information. * NEW convenience functions for setting variant values. - OpcUa_Variant_SetBoolean - OpcUa_Variant_SetSByte - OpcUa_Variant_SetByte - ... See API reference documentation for more information. * NEW UaModeler version will be release shortly after the SDK release The new UaModeler version supports generation of complete provider code based on the designed information model. This supports creation of folders, variables, object types and instances, complex data types and enumerations, event types including the event hierarchy and last but not least icon properties. The complete new Demo provider of the UaDemoServer was generated using this UaModeler. * Demo server: - Supporting commandline options (start with '-h' as parameter for details) - Using the fully qualified hostname as endpoint URL - Added sample for dynamic creation of nodes * Windows: - Added CMake option to build against the static C runtime ******************************************************************************** ******************************************************************************** ** ** ** Version 1.2.1 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Changes ------------------------ * IMPORTANT: The UserData stored in BaseNodes and their subtypes will not anymore be freed on shutdown. It is now in the responsibility of the application to free the memory referenced by the UserData. * Removed usage of OpcUa_DateTime_ToInt64 after it was removed in uastack * Removed UASTACK_SUPPORT_PKI, replaced UASTACK_WITH_SECURITY with UASTACK_WITH_OPENSSL after that was unified in uastack * Made authentication and authorization settings configurable in CMakeLists.txt ------------------------ Bugfixes ------------------------ * Alarms & Events: - Storing events of type ConditionType in UaServer_Events_CreateEvent instead of UaServer_Events_FireEvent - Fixed removing of Conditions from internal management list - Fixed crash in UaServer_ModifyMonitoredItems for event items * SampleProvider: - Fixed write on invalid memory for dynamic GUID - Removed usage of hard coded NodeId identifiers * ServerProvider: - Setting correct requested address space size - Added error checks in server provider address space creation - Removed creation of duplicate references in server address space * Discovery: - Fixed crash in discovery registration if no response was received - Removed usage of hardcoded Endpoint index in discovery registration - Fixed check for NULL ResponseType in discovery registration * Linux: - Implements missing methods UaServer_P_DateTime_ToMilliseconds and UaServer_P_DateTime_Diff - Added SIGPIPE handler in demoserver application * Fixed possible crashes for array lengths of -1 * Initializing providers correctly to prevent crashes after errors in startup phase * Regularly checking sessions for timeout * Creating default security policies of endpoint depending on stack settings * Added missing unlock of session mutex * Fixed possible hijacking of sessions by setting first SessionId with GetTickCount * Added check for creating invalid SessionId * Changed index parameter of UaServer_HashTable methods to unsigned int to prevent invalid array index access * Increased UASERVER_MAX_PROVIDERNODES for generated server address space * Returning service fault if PublishRequest times out * Using stack datatypes in utility methods * Added check for system time changes to prevent erroneous Session timeouts * Removed overwriting of PKIType setting in PkiConfig * Fixes error checks in node creation methods * Not adding security policies if PkiType == NO_PKI * Clearing server struct in demoserver only if it has been initialized * Building the SDK libraries without security (without OpenSSL) possible * Using Mutexes and Semaphores only if OPCUA_USE_SYNCHRONISATION is set * Not allowing to write value of different ArrayType ------------------------ New Features ------------------------ * Added method RemoveNode to Provider interface * Alarms & Events: - Added method UaServer_Events_GetConditionByNodeId - Extended Alarms & Events example and added tutorial 3 * Made the server callback interface available for the application via UaServer_SetCallback_SessionCreated/SessionActivated/SessionClosed * Added getter methods for ClientName and LastClientContact of a Session ******************************************************************************** ******************************************************************************** ** ** ** Version 1.2.0 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Changes ------------------------ * IMPORTANT: Preprocessor defines for the server application PKI configuration have been moved from uaserver_config.h to uaserver.c. These values now have to be set in the UaServer_Configuration struct that can be retrieved by UaServer_GetConfiguration(). This allows to change BuildInfo and PKI configuration of the UA application without recompiling the SDK. * Windows: The PKI directory used by the sample application is now "All Users\Application Data\UnifiedAutomation\\PKI" (or equivalent) * Moved DI/PLCOpen model files to subfolders * Split HistoryRead in HistoryReadEvent / HistoryReadRawModified / HistoryReadProcessed / HistoryReadAtTime * New method UaServer_DoCom() is to be called in a loop instead of OpcUa_SocketManager_Loop() in the application * Renamed define UASERVER_MAX_NAMESPACEINDICIES to UASERVER_MAX_NAMESPACEINDICES ------------------------ Bugfixes ------------------------ * Fixed returned StatusCode for UaServer_Write_Internal() * Fixed creation of DataChange if DataChangeTrigger is StatusCode only * Unified include policy of header files and file structure * Changed processing order of LinksToAdd/LinksToDelete in UaServer_SetTriggering to be compliant * Fixed memleak in UaProvider_Server_InitServerStatus * Removed usage of OpcUa_BaseNode's UserData in SDK * Fixed potential crashes in OpcUa_BaseNode_Set... methods that use strings * Added handling of unhandled data types to OpcUa_Variant_Clone * Added handling of unhandled data types to OpcUa_Variant_ScalarCompare/ArrayCompare/MatrixCompare/CompareDeadbandAbsolute * Setting PolicyId of configured UserTokenPolicies * Fixed application URI in linux sample server ------------------------ New Features ------------------------ * Authentication: - Added Internal / Win32 / PAM / SASL authentication modules - Only accepting connections if used UserIdentityToken is configured and valid - If UserIdentityToken is set to Username/Password, an authentication module must be enabled - Added support for encrypted passwords in UserIdentityToken - Added authorization support to Server- and Sampleprovider * Authorization: - Added UaServer_iNode structure to OpcUa_BaseNode for authorization handling - Added user management methods to provider interface - Added UaServer_UserCtx as session's UserIdentityData - Using UaServer_iNode instead of UserWriteMask/UserAccessLevel for authorization - Added sample nodes with different access rights in sample provider - Added sample passwd and group files * Alarms & Events: - Added support for event monitored items - Added methods for firing events - Added all event types from UA address space - Creating custom event types is possible - Added sample event type to sample provider - Added sample EventNotifier and EventSource to sample provider - Added convenient methods to set event fields of BaseEventType - SetTriggering supports event monitored items - WhereClause supporting all operators (except for Cast) - Handling ConditionRefresh() method in SDK * OpcUa_BaseNode members are not visible anymore, removed UASERVER_BASENODE_HIDEMEMBERS define * UaServer members are not visible anymore, configuration is accessible with UaServer_GetConfiguration() * Added server side limit for ReferencesPerNode for Browse/BrowseNext responses * Added OpcUa_BaseNode_RemoveReferenceToNode and OpcUa_BaseNode_RemoveReferenceToNodeId * Added periodic registration at discovery server ******************************************************************************** ******************************************************************************** ** ** ** Version 1.1.1 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Bugfixes ------------------------ * Fixed bug in UaServer_TurboList freelist handling * Fixed bug in UaServer_HashTable_RemoveAt * Fixed bug in removing UA nodes dynamically * Fixed bug in cloning opaque NodeIds in OpcUa_NodeId_Clone ------------------------ New Features ------------------------ * Added 5 static and 5 dynamic UInt32 variables to demo address space * Added SessionCancel implementation * Added Triggering of subscriptions * Completed UA Data Access information model support: - Added BrowseContinuationPoints and MinSupportedSampleRate nodes - Added UaSession nodes. Each new session creates a new node in the address space. * Added monitoring support for all attributes * Added datachange filter (absolute deadband) * Added AvailableSequenceNumbers to publish reponse * Changed ModifyMonitoredItems to work asychronously * Improved timer precission by time measurements instead of just counting number of timeouts * Improved item queue handling of datachange notifications * Added IndexRange support for datatypes String and ByteString * Added missing results for SubscriptionAcknowledgements in Publish requests * Added standard conformant ApplicationURI * Added Browse Checks - Check ReferenceTypeId - Check BrowseDirection - Check if ReferenceNodeId is an empty String * Improved error handling in BrowseNext * TranslateBrowsePathToNodeId: return OpcUa_BadNodeIdInvalid if StartingNode not found * Session Management: - check if session is used unactivated - check the SecureChannelId - verify Timestamp and TimeoutHint * Utilities: - Added new function UaServer_NamespaceIndex_GetByUri() ******************************************************************************** ******************************************************************************** ** ** ** Version 1.1.0 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ New Features ------------------------ * BrowseNext Service * Continuationpoints * Republish Service * ModifySubscription Service * Support for PLCopen and DI Type System * Certificate and CRL generation at server startup (if not existent) * Certificates of unknown clients are stored in rejected folder * Improved internal node management * Support for multiple namespaces in one provider * AddressSpace creation with autogenerated sources (UaModeler) ******************************************************************************** ******************************************************************************** ** ** ** Version 1.0.0 ** ** ** ******************************************************************************** ******************************************************************************** Initial release