Documentation ¶
Overview ¶
Package opcua provides easy and painless encoding/decoding of OPC UA protocol in pure Golang.
Index ¶
- Constants
- func ApplyConfig(opts ...Option) (*uasc.Config, *uasc.SessionConfig)
- func DefaultClientConfig() *uasc.Config
- func DefaultSessionConfig() *uasc.SessionConfig
- func GetEndpoints(ctx context.Context, endpoint string) ([]*ua.EndpointDescription, error)
- func NewMonitoredItemCreateRequestWithDefaults(nodeID *ua.NodeID, attributeID ua.AttributeID, clientHandle uint32) *ua.MonitoredItemCreateRequest
- func SelectEndpoint(endpoints []*ua.EndpointDescription, policy string, ...) *ua.EndpointDescription
- type Client
- func (c *Client) ActivateSession(s *Session) error
- func (c *Client) Browse(req *ua.BrowseRequest) (*ua.BrowseResponse, error)
- func (c *Client) BrowseNext(req *ua.BrowseNextRequest) (*ua.BrowseNextResponse, error)
- func (c *Client) Call(req *ua.CallMethodRequest) (*ua.CallMethodResult, error)
- func (c *Client) Close() error
- func (c *Client) CloseSession() error
- func (c *Client) Connect(ctx context.Context) (err error)
- func (c *Client) CreateSession(cfg *uasc.SessionConfig) (*Session, error)
- func (c *Client) DetachSession() (*Session, error)
- func (c *Client) Dial(ctx context.Context) error
- func (c *Client) GetEndpoints() (*ua.GetEndpointsResponse, error)
- func (c *Client) HistoryReadRawModified(nodes []*ua.HistoryReadValueID, details *ua.ReadRawModifiedDetails) (*ua.HistoryReadResponse, error)
- func (c *Client) Node(id *ua.NodeID) *Node
- func (c *Client) Read(req *ua.ReadRequest) (*ua.ReadResponse, error)
- func (c *Client) RegisterNodes(req *ua.RegisterNodesRequest) (*ua.RegisterNodesResponse, error)
- func (c *Client) Send(req ua.Request, h func(interface{}) error) error
- func (c *Client) Session() *Session
- func (c *Client) State() ConnState
- func (c *Client) Subscribe(params *SubscriptionParameters, notifyCh chan *PublishNotificationData) (*Subscription, error)
- func (c *Client) SubscriptionIDs() []uint32
- func (c *Client) UnregisterNodes(req *ua.UnregisterNodesRequest) (*ua.UnregisterNodesResponse, error)
- func (c *Client) Write(req *ua.WriteRequest) (*ua.WriteResponse, error)
- type ConnState
- type InvalidResponseTypeError
- type Node
- func (n *Node) AccessLevel() (ua.AccessLevelType, error)
- func (n *Node) Attribute(attrID ua.AttributeID) (*ua.Variant, error)
- func (n *Node) Attributes(attrID ...ua.AttributeID) ([]*ua.DataValue, error)
- func (n *Node) BrowseName() (*ua.QualifiedName, error)
- func (n *Node) Children(refs uint32, mask ua.NodeClass) ([]*Node, error)
- func (n *Node) Description() (*ua.LocalizedText, error)
- func (n *Node) DisplayName() (*ua.LocalizedText, error)
- func (n *Node) HasAccessLevel(mask ua.AccessLevelType) (bool, error)
- func (n *Node) HasUserAccessLevel(mask ua.AccessLevelType) (bool, error)
- func (n *Node) NodeClass() (ua.NodeClass, error)
- func (n *Node) ReferencedNodes(refs uint32, dir ua.BrowseDirection, mask ua.NodeClass, includeSubtypes bool) ([]*Node, error)
- func (n *Node) References(refType uint32, dir ua.BrowseDirection, mask ua.NodeClass, ...) ([]*ua.ReferenceDescription, error)
- func (n *Node) String() string
- func (n *Node) TranslateBrowsePathInNamespaceToNodeID(ns uint16, browsePath string) (*ua.NodeID, error)
- func (n *Node) TranslateBrowsePathsToNodeIDs(pathNames []*ua.QualifiedName) (*ua.NodeID, error)
- func (n *Node) UserAccessLevel() (ua.AccessLevelType, error)
- func (n *Node) Value() (*ua.Variant, error)
- type Option
- func ApplicationName(s string) Option
- func ApplicationURI(s string) Option
- func AuthAnonymous() Option
- func AuthCertificate(cert []byte) Option
- func AuthIssuedToken(tokenData []byte) Option
- func AuthPolicyID(policy string) Option
- func AuthUsername(user, pass string) Option
- func AutoReconnect(b bool) Option
- func Certificate(cert []byte) Option
- func CertificateFile(filename string) Option
- func Lifetime(d time.Duration) Option
- func Locales(locale ...string) Option
- func PrivateKey(key *rsa.PrivateKey) Option
- func PrivateKeyFile(filename string) Option
- func ProductURI(s string) Option
- func RandomRequestID() Option
- func ReconnectInterval(d time.Duration) Option
- func RemoteCertificate(cert []byte) Option
- func RemoteCertificateFile(filename string) Option
- func RequestTimeout(t time.Duration) Option
- func SecurityFromEndpoint(ep *ua.EndpointDescription, authType ua.UserTokenType) Option
- func SecurityMode(m ua.MessageSecurityMode) Option
- func SecurityModeString(s string) Option
- func SecurityPolicy(s string) Option
- func SessionName(s string) Option
- func SessionTimeout(d time.Duration) Option
- type PublishNotificationData
- type Server
- type Session
- type Subscription
- func (s *Subscription) Cancel() error
- func (s *Subscription) Monitor(ts ua.TimestampsToReturn, items ...*ua.MonitoredItemCreateRequest) (*ua.CreateMonitoredItemsResponse, error)
- func (s *Subscription) SetTriggering(triggeringItemID uint32, add, remove []uint32) (*ua.SetTriggeringResponse, error)
- func (s *Subscription) Stats() (*ua.SubscriptionDiagnosticsDataType, error)
- func (s *Subscription) Unmonitor(monitoredItemIDs ...uint32) (*ua.DeleteMonitoredItemsResponse, error)
- type SubscriptionParameters
Constants ¶
const ( DefaultSubscriptionMaxNotificationsPerPublish = 10000 DefaultSubscriptionLifetimeCount = 10000 DefaultSubscriptionMaxKeepAliveCount = 3000 DefaultSubscriptionInterval = 100 * time.Millisecond DefaultSubscriptionPriority = 0 )
Variables ¶
This section is empty.
Functions ¶
func ApplyConfig ¶
func ApplyConfig(opts ...Option) (*uasc.Config, *uasc.SessionConfig)
ApplyConfig applies the config options to the default configuration. todo(fs): Can we find a better name?
func DefaultClientConfig ¶
DefaultClientConfig returns the default configuration for a client to establish a secure channel.
func DefaultSessionConfig ¶
func DefaultSessionConfig() *uasc.SessionConfig
DefaultSessionConfig returns the default configuration for a client to establish a session.
func GetEndpoints ¶
GetEndpoints returns the available endpoint descriptions for the server.
func NewMonitoredItemCreateRequestWithDefaults ¶
func NewMonitoredItemCreateRequestWithDefaults(nodeID *ua.NodeID, attributeID ua.AttributeID, clientHandle uint32) *ua.MonitoredItemCreateRequest
func SelectEndpoint ¶
func SelectEndpoint(endpoints []*ua.EndpointDescription, policy string, mode ua.MessageSecurityMode) *ua.EndpointDescription
SelectEndpoint returns the endpoint with the highest security level which matches security policy and security mode. policy and mode can be omitted so that only one of them has to match. todo(fs): should this function return an error?
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a high-level client for an OPC/UA server. It establishes a secure channel and a session.
func NewClient ¶
NewClient creates a new Client.
When no options are provided the new client is created from DefaultClientConfig() and DefaultSessionConfig(). If no authentication method is configured, a UserIdentityToken for anonymous authentication will be set. See #Client.CreateSession for details.
To modify configuration you can provide any number of Options as opts. See #Option for details.
func (*Client) ActivateSession ¶
ActivateSession activates the session and associates it with the client. If the client already has a session it will be closed. To retain the current session call DetachSession.
See Part 4, 5.6.3
func (*Client) Browse ¶
func (c *Client) Browse(req *ua.BrowseRequest) (*ua.BrowseResponse, error)
Browse executes a synchronous browse request.
func (*Client) BrowseNext ¶
func (c *Client) BrowseNext(req *ua.BrowseNextRequest) (*ua.BrowseNextResponse, error)
BrowseNext executes a synchronous browse request.
func (*Client) Call ¶
func (c *Client) Call(req *ua.CallMethodRequest) (*ua.CallMethodResult, error)
Call executes a synchronous call request for a single method.
func (*Client) CreateSession ¶
func (c *Client) CreateSession(cfg *uasc.SessionConfig) (*Session, error)
CreateSession creates a new session which is not yet activated and not associated with the client. Call ActivateSession to both activate and associate the session with the client.
If no UserIdentityToken is given explicitly before calling CreateSesion, it automatically sets anonymous identity token with the same PolicyID that the server sent in Create Session Response. The default PolicyID "Anonymous" wii be set if it's missing in response.
See Part 4, 5.6.2
func (*Client) DetachSession ¶
DetachSession removes the session from the client without closing it. The caller is responsible to close or re-activate the session. If the client does not have an active session the function returns no error.
func (*Client) GetEndpoints ¶
func (c *Client) GetEndpoints() (*ua.GetEndpointsResponse, error)
func (*Client) HistoryReadRawModified ¶
func (c *Client) HistoryReadRawModified(nodes []*ua.HistoryReadValueID, details *ua.ReadRawModifiedDetails) (*ua.HistoryReadResponse, error)
func (*Client) Node ¶
Node returns a node object which accesses its attributes through this client connection.
func (*Client) Read ¶
func (c *Client) Read(req *ua.ReadRequest) (*ua.ReadResponse, error)
Read executes a synchronous read request.
By default, the function requests the value of the nodes in the default encoding of the server.
func (*Client) RegisterNodes ¶
func (c *Client) RegisterNodes(req *ua.RegisterNodesRequest) (*ua.RegisterNodesResponse, error)
RegisterNodes registers node ids for more efficient reads. Part 4, Section 5.8.5
func (*Client) Send ¶
Send sends the request via the secure channel and registers a handler for the response. If the client has an active session it injects the authentication token.
func (*Client) Subscribe ¶
func (c *Client) Subscribe(params *SubscriptionParameters, notifyCh chan *PublishNotificationData) (*Subscription, error)
Subscribe creates a Subscription with given parameters. Parameters that have not been set are set to their default values. See opcua.DefaultSubscription* constants
func (*Client) SubscriptionIDs ¶
SubscriptionIDs gets a list of subscriptionIDs
func (*Client) UnregisterNodes ¶
func (c *Client) UnregisterNodes(req *ua.UnregisterNodesRequest) (*ua.UnregisterNodesResponse, error)
UnregisterNodes unregisters node ids previously registered with RegisterNodes. Part 4, Section 5.8.6
func (*Client) Write ¶
func (c *Client) Write(req *ua.WriteRequest) (*ua.WriteResponse, error)
Write executes a synchronous write request.
type ConnState ¶
type ConnState uint8
ConnState is the ua client connection state
const ( // Closed, the Connection is currently closed Closed ConnState = iota // Connected, the Connection is currently connected Connected // Connecting, the Connection is currently connecting to a server for the first time Connecting // Disconnected, the Connection is currently disconnected Disconnected // Reconnecting, the Connection is currently attempting to reconnect to a server it was previously connected to Reconnecting )
type InvalidResponseTypeError ¶
type InvalidResponseTypeError struct {
// contains filtered or unexported fields
}
func (InvalidResponseTypeError) Error ¶
func (e InvalidResponseTypeError) Error() string
type Node ¶
type Node struct { // ID is the node id of the node. ID *ua.NodeID // contains filtered or unexported fields }
Node is a high-level object to interact with a node in the address space. It provides common convenience functions to access and manipulate the common attributes of a node.
func (*Node) AccessLevel ¶
func (n *Node) AccessLevel() (ua.AccessLevelType, error)
AccessLevel returns the access level of the node. The returned value is a mask where multiple values can be set, e.g. read and write.
func (*Node) Attributes ¶
func (*Node) BrowseName ¶
func (n *Node) BrowseName() (*ua.QualifiedName, error)
BrowseName returns the browse name of the node.
func (*Node) Description ¶
func (n *Node) Description() (*ua.LocalizedText, error)
Description returns the description of the node.
func (*Node) DisplayName ¶
func (n *Node) DisplayName() (*ua.LocalizedText, error)
DisplayName returns the display name of the node.
func (*Node) HasAccessLevel ¶
func (n *Node) HasAccessLevel(mask ua.AccessLevelType) (bool, error)
HasAccessLevel returns true if all bits from mask are set in the access level mask of the node.
func (*Node) HasUserAccessLevel ¶
func (n *Node) HasUserAccessLevel(mask ua.AccessLevelType) (bool, error)
HasUserAccessLevel returns true if all bits from mask are set in the user access level mask of the node.
func (*Node) ReferencedNodes ¶
func (*Node) References ¶
func (n *Node) References(refType uint32, dir ua.BrowseDirection, mask ua.NodeClass, includeSubtypes bool) ([]*ua.ReferenceDescription, error)
References returns all references for the node. todo(fs): this is not complete since it only returns the todo(fs): top-level reference at this point.
func (*Node) TranslateBrowsePathInNamespaceToNodeID ¶
func (n *Node) TranslateBrowsePathInNamespaceToNodeID(ns uint16, browsePath string) (*ua.NodeID, error)
TranslateBrowsePathInNamespaceToNodeID translates a browseName to a NodeID within the same namespace.
func (*Node) TranslateBrowsePathsToNodeIDs ¶
TranslateBrowsePathsToNodeIDs translates an array of browseName segments to NodeIDs.
func (*Node) UserAccessLevel ¶
func (n *Node) UserAccessLevel() (ua.AccessLevelType, error)
UserAccessLevel returns the access level of the node.
type Option ¶
type Option func(*uasc.Config, *uasc.SessionConfig)
Option is an option function type to modify the configuration.
func ApplicationName ¶
ApplicationName sets the application name in the session configuration.
func ApplicationURI ¶
ApplicationURI sets the application uri in the session configuration.
func AuthAnonymous ¶
func AuthAnonymous() Option
AuthAnonymous sets the client's authentication X509 certificate Note: PolicyID still needs to be set outside of this method, typically through the SecurityFromEndpoint() Option
func AuthCertificate ¶
AuthCertificate sets the client's authentication X509 certificate Note: PolicyID still needs to be set outside of this method, typically through the SecurityFromEndpoint() Option
func AuthIssuedToken ¶
AuthIssuedToken sets the client's authentication data based on an externally-issued token Note: PolicyID still needs to be set outside of this method, typically through the SecurityFromEndpoint() Option
func AuthPolicyID ¶
AuthPolicyID sets the policy ID of the user identity token Note: This should only be called if you know the exact policy ID the server is expecting. Most callers should use SecurityFromEndpoint as it automatically finds the policyID todo(fs): Should we make 'policy' an option to the other todo(fs): AuthXXX methods since this approach requires context todo(fs): and ordering?
func AuthUsername ¶
AuthUsername sets the client's authentication username and password Note: PolicyID still needs to be set outside of this method, typically through the SecurityFromEndpoint() Option
func AutoReconnect ¶
AutoReconnect sets the auto reconnect state of the secure channel.
func Certificate ¶
Certificate sets the client X509 certificate in the secure channel configuration. It also detects and sets the ApplicationURI from the URI within the certificate.
func CertificateFile ¶
Certificate sets the client X509 certificate in the secure channel configuration from the PEM or DER encoded file. It also detects and sets the ApplicationURI from the URI within the certificate.
func PrivateKey ¶
func PrivateKey(key *rsa.PrivateKey) Option
PrivateKey sets the RSA private key in the secure channel configuration.
func PrivateKeyFile ¶
PrivateKeyFile sets the RSA private key in the secure channel configuration from a PEM or DER encoded file.
func ProductURI ¶
ProductURI sets the product uri in the session configuration.
func RandomRequestID ¶
func RandomRequestID() Option
RandomRequestID assigns a random initial request id.
func ReconnectInterval ¶
ReconnectInterval is interval duration between each reconnection attempt.
func RemoteCertificate ¶
RemoteCertificate sets the server certificate.
func RemoteCertificateFile ¶
RemoteCertificateFile sets the server certificate from the file in PEM or DER encoding.
func RequestTimeout ¶
RequestTimeout sets the timeout for all requests over SecureChannel
func SecurityFromEndpoint ¶
func SecurityFromEndpoint(ep *ua.EndpointDescription, authType ua.UserTokenType) Option
SecurityFromEndpoint sets the server-related security parameters from a chosen endpoint (received from GetEndpoints())
func SecurityMode ¶
func SecurityMode(m ua.MessageSecurityMode) Option
SecurityMode sets the security mode for the secure channel.
func SecurityModeString ¶
SecurityModeString sets the security mode for the secure channel. Valid values are "None", "Sign", and "SignAndEncrypt".
func SecurityPolicy ¶
SecurityPolicy sets the security policy uri for the secure channel.
func SessionName ¶
SessionName sets the name in the session configuration.
func SessionTimeout ¶
SessionTimeout sets the timeout in the session configuration.
type PublishNotificationData ¶
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session is a OPC/UA session as described in Part 4, 5.6.
type Subscription ¶
type Subscription struct { SubscriptionID uint32 RevisedPublishingInterval time.Duration RevisedLifetimeCount uint32 RevisedMaxKeepAliveCount uint32 Notifs chan *PublishNotificationData // contains filtered or unexported fields }
func (*Subscription) Cancel ¶
func (s *Subscription) Cancel() error
Cancel stops the subscription and removes it from the client and the server.
func (*Subscription) Monitor ¶
func (s *Subscription) Monitor(ts ua.TimestampsToReturn, items ...*ua.MonitoredItemCreateRequest) (*ua.CreateMonitoredItemsResponse, error)
func (*Subscription) SetTriggering ¶
func (s *Subscription) SetTriggering(triggeringItemID uint32, add, remove []uint32) (*ua.SetTriggeringResponse, error)
SetTriggering sends a request to the server to add and/or remove triggering links from a triggering item. To add links from a triggering item to an item to report provide the server assigned ID(s) in the `add` argument. To remove links from a triggering item to an item to report provide the server assigned ID(s) in the `remove` argument.
func (*Subscription) Stats ¶
func (s *Subscription) Stats() (*ua.SubscriptionDiagnosticsDataType, error)
Stats returns a diagnostic struct with metadata about the current subscription
func (*Subscription) Unmonitor ¶
func (s *Subscription) Unmonitor(monitoredItemIDs ...uint32) (*ua.DeleteMonitoredItemsResponse, error)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
Package debug provides functions for debug logging.
|
Package debug provides functions for debug logging. |
examples
|
|
endpoints
Package main provides an example to query the available endpoints of a server.
|
Package main provides an example to query the available endpoints of a server. |
Package ua defines the structures, decoders and encoder for built-in data types described in Part 6 Section 5 Data encoding and for services in OPC UA Binary Protocol.
|
Package ua defines the structures, decoders and encoder for built-in data types described in Part 6 Section 5 Data encoding and for services in OPC UA Binary Protocol. |
Package uacp provides encoding/decoding and automated connection handling for the OPC UA Connection Protocol.
|
Package uacp provides encoding/decoding and automated connection handling for the OPC UA Connection Protocol. |
Package uapolicy implements the encryption, decryption, signing, and signature verifying algorithms for Security Policy profiles as defined in Part 7 of the OPC-UA specifications (version 1.04)
|
Package uapolicy implements the encryption, decryption, signing, and signature verifying algorithms for Security Policy profiles as defined in Part 7 of the OPC-UA specifications (version 1.04) |
Package uasc provides encoding/decoding and automated secure channel and session handling for OPC UA Secure Conversation.
|
Package uasc provides encoding/decoding and automated secure channel and session handling for OPC UA Secure Conversation. |