******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.1.193 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------ Features ------------------------ * Compliance Testing server - Passed compliance test (V1.1) with more test cases and latest specification * Added support for user defined reference types in server SDK - Added support in C++ server SDK - Added support in UaModeler * Added support for user defined enumeration types in server SDK - Added support to UaModeler * Added network redundancy support in client SDK Implemented as list of alternative EndpointUrls in SessionConnectInfo used for connect tries at secure channel if the main URL fails * Added Query service set handling to server and client SDK * Enhanced Condition Branch handling * Added handling of user tokens Certificate and IssuedToken to server and client SDK ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Documentation and Examples ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- * Added Alarm&Conditions example to client sample code "Client Cpp Sample" ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaBase ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------- !!! Breaking Change !!!! ------------------------- * UaSettings and INI file handling - UaSettings does now require call to beginGroup() even if only one group is defined - INI file must contain at least one group ------------------------ Features ------------------------ * UaAbstractFileEngine - Added file open/read/write/close methods to file engine * UaDataValue - Added method UaDataValue::checkDeadbandExceeded() for deadband checks * UaExtensionObject - Added model change event support Added ModelChangeStructureDataType complex type handling * UaQualifiedName - Implemented UaQualifiedName::operator< for map handling * UaVariant - Added conversion from string to string array to UaVariant::changeType() - Added support of array syntax like {10|255|3|} for a string value in the conversion function UaVariant::toByteString() - Added conversion from UInt64 to Double in UaVariant::toDouble() - Added conversion from VT_CY array in UaVariant::operator=(const VARIANT ©) - Added conversion from XmlElement to Windows Variant BSTR in UaVariant::operator VARIANT() const * UaUserIdentityToken - Added user tokens Certificate and IssuedToken handling * UaXmlDocument - Added access to name space through UaXmlDocument::getNamespace() ------------------------ Bug Fixes ------------------------ * UaByteString - Added optimization and additional error checks to UaByteString::base64decode() * UaDateTime - Returning now 0 in toTime_t() if time is before beginning of time_t * UaDataValue - Fixed timestamp check in UaDataValue::compare() - Removed code for old version of UaDataValue class The internal data handling was changed in a previous version to shared data with a copy on write policy to avoid copying the data several times since the DataValue is used and passed on very often and it was necessary to reduce copy operations to a minimum. The old code was still available with a special compiler switch to allow switching between implementations. Since the code is stable and used for several versions, the old code was removed to avoid confusion. * UaFileEngine - Fixed UaFileEngine::link() * UaNetworkBrowser - Fixed browsing network if not all results fit into allocated memory * UaSettings - Major bug fixing and enhancement of UaSettings - Fixed limitation of reading max file size of 4096 byte - Added sync method to save file - Added change flag to save file only if changed - Adding default group [general] if no group is set for setValue() - Fixed handling of multiple sections - Removed duplicated handling of values through section objects and a flat list of strings - Implemented access to key in sub group if group is part of the key * UaSimpleAttributeOperand - Added missing getter for browsePath array size to UaSimpleAttributeOperand UaSimpleAttributeOperand::browsePath() was providing access to the raw array. UaSimpleAttributeOperand::noOfBrowsePath() was missing to get the size of the array * UaStatusCode - Fixed UA status code conversion to COM HRESULT and quality in UaStatusCode::getComDaStatus() * UaVariant - Now returning deep copies of XmlElement and ByteString in UaVariant::operator[] to be consistent with other structure types - Bug fix in operator=(const VARIANT ©) If conversion fails for array or matrix the internal variant was in an inconsistent state that could lead to memory corruptions - Added check for size <= 0 to not allocate array/matrix value in UaVariant::cloneTo() - Fix memory leak in UaVariant::applyIndexRange() ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaPki ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ * UaPkiCertificate * UaPkiRevocationList * UaPkiRsaKeyPair - Added PKI methods for opening/writing files with UTF8 encoded filenames This provides a solution for handling certificates in directories with non ASCI characters in the path ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaClient ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * Added network redundancy support Implemented as list of alternative EndpointUrls in SessionConnectInfo used for connect tries at secure channel if the main URL fails Configuration through new parameter SessionConnectInfo::alternativeEndpointUrls * Added handling for Certificate user token * Added Query service set handling to UaSession ------------------------ Bug Fixes ------------------------ * Fixed duplicated sending of connectionError callback * Fixed policyId selection in user/password token if token does not contain security policy * Fixed missing sequence number detection in the case of roll over of the sequence number * Increased the default setting of SubscriptionSettings::lifetimeCount to match the default timeout setting for the subscription ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module CoreModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * Implemented handling of user defined reference types - Added enhancements to SDK to be able to handle user defined reference types - Added code generation to UaModeler * Added Query service set handling to server SDK - The current implementation allows to implement query by overwriting the UaTransactionManager. The next major release will integrate the Query functionality on the SDK interface level - Sample code can be found here http://www.unified-automation.com/forum -> C++ based OPC UA SDK -> Topic: How to implement Query Service to Server? * Added handling of user tokens Certificate and IssuedToken - IssuedToken is only prepared, not fully implemented - Certificate can be activated with a compiler switch for GetEndpoints TEMPORARY_CONFIG_SWITCH__ENABBLE_CERTIFICATE_USER_TOKEN - The temporary define will be replaced with a configuration option in ServerConfig for the next major release. The interface cannot be changed for a service release * Added model change event support - Added ModelChangeEventType(s) handling for BaseModelChangeEventType and GeneralModelChangeEventType through new event type data classes * ConditionTypeData - Added initialization of BranchId and Severity in ConditionTypeData::initialize() * IOManagerUaNode - Made support of writing timestamp and status configurable - IOManagerUaNode::setTimestampWriteSupport() Method used to enable or disable support for writing timestamp - IOManagerUaNode::setStatusWriteSupport() Method used to enable or disable support for writing status - Implemented reconnect of Variables to MonitoredItems after delete and recreate of variable - Both tokens are passed on in ActivateSession to logonSessionUser() * Made default values for max continuation point configurable from outside via compiler switches - The default value is now provided in version_coremodule.h - The defines DEFAULT_MAX_BROWSE_CP and DEFAULT_MAX_HISTORY_READ_CP can be overwritten from the build scripts * Provide max settings for subscription and monitored items counts (total and per subscription) - Added additional method ServerConfig::getSubscriptionMaxCountSettings() to provide configuration for the max settings - Added checks for max counts at subscription and monitored item creation ------------------------ Bug Fixes ------------------------ * Updated generated variable type files - Bug fix: Replaced sprintf creating potential buffer overflow with UaString::arg - Added same variable schema for children like in object - Using static members containing the instance declaration - Using instance declaration nodes for creation of children - Replaced property only handling with generic variable child handling - Updated generated files for Variable to fix setting of optional property values * Updated generated condition classes - Update to latest model file with additional mandatory components - Added branch creation function for AlarmTypeData classes * Fixed raise condition when sending events for ConditionType events - The ConditionTypeData objects can be accessed from two different threads if a client issues a ConditionRefresh and the server is updating the event data to send a new status to the client - Added locking capabilities to protect the event data during update and refresh handling !!!!!!!! Server implementations must call lockEventData() and unlockEventData() before and after updating the condition object state. !!!!!!!! * UaVariable implementation classes - Added checks to allow changes of timestamps in UaVariable::setValue() - Added missing handling for Matrix value in CacheVariableConnector::sample() and setChanged() when checking for locale in a LocalizedText value - Added handling of deadband for array types - Fixed shared node detection in UaReferenceLists::deleteAllChilren() - Fixed UaGenericXXX::setAttributeValue for description - Added NULL pointer check in UaReferenceLists::browseReferences * IOManagerUaNode - Skipped call to variableCacheMonitoringChanged in beginStopMonitoring if Variable is no longer available - Fixed raise condition in sampling engine handling when resizing the lists - Added check for write only variable at Read and DataChange The access level was not checked for Read and DataChange in the IOManagerUaNode generic code. There are now additional checks for the AccessLevel and UserAccessLevel attributes. The Read or DataChange will now return the status BadNotReadable (AccessLevel has no CurrentRead) or BadUserAccessDenied (AccessLevel has CurrentRead and UserAccessLevel has no CurrentRead) - Added new SamplingItem class to handle index range and percent deadband - Added call to IOManagerUaNode::afterGetAttributeValue() and beforeSetAttributeValue() in the case of handling of read and write through readValues and writeValues * Server Object - Added functionality to update the complex value for the ServerStatus - Added missing capability and diagnostic nodes - Added Server | ServerDiagnostics | SubscriptionDiagnosticsArray - Added Server | ServerCapabilities | SoftwareCertificates - Added data type Structure | SoftwareCertificate - Fixed data types for variables below Server | ServerDiagnostics - Completet ServerStatusType and BuildInfoType VariableType * UaReferenceLists::translateBrowsePathToNodeId() - Pass on error from translate call to other NodeManager - The error was overwritten by Bad_NoMatch before * Session - Fixed the following two continuation point related issues - If less than 10 continuation points are configured the array is accessed out of range - If more than 10 continuation points are configured only 10 will be used ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * Added configuration option to hide an EndpointUrl from the list of DiscoveryUrls - UaEndpoint::setIsDiscoveryUrl - UaEndpoint::isDiscoveryUrl() - used in UaServer::FindServers() ------------------------ Bug Fixes ------------------------ * Server shutdown - added transaction completion check for subscriptions - Added handling of wait for transaction completion into subscription transaction handling - Added list of closed subscriptions where transactions are still active to the SubscriptionManager - Calling wait for transaction completion earlier - Added trace outputs for starting and stopping transactions in subscriptions - Fixed raise condition with closing Subscriptions and waiting for transaction completion A subscription that was closed but has still active transactions must be managed in a special list in the SubscriptionManager. The subscription was not added in all situations to this list since there was an unlock between setting the subscription state to CLOSED and starting the transaction for removing the active monitored items from the subscription. In addition the SubscriptionManager did execute the check for active transactions before closing the subscription * UaTransactionManager - Moved code to wait for transaction completion to a separate function to be able to call it from outside - Added server time stamp handling for Read operation level errors returned from IOManager::beginRead * UaSubscriptionManager - Fixed memory leak in method beginCreateMonitoredItems() if subscriptionId is invalid * UaSubscription - Access to Session member in Subscription was not locked Added code to work with a reference counted copy of the Session pointer instead - Fixed access to MonitoredItem object pointers outside Subscription lock - Added missing null pointer check for monitored item object in close subscription - Fixed memory leak for the case that notifications were not attached to publish response * UaSession - Fix memory leak in sendSubscriptionStatusChangeNotification() * UaServer::secureChannelCreated() - Using now new UTF8 PKI method for storing rejected certificates - Fixes storing if path contains non-ASCI characters ******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.0.183 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- All modules: ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------- !!! Breaking Change !!!! ------------------------- * Delivery structure of the third-party components The delivery structure of the third-party components was changed to be able to have several different versions in parallel e.g. Win32, Win64 and WinCE or different compiler versions like Visual Studio 2008 and 2010. * All third-part components are now delivered and used as DLL version instead of a static library in the examples. This includes OpenSSL, LibXML and the UA stack Most SDK users delivered already the DLL versions with their final product but we want to force all users to do this in the future to be able to update security related components like OpenSSL without the need for updating the whole product. !!! Add define _UA_STACK_USE_DLL !!!!!!!!!!!!!! You need to change your project settings if you have not already used the DLL versions before. The define _UA_STACK_USE_DLL must be added to the pre-processor definitions to avoid linker errors. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ------------------------ Features ------------------------ * Compliance Testing * Added support for additional server profiles - A & C Previous Instances Server Facet - Auditing Server Facet - Client Redundancy Facet (TransferSubscription) - Redundancy Visible Server Facet * Added support for additional client profiles - Redundancy Switch Client Facet (TransferSubscription) * Made client and server SDK and examples compileable for no security - Allows excluding OpenSSL dependency - Requires changes of UA stack compiler settings in opcua_platformdefs.h to NO - #define OPCUA_SUPPORT_SECURITYPOLICY_BASIC128RSA15 OPCUA_CONFIG_NO - #define OPCUA_SUPPORT_SECURITYPOLICY_BASIC256 OPCUA_CONFIG_NO - #define OPCUA_SUPPORT_PKI OPCUA_CONFIG_NO ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Documentation and Examples ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- * Reworked client getting started tutorial * Added server getting started lesson 7 as Historical Access example ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaBase ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * UaNodeid - Added method setNamespaceIndex() * UaNetworkBrowser - Platform independent network browser to find network nodes in the local network - This feature can be used to provide a network browser to find OPC UA servers in the network * Event Filter handling for clients - New classes - UaEventFilter - UaContentFilter - UaFilterOperand / UaElementOperand / UaLiteralOperand / UaSimpleAttributeOperand - UaContentFilterElement - Helper classes for creating the event filter for event monitored items * UaVariant - Added UaVariant constructors for the data types NodeId, LocalizedText and QualifiedName - New method applyIndexRange() New method needed for writing with indexRange - Added index range handling for matrix including matrix with multiple dimensions - Implemented Matrix support for Windows VARIANT conversions - Added conversions between ByteString and ByteArray - changeType does now allow conversion between ByteString and ByteArray - toByteString does now allow conversion from ByteArray - toByteArray does now allow conversion from ByteString - New method getArrayElementsFromString() - New conversion from string to any numeric arraytype * UaUniString - Added two new overloads for method replace - Added new method trimmed() * UaNumericRange - Added handling for matrix including matrix with multiple dimensions - Added operator= * UaExtensionObject - Implemented redundancy diagnostic objects handling Added handling for RedundantServerDataType ------------------------ Bug Fixes ------------------------ * UaVariant - getIndexRange() - Fixed null pointer access for special case length = 1 for ByteString array (code was removed) - Removed special handling for length = 1 -> This case returns also an array not scalar - operator VARIANT() Fixed operator VARIANT() for empty ByteString - UaTypeToVartype() Fixed conversion of OPC UA type ByteString to COM vt type - compare() Fixed UaVariant::compare() for matrix values - toBool() Enhanced number of types (integer and floating point types) convertable to bool - Error handling in getIndexRange() and applyIndexRange() Only return IndexRangeInvalid if index range has wrong syntax or is logically wrong i.e. firstIndex >= secondIndex - Fixed UaVariant::toExpandedNodeId to return the full contained ExpandedNodeId and not only the NodeId part. * UaString - Fixed UaString::like() * UaStatusCode - Fixed missing last digit in UaStatusCode::toString() where unknown code is printed as hex code - Changed InfoBit handling in UaStatusCode::setComDaQuality - DataValue flag is only set if additional information is provided and not always for DataValues - Therefore the bit needs only be set if the limit bits are set in the quality. - Masking out diagnostic bits of statuscode in toString(). * UaThreadPool::addJob Fixed performance issue when extending the thread pool size * Removed "using std::map;" etc. from all files to avoid problems with special compilers Changed all use of map and list to std::map and std::list. * Fixed memory leak when using file engine The abstract file engine creates a static object for the singleton implementation. This object is now deleted when shutting down the UA system * UaNodeId - isNUll() NodeId is also null if string is empty and if guid has only 0 elements * UaFileEngine - Fixed UaFileEngine::entryList() for Linux, removing check for '.' in path * UaUniStringList - operator= deleted memory twice if new size was smaller old size ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaPki ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ * UaPkiCertificate - Fixed memoryleak in UaPkiCertificate::info() * UaPkiPublicKey - Fixed memoryleak in UaPkiPublicKey by calling EVP_PKEY_free after X509_PUBKEY_get. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaClient ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------- !!! Breaking Change !!!! ------------------------- * History service changes after Part 11 (HA) and UA stack updates - Change of PerformInsertReplaceType to PerformUpdateType - Change of UpdateDataDetails.UpdateValue.DataValues to UpdateDataDetails.UpdateValues ------------------------ Features ------------------------ * Added support for additional client profile Redundancy Switch Client Facet Added transferSubscription handling to UaSession * Added automatic reconnect if initial connect fails Added SessionConnectInfo::bRetryInitialConnect parameter to configure connect handling in the case the initial connect fails * Added sessionName parameter to SessionConnectInfo This allows to set a unique session name for debug purposes to identify the session in the server * Reduced the number of threads per client connection by making the thread pool a shared object used by all client connections ------------------------ Bug Fixes ------------------------ * deleteSubscription handling if subscription does not longer exist in server Setting subscription invalid if new session was created was missing. This caused an error return in deleteSubscription since the call was forwarded to the server The SDK does now know that the subscription is already invalid and does only clean up resources in the client SDK. * UaSession::connect Fixed initialization of clientnonce if no security is used * Fixed memoryleak if ClientSecurityInfo::loadClientCertificateOpenSSL() fails * Fixed detach of result data for asynchronous Call handling The asynchronous handling of single calls detaches the result data and deletes the result array. The array pointer was not set to NULL which caused a crash in the clear of the response structure in the stack * Added handling for special case that security policy is not defined for username token Added fall back to SecurityPolicy in the EndpointDescription if it is not provided with the username token description in the EndpointDescription. OPC UA Part 4, section 7.35 requires: If this SecurityPolicy is omitted then the Client uses the SecurityPolicy in the EndpointDescription This case was not handled * Removed printf outputs to console - Replaced printf with trace outputs if useful - Removed developer debug outputs ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module CoreModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- --------------------------------------- !!! Breaking Change HistoryManager !!!! --------------------------------------- * HistoryVariableHandleUaNode was changed to handle UaNode pointer as private member including reference counting * Breaking Change: HistoryManager changes after Part 11 (HA) and UA stack updates - Change of PerformInsertReplaceType to PerformUpdateType - Change of UpdateDataDetails.UpdateValue.DataValues to UpdateDataDetails.UpdateValues --------------------------------------- !!! Breaking Change EventManager !!!! --------------------------------------- * Added parameter for EventFilter result handling in callback functions This affects only users implementing the EventManager interface directly In this case an compiler error will indicate the change. This change is hidden if the EventManagerUaNode is used Affected methods are - finishStartMonitoring - finishModifyMonitoring Added parameter OpcUa_EventFilterResult* pEventFilterResult ------------------------ Features ------------------------ * NodeManagerBase - Enhanced NodeManagerBase to support HistoryManager Added handling for history access to the NodeManagerBase by - providing a method to assign a HistoryManager to the NodeManagerBase - implementing NodeManager::getHistoryVariableHandle() * IOManagerUaNode - New event afterGetAttributeValue() Adds overwrite capability for attribute read. It can be used to apply user access checks - New event beforeMonitorAttributeValue() Added capability to reject creation of monitored item in the IOMangerUaNode based on user rights - Implemented percent deadband handling for analog items and enhanced related error checks - Reduced ThreadPool per IOManagerUaNode to one shared ThreadPool for all IOManagerUaNode instances - UaVariable_Value_CacheIsUpdatedOnRequest feature UaVariable ValueHandling can be defined to: - Update cache only if variable is monitored (signalled through IOManagerUaNode::variableCacheMonitoringChanged) - Read and Write are handled through IOManagerUaNode readValues and writeValues - Added capability to get informed about subscribe / unsubscribe of cached variables - Event through IOManagerUaNode::variableCacheMonitoringChanged() * EventManagerUaNode - Splitted EventManagerUaNode into two classes - EventManagerUaNode derived from EventManagerBase - EventManagerBase has no relation to UaNode classes and implements only the base functionality needed for an EventManager - EventManagerUaNode adds all UaNode releated handling. This is mainly functionality for the Condition objects * EventManagerBase - Added Condition Branch handling - Added capability to send RefreshRequiredEvents - Added EventManagerBase::unregisterEventField and EventManagerBase::unregisterEventType - Added EventManagerBase::unregisterEventNotifier to be able to remove event notifiers from an EventManager - Added EventCallback::invalidateEventManager() to allow an EventManager to be removed from the server without shutting down the whole server and without keeping the interface instance in memory - Added capability to shut down the EventManager and to disconnect from MonitoredItems - Uses new event receive callback interface method of EventManager - Enhanced locking - Added shutdown status to be checked in all methods - Implemented EventFilter result handling - Enhanced error handling for EventFilter - Added capability to overwrite check whether the passed NodeId is a root notifier for the EventManager * Alarm and Condition object classes - Added Condition Branch handling - Implemented handling for important optional condition event fields - AlarmCondition.ActiveState.EffectiveDisplayName - AlarmCondition.ActiveState.TransitionTime - AcknowledgeableConditionType.AckedState.TransitionTime - Added shelved state machine handling * Added feature to register an EventManager during runtime Added capability to register EventManagers after server startUp to create active event monitored items in the new EventManager - Registration through ServerManager::registerDynamicEventManager() - Implemented register functionality in SubscriptionManager - All Subscriptions get informed about new EventManager - The EventManager is added to all Event MonitoredItems - All active event MonitoredItems are registered with the EventManager * Class Statistic - class instance counts are provided as UA Variables and trace output This allows analyzing the number of reference counted C++ class instances independent of there OPC UA status. An examples are session objects that may be already closed but if not all references from users are released, the actual objects in memory may be much higher than the used objects. The numbers can be read through OPC UA or in the trace outputs. * OpcUa::BaseVariableType and all derived classes - Enhanced data type check in OpcUa::BaseVariableType to handle Enum value writes in all situations - Added builtIn data type member to OpcUa::BaseVariableType - Enhanced data type check in OpcUa::BaseVariableType to check builtIn type instead of data type nodeId since writes are always done with the builtIn type. * NodeManagerRoot / ServerManager Added internal (simplified) browse calls - Internal browse calls are available through NodeManagerRoot or ServerManager - Two browse calls, one for forward browsing and one full browse hiding the functionality necessary for client browse call handling - Added method to get a list of super types for a type node * Implemented server profile "Redundancy Visible Server Facet" Added configuration options for non-transparent redundancy * Added first version of server profile "Auditing Server Facet" - Added creation of audit events - Added configuration parameter isAuditActivated to the ServerConfig interface - Added Audit Event Types - Added History Audit Event Types - Added Support define - can be included / excluded Configuration through SUPPORT_Auditing_Server_Facet in version_coremodule.h - Activated Event handling in NodeManagerNS1 * Changed NodeManagerNS1 to use NodeManagerBase as base class instead of NodeManagerUaNode and IOManagerUaNode * Integrated Historical configuration and capability objects - Added HA configuration objects - Added HA capability objects and provided access through Server object - Used them in the demo server * Added MultiStateDiscreteItemType classes * Added handling of Session object node in the address space ------------------------ Bug Fixes ------------------------ * Fixed default error handling for HistoryRead in UaTransactionManager::beginHistoryRead Added default error if the HistoryManager returns NULL but does not set an error code * Variables with enumration data types Changed data type of variables with enumeration values from Int32 to enumeration data type * Added EnumString properties to enumeration data types * Fixed handling of ConditionRefresh if more than one EventManager is available - The RefreshStartEvent and RefreshEndEvent was sent for every EventManager for every MonitoredItem. This forced several of these events if more than one EventManager is active. - The handling was changed to send only one RefreshStartEvent and RefreshEndEvent per MonitoredItem. * Minor compliance fixes - Default browse does now return BadViewIdUnknown if a view is specified - Added handling of abstract reference types in checkReferenceTypeMatch() - Return operation level error in browse() if ReferenceTypeId is not a valid ReferenceType - Return service level error if an invalid view is specified - UaSubscription::beginCreateMonitoredItems() returns error if filter other than datachangefilter is set for non event items - In method beginStartMonitoring() use SamplingItemDeviceIndexRange if indexRange is specified - In IOManagerUaNode execute_Xxx() methods - apply index range - Clean up list of indexRange in destructor of IOTransactionContext - In UaServer::FindServers apply filter for list of returned servers - Only return requested timestamps - Set overflow bit in status code if queue has been emptied and a new value arrives - Added missing IndexRange handling for SamplingInterval 0 - Return BadBrowseDirectionInvalid if invalid browse direction is set - Added check in ActivateSession if the session is valid for activation or if it is already marked for deletion - Changed result to BadSessionNotActivated for service calls before ActivateSession - Fixed GetEndpoints handling * Fixed null pointer access in BrowseContext::setUserData if m_pView is null * Fixed endless loop in UaReferenceLists::getTargetNodeByBrowseName ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * UaServer - ActivateSession Added default localeId handling to use first configured supported localeId if client does not pass a locale - Added setting of SecurityLevel in GetEndpoints to allow a client to detect the most secure Endpoint - Implemented filtering of results in GetEndpoints based on EndpointUrl parameter If the passed EndpointUrl matches one of the configured EndpointUrls, only the Endpoints with this URL are returned in GetEndpoints. - Added capability to configure additional servers to return in FindServers This configuration option allows to run the server on port 4840 but to return also additional servers for a fixed configuration e.g. two servers from the same vendor on one network node. - Expanded list of DiscoveryUrls to list of Endpoint URLs in FindServers and server registration This change ensures that a server is reachable even if not all URLs are working for a client - Added feature to hide endpoints in GetEndpoints - Added isVisible flag to UaEndpoint - Added handling in GetEndpoints - Used flag in redundancy module to make internal endpoint invisible - Activated security for internal communication - Implemented trigger handling and SetTriggering * Implemented Server Profile "Client Redundancy Facet" Implemented TransferSubscription * Multi session support for one secure channel Changed secure channel handling to allow several Sessions per SecureChannel. This is normally not used by clients but allowed by the specification and verified by the compliance test tool. * Implemented sending History responses in worker thread if requested by HistoryManager * Optimized the publish code for sending the notifications / added length limitation handling - Change detection was changed to two counters for data and events which are incremented already when the data is put into the monitored item queue - Data and events are filled directly into the preallocated arrays. Preallocation happens based on the counters - Only additional data e.g. from linked monitored items is handled through additional lists like before - Added handling of maxNotificationPerPublish requested from client. Added additional limitation check based on serializer settings ------------------------ Bug Fixes ------------------------ * Fixed handling of MonitoringMode Disabled for event monitored items in Create / Modify The MonitoringMode was ignored in Create- and ModifyMonitoredItems. This caused a crash in the server if MonitoringMode Disabled was used and the monitored item was not longer existing since the EventManagers get not informed about the deletion of disabled monitored items. * Fixed crash in ModifyMonitoredItems for Event MonitoredItems with ContentFilter * Server is now sending StatusChangeNotification is subscription expires * Fixed multiple discovery server registrations - The registration with multiple discovery servers did not work since the connect information was cached for the first one and then used for the other to. - This was changed to use a context for each discovery server to register with. * UaServer - Return operation level error in browse() if ReferenceTypeId is not a valid ReferenceType - Return service level error if an invalid view is specified ******************************************************************************** ******************************************************************************** ** ** ** 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