diff options
author | Jannis Voelker <jannis.voelker@basyskom.com> | 2019-06-05 14:08:50 +0200 |
---|---|---|
committer | Jannis Voelker <jannis.voelker@basyskom.com> | 2019-06-06 11:48:07 +0200 |
commit | d089a19e743f51b3fdf05aadd769725b7f6677e8 (patch) | |
tree | a736b2de3f1c6fe168ad1ccca4c1a45c47bef89c | |
parent | 04c1d6071a0afb3c70798e5c9531c741f8570d0b (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.c | 40 | ||||
-rw-r--r-- | src/3rdparty/open62541/open62541.h | 27 | ||||
-rw-r--r-- | src/patches/0001-open62541-fix-monitored-items-modify.patch | 126 |
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) { |