All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.6.0 - 2023-07-29
- Variable node value callbacks with
Server::setVariableNodeValueCallback
(#63) - Encryption (#64)
Client
constructor withcertificate
,privateKey
,trustList
andrevocationList
Server
constructor withcertificate
,privateKey
,trustList
,issuerList
andrevocationList
crypto::createCertificate
function to create private keys and certificatesByteString::fromFile
/ByteString::toFile
to load and save certificates or private keys
NumericRange
type (#73)- Equality overloads for
String
/ByteString
andstd::string_view
- Fluent
Node
interface (#75) - Examples
server_valuecallback
(#63)
- Hide
TypeWrapper::getDataType
method - Initial node attributes as first default parameter (usually after
browseName
) (#61):Node::addFolder
/services::addFolder
Node::addObject
/services::addObject
Node::addVariable
/services::addVariable
Node::addObjectType
/services::addObjectType
Node::addVariableType
/services::addVariableType
Node::addMethod
/services::addMethod
Node::addFolder
/services::addFolder
Node::addFolder
/services::addFolder
std::string
only convertible to/fromopcua::String
- Typos (#67)
- CMake code in README (#72)
0.5.0 - 2023-07-14
asNative
function to cast wrapper to native objects- Add method nodes (#55)
services::addMethod
Node::addMethod
- Call method (#55)
services::call
Node::callMethod
- Set client timeout with
Client::setTimeout
(#56) Variant
:- Get/set wrapper types without copy (
Variant::getScalar
,Variant::getArray
,Variant::setScalar
,Variant::setArray
) const
version ofVariant::getScalar
,Variant::getArray
- Get/set wrapper types without copy (
log
function to generate log message with server's or client's logger- Examples
server_method
(#55)client_method
(#55)
- Build with
UA_ENABLE_SUBSCRIPTIONS
orUA_ENABLE_METHODCALLS
disabled - Export symbols of shared library on windows (#58)
0.4.1 - 2023-05-30
- Enforce new session in
client_subscription
example (#51) - Incorrect
MonitoredItem
passed to data change and event callback (#53)
0.4.0 - 2023-05-17
- Subscription and MonitoredItem service set as free functions in namespace services (#45)
- High-level
Subscription<T>
andMonitoredItem<T>
classes (#45) Server
/Client
methods to create and list subscriptions (#45):Server::createSubscription
Client::createSubscription
Client::getSubscriptions
- Client methods:
Client::isConnected
Client::runIterate
(#45)Client::run
Client::stop
Client::isRunning
- Client state callbacks:
Client::onConnected
,Client::onDisconnected
,Client::onSessionActivated
,Client::onSessionClosed
(#50) ReadValueId
wrapper class (#45)ExtensionObject
wrapper class (#48)ByteString::fromBase64
andByteString::toBase64
methodsNodeId::toString
/ExpandedNodeId::toString
method to encode NodeIds as strings, e.g.ns=1;s=SomeNode
BadDisconnect
exception for simpler handling of disconnects (#50)- Examples:
client_subscription
(#45, #50)
- Update open62541 to v1.3.6 (#49)
- Use scoped enum
TimestampsToReturn
instead ofUA_TimestampsToReturn
- Use scoped enum
AttributeId
instead ofUA_AttributeId
- Don't return std::optional from
DataValue
getters - Add
DataValue::has*
methods - Remove
DataValue::getValuePtr
method
- Amalgamation support (#47)
0.3.0 - 2023-04-29
- Basic
Client
implementation (#33) - Attribute service set with generic read/write functions:
services::readAttribute
services::writeAttribute
- View/browse service set:
services::browse
services::browseNext
services::browseAll
services::translateBrowsePathToNodeIds
services::browseSimplifiedBrowsePath
Node
methods for browsing:browseReferences
browseReferencedNodes
browseChildren
browseChild
browseParent
- Missing functions to read/write attributes
UserWriteMask
,IsAbstract
,Symmetric
,InverseName
,UserAccessLevel
andMinimumSamplingInterval
asWrapper
function to cast native refs to wrapper refs (#30, #31)DataValue::getValuePtr
method- Static methods
DataValue::fromScalar
andDataValue::fromArray
DateTime::format
methodServer::getNamespaceArray
methodServer::runIterate
method, e.g. to run server in existing event loopGuid::toString
andGuid::random
methodDateTime::localTimeUtcOffset
andDateTime::format
methodostream
overloads forString
,Guid
,XmlElement
- CMake install target and config files (#38)
- Examples:
client_minimal
client_connect
client_find_servers
client_browse
server_minimal
- Templated
Node
class (Node<Server>
,Node<Client>
) for client implementation (#32) - Return reference from
ExpandedNodeId::getNodeId
- Pass
LocalizedText
instead of members (locale
,text
) toNode::writeDisplayName
,Node::writeDescription
,services::writeDisplayName
,services::writeDescription
(#29) - Remove
Server::getConfig
method - Rename
Node::writeModellingRule
->Node::addModellingRule
- Rename
Node::getChild
->Node::browseChild
- Remove
TypeWrapper::getType
method - Use
TypeIndex
instead ofType
enum forTypeConverter
to allow conversions of non-builtin types - Return
Qualified
name fromreadBrowseName
instead ofstd::string
- Rename
ReferenceType
enum ->ReferenceTypeId
(#44) - Use
NodeId
forreferenceType
function parameters (instead of enum to allow arbitrary references) (#44) - Remove get methods of nested nodes from
Client
/Server
class, usegetNode
instead (#44)Server::getObjectTypesNode()
->Server::getNode(ObjectId::ObjectTypesFolder)
Server::getVariableTypesNode()
->Server::getNode(ObjectId::VariableTypesFolder)
Server::getDataTypesNode()
->Server::getNode(ObjectId::DataTypesFolder)
Server::getReferenceTypesNode()
->Server::getNode(ObjectId::ReferenceTypesFolder)
Server::getBaseObjectTypeNode()
->Server::getNode(ObjectTypeId::BaseObjectType)
Server::getBaseDataVariableTypeNode()
->Server::getNode(VariableTypeId::BaseDataVariableType)
TypeConverter::toNative
specialization for wrapper typesModellingRule::Optional
enum value (#44)
0.2.0 - 2023-04-12
- Generic type conversions with
TypeConverter
struct specializations - Free functions in services namespace as alternative to
Node
interface (#22) Server
constructors with custom port and certificate- Custom logger with
Server::setLogger
- Example
server_instantiation
- Missing core reference types to
ReferenceType
enum Node
methods:Node::getNodeClass
Node::addReference
Node::getChild
Node::readValueRang
,Node::writeValueRang
Node::readArrayDimensions
,Node::writeArrayDimensions
Node::readDataValue
,Node::writeDataValue
Node::writeModellingRule
- New wrapper classes:
XmlElement
ExpandedNodeId
DateTime
DataValue
- Static methods
Variant::from*
for create variants from scalars and arrays (#21)
- Update open62541 to v1.3.5 (#17, #19)
- Use generic
Node
class, remove specific node classes:ObjectNode
,VariableNode
,MethodNode
,ViewNode
,DataTypeNode
,ObjectTypeNode
,VariableTypeNode
,ReferenceTypeNode
,EventTypeNode
- Rename methods
Node::get*
->Node::read*
andNode::set*
->Node::write*
(consistent with open62541 naming) - Remove
type
argument forNode::addVariable
,Node::addProperty
,Node::addVariableType
- Rename
Node
methods to write scalars:Node::read
->Node::readScalar
Node::write
->Node::writeScalar
- Make
TypeWrapper
destructor non-virtual (caution: don't implement destructors in derived classes) NodeId
namespaceIndex
as first constructor argument (breaking change)LocalizedText
locale
as first constructor argument (breaking change)- Return
LocalizedText
fromNode::readDisplayName
,Node::readDescription
methods - Remove default
locale
parameter forLocalizedText
- Rename
Exception
->BadStatus
- Use default open62541 attributes for
Node::add*
- Use
ReferenceType::HasComponent
as default reference for child variable and object nodes - Optional check if
Node
exists in constructor (#24)
Variant
constructors to set scalars and arrays directly
- Dereference in
Variant::getArray
(#25)
0.1.0 - 2022-04-24
Initial public release