blob: aad45b3812a3a16034ba1fa5a382c3f58657c2a1 [file] [log] [blame]
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
* Copyright 2014-2017 (c) Florian Palm
* Copyright 2015 (c) Sten GrĂ¼ner
* Copyright 2014 (c) LEvertz
* Copyright 2015 (c) Chris Iatrou
* Copyright 2015 (c) Christian Fimmers
* Copyright 2015-2016 (c) Oleksiy Vasylyev
* Copyright 2017 (c) Stefan Profanter, fortiss GmbH
*/
#ifndef UA_SERVICES_H_
#define UA_SERVICES_H_
#include <open62541/server.h>
#include "ua_session.h"
_UA_BEGIN_DECLS
/**
* .. _services:
*
* Services
* ========
*
* In OPC UA, all communication is based on service calls, each consisting of a
* request and a response message. These messages are defined as data structures
* with a binary encoding and listed in :ref:`generated-types`. Since all
* Services are pre-defined in the standard, they cannot be modified by the
* user. But you can use the :ref:`Call <method-services>` service to invoke
* user-defined methods on the server.
*
* The following service signatures are internal and *not visible to users*.
* Still, we present them here for an overview of the capabilities of OPC UA.
* Please refer to the :ref:`client` and :ref:`server` API where the services
* are exposed to end users. Please see part 4 of the OPC UA standard for the
* authoritative definition of the service and their behaviour.
*
* Most services take as input the server, the current session and pointers to
* the request and response structures. Possible error codes are returned as
* part of the response. */
typedef void (*UA_Service)(UA_Server*, UA_Session*,
const void *request, void *response);
/**
* Discovery Service Set
* ---------------------
* This Service Set defines Services used to discover the Endpoints implemented
* by a Server and to read the security configuration for those Endpoints.
*
* FindServers Service
* ^^^^^^^^^^^^^^^^^^^
* Returns the Servers known to a Server or Discovery Server. The Client may
* reduce the number of results returned by specifying filter criteria */
void Service_FindServers(UA_Server *server, UA_Session *session,
const UA_FindServersRequest *request,
UA_FindServersResponse *response);
/**
* GetEndpoints Service
* ^^^^^^^^^^^^^^^^^^^^
* Returns the Endpoints supported by a Server and all of the configuration
* information required to establish a SecureChannel and a Session. */
void Service_GetEndpoints(UA_Server *server, UA_Session *session,
const UA_GetEndpointsRequest *request,
UA_GetEndpointsResponse *response);
#ifdef UA_ENABLE_DISCOVERY
# ifdef UA_ENABLE_DISCOVERY_MULTICAST
/**
* FindServersOnNetwork Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Returns the Servers known to a Discovery Server. Unlike FindServer,
* this Service is only implemented by Discovery Servers. It additionally
* returns servers which may have been detected through Multicast. */
void Service_FindServersOnNetwork(UA_Server *server, UA_Session *session,
const UA_FindServersOnNetworkRequest *request,
UA_FindServersOnNetworkResponse *response);
# endif /* UA_ENABLE_DISCOVERY_MULTICAST */
/**
* RegisterServer
* ^^^^^^^^^^^^^^
* Registers a remote server in the local discovery service. */
void Service_RegisterServer(UA_Server *server, UA_Session *session,
const UA_RegisterServerRequest *request,
UA_RegisterServerResponse *response);
/**
* RegisterServer2
* ^^^^^^^^^^^^^^^
* This Service allows a Server to register its DiscoveryUrls and capabilities
* with a Discovery Server. It extends the registration information from
* RegisterServer with information necessary for FindServersOnNetwork. */
void Service_RegisterServer2(UA_Server *server, UA_Session *session,
const UA_RegisterServer2Request *request,
UA_RegisterServer2Response *response);
#endif /* UA_ENABLE_DISCOVERY */
/**
* SecureChannel Service Set
* -------------------------
* This Service Set defines Services used to open a communication channel that
* ensures the confidentiality and Integrity of all Messages exchanged with the
* Server.
*
* OpenSecureChannel Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^
* Open or renew a SecureChannel that can be used to ensure Confidentiality and
* Integrity for Message exchange during a Session. */
void Service_OpenSecureChannel(UA_Server *server, UA_SecureChannel* channel,
const UA_OpenSecureChannelRequest *request,
UA_OpenSecureChannelResponse *response);
/**
* CloseSecureChannel Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to terminate a SecureChannel. */
void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel);
/**
* Session Service Set
* -------------------
* This Service Set defines Services for an application layer connection
* establishment in the context of a Session.
*
* CreateSession Service
* ^^^^^^^^^^^^^^^^^^^^^
* Used by an OPC UA Client to create a Session and the Server returns two
* values which uniquely identify the Session. The first value is the sessionId
* which is used to identify the Session in the audit logs and in the Server's
* address space. The second is the authenticationToken which is used to
* associate an incoming request with a Session. */
void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
const UA_CreateSessionRequest *request,
UA_CreateSessionResponse *response);
/**
* ActivateSession
* ^^^^^^^^^^^^^^^
* Used by the Client to submit its SoftwareCertificates to the Server for
* validation and to specify the identity of the user associated with the
* Session. This Service request shall be issued by the Client before it issues
* any other Service request after CreateSession. Failure to do so shall cause
* the Server to close the Session. */
void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel,
UA_Session *session,
const UA_ActivateSessionRequest *request,
UA_ActivateSessionResponse *response);
/**
* CloseSession
* ^^^^^^^^^^^^
* Used to terminate a Session. */
void Service_CloseSession(UA_Server *server, UA_Session *session,
const UA_CloseSessionRequest *request,
UA_CloseSessionResponse *response);
/**
* Cancel Service
* ^^^^^^^^^^^^^^
* Used to cancel outstanding Service requests. Successfully cancelled service
* requests shall respond with Bad_RequestCancelledByClient. */
/* Not Implemented */
/**
* NodeManagement Service Set
* --------------------------
* This Service Set defines Services to add and delete AddressSpace Nodes and
* References between them. All added Nodes continue to exist in the
* AddressSpace even if the Client that created them disconnects from the
* Server.
*
* AddNodes Service
* ^^^^^^^^^^^^^^^^
* Used to add one or more Nodes into the AddressSpace hierarchy. */
void Service_AddNodes(UA_Server *server, UA_Session *session,
const UA_AddNodesRequest *request,
UA_AddNodesResponse *response);
/**
* AddReferences Service
* ^^^^^^^^^^^^^^^^^^^^^
* Used to add one or more References to one or more Nodes. */
void Service_AddReferences(UA_Server *server, UA_Session *session,
const UA_AddReferencesRequest *request,
UA_AddReferencesResponse *response);
/**
* DeleteNodes Service
* ^^^^^^^^^^^^^^^^^^^
* Used to delete one or more Nodes from the AddressSpace. */
void Service_DeleteNodes(UA_Server *server, UA_Session *session,
const UA_DeleteNodesRequest *request,
UA_DeleteNodesResponse *response);
/**
* DeleteReferences
* ^^^^^^^^^^^^^^^^
* Used to delete one or more References of a Node. */
void Service_DeleteReferences(UA_Server *server, UA_Session *session,
const UA_DeleteReferencesRequest *request,
UA_DeleteReferencesResponse *response);
/**
* .. _view-services:
*
* View Service Set
* ----------------
* Clients use the browse Services of the View Service Set to navigate through
* the AddressSpace or through a View which is a subset of the AddressSpace.
*
* Browse Service
* ^^^^^^^^^^^^^^
* Used to discover the References of a specified Node. The browse can be
* further limited by the use of a View. This Browse Service also supports a
* primitive filtering capability. */
void Service_Browse(UA_Server *server, UA_Session *session,
const UA_BrowseRequest *request,
UA_BrowseResponse *response);
/**
* BrowseNext Service
* ^^^^^^^^^^^^^^^^^^
* Used to request the next set of Browse or BrowseNext response information
* that is too large to be sent in a single response. "Too large" in this
* context means that the Server is not able to return a larger response or that
* the number of results to return exceeds the maximum number of results to
* return that was specified by the Client in the original Browse request. */
void Service_BrowseNext(UA_Server *server, UA_Session *session,
const UA_BrowseNextRequest *request,
UA_BrowseNextResponse *response);
/**
* TranslateBrowsePathsToNodeIds Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to translate textual node paths to their respective ids. */
void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session,
const UA_TranslateBrowsePathsToNodeIdsRequest *request,
UA_TranslateBrowsePathsToNodeIdsResponse *response);
/**
* RegisterNodes Service
* ^^^^^^^^^^^^^^^^^^^^^
* Used by Clients to register the Nodes that they know they will access
* repeatedly (e.g. Write, Call). It allows Servers to set up anything needed so
* that the access operations will be more efficient. */
void Service_RegisterNodes(UA_Server *server, UA_Session *session,
const UA_RegisterNodesRequest *request,
UA_RegisterNodesResponse *response);
/**
* UnregisterNodes Service
* ^^^^^^^^^^^^^^^^^^^^^^^
* This Service is used to unregister NodeIds that have been obtained via the
* RegisterNodes service. */
void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
const UA_UnregisterNodesRequest *request,
UA_UnregisterNodesResponse *response);
/**
* Query Service Set
* -----------------
* This Service Set is used to issue a Query to a Server. OPC UA Query is
* generic in that it provides an underlying storage mechanism independent Query
* capability that can be used to access a wide variety of OPC UA data stores
* and information management systems. OPC UA Query permits a Client to access
* data maintained by a Server without any knowledge of the logical schema used
* for internal storage of the data. Knowledge of the AddressSpace is
* sufficient.
*
* QueryFirst Service
* ^^^^^^^^^^^^^^^^^^
* This Service is used to issue a Query request to the Server. */
/* Not Implemented */
/**
* QueryNext Service
* ^^^^^^^^^^^^^^^^^
* This Service is used to request the next set of QueryFirst or QueryNext
* response information that is too large to be sent in a single response. */
/* Not Impelemented */
/**
* Attribute Service Set
* ---------------------
* This Service Set provides Services to access Attributes that are part of
* Nodes.
*
* Read Service
* ^^^^^^^^^^^^
* Used to read attributes of nodes. For constructed attribute values whose
* elements are indexed, such as an array, this Service allows Clients to read
* the entire set of indexed values as a composite, to read individual elements
* or to read ranges of elements of the composite. */
void Service_Read(UA_Server *server, UA_Session *session,
const UA_ReadRequest *request, UA_ReadResponse *response);
/**
* Write Service
* ^^^^^^^^^^^^^
* Used to write attributes of nodes. For constructed attribute values whose
* elements are indexed, such as an array, this Service allows Clients to write
* the entire set of indexed values as a composite, to write individual elements
* or to write ranges of elements of the composite. */
void Service_Write(UA_Server *server, UA_Session *session,
const UA_WriteRequest *request, UA_WriteResponse *response);
/**
* HistoryRead Service
* ^^^^^^^^^^^^^^^^^^^
* Used to read historical values or Events of one or more Nodes. Servers may
* make historical values available to Clients using this Service, although the
* historical values themselves are not visible in the AddressSpace. */
#ifdef UA_ENABLE_HISTORIZING
void Service_HistoryRead(UA_Server *server, UA_Session *session,
const UA_HistoryReadRequest *request,
UA_HistoryReadResponse *response);
/**
* HistoryUpdate Service
* ^^^^^^^^^^^^^^^^^^^^^
* Used to update historical values or Events of one or more Nodes. Several
* request parameters indicate how the Server is to update the historical value
* or Event. Valid actions are Insert, Replace or Delete. */
void
Service_HistoryUpdate(UA_Server *server, UA_Session *session,
const UA_HistoryUpdateRequest *request,
UA_HistoryUpdateResponse *response);
#endif
/**
* .. _method-services:
*
* Method Service Set
* ------------------
* The Method Service Set defines the means to invoke methods. A method shall be
* a component of an Object. See the section on :ref:`MethodNodes <methodnode>`
* for more information.
*
* Call Service
* ^^^^^^^^^^^^
* Used to call (invoke) a methods. Each method call is invoked within the
* context of an existing Session. If the Session is terminated, the results of
* the method's execution cannot be returned to the Client and are discarded. */
#ifdef UA_ENABLE_METHODCALLS
void Service_Call(UA_Server *server, UA_Session *session,
const UA_CallRequest *request,
UA_CallResponse *response);
#endif
#ifdef UA_ENABLE_SUBSCRIPTIONS
/**
* MonitoredItem Service Set
* -------------------------
* Clients define MonitoredItems to subscribe to data and Events. Each
* MonitoredItem identifies the item to be monitored and the Subscription to use
* to send Notifications. The item to be monitored may be any Node Attribute.
*
* CreateMonitoredItems Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to create and add one or more MonitoredItems to a Subscription. A
* MonitoredItem is deleted automatically by the Server when the Subscription is
* deleted. Deleting a MonitoredItem causes its entire set of triggered item
* links to be deleted, but has no effect on the MonitoredItems referenced by
* the triggered items. */
void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session,
const UA_CreateMonitoredItemsRequest *request,
UA_CreateMonitoredItemsResponse *response);
/**
* DeleteMonitoredItems Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to remove one or more MonitoredItems of a Subscription. When a
* MonitoredItem is deleted, its triggered item links are also deleted. */
void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session,
const UA_DeleteMonitoredItemsRequest *request,
UA_DeleteMonitoredItemsResponse *response);
/**
* ModifyMonitoredItems Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to modify MonitoredItems of a Subscription. Changes to the MonitoredItem
* settings shall be applied immediately by the Server. They take effect as soon
* as practical but not later than twice the new revisedSamplingInterval.
*
* Illegal request values for parameters that can be revised do not generate
* errors. Instead the server will choose default values and indicate them in
* the corresponding revised parameter. */
void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session,
const UA_ModifyMonitoredItemsRequest *request,
UA_ModifyMonitoredItemsResponse *response);
/**
* SetMonitoringMode Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to set the monitoring mode for one or more MonitoredItems of a
* Subscription. */
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session,
const UA_SetMonitoringModeRequest *request,
UA_SetMonitoringModeResponse *response);
/**
* SetTriggering Service
* ^^^^^^^^^^^^^^^^^^^^^
* Used to create and delete triggering links for a triggering item. */
/* Not Implemented */
/**
* Subscription Service Set
* ------------------------
* Subscriptions are used to report Notifications to the Client.
*
* CreateSubscription Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to create a Subscription. Subscriptions monitor a set of MonitoredItems
* for Notifications and return them to the Client in response to Publish
* requests. */
void Service_CreateSubscription(UA_Server *server, UA_Session *session,
const UA_CreateSubscriptionRequest *request,
UA_CreateSubscriptionResponse *response);
/**
* ModifySubscription Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to modify a Subscription. */
void Service_ModifySubscription(UA_Server *server, UA_Session *session,
const UA_ModifySubscriptionRequest *request,
UA_ModifySubscriptionResponse *response);
/**
* SetPublishingMode Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to enable sending of Notifications on one or more Subscriptions. */
void Service_SetPublishingMode(UA_Server *server, UA_Session *session,
const UA_SetPublishingModeRequest *request,
UA_SetPublishingModeResponse *response);
/**
* Publish Service
* ^^^^^^^^^^^^^^^
* Used for two purposes. First, it is used to acknowledge the receipt of
* NotificationMessages for one or more Subscriptions. Second, it is used to
* request the Server to return a NotificationMessage or a keep-alive
* Message.
*
* Note that the service signature is an exception and does not contain a
* pointer to a PublishResponse. That is because the service queues up publish
* requests internally and sends responses asynchronously based on timeouts. */
void Service_Publish(UA_Server *server, UA_Session *session,
const UA_PublishRequest *request, UA_UInt32 requestId);
/**
* Republish Service
* ^^^^^^^^^^^^^^^^^
* Requests the Subscription to republish a NotificationMessage from its
* retransmission queue. */
void Service_Republish(UA_Server *server, UA_Session *session,
const UA_RepublishRequest *request,
UA_RepublishResponse *response);
/**
* DeleteSubscriptions Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Invoked to delete one or more Subscriptions that belong to the Client's
* Session. */
void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session,
const UA_DeleteSubscriptionsRequest *request,
UA_DeleteSubscriptionsResponse *response);
/**
* TransferSubscription Service
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Used to transfer a Subscription and its MonitoredItems from one Session to
* another. For example, a Client may need to reopen a Session and then transfer
* its Subscriptions to that Session. It may also be used by one Client to take
* over a Subscription from another Client by transferring the Subscription to
* its Session. */
/* Not Implemented */
#endif /* UA_ENABLE_SUBSCRIPTIONS */
_UA_END_DECLS
#endif /* UA_SERVICES_H_ */