summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJannis Voelker <jannis.voelker@basyskom.com>2019-06-05 14:08:50 +0200
committerJannis Voelker <jannis.voelker@basyskom.com>2019-06-06 11:48:07 +0200
commitd089a19e743f51b3fdf05aadd769725b7f6677e8 (patch)
treea736b2de3f1c6fe168ad1ccca4c1a45c47bef89c
parent04c1d6071a0afb3c70798e5c9531c741f8570d0b (diff)
Fix issue with monitored item modification in the open62541 backend
Include the changes from open62541 pull request #2746 into the third party code. Change-Id: If9474ad4a3cfbc3d40c8eaae608d61007e35acae Reviewed-by: Rainer Keller <Rainer.Keller@qt.io>
-rw-r--r--src/3rdparty/open62541/open62541.c40
-rw-r--r--src/3rdparty/open62541/open62541.h27
-rw-r--r--src/patches/0001-open62541-fix-monitored-items-modify.patch126
3 files changed, 178 insertions, 15 deletions
diff --git a/src/3rdparty/open62541/open62541.c b/src/3rdparty/open62541/open62541.c
index 217137a..411b267 100644
--- a/src/3rdparty/open62541/open62541.c
+++ b/src/3rdparty/open62541/open62541.c
@@ -1,6 +1,6 @@
/* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
* visit http://open62541.org/ for information about this software
- * Git-Revision: v0.3.0
+ * Git-Revision: v0.3.0-1-g1bcad96
*/
/*
@@ -38175,6 +38175,44 @@ UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionI
return retval;
}
+UA_ModifyMonitoredItemsResponse UA_EXPORT
+UA_Client_MonitoredItems_modify(UA_Client *client,
+ const UA_ModifyMonitoredItemsRequest request) {
+ UA_ModifyMonitoredItemsResponse response;
+
+ UA_Client_Subscription *sub = 0;
+ LIST_FOREACH(sub, &client->subscriptions, listEntry) {
+ if (sub->subscriptionId == request.subscriptionId)
+ break;
+ }
+
+ if (!sub) {
+ UA_ModifyMonitoredItemsResponse_init(&response);
+ response.responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
+ return response;
+ }
+
+ UA_ModifyMonitoredItemsRequest modifiedRequest;
+ UA_ModifyMonitoredItemsRequest_copy(&request, &modifiedRequest);
+
+ for (size_t i = 0; i < modifiedRequest.itemsToModifySize; ++i) {
+ UA_Client_MonitoredItem *mon = 0;
+ LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
+ if(mon->monitoredItemId == modifiedRequest.itemsToModify[i].monitoredItemId) {
+ modifiedRequest.itemsToModify[i].requestedParameters.clientHandle = mon->clientHandle;
+ break;
+ }
+ }
+ }
+
+ __UA_Client_Service(client,
+ &modifiedRequest, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
+ &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
+
+ UA_ModifyMonitoredItemsRequest_deleteMembers(&modifiedRequest);
+ return response;
+}
+
/*************************************/
/* Async Processing of Notifications */
/*************************************/
diff --git a/src/3rdparty/open62541/open62541.h b/src/3rdparty/open62541/open62541.h
index f53419f..67200cb 100644
--- a/src/3rdparty/open62541/open62541.h
+++ b/src/3rdparty/open62541/open62541.h
@@ -1,6 +1,6 @@
/* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
* visit http://open62541.org/ for information about this software
- * Git-Revision: v0.3.0
+ * Git-Revision: v0.3.0-1-g1bcad96
*/
/*
@@ -36,7 +36,7 @@ extern "C" {
#define UA_OPEN62541_VER_MINOR 3
#define UA_OPEN62541_VER_PATCH 0
#define UA_OPEN62541_VER_LABEL "" /* Release candidate label, etc. */
-#define UA_OPEN62541_VER_COMMIT "v0.3.0"
+#define UA_OPEN62541_VER_COMMIT "v0.3.0-1-g1bcad96"
/**
* Feature Options
@@ -15022,8 +15022,8 @@ UA_Client_Subscriptions_setPublishingMode(UA_Client *client,
* forward Event notifications from that node.
*
* During the creation of a MonitoredItem, the server may return changed
- * adjusted parameters. Use ``UA_Client_MonitoredItem_getParameters`` to get the
- * current parameters. */
+ * adjusted parameters. Check the returned ``UA_CreateMonitoredItemsResponse``
+ * to get the current parameters. */
/* Provides default values for a new monitored item. */
static UA_INLINE UA_MonitoredItemCreateRequest
@@ -15039,6 +15039,10 @@ UA_MonitoredItemCreateRequest_default(UA_NodeId nodeId) {
return request;
}
+/**
+ * The clientHandle parameter can't be set by the user, any value will be replaced
+ * by the client before sending the request to the server. */
+
/* Callback for the deletion of a MonitoredItem */
typedef void (*UA_Client_DeleteMonitoredItemCallback)
(UA_Client *client, UA_UInt32 subId, void *subContext,
@@ -15088,20 +15092,15 @@ UA_Client_MonitoredItems_delete(UA_Client *client, const UA_DeleteMonitoredItems
UA_StatusCode UA_EXPORT
UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId, UA_UInt32 monitoredItemId);
+/* The clientHandle parameter will be filled automatically */
+UA_ModifyMonitoredItemsResponse UA_EXPORT
+UA_Client_MonitoredItems_modify(UA_Client *client,
+ const UA_ModifyMonitoredItemsRequest request);
+
/**
* The following service calls go directly to the server. The MonitoredItem settings are
* not stored in the client. */
-static UA_INLINE UA_ModifyMonitoredItemsResponse
-UA_Client_MonitoredItems_modify(UA_Client *client,
- const UA_ModifyMonitoredItemsRequest request) {
- UA_ModifyMonitoredItemsResponse response;
- __UA_Client_Service(client,
- &request, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
- &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
- return response;
-}
-
static UA_INLINE UA_SetMonitoringModeResponse
UA_Client_MonitoredItems_setMonitoringMode(UA_Client *client,
const UA_SetMonitoringModeRequest request) {
diff --git a/src/patches/0001-open62541-fix-monitored-items-modify.patch b/src/patches/0001-open62541-fix-monitored-items-modify.patch
new file mode 100644
index 0000000..b5cc41a
--- /dev/null
+++ b/src/patches/0001-open62541-fix-monitored-items-modify.patch
@@ -0,0 +1,126 @@
+diff --git a/src/3rdparty/open62541/open62541.c b/src/3rdparty/open62541/open62541.c
+index 217137a..411b267 100644
+--- a/src/3rdparty/open62541/open62541.c
++++ b/src/3rdparty/open62541/open62541.c
+@@ -1,6 +1,6 @@
+ /* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
+ * visit http://open62541.org/ for information about this software
+- * Git-Revision: v0.3.0
++ * Git-Revision: v0.3.0-1-g1bcad96
+ */
+
+ /*
+@@ -38175,6 +38175,44 @@ UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionI
+ return retval;
+ }
+
++UA_ModifyMonitoredItemsResponse UA_EXPORT
++UA_Client_MonitoredItems_modify(UA_Client *client,
++ const UA_ModifyMonitoredItemsRequest request) {
++ UA_ModifyMonitoredItemsResponse response;
++
++ UA_Client_Subscription *sub = 0;
++ LIST_FOREACH(sub, &client->subscriptions, listEntry) {
++ if (sub->subscriptionId == request.subscriptionId)
++ break;
++ }
++
++ if (!sub) {
++ UA_ModifyMonitoredItemsResponse_init(&response);
++ response.responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
++ return response;
++ }
++
++ UA_ModifyMonitoredItemsRequest modifiedRequest;
++ UA_ModifyMonitoredItemsRequest_copy(&request, &modifiedRequest);
++
++ for (size_t i = 0; i < modifiedRequest.itemsToModifySize; ++i) {
++ UA_Client_MonitoredItem *mon = 0;
++ LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
++ if(mon->monitoredItemId == modifiedRequest.itemsToModify[i].monitoredItemId) {
++ modifiedRequest.itemsToModify[i].requestedParameters.clientHandle = mon->clientHandle;
++ break;
++ }
++ }
++ }
++
++ __UA_Client_Service(client,
++ &modifiedRequest, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
++ &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
++
++ UA_ModifyMonitoredItemsRequest_deleteMembers(&modifiedRequest);
++ return response;
++}
++
+ /*************************************/
+ /* Async Processing of Notifications */
+ /*************************************/
+diff --git a/src/3rdparty/open62541/open62541.h b/src/3rdparty/open62541/open62541.h
+index f53419f..67200cb 100644
+--- a/src/3rdparty/open62541/open62541.h
++++ b/src/3rdparty/open62541/open62541.h
+@@ -1,6 +1,6 @@
+ /* THIS IS A SINGLE-FILE DISTRIBUTION CONCATENATED FROM THE OPEN62541 SOURCES
+ * visit http://open62541.org/ for information about this software
+- * Git-Revision: v0.3.0
++ * Git-Revision: v0.3.0-1-g1bcad96
+ */
+
+ /*
+@@ -36,7 +36,7 @@ extern "C" {
+ #define UA_OPEN62541_VER_MINOR 3
+ #define UA_OPEN62541_VER_PATCH 0
+ #define UA_OPEN62541_VER_LABEL "" /* Release candidate label, etc. */
+-#define UA_OPEN62541_VER_COMMIT "v0.3.0"
++#define UA_OPEN62541_VER_COMMIT "v0.3.0-1-g1bcad96"
+
+ /**
+ * Feature Options
+@@ -15022,8 +15022,8 @@ UA_Client_Subscriptions_setPublishingMode(UA_Client *client,
+ * forward Event notifications from that node.
+ *
+ * During the creation of a MonitoredItem, the server may return changed
+- * adjusted parameters. Use ``UA_Client_MonitoredItem_getParameters`` to get the
+- * current parameters. */
++ * adjusted parameters. Check the returned ``UA_CreateMonitoredItemsResponse``
++ * to get the current parameters. */
+
+ /* Provides default values for a new monitored item. */
+ static UA_INLINE UA_MonitoredItemCreateRequest
+@@ -15039,6 +15039,10 @@ UA_MonitoredItemCreateRequest_default(UA_NodeId nodeId) {
+ return request;
+ }
+
++/**
++ * The clientHandle parameter can't be set by the user, any value will be replaced
++ * by the client before sending the request to the server. */
++
+ /* Callback for the deletion of a MonitoredItem */
+ typedef void (*UA_Client_DeleteMonitoredItemCallback)
+ (UA_Client *client, UA_UInt32 subId, void *subContext,
+@@ -15088,20 +15092,15 @@ UA_Client_MonitoredItems_delete(UA_Client *client, const UA_DeleteMonitoredItems
+ UA_StatusCode UA_EXPORT
+ UA_Client_MonitoredItems_deleteSingle(UA_Client *client, UA_UInt32 subscriptionId, UA_UInt32 monitoredItemId);
+
++/* The clientHandle parameter will be filled automatically */
++UA_ModifyMonitoredItemsResponse UA_EXPORT
++UA_Client_MonitoredItems_modify(UA_Client *client,
++ const UA_ModifyMonitoredItemsRequest request);
++
+ /**
+ * The following service calls go directly to the server. The MonitoredItem settings are
+ * not stored in the client. */
+
+-static UA_INLINE UA_ModifyMonitoredItemsResponse
+-UA_Client_MonitoredItems_modify(UA_Client *client,
+- const UA_ModifyMonitoredItemsRequest request) {
+- UA_ModifyMonitoredItemsResponse response;
+- __UA_Client_Service(client,
+- &request, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST],
+- &response, &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE]);
+- return response;
+-}
+-
+ static UA_INLINE UA_SetMonitoringModeResponse
+ UA_Client_MonitoredItems_setMonitoringMode(UA_Client *client,
+ const UA_SetMonitoringModeRequest request) {