blob: e50e8921fc7d7cedd599a71366ffcef793dcd7dd [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 2018 (c) basysKom GmbH <opensource@basyskom.com> (Author: Peter Rustler)
*/
#ifndef UA_PLUGIN_HISTORYDATABASE_H_
#define UA_PLUGIN_HISTORYDATABASE_H_
#include <open62541/server.h>
_UA_BEGIN_DECLS
typedef struct UA_HistoryDatabase UA_HistoryDatabase;
struct UA_HistoryDatabase {
void *context;
void
(*deleteMembers)(UA_HistoryDatabase *hdb);
/* This function will be called when a nodes value is set.
* Use this to insert data into your database(s) if polling is not suitable
* and you need to get all data changes.
* Set it to NULL if you do not need it.
*
* server is the server this node lives in.
* hdbContext is the context of the UA_HistoryDatabase.
* sessionId and sessionContext identify the session which set this value.
* nodeId is the node id for which data was set.
* historizing is the nodes boolean flag for historizing
* value is the new value. */
void
(*setValue)(UA_Server *server,
void *hdbContext,
const UA_NodeId *sessionId,
void *sessionContext,
const UA_NodeId *nodeId,
UA_Boolean historizing,
const UA_DataValue *value);
/* This function is called if a history read is requested with
* isRawReadModified set to false. Setting it to NULL will result in a
* response with statuscode UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED.
*
* server is the server this node lives in.
* hdbContext is the context of the UA_HistoryDatabase.
* sessionId and sessionContext identify the session which set this value.
* requestHeader, historyReadDetails, timestampsToReturn, releaseContinuationPoints
* nodesToReadSize and nodesToRead is the requested data from the client. It
* is from the request object.
* response the response to fill for the client. If the request is ok, there
* is no need to use it. Use this to set status codes other than
* "Good" or other data. You find an already allocated
* UA_HistoryReadResult array with an UA_HistoryData object in the
* extension object in the size of nodesToReadSize. If you are not
* willing to return data, you have to delete the results array,
* set it to NULL and set the resultsSize to 0. Do not access
* historyData after that.
* historyData is a proper typed pointer array pointing in the
* UA_HistoryReadResult extension object. use this to provide
* result data to the client. Index in the array is the same as
* in nodesToRead and the UA_HistoryReadResult array. */
void
(*readRaw)(UA_Server *server,
void *hdbContext,
const UA_NodeId *sessionId,
void *sessionContext,
const UA_RequestHeader *requestHeader,
const UA_ReadRawModifiedDetails *historyReadDetails,
UA_TimestampsToReturn timestampsToReturn,
UA_Boolean releaseContinuationPoints,
size_t nodesToReadSize,
const UA_HistoryReadValueId *nodesToRead,
UA_HistoryReadResponse *response,
UA_HistoryData * const * const historyData);
void
(*updateData)(UA_Server *server,
void *hdbContext,
const UA_NodeId *sessionId,
void *sessionContext,
const UA_RequestHeader *requestHeader,
const UA_UpdateDataDetails *details,
UA_HistoryUpdateResult *result);
void
(*deleteRawModified)(UA_Server *server,
void *hdbContext,
const UA_NodeId *sessionId,
void *sessionContext,
const UA_RequestHeader *requestHeader,
const UA_DeleteRawModifiedDetails *details,
UA_HistoryUpdateResult *result);
/* Add more function pointer here.
* For example for read_event, read_modified, read_processed, read_at_time */
};
_UA_END_DECLS
#endif /* UA_PLUGIN_HISTORYDATABASE_H_ */