/* 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 (Author: Peter Rustler) */ #ifndef UA_PLUGIN_HISTORYDATABASE_H_ #define UA_PLUGIN_HISTORYDATABASE_H_ #include "ua_types.h" #include "ua_server.h" _UA_BEGIN_DECLS struct UA_HistoryDatabase; 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); /* 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_ */