ua_subscription_manager.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifdef ENABLE_SUBSCRIPTIONS
  2. #ifndef UA_SUBSCRIPTION_MANAGER_H_
  3. #define UA_SUBSCRIPTION_MANAGER_H_
  4. #include "ua_server.h"
  5. #include "ua_types.h"
  6. #include "queue.h"
  7. #include "ua_nodestore.h"
  8. #define LIST_INITENTRY(item,entry) { \
  9. (item)->entry.le_next = NULL; \
  10. (item)->entry.le_prev = NULL; \
  11. };
  12. #define INITPOINTER(src) { \
  13. (src)=NULL; \
  14. }
  15. #define ISNOTZERO(value) ((value == 0) ? 0 : 1)
  16. typedef struct {
  17. UA_Int32 currentValue;
  18. UA_Int32 minValue;
  19. UA_Int32 maxValue;
  20. } UA_Int32_BoundedValue;
  21. typedef struct {
  22. UA_UInt32 currentValue;
  23. UA_UInt32 minValue;
  24. UA_UInt32 maxValue;
  25. } UA_UInt32_BoundedValue;
  26. typedef enum MONITOREITEM_TYPE_ENUM {MONITOREDITEM_CHANGENOTIFY_T=1, MONITOREDITEM_STATUSNOTIFY_T=2, MONITOREDITEM_EVENTNOTIFY_T=4 } MONITOREITEM_TYPE;
  27. typedef struct MonitoredItem_queuedValue_s {
  28. UA_Variant value;
  29. LIST_ENTRY(MonitoredItem_queuedValue_s) listEntry;
  30. } MonitoredItem_queuedValue;
  31. typedef LIST_HEAD(UA_ListOfQueuedDataValues_s, MonitoredItem_queuedValue_s) UA_ListOfQueuedDataValues;
  32. typedef struct UA_MonitoredItem_s {
  33. UA_UInt32 ItemId;
  34. MONITOREITEM_TYPE MonitoredItemType;
  35. UA_UInt32 TimestampsToReturn;
  36. UA_UInt32 MonitoringMode;
  37. const UA_Node *monitoredNode; // Pointer to a node of any type
  38. UA_UInt32 AttributeID;
  39. UA_UInt32 ClientHandle;
  40. UA_UInt32 SamplingInterval;
  41. UA_UInt32_BoundedValue QueueSize;
  42. UA_Boolean DiscardOldest;
  43. UA_DateTime LastSampled;
  44. UA_ByteString LastSampledValue;
  45. // FIXME: indexRange is ignored; array values default to element 0
  46. // FIXME: dataEncoding is hardcoded to UA binary
  47. LIST_ENTRY(UA_MonitoredItem_s) listEntry;
  48. UA_ListOfQueuedDataValues *queue;
  49. } UA_MonitoredItem;
  50. typedef struct UA_unpublishedNotification_s {
  51. UA_NotificationMessage *notification;
  52. LIST_ENTRY(UA_unpublishedNotification_s) listEntry;
  53. } UA_unpublishedNotification;
  54. typedef LIST_HEAD(UA_ListOfUAMonitoredItems_s, UA_MonitoredItem_s) UA_ListOfUAMonitoredItems;
  55. typedef LIST_HEAD(UA_ListOfUnpublishedNotifications_s, UA_unpublishedNotification_s) UA_ListOfUnpublishedNotifications;
  56. typedef struct UA_Subscription_s {
  57. UA_UInt32_BoundedValue LifeTime;
  58. UA_Int32_BoundedValue KeepAliveCount;
  59. UA_DateTime PublishingInterval;
  60. UA_DateTime LastPublished;
  61. UA_Int32 SubscriptionID;
  62. UA_Int32 NotificationsPerPublish;
  63. UA_Boolean PublishingMode;
  64. UA_UInt32 Priority;
  65. UA_UInt32 SequenceNumber;
  66. LIST_ENTRY(UA_Subscription_s) listEntry;
  67. UA_ListOfUnpublishedNotifications *unpublishedNotifications;
  68. UA_ListOfUAMonitoredItems *MonitoredItems;
  69. } UA_Subscription;
  70. typedef LIST_HEAD(UA_ListOfUASubscriptions_s, UA_Subscription_s) UA_ListOfUASubscriptions;
  71. typedef struct UA_SubscriptionManager_s {
  72. UA_Int32_BoundedValue GlobalPublishingInterval;
  73. UA_UInt32_BoundedValue GlobalLifeTimeCount;
  74. UA_UInt32_BoundedValue GlobalKeepAliveCount;
  75. UA_Int32_BoundedValue GlobalNotificationsPerPublish;
  76. UA_UInt32_BoundedValue GlobalSamplingInterval;
  77. UA_UInt32_BoundedValue GlobalQueueSize;
  78. UA_Int32 LastSessionID;
  79. UA_ListOfUASubscriptions *ServerSubscriptions;
  80. } UA_SubscriptionManager;
  81. void SubscriptionManager_init(UA_Session *session);
  82. void SubscriptionManager_deleteMembers(UA_Session *session);
  83. void SubscriptionManager_addSubscription(UA_SubscriptionManager *manager, UA_Subscription *subscription);
  84. UA_Subscription *SubscriptionManager_getSubscriptionByID(UA_SubscriptionManager *manager, UA_Int32 SubscriptionID);
  85. UA_Int32 SubscriptionManager_deleteSubscription(UA_SubscriptionManager *manager, UA_Int32 SubscriptionID);
  86. UA_Int32 SubscriptionManager_deleteMonitoredItem(UA_SubscriptionManager *manager, UA_Int32 SubscriptionID, UA_UInt32 MonitoredItemID);
  87. UA_Subscription *UA_Subscription_new(UA_Int32 SubscriptionID);
  88. void Subscription_updateNotifications(UA_Subscription *subscription);
  89. UA_UInt32 Subscription_queuedNotifications(UA_Subscription *subscription);
  90. UA_UInt32 *Subscription_getAvailableSequenceNumbers(UA_Subscription *sub);
  91. void Subscription_copyTopNotificationMessage(UA_NotificationMessage *dst, UA_Subscription *sub);
  92. UA_UInt32 Subscription_deleteUnpublishedNotification(UA_UInt32 seqNo, UA_Subscription *sub);
  93. void Subscription_generateKeepAlive(UA_Subscription *subscription);
  94. UA_MonitoredItem *UA_MonitoredItem_new(void);
  95. void MonitoredItem_delete(UA_MonitoredItem *monitoredItem);
  96. void MonitoredItem_QueuePushDataValue(UA_MonitoredItem *monitoredItem);
  97. void MonitoredItem_ClearQueue(UA_MonitoredItem *monitoredItem);
  98. UA_Boolean MonitoredItem_CopyMonitoredValueToVariant(UA_UInt32 AttributeID, const UA_Node *src, UA_Variant *dst);
  99. int MonitoredItem_QueueToDataChangeNotifications(UA_MonitoredItemNotification *dst, UA_MonitoredItem *monitoredItem);
  100. #endif // ifndef... define UA_SUBSCRIPTION_MANAGER_H_
  101. #endif // ifdef EnableSubscriptions ...