******************************************************************************** ******************************************************************************** ** ** ** Version 1.2.1.148 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- All modules: ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * Added support for managing the application certificates in the Windows certificate store. The store location (LocalMachine or CurrentUser) and the store name (My or individual application name) must be specified in the respective configuration file. - LocalMachine: certificate can only be created when application has admin privileges (expected for server applications). When using "My" as store name the global Personal store will be used and the application will trust all applications having certificats in this folder. However using "SomeApplicationName" will grant higher level of flexibility, because you can grant each application's certificate separately. - CurrentUser: certificate can be created having user privileges only (expected for client applications). When using "My" as store name the user specific Personal store will be used and the application will trust all applications having certificats in this folder. However using "SomeOtherApplicationName" will grant higher level of flexibility, because you can grant each application's certificate separately. - Note: it is not allowed to create identical store name "MyApplicationName" twice, once for LocalMachine and once for CurrentUser. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Documentation and Examples ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- * Enhanced example for event generation * Added example for migrating COM OPC DA servers to OPC UA * Added example for PLCopen (IEC 61131-3) information model * Enhanced documentation for user authentication ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaBase ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * UaVariant - Added DataValue handling to UaVariant. Added toDataValue and setDataValue to UaVariant ------------------------ Bug Fixes ------------------------ * UaVariant - Added erro return if UaVariant::changeType() from string to bytestring fails - Fixed type conversion of negative Float or Double to signed integer values For rounding purpose 0.5 was added to the Float or Double for conversion to integer values. This was wrong for negative Float or Double values. Added check for negative Float or Double values and subtracted 0.5 instead of adding. * UaNodeId - Added missing addRef() in UaNodeId::attach() * UaString - Changed UaString to use a const in parameter for all overloaded operators * Added a check to avoid that the cleanup is not called for the platform layer if the init was never called * Changed ReferenceCounter::addReference() and releaseReference() to return the actual ref count instead of the result of the atomic increment / decrement. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaPki ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------- !!! Breaking Change !!!! ------------------------- * fromWindowsStore() is now using thumbprint instead of subject name Changed Windows certificate handling to use certificate thumbprint instead of name for loading ------------------------ Features ------------------------ * Added deleteFromWindowsStore() ------------------------ Bug Fixes ------------------------ * Fixes memleak when storing key pair as PEM file ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaClient ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * Added server certificate validation before connecting ------------------------ Bug Fixes ------------------------ * Added checks to avoid calls to the stack if the channel is not connected * Fixed freeing memory for history read functions * Added mutex unlock in UaSessionPrivate::disconnectChannel to make sure all code paths unlock the mutex before the channel is deleted ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module CoreModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- --------------------------------------- !!! Breaking Change HistoryManager !!!! --------------------------------------- * Added missing read modified functionality at HistoryManagerBase - Interface not release yet - Change is based on a specification change - Changed interface of HistoryManagerBase to provide two specialized functions readRaw and readModified instead of one readRawModified. - This change was necessary to support the specification change for read modified and to avoid unused parameters for the normal read raw case. ------------------------ Features ------------------------ * Enhanced handling of setAttributeValue in UaVariable implementations * Optimized adding of references to the reference list. To save memory the reference handling was changed in a previous version to use a simple linked list instead of a STL list. New references where added at the end but the last entry was not stored before. This was changed to store also the last entry to optimized adding of references to the list. * Optimized adding of inverse references to the reference list. To save memory the reference handling was changed in a previous version to use a simple linked list instead of a STL list. New references where added at the end which required a linear search of the end. This was changed to add the new inverse entry of the beginning of the list. This changed the order but only for inverse references. For forward references the end pointer is now stored instead. * Changed methods of conditions to shared methods using the instance declarations also for all instances - Optimizes memory consumption (reduction of 25%) - Fixes wrong browse name name space - Methods are shared anyhow * Added Refresh related event types Added RefreshRequiredEventType, RefreshStartEventType and RefreshEndEventType * Changed BaseObjectType to use same attribute handling like BaseVariableType - Added support for modeling rule - Optimized memory usage with different optimized attribute data classes ------------------------ Bug Fixes ------------------------ * UaTransactionManager - Added a break condition for the loop waiting for transaction completion during shutDown * Fixed wrong EventManagerUaNode method called in ConditionType::Disable * Added missing startUpIO call in NodeManagerBase * Fixed TwoStateVariable::Id property to provide right browse name * Fixed passing TimestampToReturn parameter to IOManager in ModifyMonitoredItems * Removed type node creation of variable types already created by generated classes * Fixed static memory leaks for node creation * Changed discovery server registration to not longer call register with IsOnlie=false at shutdown. Deactivated the "unregister" function with RegisterServer call with IsOnline = OpcUa_False This flag is now used by the discovery server to force a static registration * Allowed Null reference type ID in TranslateBrowsePathsToNodeId after clarification in UA spec * Changed initial value of Severity from 0 to 500 to avoid invalid severity - All samples did not initialize the severity to a valid value. This caused problems in clients checking the severity 1-1000. - Instead of changing all samples the initial value in the class BaseEventType was changed to 500 * Fixed endless loop if element operand points to its own element Fixed crash because of stack overflow * Added missing & operator to initial value UaVariant passed to UaVariable constructors ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ * Fixed memory leak in ActivateSession with security * Fixed resend queue issue with KeepAlive messages - The empty keep alive messages with the same sequence numbers got queued in the retransmission queue for the subscription. This filled also the list of AvailableSequenceNumbers in the Publish. - Both issues are fixed by not longer storing KeepAlive messages in the retransmission queue. * Fixed access to uninitialized array in UaSubscription::finishModifyMonitoring for event monitored items ******************************************************************************** ******************************************************************************** ** ** ** Version 1.2.0.131 ** ** ** ******************************************************************************** ******************************************************************************** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! See 'Breaking Change' section for each module for changes that may effect your current implementation. Not all changes are detected by the compiler. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- All modules: ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * Prepared all modules to be compiled as DLL * Prepared all modules for 64 bit support * Added the capability to overwrite internal server SDK classes like SessionManager, TransactionManager, ServerManager and SubscriptionManager This is normally not necessary but allows power users to replace some SDK parts with specialized code * Added modelling tool including a code generator (beta) for creation of implementation classes for user specific Object and Variable types * Added version information that can be read during runtime to the UA stack and the CoreModule. The access functions can be found in version_coremodule.h * Added defines for SDK features used as compiler switches for the features. They can be used to reduce code size if a feature is not needed. Switches can be found in version_coremodule.h ------------------------ Bug Fixes ------------------------ * Fixed issues with changing system time ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Documentation and Examples ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- * Added general OPC UA introduction sections to the documentation * Added detailed Server Getting Started Tutorial * Added detailed Client Getting Started Tutorial * Added reading of client configuration from INI file for client example ------------------------ Utilities ------------------------ * OpcServer Added class for encapsulating the OPC server modules in one object handling all start up and shut down code through a simple API Used in all examples and getting started tutorials * ServerConfigXml - Added creation of PKI directories if they do not exist - Added creation of revocation list file (*.crl) - Provides example for the creation of application certificate ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaBase ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ !!! Breaking Change !!!! ------------------------ * UaDataValue::detach() Method signature changed since the internal data handling of the class was changed. See features for more details. The caller must now check if he gets the data pointer. If not there are more than one reference to the data and the caller must copy the data instead of detaching. ------------------------ Features ------------------------ * UaString - Added arg() methods to have an optimized printf like functionality to construct strings - Added number() to set a number as string - Added Like operator handling * UaVariant - Added constructors for Float, Int16 and Boolean - Added array to array conversion - Added conversion from Windows Variant VT_CY to UaVariant - Implemented conversion from String to LocalizedText - Added toFullString() - Added index range support with applyIndexRange() - Added Matrix support * UaDataValue Changed class to reference counted internal data storage to avoid data copying Implements the copy on change schema * UaDateTime - Added extractor for FILETIME - Added conversion functions for OpcUa_Int64 * UaPlatformLayer Added reference counter for init / cleanup to make sure calls from multiple modules forces only on init / cleanup call to the stack * UaExtensionObject - Added cloneTo functionality for not encoded extension object - Added OpcUa_Annotation support * UaMutex Added reference counted version UaMutexRefCounted to be able to share a mutex across different objects * UaStatusCode Added toString() to provide symbolic name for status codes * UaLocalizedText - Added compareLocale() to be able to check the locale part of the localized text - Added setText() - Added setLocale() * UaByteString - Added operator > - Added operator < * Added UaContentFilter class * Added UaAnnotation class * Added UaNumericRange class ------------------------ Bug Fixes ------------------------ * UaDateTime::msec() Fixed calculation of for large 64 bit values * UaVariant - Added check to toByteString() for valid characters at conversion from string - Fixed toString() function for XML element - Added check for null value in changeType() * UaThread - Removed running flag from class and changed to use the flag of the underlying C code to avoid raise conditions - Added code to check if the thread was already started before and to delete and to create a new thread if it was already started before to work around limitations in the stack * UaNodeId - Fixed toString() method for GUID NodeIds - Fixed toFullString() method for GUID NodeIds - Fixed toXmlString() for GUID NodeIds - Enhanced isNull check for UaNodeId * UaString - Added missing OpcUa_String_Initialize to UaStringPrivate::UaStringPrivate(const OpcUa_ByteString *other) * UaStatusCode Fixed the InfoType::DataValue and Limit bit handling * UaByteArray Fixed fromHex(): conversion of letters a-f/A-F was not correct ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaPki ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ !!! Breaking Change !!!! ------------------------ * Linking of crypt32.lib (Windows only) Adding access to Windows certificate store requires linking of crypt32.lib ------------------------ Features ------------------------ * UaPkiRevocationList Added new class for generation of a revocation list file (*.crl) * UaPkiCertificate (Windows only) Added access to Windows certificate store to import and export certificates ------------------------ Bug Fixes ------------------------ * UaPkiCertificate Fixed memory leak in serialNumber() ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaClient ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ !!! Breaking Change !!!! ------------------------ * SessionSecurityInfo and ClientSecurityInfo - Removed unused parameter from initializePkiProviderOpenSSL - Changed UserIdentityToken handling to force the user to set the token type * Applied changes in UA Stack for Historical Access based on specification update ------------------------ Features ------------------------ * SessionConnectInfo - Added flag to disable automatic reconnect - Added nWatchdogTimeout parameter with default value 5000 (ms) This timeout is used for Read calls to the server status * ClientSecurityInfo Added initialization with NO_PKI provider * UaSession - Added browse and browseNext functions for a list of starting nodes - Added asynchronous versions of node management services - Added getter to access the server status from the UaSession - Added multi call to allow to call a list of methods in one round trip from the client - Added function UaSession::changeUser to allow to change the user on a session - Implemented asynchronous methods for CreateMonitoredItems, ModifyMonitoredItems, DeleteMonitoredItems and SetMonitoringMode ------------------------ Bug Fixes ------------------------ * User and password user identity token - Implemented missing password encryption if requested by the server - Added automatic selection of strongest support algorithm - Fixed encoding of password length with correct endianess * UaSession - Added missing timeout setting for internally used UA service calls - Added reset of passed in subscription pointer in deleteSubscription to indicate to the caller that the subscription was deleted - Fixed clean up of subscriptions if a client does not call deleteSubscription - Added fall back for user identity token handling if no security policy is provided - Added handling of password encryption if URL does not match the endpoints returned by the server or the client did not provide the server certificate - Added checks for Subscription validity before calling subscription callbacks - Fixed decrementing of outstanding publishCount if count is already 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module CoreModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ !!! Breaking Change !!!! ------------------------ Before Technical Preview 1.2: ------------------------------- * Session Split class to code that is common and needed in CoreModule and to code that is only needed in UaModule to allow DLL build. This requires to create UaSession instead of Session in your implementation of ServerConfig::createSession. If you use ServerConfigXml you need to update the file from examples/utilities. If you miss this change in your code your server will crash at the first connect of a UA client * HistoryManager (not relese yet) - Interface change for HistoryManager::beginHistoryTransaction to add handling of TimestampsToReturn * UaNode Changed interface of UaNode to use on all methods returning a LocalizedText a Session object as parameter to the function instead of a localId string. UA Clients can specify a list of LocaleIds for a session and it is necessary to be able to access the whole list from the session object. * UaEventData Changed registration and access to Event Fields from hard coded index to dynamically created indexes. This affects all classes derived from UaEventData representing event fields. This change was necessary to allow the return of event fields based on the BrowseName of the event field independent of the event type like required in the OPC UA specification After Technical Preview 1.2: ------------------------------- * EventManager - Change EventManager interface for beginStartMonitoring and beginModifyMonitoring to add missing parameters * MethodHandleUaNode - Moved MethodHandleUaNode implementation to new files methodhandleuanode.cpp / h - Replace public members variables of class with set and get functions to ensure that the reference counters of the UaNodes pointers in the class is handled in the right way * HistoryManagerCallback (not released yet) Added callback function finishHistoryReadModifiedData based on OPC UA HA spec and UA stack change that defined an extended OpcUa_HistoryModifiedData for HistoryRead for modified data. * UaVariable Made value parameter passed to setValue a const parameter since it is only [in] ------------------------ Features ------------------------ * Added support for Alarms & Conditions - Enhanced event handling - Implemented event filtering - Added classes representing the different condition types defined by OPC UA * Added namespace OpcUa containing classes for OPC UA defined Object and Variable types * Added HistoryManagerBase as simplified base class for HistoryManager implementations * ServerManager Added methods for internal read, write, call, data monitoring and event monitoring * ServerConfigData Moved data class for ServerConfig interface implementations from sample code to the CoreModule * ServerConfigSettings Moved implementation for ServerConfig interface based on INI file from sample code to the CoreModule * NodeManagerUaNode - Added methods getNodeManagerUaNode and getNode to NodeManager and NodeManagerUaNode to be able to get a UaNode pointer if the node is managed by the SDK - Added feature to delete a tree of child nodes together with the parent node in deleteUaNode - Added callback interface and functionality to restrict browse results The new interface BrowseUaNodeCallback allows product implementers to hock into the browsing of UaNodes to reject the browsing of a node or to restrict the browse results of a node for example based on the user rights of the user logged into the session. * UaNode - Added writing of any attribute if allowed by the node. - Added events for attribute write handling to the IOManagerUaNode - Added setUserData() to be able to store user specific information (e.g. device address) in a node. - Added modellingRuleId() for modeling rule short cut on nodes - Implemented special shortcut handling of modelling rule in UaReferenceLists::browseReferences * IOManagerUaNode - Added beforeSetAttributeValue() to be able to do a user access validation before write - Added afterSetAttributeValue() to be able to get informed about a value change after write - Addes support for IndexRange handling in Read and data monitoring - Added device monitoring through readVAlues() for a configurable list of different sampling intervals * EventManagerUaNode Added and enhanced class for full event handling support. This class and its helper classes provide all functionality necessar for the event handling including the - implementation of the EventManager for monitored item handling - event sending and filtering - registration of event fields and event types * UaReferenceLists - Added getTargetNodeByBrowseName for simple lookup based on browse name - Added direct access to reference lists * SamplingEngine Made the list of sampling intervals used configurable. The NodeManagerUaNode uses ServerConfig::getAvailableSamplingRates for configuration * Completed types for Server object * NodeManagerBase Added new base node manager class integrating NodeManagerUaNode, IOManagerUaNode and EventManagerUaNode into one class providing Data Access and optional Event support in one NodeManager class ------------------------ Bug Fixes ------------------------ * Session - Fixed error in history continuation point handling. Changed Browse continuation point handling to same algorithm and added checks to make sure the max size is limited to UInt16 values - Enhanced handling of Publish requests in the queue - Clear queue when SecureChannel is closed or a new one is assigned to the session with ActivateSession - Discard Publish requests if they are already timed out * SessionManager - Fixed raise condition when client is closing a session and SessionManager::closeAllUaSessions is called in parallel due to server shutdown - Fixed raise condition when client is closing a session and SessionManager::shutDown is called in parallel due to server shutdown - Fixed deadlock for multiple parallel ActivateSession calls accessing the see - Changed initial SessionId from 1 to getTickCount Get random starting point for session id to avoid that a client with several instances can hijack the session of another instance by accident after restarting the server. * UaVariable -> derived classes Fixed writing of values to a variable with data type BaseDataType to allow any data type for write * NodeManagerUaNode - Fixed deadlock in browse calls in the case of multiple parallel browse calls across several node managers - Fixed potential deadlock in translateBrowsePathToNodeId similar to browse * IOManagerUaNode - Added attribute range check to return right status code for compliance test - Compliance test case passed max Double value but the value was casted internally to Int32. The value was not checked for <0. Added a check to set values<0 to Int32_Max - Added monitoring of attributes other than value. Provides the current value but there is no sampling of attributes implemented - Added check to reject absolute dead band for monitoring of none value attributes - Added checks for invalid attribute, data type and deadband combination for Create- and ModifyMonitoredItems * NodeManagerRoot Enhanced locking of node manager list * HashTable - The ChainEntry class did delete the next chain entry directly and did not use releaseReference - Changed OpcUa_String_StrLen to OpcUa_String_StrSize when calculating data length in ChainEntry::find ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * UaSession - new class - Added this class to seperate UA specific session information from common session information needed in the CoreModule. This was needed for mudule DLL build - Integrated assignment of endpoint information to session during activation of a session. Users of the SDK can now get information about the endpoint used by the client. * UaServer - Added Exchange of discovery server certificate to server store and server certificate to discovery server windows store to enable (optional) automatic security configuration for local discovery server. This feature is configured through ServerConfig::getWindowsDiscoveryRegistrationSecuritySetup() - Added creation of configured RejectedCertificatesDirectory to store rejected certificates * UaSubscriptionManager - Changed beginPublish() to execute the publish for a subscription in late state also through a worker thread from the thread pool to avoid a blocking of the incoming thread for this case - run() - added check for stop flag in worker thread to speed up shut down * UaSubscription - Implemented use of worker thread for sending service responses ------------------------ Bug Fixes ------------------------ * UaTransactionManager - Added register nodes handling for history calls - Added waiting for transaction completion at shut down - Fixed read and write with registered node and other attributes than value - Enhanced error returned for null NodeIds in Read and Write * Added implementation of Republish Implemented Republish and the retransmit queue for notification messages and all related handling * UaSubscription - Deleted remove access to transaction handle manager in UaSubscription::close since transaction objects get always deleted in the finish calls and not where they are started. - Added waiting for transaction completion in UaSubscription destructor since transactions are accessing the Subscription object - Fixed potential raise conditions for access to handle manager for monitored items - Fixed Session reference counter problem if client connection was not interrupted and BeginSendResponse failed for Publish - Fixed RevisedQueueSize in CreateMonitoredItems - Fixed subscription memory leak if SetMonitoringMode does not start a transaction to a IOManager - Fix for constructing Publish response if change flag is set but corresponding monitored items are already deleted. Sending uninitialized Publish response crashed server - Added check of MonitoringMode in UaSubscription::beginDeleteMonitoredItems IOManager::beginStopMonitoring should not be called if MonitoringMode is Disabled since the monitored item is not registered with the IOManager in this case - The Publish handling did not check the monitoring mode. Additional check was added to send data changes only if the monitoring mode is Reporting - Fix for UA Compliance issue if SetMonitoringMode is called with the current setting - Bug fix for sending Publish error response in the case of a started UaSubscription::publish() The publish request is dequeued and passed to UaSubscription::publish(). If an error happens in this function an response must be sent. This was not done in the case where the subscription is invalid. * UaMonitoredItem - Added handling of OpcUa_DataChangeTrigger_StatusValueTimestamp - Added initialization of m_lastDataValue with OpcUa_BadWaitingForInitialData to make sure any initial value, even if it is equal to an initialized UaDataValue gets delivered. * UaSession - Fixed creation of fault response for canceling publish request - Fixed deadlock when a Publish request gets canceled in a session because of a timeout and another thread is using the session to send a response * UaServer - Fixed decryption and extraction of password - Fixed transport profile URI to be identical with specification - Fixed serverSignature.Length assignment in createSession - Added checks for certificate and client nonce if security is active - Changed default localId to "" instead of "en" if no localId is specified by the client - Fix UA Compliance - added check for invalid TimestampsToReturn in CreateMonitoredItems and ModifyMonitoredItems * UaSubscriptionManager - Added security check for calls to subscription checking session The code did not check if the subscription is assigned to the session that is used to make a call to the subscription ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModels ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Added this module ------------------------ * Support for OPC DI (Devices) information model The OPC DI information model was released by the OPC Foundation in November 2009. This SDK version provides full support for this model. * Support for OPC UA IEC 61131-3 information model The OPC UA IEC 61131-3 information model was released by the OPC Foundation in March 2010 as joined specification with PLCopen. This SDK version provides full support for this model. ******************************************************************************** ******************************************************************************** ** ** ** Version 1.0.0.5555 ** ** ** ******************************************************************************** ******************************************************************************** Initial release