* Update GDS Client to use async Client API
* Make GDS Tests use ECC for connection. Update Certifiacte wait check to use polling mechanism
* Use Async Server Methods
* Add specialized ECC Test procdure
* Add Exception handling to allow errors during server application certificate exchange
---------
Co-authored-by: Marc Schier <marcschier@users.noreply.github.com>
* Implement support for async method Call in the server
* Implement Cancellation
* Add new generated async supported Endpoints & Server Methods
* Make SecureChannelContext AsyncLocal
* Implement SubscriptionAsync
* Add Async Request Queue
* Implement sync calls for async NodeManagers. Add Warning
* Use second file for Async Interface
* Extend the TcpTransportListener to catch requests that failed to get sent by a TcpServerChannel because the channel was closed. The TcpTransportListener asks the ServerCallback for the new ChannelID of the Session. The Session is identitfied by the AuthenticationToken
* throw if no channel could be found
* dont send request again over the same channel
- Replaced `IList<INode>` with `List<INode>` in
`ComplexTypeSystem.cs` and `BaseComplexType.cs` for
better type safety.
- Updated string comparison in `ReverseConnectManager.cs`
to `StringComparison.Ordinal` for improved performance.
- Added a method to `ISession.cs`, `Session.cs`, and
`SessionAsync.cs` to trigger reloading instance certificates.
- Minor fixes in error handling in `Subscription.cs` and using pattern matching for type checks in several locations to improve code readability.
- Made minor adjustments to comments and documentation
for clarity and improved code quality.
- Updated `Variant` handling in preparation for immutable struct.
- Changed return types in `BaseObjectState.cs` and `BaseVariableTypeState.cs` to use `ObjectTypeIds` for iperf
- Cleaned up `ExpandedNodeId`
- Enhanced memory management error handling and readabilityand error handling in encoders
* Update for 1.5.5 release with Async Service Calls
* Fix Async Method Handlers.
---------
Co-authored-by: Randy Armstrong <randy@sparhawksoftware.com>
* Implement search of certificates in PEM files on net 6 in directory store
* Implement using Custom Certificate Store
* Cleanup
* Implement Support for PEM Public Keys in Directory Store
* Throw exception if test file is not found
* Skip Tests on Mac OS & Net < 8.0
* Add delay for slow CI Agents
* Add more delay
* Make test file with explicit message
* Address review Feedback
* fix test
* Throw ex to show possible error in test
* next try
* Only throw on full load
* Manually set LastWriteTimeUtc
* make private key encrypted, use two separate tests instead of one
---------
Co-authored-by: Marc Schier <marcschier@users.noreply.github.com>
* Use Central Package Management
* Add Directory.Packages.props to solution files
* remove sourcelink version from common.props
* remove old entry from signlist
* remove .net 6 target
remove conditional packages
remove debug flag from pubsub
* Remove net 6 from azp
* Update Nuget Packages
* Update missed pipeline
* Add net 8 App Target framework
* fix asn1 package reference
* remove more net 6 references from AZP
* move main pipeline to net 8
* install net 8 in runners
* install net 8 in CC yml pipeline
* Update version.json (#3050)
* Fix XML Encoding and decoding of Matrix Element in Variant to conform to spec (#3053) (#3054)
* Fix XML Encoding and decoding to conform to spec
* fix test on linux
* fix typo
* Add missing DataValue & DiagnosticInfo Array Types
Co-authored-by: romanett <romanett98@gmail.com>
* Return NodeSet to 1.05.04.
* Remove OptionalPlaceholders on instances.
* Fix duplicate pragas.
* Fix glitches in generated files.
---------
Co-authored-by: Suciu Mircea Adrian <Mircea-Adrian.Suciu@softing.com>
Co-authored-by: romanett <romanett98@gmail.com>
Co-authored-by: Randy Armstrong <randy@sparhawksoftware.com>
* Implement support for "mul" locale in LocalizedText Class
* Use ReadOnly Dictionary to ensure correct texts are generated
* Implement Support for client requested Mul locale and handle mul locales provieded to Resource Manager (return only requested locales)
* fix bug
* Add Tests for ResouceManager
* Add more Tests & additional constructor to LocalizedText
* return null if mul locale parsing fails instead of partial dictionary
* avoid unecessary cast
* revert to working version
* Implement perf fix for new SDKS
* Add string comparison enhancements to ContentFilter.
- Introduce static `EqualsOperatorDefaultStringComparison` Property in the `ContentFilter` class for customizable string comparison.
- Update `IsEqual` method in the `Utils` class to accept an optional `StringComparison` parameter.
* Add Test
* fix default stringComparsion Operator to be Ordinal
* Remove obsolete DBNull check
* Add Comment
* fix XML Encoding of Null Variant to conform to spec
* fix XmlEncodedValue for null variants values to be the null (same behaviour as ExtensionObject)
* Update Encoder to Produce <uax:Value xsi:nil=\"true\" /> output
* Set default value for the ValueRank attribute of BaseVariableState and BaseVariableTypeState to ValueRanks.Any as in the spec
* Removed unnecessary project reference
* Make UserIdentity Token internally use byte Array instead of password.
* Add missing null check
* fix uninitialized array
* use Encoding.UTF8 instead of new Utf8Encoding()
* zero out array before setting the password
* Enable Durable Subscriptions (#9)
* [Server] Durable Subscriptions (#2683)
* Implement a system test for DurableSubscriptions (#2839)
* Client Side
Co-authored-by: ALTERNATE-DEV\Archie <archie@dreamsandadventures.ca>
* make a static Method CalculateRevisedQueueSize
* Adress review feedback
* fix FilterRetainTests
* Add MonitoredItem Id to Queues
Use NodeIdDictionary where possible
* first proto
* fix reference server
* implement store
* initialize early
* fix issues
* Move to Reference Server & start implementing queue restore
* Persist queues
* Register queues in factory after restore
* Add Docs
* minor fixes
* Test Subscription Restore & Transfer
* fix Durable Subscription Test Browse
* Fix conversion of extension objects
* use CustomConverter for NumericRange
* Adress review Feedback
* Documentation improvements
* Update Readme
* update sampling group manager to work without session
* remove launch settings
* Add missing constants for JSON encoding.
* Update generated files to 1.05.04.
* Update NuGets
* Fix compile errors due to abstract types.
* Update nodesets.
* Update JSON Encoder/Decoder.
* Update with JSON encoder.
* Change prefix char.
* Change prefix to uppercase.
* Fix JsonEncoder
* Fix null pointer.
* Update encoders to suppress artifacts.
* JSON encoding fixes.
* Fix JSON RawEncoding
* Update JSON encoders.
* Revert changes for Matrix in Variant.
* Update NodeSet.
* Resolve name conflict with new Opc.Ua types.
* Fix failing Tests
* Fix unit tests after change to Verbose/Compact encoding.
* Add final 1.05.04 generated classes and unit test fixes.
* Fix more unit tests.
* Update NodeSet to released version.
* Remove unintended changes to UANodeSet.xsd
* Update Schema/UANodeSet.xsd
* Merge breaking changes to JsonEncoder.cs from develop/main374
* Allow JObject in ExtensionObjects.
* fix version json
* Update generated files to UA-1.05.04-2025-01-08
* Some cleanup of the new APIs and Union implementation. (#2927)
* Some cleanup of the new APIs and Union implementation.
* fix build
* Handle status code Uncertain according to the specification (#2898)
* #2896: Write output arguments for good and uncertain status code
When a method state's call method is invoked the output arguments should be written in case the status code is good or uncertain. This behavior would be conform with the current specification.
* #2896: The service result corresponds the method call result
The result of the Call method in the CustomNodeManager2 class represents the status of the CallMethodResult. It does not correspond to the ServiceResult of the CallResponse, thus returning Good as a general response is incorrect behavior.
* Add SetHiResClockDisabled & fix Rejected Store Creation in ApplicationConfigurationBuilder (#2909)
Add the method SetHiResClockDisabled to IApplicationConfigurationBuilder
Fix the type of RejectedStore Created by the Builder to: CertificateStoreIdentifier
* revert based on feedback
* move some logic from class code to encoder/decoder
* Fix race condition on Nuget build (#2930)
- nodeset xmlzip is created in obj folders if multiple targets are built in parallel
* update common comments
* Update NodeSet files.
* Fix ReadSwitchField Implementation.
* Make UserIdentity.DisplayName writeable.
* Fix merge failures.
* Fix XmlElement encoding and bad NamespaceIndex fallback logic.
* Fix 2D array raw encoding.
* Add support for DesignToolOnly.
---------
Co-authored-by: Randy Armstrong <randy@sparhawksoftware.com>
Co-authored-by: Martin Regen <mregen@microsoft.com>
Co-authored-by: Martin Regen <7962757+mregen@users.noreply.github.com>
* Enable Durable Subscriptions (#9)
* [Server] Durable Subscriptions (#2683)
* Implement a system test for DurableSubscriptions (#2839)
* Client Side
Co-authored-by: ALTERNATE-DEV\Archie <archie@dreamsandadventures.ca>
* make a static Method CalculateRevisedQueueSize
* Adress review feedback
* fix FilterRetainTests
* Add MonitoredItem Id to Queues
Use NodeIdDictionary where possible
Set NoDelay=true to disable the Nagle algorithm and set Lingerstate to 5 seconds by default.
After careful evaluation of the PR provided by @sxleixer in #2882 we found that the default setting of the socket with NoDelay=false can not only cause issues on the client side, but also on the server side.
Due to the nature of Nagle's implementation the issue only occurs when many small service requests or responses are sent over the network. In that case, when packets are still in flight, the secondary small packets are delayed and combined until the MTU is exceeded or the previous packages are acknoledged.
The expectation in the UA protocol is to not add additional latency in the client-server communication.
As a conclusion defaulting to NoDelay=true appears to be the better default option which works for all use cases.
If there are new bandwidth issues related to more and larger packets imposed by this change, they should be solved at the UA application level by combining service requests of the same type.
Setting Lingerstate to 5 seconds should help to finish communications when sockets are closed.
Co-authored-by: @sxleixer <mail@ralfschleicher.de>
* Work In Progress
* Working Implementation of SupportsFilteredRetain
* Potential solution
Contains test debug messages that should be cleaned up
* Update comments showing discussion required
* Address Comments
* Use the NodeId from the ConditionState for the ConditionId.
Existing case was not guaranteed to be correct.
* enable nrts for CertificatIdentifier&CertificateStoreIdentifier&CertificateTrustList
* make RSA Utils and Certificate Stores nullable
* Make Certificate validator nullable
* fix nullability of CertificateTypeParameter
* Add tests to catch if NodeId.Null is modified in DEBUG, fix an issue where NodeId.Null was overwritten
* add (C)
* only enable immutable NodeId to catch issues
* typos and comments
* Remove older channel if not used by session, when number of channels reaches MaxChannelCount - 1
* Corrected channelCount and renamings
* Operate on snapshot
* Snapshot the entire concurentdictionary
* Generate ECC Certificates in Client Tests
* Add more tests
* reenable check of certificate
* fix tests
* Dont use random in test
* fix unsupported certificate types
* fix Hash algorithm for nistP384 curve on linux as the friendly name is ECDSA_P384 instead of nistP384
* use friendly name by default and add special case only for linux while taking care of nullability
* disable special casing for finding correct certificates
* fix tests on net 462
* update Certificate Identifier