|
@@ -1,7 +1,6 @@
|
|
|
#include "ua_client_highlevel.h"
|
|
|
#include "ua_client_internal.h"
|
|
|
#include "ua_util.h"
|
|
|
-#include "ua_types_generated_encoding_binary.h"
|
|
|
|
|
|
#ifdef UA_ENABLE_SUBSCRIPTIONS /* conditional compilation */
|
|
|
|
|
@@ -28,17 +27,17 @@ UA_Client_Subscriptions_new(UA_Client *client, UA_SubscriptionSettings settings,
|
|
|
goto cleanup;
|
|
|
}
|
|
|
|
|
|
- LIST_INIT(&newSub->MonitoredItems);
|
|
|
- newSub->LifeTime = response.revisedLifetimeCount;
|
|
|
- newSub->KeepAliveCount = response.revisedMaxKeepAliveCount;
|
|
|
- newSub->PublishingInterval = response.revisedPublishingInterval;
|
|
|
- newSub->SubscriptionID = response.subscriptionId;
|
|
|
- newSub->NotificationsPerPublish = request.maxNotificationsPerPublish;
|
|
|
- newSub->Priority = request.priority;
|
|
|
+ LIST_INIT(&newSub->monitoredItems);
|
|
|
+ newSub->lifeTime = response.revisedLifetimeCount;
|
|
|
+ newSub->keepAliveCount = response.revisedMaxKeepAliveCount;
|
|
|
+ newSub->publishingInterval = response.revisedPublishingInterval;
|
|
|
+ newSub->subscriptionID = response.subscriptionId;
|
|
|
+ newSub->notificationsPerPublish = request.maxNotificationsPerPublish;
|
|
|
+ newSub->priority = request.priority;
|
|
|
LIST_INSERT_HEAD(&client->subscriptions, newSub, listEntry);
|
|
|
|
|
|
if(newSubscriptionId)
|
|
|
- *newSubscriptionId = newSub->SubscriptionID;
|
|
|
+ *newSubscriptionId = newSub->subscriptionID;
|
|
|
|
|
|
cleanup:
|
|
|
UA_CreateSubscriptionResponse_deleteMembers(&response);
|
|
@@ -50,7 +49,7 @@ UA_StatusCode
|
|
|
UA_Client_Subscriptions_remove(UA_Client *client, UA_UInt32 subscriptionId) {
|
|
|
UA_Client_Subscription *sub;
|
|
|
LIST_FOREACH(sub, &client->subscriptions, listEntry) {
|
|
|
- if(sub->SubscriptionID == subscriptionId)
|
|
|
+ if(sub->subscriptionID == subscriptionId)
|
|
|
break;
|
|
|
}
|
|
|
if(!sub)
|
|
@@ -58,10 +57,10 @@ UA_Client_Subscriptions_remove(UA_Client *client, UA_UInt32 subscriptionId) {
|
|
|
|
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
|
UA_Client_MonitoredItem *mon, *tmpmon;
|
|
|
- LIST_FOREACH_SAFE(mon, &sub->MonitoredItems, listEntry, tmpmon) {
|
|
|
+ LIST_FOREACH_SAFE(mon, &sub->monitoredItems, listEntry, tmpmon) {
|
|
|
retval =
|
|
|
- UA_Client_Subscriptions_removeMonitoredItem(client, sub->SubscriptionID,
|
|
|
- mon->MonitoredItemId);
|
|
|
+ UA_Client_Subscriptions_removeMonitoredItem(client, sub->subscriptionID,
|
|
|
+ mon->monitoredItemId);
|
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
|
return retval;
|
|
|
}
|
|
@@ -70,7 +69,7 @@ UA_Client_Subscriptions_remove(UA_Client *client, UA_UInt32 subscriptionId) {
|
|
|
UA_DeleteSubscriptionsRequest request;
|
|
|
UA_DeleteSubscriptionsRequest_init(&request);
|
|
|
request.subscriptionIdsSize = 1;
|
|
|
- request.subscriptionIds = &sub->SubscriptionID;
|
|
|
+ request.subscriptionIds = &sub->subscriptionID;
|
|
|
UA_DeleteSubscriptionsResponse response = UA_Client_Service_deleteSubscriptions(client, request);
|
|
|
retval = response.responseHeader.serviceResult;
|
|
|
if(retval == UA_STATUSCODE_GOOD && response.resultsSize > 0)
|
|
@@ -80,7 +79,7 @@ UA_Client_Subscriptions_remove(UA_Client *client, UA_UInt32 subscriptionId) {
|
|
|
if(retval != UA_STATUSCODE_GOOD && retval != UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID) {
|
|
|
UA_LOG_INFO(client->config.logger, UA_LOGCATEGORY_CLIENT,
|
|
|
"Could not remove subscription %u with statuscode 0x%08x",
|
|
|
- sub->SubscriptionID, retval);
|
|
|
+ sub->subscriptionID, retval);
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
@@ -92,7 +91,7 @@ void
|
|
|
UA_Client_Subscriptions_forceDelete(UA_Client *client,
|
|
|
UA_Client_Subscription *sub) {
|
|
|
UA_Client_MonitoredItem *mon, *mon_tmp;
|
|
|
- LIST_FOREACH_SAFE(mon, &sub->MonitoredItems, listEntry, mon_tmp) {
|
|
|
+ LIST_FOREACH_SAFE(mon, &sub->monitoredItems, listEntry, mon_tmp) {
|
|
|
UA_NodeId_deleteMembers(&mon->monitoredNodeId);
|
|
|
LIST_REMOVE(mon, listEntry);
|
|
|
UA_free(mon);
|
|
@@ -108,7 +107,7 @@ UA_Client_Subscriptions_addMonitoredItem(UA_Client *client, UA_UInt32 subscripti
|
|
|
void *hfContext, UA_UInt32 *newMonitoredItemId) {
|
|
|
UA_Client_Subscription *sub;
|
|
|
LIST_FOREACH(sub, &client->subscriptions, listEntry) {
|
|
|
- if(sub->SubscriptionID == subscriptionId)
|
|
|
+ if(sub->subscriptionID == subscriptionId)
|
|
|
break;
|
|
|
}
|
|
|
if(!sub)
|
|
@@ -124,7 +123,7 @@ UA_Client_Subscriptions_addMonitoredItem(UA_Client *client, UA_UInt32 subscripti
|
|
|
item.itemToMonitor.attributeId = attributeID;
|
|
|
item.monitoringMode = UA_MONITORINGMODE_REPORTING;
|
|
|
item.requestedParameters.clientHandle = ++(client->monitoredItemHandles);
|
|
|
- item.requestedParameters.samplingInterval = sub->PublishingInterval;
|
|
|
+ item.requestedParameters.samplingInterval = sub->publishingInterval;
|
|
|
item.requestedParameters.discardOldest = true;
|
|
|
item.requestedParameters.queueSize = 1;
|
|
|
request.itemsToCreate = &item;
|
|
@@ -144,18 +143,18 @@ UA_Client_Subscriptions_addMonitoredItem(UA_Client *client, UA_UInt32 subscripti
|
|
|
|
|
|
/* Create the handler */
|
|
|
UA_Client_MonitoredItem *newMon = UA_malloc(sizeof(UA_Client_MonitoredItem));
|
|
|
- newMon->MonitoringMode = UA_MONITORINGMODE_REPORTING;
|
|
|
+ newMon->monitoringMode = UA_MONITORINGMODE_REPORTING;
|
|
|
UA_NodeId_copy(&nodeId, &newMon->monitoredNodeId);
|
|
|
- newMon->AttributeID = attributeID;
|
|
|
- newMon->ClientHandle = client->monitoredItemHandles;
|
|
|
- newMon->SamplingInterval = sub->PublishingInterval;
|
|
|
- newMon->QueueSize = 1;
|
|
|
- newMon->DiscardOldest = true;
|
|
|
+ newMon->attributeID = attributeID;
|
|
|
+ newMon->clientHandle = client->monitoredItemHandles;
|
|
|
+ newMon->samplingInterval = sub->publishingInterval;
|
|
|
+ newMon->queueSize = 1;
|
|
|
+ newMon->discardOldest = true;
|
|
|
newMon->handler = hf;
|
|
|
newMon->handlerContext = hfContext;
|
|
|
- newMon->MonitoredItemId = response.results[0].monitoredItemId;
|
|
|
- LIST_INSERT_HEAD(&sub->MonitoredItems, newMon, listEntry);
|
|
|
- *newMonitoredItemId = newMon->MonitoredItemId;
|
|
|
+ newMon->monitoredItemId = response.results[0].monitoredItemId;
|
|
|
+ LIST_INSERT_HEAD(&sub->monitoredItems, newMon, listEntry);
|
|
|
+ *newMonitoredItemId = newMon->monitoredItemId;
|
|
|
|
|
|
UA_LOG_DEBUG(client->config.logger, UA_LOGCATEGORY_CLIENT,
|
|
|
"Created a monitored item with client handle %u", client->monitoredItemHandles);
|
|
@@ -169,15 +168,15 @@ UA_Client_Subscriptions_removeMonitoredItem(UA_Client *client, UA_UInt32 subscri
|
|
|
UA_UInt32 monitoredItemId) {
|
|
|
UA_Client_Subscription *sub;
|
|
|
LIST_FOREACH(sub, &client->subscriptions, listEntry) {
|
|
|
- if(sub->SubscriptionID == subscriptionId)
|
|
|
+ if(sub->subscriptionID == subscriptionId)
|
|
|
break;
|
|
|
}
|
|
|
if(!sub)
|
|
|
return UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
|
|
|
|
|
|
UA_Client_MonitoredItem *mon;
|
|
|
- LIST_FOREACH(mon, &sub->MonitoredItems, listEntry) {
|
|
|
- if(mon->MonitoredItemId == monitoredItemId)
|
|
|
+ LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
|
|
|
+ if(mon->monitoredItemId == monitoredItemId)
|
|
|
break;
|
|
|
}
|
|
|
if(!mon)
|
|
@@ -186,9 +185,9 @@ UA_Client_Subscriptions_removeMonitoredItem(UA_Client *client, UA_UInt32 subscri
|
|
|
/* remove the monitoreditem remotely */
|
|
|
UA_DeleteMonitoredItemsRequest request;
|
|
|
UA_DeleteMonitoredItemsRequest_init(&request);
|
|
|
- request.subscriptionId = sub->SubscriptionID;
|
|
|
+ request.subscriptionId = sub->subscriptionID;
|
|
|
request.monitoredItemIdsSize = 1;
|
|
|
- request.monitoredItemIds = &mon->MonitoredItemId;
|
|
|
+ request.monitoredItemIds = &mon->monitoredItemId;
|
|
|
UA_DeleteMonitoredItemsResponse response = UA_Client_Service_deleteMonitoredItems(client, request);
|
|
|
|
|
|
UA_StatusCode retval = response.responseHeader.serviceResult;
|
|
@@ -218,7 +217,7 @@ UA_Client_processPublishResponse(UA_Client *client, UA_PublishRequest *request,
|
|
|
/* Find the subscription */
|
|
|
UA_Client_Subscription *sub;
|
|
|
LIST_FOREACH(sub, &client->subscriptions, listEntry) {
|
|
|
- if(sub->SubscriptionID == response->subscriptionId)
|
|
|
+ if(sub->subscriptionID == response->subscriptionId)
|
|
|
break;
|
|
|
}
|
|
|
if(!sub)
|
|
@@ -263,23 +262,23 @@ UA_Client_processPublishResponse(UA_Client *client, UA_PublishRequest *request,
|
|
|
for(size_t j = 0; j < dataChangeNotification->monitoredItemsSize; ++j) {
|
|
|
UA_MonitoredItemNotification *mitemNot = &dataChangeNotification->monitoredItems[j];
|
|
|
UA_Client_MonitoredItem *mon;
|
|
|
- LIST_FOREACH(mon, &sub->MonitoredItems, listEntry) {
|
|
|
- if(mon->ClientHandle == mitemNot->clientHandle) {
|
|
|
- mon->handler(mon->MonitoredItemId, &mitemNot->value, mon->handlerContext);
|
|
|
+ LIST_FOREACH(mon, &sub->monitoredItems, listEntry) {
|
|
|
+ if(mon->clientHandle == mitemNot->clientHandle) {
|
|
|
+ mon->handler(mon->monitoredItemId, &mitemNot->value, mon->handlerContext);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if(!mon)
|
|
|
UA_LOG_DEBUG(client->config.logger, UA_LOGCATEGORY_CLIENT,
|
|
|
"Could not process a notification with clienthandle %u on subscription %u",
|
|
|
- mitemNot->clientHandle, sub->SubscriptionID);
|
|
|
+ mitemNot->clientHandle, sub->subscriptionID);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* Add to the list of pending acks */
|
|
|
UA_Client_NotificationsAckNumber *tmpAck = UA_malloc(sizeof(UA_Client_NotificationsAckNumber));
|
|
|
tmpAck->subAck.sequenceNumber = msg->sequenceNumber;
|
|
|
- tmpAck->subAck.subscriptionId = sub->SubscriptionID;
|
|
|
+ tmpAck->subAck.subscriptionId = sub->subscriptionID;
|
|
|
LIST_INSERT_HEAD(&client->pendingNotificationsAcks, tmpAck, listEntry);
|
|
|
}
|
|
|
|