Skip to content

Releases: gopcua/opcua

v0.9.0

Choose a tag to compare

@JeremyTheocharis JeremyTheocharis released this 19 Jun 08:13

Thank you to all the contributors in this release: @jminardi, @diericd, @istyf, @semihbkgr, @skartikey, @sruehl, @mvandergrift, @oliverpool, @skaldesh, @bostroemc, @kung-foo, @mschm, and @led0nk for reviews. It was a difficult year since we switched the core maintainer, and it took us some time to get into a good working mode. This release is our summarized work from the past year.

go get github.com/gopcua/[email protected]

gopcua ships both a client and a server. Each item is tagged (client) or (server) for which side it affects, and items that only matter to developers building against the library API carry API. If you consume gopcua through Telegraf or benthos-umh, the plain (client) items are the runtime behavior you get automatically; (client, API) items only matter if you write Go code against gopcua; (server) items only matter if you build a server on gopcua.

Breaking change (API): Node operations now run against a Client interface instead of the concrete *Client type (#847). If you construct nodes against the concrete client type, update those call sites. See the "List of Breaking Changes" in the README.

New

  • Basic256Sha256 channels now complete a handshake end to end in both Sign and SignAndEncrypt mode between a gopcua client and server, so you can run signed and encrypted connections (client + server)
  • A StateChangedFunc callback lets a client run your own code on every connection-state change (Connected, Connecting, Disconnected, Reconnecting), for example to log drops, update health, or trigger reconnect-aware logic (client, API)

Improvements

  • Monitoring a batch of nodes now succeeds for the valid ones instead of failing the whole batch when one node ID is bad; each rejected node is reported individually as a monitor.ItemError you can read with errors.As (client)
  • Node operations now run against a client interface, so you can inject a mocked client when unit-testing code that calls node methods; if you construct nodes against the concrete client type, review those call sites (client, API)

Fixes

  • Reading or subscribing to large sets of nodes (roughly a thousand or more) over an encrypted connection no longer drops the connection with an EOF; smaller requests and unencrypted connections were not affected (client + server)
  • Subscriptions now survive a reconnect: after a network interruption the client no longer loses its subscriptions and stops receiving data until it is restarted (client)
  • Recovering missed data after a reconnect no longer hangs in an endless retry loop or silently drops the recovered notifications (client)
  • Connecting to servers that present their certificate as a chain of leaf plus intermediate certificates, such as Siemens WinCC Unified Runtime, now works (client)
  • Browsing now returns a usable node ID for references typed as ExpandedNodeID instead of nil, which previously caused a panic (client)
  • Calling Close on a client that never established a session no longer panics (client)
  • expvar counters (read, send, dial, subscription) render again under /debug/vars on Go 1.23, where nested stats had shown as empty objects (client, API)
  • A server no longer crashes when a client writes to a node in a namespace that does not exist; it returns Bad_NodeIdUnknown (server)
  • Server writes to non-Value attributes such as Description or DisplayName now report success instead of a false bad-attribute error (server)
  • Server responses larger than the negotiated chunk size, such as browsing a folder with many nodes, are now split across multiple chunks instead of dropping the connection (server)
  • A server now returns a valid, non-zero session timeout, so strict clients such as UaExpert no longer fail to connect with BadTimeout (server)
  • Creating a folder node in a server address space no longer panics (server)

The server now also sets the ReceiverCertificateThumbprint on its handshake response, so strict clients (Prosys, UaExpert) accept encrypted channels against a gopcua server (server).

Full Changelog: v0.8.0...v0.9.0

v0.9.0-rc1

v0.9.0-rc1 Pre-release
Pre-release

Choose a tag to compare

@JeremyTheocharis JeremyTheocharis released this 18 Jun 13:47
9120e7f

Thank you to all the contributors in this release: @jminardi, @diericd, @istyf, @semihbkgr, @skartikey, @sruehl, @mvandergrift, @oliverpool, @skaldesh, @bostroemc, @kung-foo, @mschm, and @led0nk for reviews. It was a difficult year since we switched the core maintainer, and it took us some time to get into a good working mode. This release is our summarized work from the past year.

This is a pre-release for testing. Please try it against your servers and report issues before the final v0.9.0. It installs only on explicit opt-in:

go get github.com/gopcua/[email protected]

gopcua ships both a client and a server. Each item is tagged (client) or (server) for which side it affects, and items that only matter to developers building against the library API carry API. If you consume gopcua through Telegraf or benthos-umh, the plain (client) items are the runtime behavior you get automatically; (client, API) items only matter if you write Go code against gopcua; (server) items only matter if you build a server on gopcua.

New

  • Basic256Sha256 channels now complete a handshake end to end in both Sign and SignAndEncrypt mode between a gopcua client and server, so you can run signed and encrypted connections (client + server)
  • A StateChangedFunc callback lets a client run your own code on every connection-state change (Connected, Connecting, Disconnected, Reconnecting), for example to log drops, update health, or trigger reconnect-aware logic (client, API)

Improvements

  • Monitoring a batch of nodes now succeeds for the valid ones instead of failing the whole batch when one node ID is bad; each rejected node is reported individually as a monitor.ItemError you can read with errors.As (client)
  • Node operations now run against a client interface, so you can inject a mocked client when unit-testing code that calls node methods; if you construct nodes against the concrete client type, review those call sites (client, API)

Fixes

  • Reading or subscribing to large sets of nodes (roughly a thousand or more) over an encrypted connection no longer drops the connection with an EOF; smaller requests and unencrypted connections were not affected (client + server)
  • Subscriptions now survive a reconnect: after a network interruption the client no longer loses its subscriptions and stops receiving data until it is restarted (client)
  • Recovering missed data after a reconnect no longer hangs in an endless retry loop or silently drops the recovered notifications (client)
  • Connecting to servers that present their certificate as a chain of leaf plus intermediate certificates, such as Siemens WinCC Unified Runtime, now works (client)
  • Browsing now returns a usable node ID for references typed as ExpandedNodeID instead of nil, which previously caused a panic (client)
  • Calling Close on a client that never established a session no longer panics (client)
  • expvar counters (read, send, dial, subscription) render again under /debug/vars on Go 1.23, where nested stats had shown as empty objects (client, API)
  • A server no longer crashes when a client writes to a node in a namespace that does not exist; it returns Bad_NodeIdUnknown (server)
  • Server writes to non-Value attributes such as Description or DisplayName now report success instead of a false bad-attribute error (server)
  • Server responses larger than the negotiated chunk size, such as browsing a folder with many nodes, are now split across multiple chunks instead of dropping the connection (server)
  • A server now returns a valid, non-zero session timeout, so strict clients such as UaExpert no longer fail to connect with BadTimeout (server)
  • Creating a folder node in a server address space no longer panics (server)

The server now also sets the ReceiverCertificateThumbprint on its handshake response, so strict clients (Prosys, UaExpert) accept encrypted channels against a gopcua server (server).

Full Changelog: v0.8.0...v0.9.0-rc1

v0.8.0

Choose a tag to compare

@magiconair magiconair released this 24 Apr 15:24
v0.8.0
c59e64d

Changelog

v0.7.5

Choose a tag to compare

@magiconair magiconair released this 24 Apr 15:22
v0.7.5
9288bb2

Changelog

  • a7aa972 Ignore trailing slashes when checking matching endpoints.
  • f8b3589 Merge pull request #770 from gopcua/issue-768-call-method-no-input-args
  • 0069fd1 Merge pull request #788 from gopcua/issue-783-trailing-slash
  • 22fce09 github: auto-close stale issues/prs
  • f7b9bfb tests/python: add test for issue #768
  • 7128e13 tests/python: allow setting of fields in constructor
  • a095727 tests/python: fix typo
  • f70e838 tests/python: use ua.CallMethodResult
  • 9288bb2 update README
  • 8924493 update README

v0.7.4

Choose a tag to compare

@magiconair magiconair released this 07 Apr 11:30
v0.7.4
090ef6c

Changelog

  • 2137c45 - added security mode check when creating the channel to ensure proper securityMode is provided - removed overwrite in readChunk since it will not reach without valid securityMode
  • 4470d9b Check if node value is a func() *Datavalue and don't wrap if it is.
  • db5fdbf Merge pull request #778 from gopcua/server_accesslevels
  • ad9aac9 Merge pull request #780 from ioansiran/main
  • 985a6f0 Removed hardcoded SecurityMode in SecureChannel readChunk method.
  • 4b38728 add Access() check function to Node
  • e95b012 add access level integration tests
  • b210bf4 add betterexamples of access levels in the server
  • 3012e9f added default value when it gets a bad security mode
  • 326bc4a handle int type passed into DataValueFromValue
  • 5d04457 implement linter fixes
  • cabb348 make datavaluefromvalue better encode the value
  • 1b47c9f re-run tests
  • 4f48815 retract v0.7.2
  • f23711f start checking node attribute access rules
  • 090ef6c update CHANGELOG

v0.7.3

Choose a tag to compare

@magiconair magiconair released this 07 Apr 11:31
v0.7.3
8c72b97

Changelog

  • 808cd22 Add unit test for security auth policy uri fallback.
  • ef1c8c8 Merge pull request #767 from gopcua/issue-741-state-change-channel
  • c25f030 Merge pull request #771 from piggito/write-deadline
  • ccecc84 Merge pull request #779 from gopcua/pr-706-fallback-auth-policy-uri
  • 8c72b97 Merge pull request #785 from oliverpool/prevent-panic-ctx-cancel
  • 2943efa Prevent panic on context cancellation
  • e9c20e0 Remove auth policy check in client.
  • fae2506 Set conn write deadline for sendAsyncWithTimeout
  • 454da9c add error check, extend test
  • dcf5e89 add fmt option
  • 4a2e53b adjust error message
  • 65c1388 bump to go1.23
  • f44bb63 client: add connState channel
  • 1b1adfb config.go: setting session.AuthPolicyURI from endpoint when identityToken does not provide it
  • 96f3cb8 fix integration test
  • 07d192e gofmt
  • 4fc3aa8 started test for unset useridentitytoken
  • e4335a9 using Username seciruty ID

v0.7.1

Choose a tag to compare

@magiconair magiconair released this 27 Feb 16:56
v0.7.1
a5114da

Changelog

  • 578c8e5 Merge pull request #775 from gopcua/issue-774-read-failed
  • 8f6df6d bump go to 1.23/1.24
  • c58424a client: use nil-checked secure channel
  • a5114da update CHANGELOG

v0.7.0

Choose a tag to compare

@magiconair magiconair released this 06 Feb 16:33
v0.7.0
4476e95

Changelog

  • 3652fd6 Mark datavalue's as having values.
  • f4f7fae Merge pull request #766 from gopcua/server_UseDVs
  • 4a70b13 Migrate attributes to use DataValues instead of Variants.
  • 8a8675f Update CHANGELOG
  • 768858f Update LICENSE
  • 4476e95 Update README
  • 00d3eff remove test example

v0.6.5

Choose a tag to compare

@magiconair magiconair released this 22 Jan 10:11
v0.6.5
6b1ec73

Changelog

  • d948bf8 Address review comment
  • f89c7b6 Merge pull request #764 from jackchenjc/issue-710
  • cdb7218 monitor: add modification functionality
  • 6b1ec73 update CHANGELOG

v0.6.4

Choose a tag to compare

@magiconair magiconair released this 14 Jan 08:13
v0.6.4
8cdefd8

Changelog

  • bf2d68f Merge pull request #714 from jackchenjc/issue-713
  • 86e7bdc client_sub: remove unused parameter from func
  • d567e7f client_sub: rename func to use correct lock name
  • ac1bb48 examples/subscription: cleanup example
  • ff8ed4c subscription: add ModifySubscription functionality
  • 2d9bf00 subscription: refactor subscription recreation
  • a0fb6e8 subscription: remove unused constant
  • 8cdefd8 update CHANGELOG