******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.3.206 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaBase ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ UaVariant * Fixed conversion of negative double value to float * Fixed toExpandedNodeIdArray() and toStatusCodeArray() Trace * Added missing locking of trace function used by stack trace ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Client Module UaClient ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ UaSession * Added missing mutex unlock in transferSubscription * Fixes no delay check loop at connection error ServerStatusCheck was executed without delay in a loop in the case of a connection error with AutomaticReconnect set to FALSE * Resolved dead lock in UaSession::connect when stack calls OpcUa_Channel_Event_Disconnected and the mutex of the Session is locked CMakeLists.txt * Fixes VxWorks related compiler settings ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Server Module CoreModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ NodeManagerRoot * Fixed re-adding node manager with same name space EventFilterElement - fixed event filter operator InList The check for number of operands for the InList operator was wrong and returned an error if InList was used with right settings. ServerManager - internal client * Fixed issue with ServerManager::browse and ContinuationPoint ServerManager::browse() failed in second call if a continuation point was returned in first call. ServerConfigSettings * Fixes several issues with loading server configuration from INI file ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ UaTransactionManager * Added asynchronous handling of call in a worker thread if a list of method calls is provided by the client ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaStack ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ * Fix release of invalid heap address during certificate validation. By passing a buffer containing additional data behind the encoded certificate, free() will be called with an potentially invalid address. This allows to remotely crash a server. There is risk of remote code injection. * Fix crash in secure listener upon receive of Abort message type. ******************************************************************************** ******************************************************************************** ** ** ** Version 1.3.2.200 ** ** ** ******************************************************************************** ******************************************************************************** ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Documentation and Examples ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- * Added SIGPIPE and SIGTERM handler to examples utilities/shutdown.cpp and documentation Server Tutorial -> GettingStarted -> Lesson 1 * Added sample code for creation of DataChangeFiler in client example client_cpp_sdk/client_cpp_sdk.cpp -> subscribe() ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaBase ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------- !!! Breaking Change !!!! ------------------------- * UaStatus - Bug fix for DiagnosticInfo handling - Fixed typo in UaStatus::setDiagnosticInfo methods - Added UaStatus::setDiagnosticInfo overload to set a complete UaDiagnosticInfo - Changed member m_symbolicId (QualifiedName) to two string members m_symbolicId and m_namespaceUri to match OPC UA Part 4 definition - Changed UaStatus::setDiagnosticInfo methods to reflect change of SymbolicId - Added method to extract UaDiagnosticInfo from raw OpcUa_DiagnosticInfo and string table * Macro UA_DISABLE_COPY - UA_DISABLE_COPY macro contained a semicolon at the end All places that use it add another semicolon so an empty statement is created. Removed the semicolon from the macro. This change creates compiler errors if a user of the macro did not add another semicolon ------------------------ Features ------------------------ * UaUniStringList Added method UaUniStringList::join() ------------------------ Bug Fixes ------------------------ * UaDir - Fixed methods UaDir::canonicalPath and UaDir::homePath() for windows in UaFileEngine::canonicalPath and UaFileEngine::isRelativePath - Fixed error handling in UaFileEngine::canonicalPath for Linux, QNX and VxWorks - Fix method UaDir::rmPath() Only delete folders, no files * UaSettings - Fixed error handling in UaSettings::createIniPath() * UaTrace / server trace - Fixed issue with traced data containing format specifiers like %s Added and used method in UaTrace class to pass the content string directly to the trace output function * UaVariant - Fixed conversion of string to Int64 - String length check was wrong - Added missing error return if string is too long to all number conversion functions * UaNodeId - Fixed UaNodeId::toXmlString() for GUID NodeIds with namespace 0 * UaThreadPool Added initialization of thread pool array in the case of minThreads = 0 * UaSimpleAttributeOperand Fix getting deep copy of empty UaSimplaeAttributeOperand Initialize out parameter in UaSimpleAttributeOperand::getSimpleAttributeOperand * Fixed crash of sprintf with null string on certain non Windows platforms Base library classes are using OpcUa_StringA_snprintf to create string representations of the data content - Changed UaNodeId::toFullString() and UaNodeId::toXmlString() to print content without the null string - Replace OpcUa_StringA_snprintf in UaQualifiedName::toFullString() with UaString::arg() ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaPki ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * UaPkiProvider - Added getter for trust list location - getCertificateTrustListLocation() ------------------------ Bug Fixes ------------------------ * UaPkiCertificate - Fix openssl certificate generation problem The public key must be set before the certificate extenstions are generated, so that subjectKeyIdentifier hash and authorityKeyIdentifier can be computed. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaClient ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Known issues ------------------------ * UaSession - The creation of sessions is not thread safe. You must synchronize the session creation if the first session can be created at the same time from different threads. This issue will be fixed in the next major release. It is not possible to provide a fix in this bug fix release since it requires a breaking change in the UaStack ------------------------ Bug Fixes ------------------------ * clien trace - Fixed issue with traced data containing format specifiers like %s Used new method in UaTrace class to pass the content string directly to the trace output function * UaSession - Fixed error handling for status read if server returns an error like BadSessionInvalid - Added handling of DiagnosticInfo for service result level * UaSubscription - Added handling of DiagnosticInfo for service result level ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module CoreModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Features ------------------------ * ServerManager::startServerShutDown() - Added overload method to start server shutdown with a shutdown reason that is a list of localized text with different languages - Added setter for ServiceLevel on ServerManager that allows to set complete or partial ServiceLevel * UaObjectServer - Added setter and getter for ServiceLevel to UaObjectServer * OpcUa::BaseVariableType - Added UaVariable implementation class that is able to manage multiple locale as LocalizedText value * UaEndpoint - Added getter for PKI provider * NodeManagerRoot - Implemented decrement of SecondsTillShutdown variable after shutdown was started ------------------------ Bug Fixes ------------------------ * IOManagerUaNode - Implemented MaxAge handling for variables of type CacheIsUpdatedOnRequest - Fixed ModifyMonitoredItems for cache variables in IOManagerUaNode Since V 1.3.1 it was not possible to change the sampling interval of a monitored item with ModifyMonitoredItems. A change for dead band handling was setting always the current sampling interval as requested. This problem is fixed with 1.3.2 - UA CTT Fix: Added reset of not requested time stamps in readValue handling on IOManagerUaNode * NodeManagerRoot - Replaced browse code in NodeManagerRoot to browse NS0 with call to default implementation in NodeManagerUaNode. The implementation in NodeManagerRoot did not contain all the error handling implemented in NodeManagerUaNode::browse. NodeManagerRoot requires special handling to multiplex browse to the different NodeManagers. But browsing of nodes in namespace 0 can be handled by the base class NodeManagerUaNode the NodeManagerRoot is derived from. * UaVariable - UaVariable::getAttributeValue() Changed setting of ServerTimestamp for UaVariable::getAttributeValue() to be set at end of function. ServerTimestamp is not longer update in UaVariable::value * UaVariableCache - Added handling for StructureChanged and SemanticsChanged flags in CacheVariableConnector Forwarding data value with these flags set directly to monitored item * UaReferenceLists - Fixed translateBrowsePathToNodeId(). Only search for HasTypeDefinition and HasModellingRule references if the currentPostion of the relativePath did not change - Fixed crash in BrowseNext on deleted references Fixed bug in BrowseNext if the continuation point contains references deleted between continuation point creation and BrowseNext. Enhanced continuation point handling to created deep copies of references since only nodes are reference counted but references are not. * UaEndpoint - Fixes handling of m_isDiscoveryUrl in copy constructor * SessionManager - Added check if SecureChannel is still assigned to a Session if channel is deleted When a SecureChannel was deleted, the secure channel was invalidated for the assigned Sessions without checking if the SecureChannel was still assigned to the Session. Added a check of the currently assigned secure channel ID before invalidating the secure channel of the session. * ConditionType classes - Added missing optional condition event fields in EventData classes - AcknowledgeableCondition has optional event field handling for AckedState/TransitionTime - AlarmCondition has optional event field handling for ActiveState/EffectiveDisplayName and ActiveState/TransitionTime - These fields are now also handled in the corresponding EventData classes used for Branches and conditions without representation in the address space - Added checks to avoid duplicated optional event field registration - Enhanced handling and examples for LimitState::CurrentState - Enhanced MassAlarm example to set ExclusiveLimitAlarmType::setExclusiveState() to deliver LimitState/CurrentState - Added state Disabled to OpcUa::ExclusiveLimitStateMachineType to allow reset of LimitState properties if ActiveState is False. - Added handling of LimitState/CurrentState and LimitState/CurrentState/Id to ExclusiveLimitAlarmTypeData class - Added overwrite for setSourceNode() and setSourceName() in BaseEventType Event field data is handled different in condition types. This was missing for SourceNode and SourceName since they are passed in to the constructor of the ConditionType classes. Added specialized setters for the condition classes. * ServerConfigData - ServerConfigData::getBuildDate() - Replaced invalid DateTime to UInt64 cast with helper function of UaDateTime ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaModule ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ * UaServer - Added missing check for empty certificate in ActivateSession user token handling * UaSubscription - Added missing UaMutex::unlock() in UaSubscrion::close() in the case where a monitored item was already deleted by a second thread at the same time. * UaMonitoredItemData - UaMonitoredItemData::dataChange Fixed check for option DataChangeTrigger_StatusValueTimestamp to verify source time stamp instead of server time stamp. Skipped call to dead band check if absolute dead band is 0. - Added handling for StructureChanged and SemanticsChanged flags in monitored item in case of queue overflow Added check if discarded value has these flags set and move flags to next value in the queue - Fixed assignment of overflow flag for DiscardOldest = true in dataChange() The overflow flag is now assigned to the oldest value in the queue. It was assigned to the newest value before. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Module UaStack ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------ Bug Fixes ------------------------ * Fixed that OpcUa_TcpListener_ConnectionManager_GetConnectionBySocket returned always OpcUa_BadNotFound; Some result checks at calls are also changed. * Windows platform layer - OpcUa_P_Mutex_CreateImp checks malloc result after using the pointer - Fixed memory leak if connect fails (WinCE). The address storage was not freed in OpcUa_P_SocketManager_CreateClient if connect() failed synchronously. This never happened on a PC yet (connect would fail async there) and was first seen on Windows CE. - Added server side connection TCP keep alive mechanism to detect connection interuptions without writing to the socket. Client sockets in servers now use the TCP keep alive feature. Current configuration detects dropped clients after about 35 to 45 seconds. If not sure about the consequences, deactivate the feature by changing OPCUA_P_ACCEPTED_SOCKET_KEEPALIVE. - Increased number of timers to support full number (60) of configured clients plus server endpoints - Fixed that returned string of OpcUa_P_DateTime_GetStringFromDateTime was not zero terminated in some cases * Linux platform layer - Fixed problem where endianess was incorrectly set to little endian - Fixed file type check in function certificate_filter() ******************************************************************************** ******************************************************************************** ** ** ** 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