Coverage Report

Created: 2026-04-06 06:51

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/S2OPC/src/ClientServer/services/bgenc/subscription_mgr.c
Line
Count
Source
1
/*
2
 * Licensed to Systerel under one or more contributor license
3
 * agreements. See the NOTICE file distributed with this work
4
 * for additional information regarding copyright ownership.
5
 * Systerel licenses this file to you under the Apache
6
 * License, Version 2.0 (the "License"); you may not use this
7
 * file except in compliance with the License. You may obtain
8
 * a copy of the License at
9
 *
10
 *   http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing,
13
 * software distributed under the License is distributed on an
14
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
 * KIND, either express or implied.  See the License for the
16
 * specific language governing permissions and limitations
17
 * under the License.
18
 */
19
20
/******************************************************************************
21
22
 File Name            : subscription_mgr.c
23
24
 Date                 : 03/03/2026 16:24:20
25
26
 C Translator Version : tradc Java V1.2 (06/02/2022)
27
28
******************************************************************************/
29
30
/*------------------------
31
   Exported Declarations
32
  ------------------------*/
33
#include "subscription_mgr.h"
34
35
/*------------------------
36
   INITIALISATION Clause
37
  ------------------------*/
38
0
void subscription_mgr__INITIALISATION(void) {
39
0
}
40
41
/*--------------------
42
   OPERATIONS Clause
43
  --------------------*/
44
void subscription_mgr__fill_publish_response_msg(
45
   const constants__t_msg_i subscription_mgr__p_resp_msg,
46
   const constants__t_subscription_i subscription_mgr__p_subscription,
47
0
   const t_bool subscription_mgr__p_moreNotifs) {
48
0
   {
49
0
      constants__t_notifRepublishQueue_i subscription_mgr__l_republishQueue;
50
0
      t_entier4 subscription_mgr__l_nb_seq_nums;
51
0
      t_bool subscription_mgr__l_bres;
52
      
53
0
      subscription_core__get_subscription_notifRepublishQueue(subscription_mgr__p_subscription,
54
0
         &subscription_mgr__l_republishQueue);
55
0
      subscription_core__get_available_republish(subscription_mgr__l_republishQueue,
56
0
         &subscription_mgr__l_nb_seq_nums);
57
0
      if (subscription_mgr__l_nb_seq_nums > 0) {
58
0
         msg_subscription_publish_ack_bs__allocate_subscription_available_seq_nums(subscription_mgr__p_resp_msg,
59
0
            subscription_mgr__l_nb_seq_nums,
60
0
            &subscription_mgr__l_bres);
61
0
         if (subscription_mgr__l_bres == true) {
62
0
            subscription_mgr__fill_publish_response_msg_available_seq_nums(subscription_mgr__p_resp_msg,
63
0
               subscription_mgr__l_republishQueue,
64
0
               subscription_mgr__l_nb_seq_nums);
65
0
         }
66
0
      }
67
0
      subscription_core__set_msg_publish_resp_subscription(subscription_mgr__p_resp_msg,
68
0
         subscription_mgr__p_subscription);
69
0
      subscription_core__set_msg_publish_resp_notificationMsg(subscription_mgr__p_resp_msg,
70
0
         subscription_mgr__p_moreNotifs);
71
0
   }
72
0
}
73
74
void subscription_mgr__fill_publish_response_msg_ack_results(
75
   const constants__t_session_i subscription_mgr__p_session,
76
   const constants__t_msg_i subscription_mgr__p_req_msg,
77
   const constants__t_msg_i subscription_mgr__p_resp_msg,
78
0
   const t_entier4 subscription_mgr__p_nb_acks) {
79
0
   {
80
0
      t_bool subscription_mgr__l_is_valid;
81
0
      t_entier4 subscription_mgr__l_index;
82
0
      constants__t_subscription_i subscription_mgr__l_sub;
83
0
      constants__t_sub_seq_num_i subscription_mgr__l_seq_num;
84
0
      t_bool subscription_mgr__l_valid_seq_num;
85
      
86
0
      subscription_mgr__l_index = 1;
87
0
      while (subscription_mgr__l_index <= subscription_mgr__p_nb_acks) {
88
0
         msg_subscription_publish_ack_bs__getall_msg_publish_request_ack(subscription_mgr__p_req_msg,
89
0
            subscription_mgr__l_index,
90
0
            &subscription_mgr__l_sub,
91
0
            &subscription_mgr__l_seq_num);
92
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
93
0
            subscription_mgr__l_sub,
94
0
            &subscription_mgr__l_is_valid);
95
0
         if (subscription_mgr__l_is_valid == true) {
96
0
            subscription_core__subscription_ack_notif_msg(subscription_mgr__l_sub,
97
0
               subscription_mgr__l_seq_num,
98
0
               &subscription_mgr__l_valid_seq_num);
99
0
            if (subscription_mgr__l_valid_seq_num == true) {
100
0
               msg_subscription_publish_ack_bs__setall_msg_publish_resp_ack_result(subscription_mgr__p_resp_msg,
101
0
                  subscription_mgr__l_index,
102
0
                  constants_statuscodes_bs__e_sc_ok);
103
0
            }
104
0
            else {
105
0
               msg_subscription_publish_ack_bs__setall_msg_publish_resp_ack_result(subscription_mgr__p_resp_msg,
106
0
                  subscription_mgr__l_index,
107
0
                  constants_statuscodes_bs__e_sc_bad_sequence_number_unknown);
108
0
            }
109
0
         }
110
0
         else {
111
0
            msg_subscription_publish_ack_bs__setall_msg_publish_resp_ack_result(subscription_mgr__p_resp_msg,
112
0
               subscription_mgr__l_index,
113
0
               constants_statuscodes_bs__e_sc_bad_subscription_id_invalid);
114
0
         }
115
0
         subscription_mgr__l_index = subscription_mgr__l_index +
116
0
            1;
117
0
      }
118
0
   }
119
0
}
120
121
void subscription_mgr__fill_publish_response_msg_available_seq_nums(
122
   const constants__t_msg_i subscription_mgr__p_resp_msg,
123
   const constants__t_notifRepublishQueue_i subscription_mgr__republishQueue,
124
0
   const t_entier4 subscription_mgr__nb_seq_nums) {
125
0
   {
126
0
      t_bool subscription_mgr__l_continue;
127
0
      constants__t_notifRepublishQueueIterator_i subscription_mgr__l_republishIterator;
128
0
      t_entier4 subscription_mgr__l_index;
129
0
      constants__t_sub_seq_num_i subscription_mgr__l_seq_num;
130
      
131
0
      subscription_mgr__l_index = 1;
132
0
      subscription_core__init_iter_notif_republish(subscription_mgr__republishQueue,
133
0
         &subscription_mgr__l_continue,
134
0
         &subscription_mgr__l_republishIterator);
135
0
      while ((subscription_mgr__l_continue == true) &&
136
0
         (subscription_mgr__l_index <= subscription_mgr__nb_seq_nums)) {
137
0
         subscription_core__continue_iter_notif_republish(subscription_mgr__republishQueue,
138
0
            subscription_mgr__l_republishIterator,
139
0
            &subscription_mgr__l_continue,
140
0
            &subscription_mgr__l_seq_num);
141
0
         msg_subscription_publish_ack_bs__setall_msg_publish_resp_available_seq_num(subscription_mgr__p_resp_msg,
142
0
            subscription_mgr__l_index,
143
0
            subscription_mgr__l_seq_num);
144
0
         subscription_mgr__l_index = subscription_mgr__l_index +
145
0
            1;
146
0
      }
147
0
      subscription_core__clear_notif_republish_iterator(subscription_mgr__republishQueue,
148
0
         subscription_mgr__l_republishIterator);
149
0
   }
150
0
}
151
152
void subscription_mgr__local_treat_create_monitored_item_index(
153
   const constants__t_session_i subscription_mgr__p_session,
154
   const constants__t_subscription_i subscription_mgr__p_subscription,
155
   const constants__t_TimestampsToReturn_i subscription_mgr__p_tsToReturn,
156
   const constants__t_user_i subscription_mgr__p_user,
157
   const constants__t_LocaleIds_i subscription_mgr__p_locales,
158
   const constants__t_msg_i subscription_mgr__p_req_msg,
159
   const constants__t_msg_i subscription_mgr__p_resp_msg,
160
0
   const t_entier4 subscription_mgr__p_index) {
161
0
   {
162
0
      t_bool subscription_mgr__l_bres;
163
0
      constants__t_NodeId_i subscription_mgr__l_nid;
164
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
165
0
      constants__t_monitoringMode_i subscription_mgr__l_monitMode;
166
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
167
0
      constants__t_opcua_duration_i subscription_mgr__l_samplingItv;
168
0
      constants__t_monitoringFilter_i subscription_mgr__l_filter;
169
0
      t_bool subscription_mgr__l_discardOldest;
170
0
      t_entier4 subscription_mgr__l_queueSize;
171
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
172
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
173
0
      constants__t_opcua_duration_i subscription_mgr__l_revSamplingItv;
174
0
      t_entier4 subscription_mgr__l_revQueueSize;
175
0
      constants__t_IndexRange_i subscription_mgr__l_indexRange;
176
0
      constants__t_endpoint_config_idx_i subscription_mgr__l_endpoint_config_idx;
177
0
      t_bool subscription_mgr__l_bres_presentNode;
178
0
      constants__t_Node_i subscription_mgr__l_node;
179
0
      t_bool subscription_mgr__l_bres_absent_knownNode;
180
0
      constants__t_NodeClass_i subscription_mgr__l_knownNodeClass;
181
0
      constants__t_Variant_i subscription_mgr__l_value;
182
0
      constants__t_RawStatusCode subscription_mgr__l_valueSc;
183
0
      constants__t_Timestamp subscription_mgr__l_val_ts_src;
184
0
      constants__t_Timestamp subscription_mgr__l_val_ts_srv;
185
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
186
0
      constants__t_filterResult_i subscription_mgr__l_filterResult;
187
      
188
0
      subscription_mgr__l_monitoredItemId = constants__c_monitoredItemId_indet;
189
0
      subscription_mgr__l_revSamplingItv = constants__c_opcua_duration_indet;
190
0
      subscription_mgr__l_revQueueSize = 0;
191
0
      subscription_mgr__l_node = constants__c_Node_indet;
192
0
      subscription_mgr__l_value = constants__c_Variant_indet;
193
0
      subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_unexpected_error;
194
0
      subscription_mgr__l_filterResult = constants__c_filterResult_indet;
195
0
      session_mgr__session_get_endpoint_config(subscription_mgr__p_session,
196
0
         &subscription_mgr__l_endpoint_config_idx);
197
0
      channel_mgr__is_valid_endpoint_config_idx(subscription_mgr__l_endpoint_config_idx,
198
0
         &subscription_mgr__l_bres);
199
0
      if (subscription_mgr__l_bres == true) {
200
0
         msg_subscription_monitored_item__getall_create_monitored_item_req_params(subscription_mgr__p_req_msg,
201
0
            subscription_mgr__p_index,
202
0
            &subscription_mgr__l_bres,
203
0
            &subscription_mgr__l_sc,
204
0
            &subscription_mgr__l_nid,
205
0
            &subscription_mgr__l_aid,
206
0
            &subscription_mgr__l_monitMode,
207
0
            &subscription_mgr__l_clientHandle,
208
0
            &subscription_mgr__l_samplingItv,
209
0
            &subscription_mgr__l_filter,
210
0
            &subscription_mgr__l_discardOldest,
211
0
            &subscription_mgr__l_queueSize,
212
0
            &subscription_mgr__l_indexRange);
213
0
         if (subscription_mgr__l_bres == true) {
214
0
            address_space_itf__readall_AddressSpace_Node(subscription_mgr__l_nid,
215
0
               &subscription_mgr__l_bres_presentNode,
216
0
               &subscription_mgr__l_node);
217
0
            subscription_absent_node__if_not_present_is_Node_known(subscription_mgr__l_bres_presentNode,
218
0
               subscription_mgr__l_endpoint_config_idx,
219
0
               subscription_mgr__l_nid,
220
0
               &subscription_mgr__l_bres_absent_knownNode,
221
0
               &subscription_mgr__l_knownNodeClass,
222
0
               &subscription_mgr__l_valueSc);
223
0
            if ((subscription_mgr__l_bres_presentNode == false) &&
224
0
               (subscription_mgr__l_bres_absent_knownNode == false)) {
225
0
               subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
226
0
            }
227
0
            else {
228
0
               if (subscription_mgr__l_bres_presentNode == true) {
229
0
                  address_space_itf__read_Node_Attribute(subscription_mgr__p_user,
230
0
                     subscription_mgr__p_locales,
231
0
                     subscription_mgr__l_node,
232
0
                     subscription_mgr__l_nid,
233
0
                     subscription_mgr__l_aid,
234
0
                     subscription_mgr__l_indexRange,
235
0
                     &subscription_mgr__l_sc,
236
0
                     &subscription_mgr__l_value,
237
0
                     &subscription_mgr__l_valueSc,
238
0
                     &subscription_mgr__l_val_ts_src,
239
0
                     &subscription_mgr__l_val_ts_srv);
240
0
               }
241
0
               else {
242
0
                  subscription_absent_node__eval_knownNode_requested_properties(subscription_mgr__l_nid,
243
0
                     subscription_mgr__l_knownNodeClass,
244
0
                     subscription_mgr__l_aid,
245
0
                     subscription_mgr__l_indexRange,
246
0
                     &subscription_mgr__l_sc,
247
0
                     &subscription_mgr__l_value,
248
0
                     &subscription_mgr__l_val_ts_src,
249
0
                     &subscription_mgr__l_val_ts_srv);
250
0
               }
251
0
               if ((subscription_mgr__l_sc != constants_statuscodes_bs__e_sc_ok) &&
252
0
                  (((subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_not_readable) ||
253
0
                  (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_user_access_denied)) ||
254
0
                  (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_index_range_no_data))) {
255
0
                  constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
256
0
                     &subscription_mgr__l_valueSc);
257
0
                  subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_ok;
258
0
               }
259
0
               if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
260
0
                  subscription_core__compute_create_monitored_item_revised_params(subscription_mgr__l_aid,
261
0
                     subscription_mgr__l_queueSize,
262
0
                     &subscription_mgr__l_revSamplingItv,
263
0
                     &subscription_mgr__l_revQueueSize);
264
0
                  subscription_core__create_monitored_item(subscription_mgr__p_subscription,
265
0
                     subscription_mgr__l_nid,
266
0
                     subscription_mgr__l_aid,
267
0
                     subscription_mgr__l_indexRange,
268
0
                     subscription_mgr__l_value,
269
0
                     subscription_mgr__l_valueSc,
270
0
                     subscription_mgr__l_val_ts_src,
271
0
                     subscription_mgr__l_val_ts_srv,
272
0
                     subscription_mgr__p_tsToReturn,
273
0
                     subscription_mgr__l_monitMode,
274
0
                     subscription_mgr__l_clientHandle,
275
0
                     subscription_mgr__l_filter,
276
0
                     subscription_mgr__l_discardOldest,
277
0
                     subscription_mgr__l_revQueueSize,
278
0
                     &subscription_mgr__l_sc,
279
0
                     &subscription_mgr__l_monitoredItemPointer,
280
0
                     &subscription_mgr__l_monitoredItemId,
281
0
                     &subscription_mgr__l_filterResult);
282
0
                  address_space_itf__read_AddressSpace_free_variant(subscription_mgr__l_value);
283
0
               }
284
0
            }
285
0
         }
286
0
      }
287
0
      msg_subscription_monitored_item__setall_msg_create_monitored_item_resp_params(subscription_mgr__p_resp_msg,
288
0
         subscription_mgr__p_index,
289
0
         subscription_mgr__l_sc,
290
0
         subscription_mgr__l_monitoredItemId,
291
0
         subscription_mgr__l_revSamplingItv,
292
0
         subscription_mgr__l_revQueueSize,
293
0
         subscription_mgr__l_filterResult);
294
0
   }
295
0
}
296
297
void subscription_mgr__local_treat_create_monitored_items(
298
   const constants__t_session_i subscription_mgr__p_session,
299
   const constants__t_subscription_i subscription_mgr__p_subscription,
300
   const constants__t_TimestampsToReturn_i subscription_mgr__p_tsToReturn,
301
   const constants__t_user_i subscription_mgr__p_user,
302
   const constants__t_LocaleIds_i subscription_mgr__p_locales,
303
   const constants__t_msg_i subscription_mgr__p_req_msg,
304
   const constants__t_msg_i subscription_mgr__p_resp_msg,
305
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
306
0
   {
307
0
      t_bool subscription_mgr__l_continue;
308
0
      t_entier4 subscription_mgr__l_index;
309
      
310
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
311
0
         &subscription_mgr__l_continue);
312
0
      while (subscription_mgr__l_continue == true) {
313
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
314
0
            &subscription_mgr__l_index);
315
0
         subscription_mgr__local_treat_create_monitored_item_index(subscription_mgr__p_session,
316
0
            subscription_mgr__p_subscription,
317
0
            subscription_mgr__p_tsToReturn,
318
0
            subscription_mgr__p_user,
319
0
            subscription_mgr__p_locales,
320
0
            subscription_mgr__p_req_msg,
321
0
            subscription_mgr__p_resp_msg,
322
0
            subscription_mgr__l_index);
323
0
      }
324
0
   }
325
0
}
326
327
void subscription_mgr__local_check_filtered_subscription_and_monitored_item(
328
   const constants__t_session_i subscription_mgr__p_opt_session_to_filter,
329
   const constants__t_subscription_i subscription_mgr__p_opt_sub_to_filter,
330
   const constants__t_monitoredItemId_i subscription_mgr__p_opt_mi_to_fitler,
331
   const constants__t_session_i subscription_mgr__p_session,
332
   const constants__t_subscription_i subscription_mgr__p_sub,
333
   const constants__t_monitoredItemId_i subscription_mgr__p_mi,
334
0
   t_bool * const subscription_mgr__bres) {
335
0
   *subscription_mgr__bres = ((((subscription_mgr__p_opt_session_to_filter == constants__c_session_indet) ||
336
0
      (subscription_mgr__p_opt_session_to_filter == subscription_mgr__p_session)) &&
337
0
      ((subscription_mgr__p_opt_sub_to_filter == constants__c_subscription_indet) ||
338
0
      (subscription_mgr__p_opt_sub_to_filter == subscription_mgr__p_sub))) &&
339
0
      ((subscription_mgr__p_opt_mi_to_fitler == constants__c_monitoredItemId_indet) ||
340
0
      (subscription_mgr__p_opt_mi_to_fitler == subscription_mgr__p_mi)));
341
0
}
342
343
void subscription_mgr__local_create_notification_on_monitored_item_if_event_selected(
344
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
345
   const constants__t_Event_i subscription_mgr__p_event,
346
   const constants__t_session_i subscription_mgr__p_session,
347
   const constants__t_subscription_i subscription_mgr__p_sub_id,
348
0
   const constants__t_monitoredItemId_i subscription_mgr__p_mi_id) {
349
0
   {
350
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
351
0
      constants__t_subscription_i subscription_mgr__l_subscription;
352
0
      t_bool subscription_mgr__l_valid_subscription;
353
0
      t_bool subscription_mgr__l_filter_sub_and_mi;
354
0
      constants__t_session_i subscription_mgr__l_session;
355
0
      t_bool subscription_mgr__l_session_valid;
356
0
      constants__t_user_i subscription_mgr__l_user;
357
0
      constants__t_ApplicationDescription_i subscription_mgr__l_client_app_desc;
358
0
      constants__t_CertThumbprint_i subscription_mgr__l_client_cert_tb;
359
0
      constants__t_SessionName_i subscription_mgr__l_session_name;
360
0
      t_bool subscription_mgr__l_valid_user_access;
361
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
362
0
      constants__t_NodeId_i subscription_mgr__l_nid;
363
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
364
0
      constants__t_IndexRange_i subscription_mgr__l_indexRange;
365
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToReturn;
366
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoringMode;
367
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
368
0
      constants__t_sessionRoles_i subscription_mgr__l_roles;
369
      
370
0
      subscription_core__getall_monitoredItemPointer(subscription_mgr__p_monitoredItemPointer,
371
0
         &subscription_mgr__l_monitoredItemId,
372
0
         &subscription_mgr__l_subscription,
373
0
         &subscription_mgr__l_nid,
374
0
         &subscription_mgr__l_aid,
375
0
         &subscription_mgr__l_indexRange,
376
0
         &subscription_mgr__l_timestampToReturn,
377
0
         &subscription_mgr__l_monitoringMode,
378
0
         &subscription_mgr__l_clientHandle);
379
0
      subscription_core__is_valid_subscription(subscription_mgr__l_subscription,
380
0
         &subscription_mgr__l_valid_subscription);
381
0
      subscription_mgr__l_session = constants__c_session_indet;
382
0
      if (subscription_mgr__l_valid_subscription == true) {
383
0
         subscription_core__getall_session(subscription_mgr__l_subscription,
384
0
            &subscription_mgr__l_session);
385
0
      }
386
0
      subscription_mgr__local_check_filtered_subscription_and_monitored_item(subscription_mgr__p_session,
387
0
         subscription_mgr__p_sub_id,
388
0
         subscription_mgr__p_mi_id,
389
0
         subscription_mgr__l_session,
390
0
         subscription_mgr__l_subscription,
391
0
         subscription_mgr__l_monitoredItemId,
392
0
         &subscription_mgr__l_filter_sub_and_mi);
393
0
      session_mgr__is_valid_session(subscription_mgr__l_session,
394
0
         &subscription_mgr__l_session_valid);
395
0
      subscription_mgr__l_valid_user_access = false;
396
0
      subscription_mgr__l_locales = constants__c_LocaleIds_empty;
397
0
      if (((subscription_mgr__l_session_valid == true) &&
398
0
         (subscription_mgr__l_filter_sub_and_mi == true)) &&
399
0
         (subscription_mgr__l_aid == constants__e_aid_EventNotifier)) {
400
0
         session_mgr__get_session_user_server(subscription_mgr__l_session,
401
0
            &subscription_mgr__l_user);
402
0
         session_mgr__get_session_roles(subscription_mgr__l_session,
403
0
            &subscription_mgr__l_roles);
404
0
         session_mgr__get_server_session_preferred_locales(subscription_mgr__l_session,
405
0
            &subscription_mgr__l_locales);
406
0
         session_mgr__get_server_session_client_app_desc(subscription_mgr__l_session,
407
0
            &subscription_mgr__l_client_app_desc);
408
0
         session_mgr__get_server_session_client_cert_tb(subscription_mgr__l_session,
409
0
            &subscription_mgr__l_client_cert_tb);
410
0
         session_mgr__get_server_session_name(subscription_mgr__l_session,
411
0
            &subscription_mgr__l_session_name);
412
0
         app_cb_call_context_bs__set_app_call_context_session(subscription_mgr__l_session,
413
0
            subscription_mgr__l_client_app_desc,
414
0
            subscription_mgr__l_client_cert_tb,
415
0
            subscription_mgr__l_session_name,
416
0
            subscription_mgr__l_user);
417
0
         subscription_core__get_event_user_authorization(subscription_mgr__p_event,
418
0
            subscription_mgr__l_user,
419
0
            subscription_mgr__l_roles,
420
0
            &subscription_mgr__l_valid_user_access);
421
0
         app_cb_call_context_bs__clear_app_call_context();
422
0
      }
423
0
      if ((((subscription_mgr__l_session_valid == true) &&
424
0
         (subscription_mgr__l_filter_sub_and_mi == true)) &&
425
0
         (subscription_mgr__l_monitoringMode == constants__e_monitoringMode_reporting)) &&
426
0
         (subscription_mgr__l_aid == constants__e_aid_EventNotifier)) {
427
0
         subscription_core__server_subscription_add_notification_on_event_if_triggered(subscription_mgr__l_valid_user_access,
428
0
            subscription_mgr__l_locales,
429
0
            subscription_mgr__p_monitoredItemPointer,
430
0
            subscription_mgr__l_clientHandle,
431
0
            subscription_mgr__l_timestampToReturn,
432
0
            subscription_mgr__p_event);
433
0
      }
434
0
   }
435
0
}
436
437
void subscription_mgr__local_create_notification_on_monitored_items_if_event_selected(
438
   const constants__t_monitoredItemQueue_i subscription_mgr__p_monitoredItemQueue,
439
   const constants__t_Event_i subscription_mgr__p_event,
440
   const constants__t_session_i subscription_mgr__p_session,
441
   const constants__t_subscription_i subscription_mgr__p_sub_id,
442
0
   const constants__t_monitoredItemId_i subscription_mgr__p_mi_id) {
443
0
   {
444
0
      t_bool subscription_mgr__l_continue;
445
0
      constants__t_monitoredItemQueueIterator_i subscription_mgr__l_iterator;
446
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
447
      
448
0
      subscription_core__init_iter_monitored_item(subscription_mgr__p_monitoredItemQueue,
449
0
         &subscription_mgr__l_continue,
450
0
         &subscription_mgr__l_iterator);
451
0
      while (subscription_mgr__l_continue == true) {
452
0
         subscription_core__continue_iter_monitored_item(subscription_mgr__l_iterator,
453
0
            subscription_mgr__p_monitoredItemQueue,
454
0
            &subscription_mgr__l_continue,
455
0
            &subscription_mgr__l_monitoredItemPointer);
456
0
         subscription_mgr__local_create_notification_on_monitored_item_if_event_selected(subscription_mgr__l_monitoredItemPointer,
457
0
            subscription_mgr__p_event,
458
0
            subscription_mgr__p_session,
459
0
            subscription_mgr__p_sub_id,
460
0
            subscription_mgr__p_mi_id);
461
0
      }
462
0
      subscription_core__clear_iter_monitored_item(subscription_mgr__l_iterator);
463
0
   }
464
0
}
465
466
void subscription_mgr__local_create_notification_on_monitored_items_if_data_changed(
467
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
468
   const constants__t_WriteValuePointer_i subscription_mgr__p_old_wv_pointer,
469
0
   const constants__t_WriteValuePointer_i subscription_mgr__p_new_wv_pointer) {
470
0
   {
471
0
      t_bool subscription_mgr__l_notification_triggered;
472
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
473
0
      constants__t_subscription_i subscription_mgr__l_subscription;
474
0
      t_bool subscription_mgr__l_valid_subscription;
475
0
      constants__t_session_i subscription_mgr__l_session;
476
0
      t_bool subscription_mgr__l_session_valid;
477
0
      constants__t_user_i subscription_mgr__l_user;
478
0
      constants__t_ApplicationDescription_i subscription_mgr__l_client_app_desc;
479
0
      constants__t_CertThumbprint_i subscription_mgr__l_client_cert_tb;
480
0
      constants__t_SessionName_i subscription_mgr__l_session_name;
481
0
      t_bool subscription_mgr__l_valid_user_access;
482
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
483
0
      constants__t_NodeId_i subscription_mgr__l_nid;
484
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
485
0
      constants__t_IndexRange_i subscription_mgr__l_indexRange;
486
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToReturn;
487
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoringMode;
488
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
489
0
      constants__t_sessionRoles_i subscription_mgr__l_roles;
490
      
491
0
      subscription_core__getall_monitoredItemPointer(subscription_mgr__p_monitoredItemPointer,
492
0
         &subscription_mgr__l_monitoredItemId,
493
0
         &subscription_mgr__l_subscription,
494
0
         &subscription_mgr__l_nid,
495
0
         &subscription_mgr__l_aid,
496
0
         &subscription_mgr__l_indexRange,
497
0
         &subscription_mgr__l_timestampToReturn,
498
0
         &subscription_mgr__l_monitoringMode,
499
0
         &subscription_mgr__l_clientHandle);
500
0
      subscription_core__is_valid_subscription(subscription_mgr__l_subscription,
501
0
         &subscription_mgr__l_valid_subscription);
502
0
      subscription_mgr__l_notification_triggered = false;
503
0
      subscription_mgr__l_valid_user_access = false;
504
0
      subscription_mgr__l_locales = constants__c_LocaleIds_empty;
505
0
      if (subscription_mgr__l_valid_subscription == true) {
506
0
         subscription_core__getall_session(subscription_mgr__l_subscription,
507
0
            &subscription_mgr__l_session);
508
0
         session_mgr__is_valid_session(subscription_mgr__l_session,
509
0
            &subscription_mgr__l_session_valid);
510
0
         if (subscription_mgr__l_session_valid == true) {
511
0
            session_mgr__get_session_user_server(subscription_mgr__l_session,
512
0
               &subscription_mgr__l_user);
513
0
            session_mgr__get_server_session_client_app_desc(subscription_mgr__l_session,
514
0
               &subscription_mgr__l_client_app_desc);
515
0
            session_mgr__get_server_session_client_cert_tb(subscription_mgr__l_session,
516
0
               &subscription_mgr__l_client_cert_tb);
517
0
            session_mgr__get_server_session_name(subscription_mgr__l_session,
518
0
               &subscription_mgr__l_session_name);
519
0
            app_cb_call_context_bs__set_app_call_context_session(subscription_mgr__l_session,
520
0
               subscription_mgr__l_client_app_desc,
521
0
               subscription_mgr__l_client_cert_tb,
522
0
               subscription_mgr__l_session_name,
523
0
               subscription_mgr__l_user);
524
0
            session_mgr__get_session_roles(subscription_mgr__l_session,
525
0
               &subscription_mgr__l_roles);
526
0
            address_space_itf__get_user_authorization(constants__e_operation_type_read,
527
0
               subscription_mgr__l_nid,
528
0
               subscription_mgr__l_aid,
529
0
               subscription_mgr__l_user,
530
0
               subscription_mgr__l_roles,
531
0
               &subscription_mgr__l_valid_user_access);
532
0
            session_mgr__get_server_session_preferred_locales(subscription_mgr__l_session,
533
0
               &subscription_mgr__l_locales);
534
0
            app_cb_call_context_bs__clear_app_call_context();
535
0
         }
536
0
      }
537
0
      if (subscription_mgr__l_valid_user_access == true) {
538
0
         subscription_core__is_notification_triggered(subscription_mgr__l_locales,
539
0
            subscription_mgr__p_monitoredItemPointer,
540
0
            subscription_mgr__p_old_wv_pointer,
541
0
            subscription_mgr__p_new_wv_pointer,
542
0
            &subscription_mgr__l_notification_triggered);
543
0
      }
544
0
      if ((subscription_mgr__l_notification_triggered == true) &&
545
0
         (subscription_mgr__l_monitoringMode == constants__e_monitoringMode_reporting)) {
546
0
         subscription_core__server_subscription_add_notification_on_value_change(subscription_mgr__l_locales,
547
0
            subscription_mgr__p_monitoredItemPointer,
548
0
            subscription_mgr__l_timestampToReturn,
549
0
            subscription_mgr__p_new_wv_pointer);
550
0
      }
551
0
   }
552
0
}
553
554
void subscription_mgr__create_notification_on_monitored_items_if_data_changed(
555
   const constants__t_monitoredItemQueue_i subscription_mgr__p_monitoredItemQueue,
556
   const constants__t_WriteValuePointer_i subscription_mgr__p_old_wv_pointer,
557
0
   const constants__t_WriteValuePointer_i subscription_mgr__p_new_wv_pointer) {
558
0
   {
559
0
      t_bool subscription_mgr__l_continue;
560
0
      constants__t_monitoredItemQueueIterator_i subscription_mgr__l_iterator;
561
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
562
      
563
0
      subscription_core__init_iter_monitored_item(subscription_mgr__p_monitoredItemQueue,
564
0
         &subscription_mgr__l_continue,
565
0
         &subscription_mgr__l_iterator);
566
0
      while (subscription_mgr__l_continue == true) {
567
0
         subscription_core__continue_iter_monitored_item(subscription_mgr__l_iterator,
568
0
            subscription_mgr__p_monitoredItemQueue,
569
0
            &subscription_mgr__l_continue,
570
0
            &subscription_mgr__l_monitoredItemPointer);
571
0
         subscription_mgr__local_create_notification_on_monitored_items_if_data_changed(subscription_mgr__l_monitoredItemPointer,
572
0
            subscription_mgr__p_old_wv_pointer,
573
0
            subscription_mgr__p_new_wv_pointer);
574
0
      }
575
0
      subscription_core__clear_iter_monitored_item(subscription_mgr__l_iterator);
576
0
   }
577
0
}
578
579
void subscription_mgr__local_create_notification_if_node_changed_or_monitMode_enabling(
580
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
581
   const t_bool subscription_mgr__p_added_or_monitMode,
582
0
   const t_bool subscription_mgr__p_monitMode_enabling) {
583
0
   {
584
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
585
0
      constants__t_subscription_i subscription_mgr__l_subscription;
586
0
      constants__t_session_i subscription_mgr__l_session;
587
0
      t_bool subscription_mgr__l_session_valid;
588
0
      constants__t_user_i subscription_mgr__l_user;
589
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
590
0
      constants__t_NodeId_i subscription_mgr__l_nid;
591
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
592
0
      constants__t_IndexRange_i subscription_mgr__l_indexRange;
593
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToReturn;
594
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoringMode;
595
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
596
0
      t_bool subscription_mgr__l_valid_subscription;
597
0
      t_bool subscription_mgr__l_bres;
598
0
      constants__t_Node_i subscription_mgr__l_node;
599
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
600
0
      constants__t_Variant_i subscription_mgr__l_value;
601
0
      constants__t_RawStatusCode subscription_mgr__l_valueSc;
602
0
      constants__t_Timestamp subscription_mgr__l_val_ts_src;
603
0
      constants__t_Timestamp subscription_mgr__l_val_ts_srv;
604
      
605
0
      subscription_mgr__l_bres = true;
606
0
      subscription_core__getall_monitoredItemPointer(subscription_mgr__p_monitoredItemPointer,
607
0
         &subscription_mgr__l_monitoredItemId,
608
0
         &subscription_mgr__l_subscription,
609
0
         &subscription_mgr__l_nid,
610
0
         &subscription_mgr__l_aid,
611
0
         &subscription_mgr__l_indexRange,
612
0
         &subscription_mgr__l_timestampToReturn,
613
0
         &subscription_mgr__l_monitoringMode,
614
0
         &subscription_mgr__l_clientHandle);
615
0
      subscription_core__is_valid_subscription(subscription_mgr__l_subscription,
616
0
         &subscription_mgr__l_valid_subscription);
617
0
      if (subscription_mgr__l_valid_subscription == true) {
618
0
         subscription_core__getall_session(subscription_mgr__l_subscription,
619
0
            &subscription_mgr__l_session);
620
0
         session_mgr__is_valid_session(subscription_mgr__l_session,
621
0
            &subscription_mgr__l_session_valid);
622
0
         if (subscription_mgr__l_session_valid == true) {
623
0
            subscription_mgr__l_value = constants__c_Variant_indet;
624
0
            subscription_mgr__l_val_ts_src = constants__c_Timestamp_null;
625
0
            subscription_mgr__l_val_ts_srv = constants__c_Timestamp_null;
626
0
            subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_unexpected_error;
627
0
            constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
628
0
               &subscription_mgr__l_valueSc);
629
0
            if (subscription_mgr__p_added_or_monitMode == true) {
630
0
               session_mgr__get_session_user_server(subscription_mgr__l_session,
631
0
                  &subscription_mgr__l_user);
632
0
               session_mgr__get_server_session_preferred_locales(subscription_mgr__l_session,
633
0
                  &subscription_mgr__l_locales);
634
0
               address_space_itf__readall_AddressSpace_Node(subscription_mgr__l_nid,
635
0
                  &subscription_mgr__l_bres,
636
0
                  &subscription_mgr__l_node);
637
0
               if (subscription_mgr__l_bres == true) {
638
0
                  address_space_itf__read_Node_Attribute(subscription_mgr__l_user,
639
0
                     subscription_mgr__l_locales,
640
0
                     subscription_mgr__l_node,
641
0
                     subscription_mgr__l_nid,
642
0
                     subscription_mgr__l_aid,
643
0
                     subscription_mgr__l_indexRange,
644
0
                     &subscription_mgr__l_sc,
645
0
                     &subscription_mgr__l_value,
646
0
                     &subscription_mgr__l_valueSc,
647
0
                     &subscription_mgr__l_val_ts_src,
648
0
                     &subscription_mgr__l_val_ts_srv);
649
0
                  if (((subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_not_readable) ||
650
0
                     (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_user_access_denied)) ||
651
0
                     (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_index_range_no_data)) {
652
0
                     constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
653
0
                        &subscription_mgr__l_valueSc);
654
0
                     subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_ok;
655
0
                  }
656
0
               }
657
0
               else if (subscription_mgr__p_monitMode_enabling == true) {
658
0
                  subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
659
0
                  constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
660
0
                     &subscription_mgr__l_valueSc);
661
0
               }
662
0
            }
663
0
            else {
664
0
               subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
665
0
               constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
666
0
                  &subscription_mgr__l_valueSc);
667
0
            }
668
0
            if (subscription_mgr__l_bres == true) {
669
0
               subscription_core__server_subscription_add_notification_on_node_or_monitMode_change(subscription_mgr__p_monitoredItemPointer,
670
0
                  subscription_mgr__l_nid,
671
0
                  subscription_mgr__l_aid,
672
0
                  subscription_mgr__l_value,
673
0
                  subscription_mgr__l_valueSc,
674
0
                  subscription_mgr__l_val_ts_src,
675
0
                  subscription_mgr__l_val_ts_srv,
676
0
                  &subscription_mgr__l_bres);
677
0
               address_space_itf__read_AddressSpace_free_variant(subscription_mgr__l_value);
678
0
            }
679
0
         }
680
0
      }
681
0
   }
682
0
}
683
684
void subscription_mgr__create_notification_on_monitored_items_if_node_changed(
685
   const constants__t_monitoredItemQueue_i subscription_mgr__p_monitoredItemQueue,
686
0
   const t_bool subscription_mgr__p_added) {
687
0
   {
688
0
      t_bool subscription_mgr__l_continue;
689
0
      constants__t_monitoredItemQueueIterator_i subscription_mgr__l_iterator;
690
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
691
      
692
0
      subscription_core__init_iter_monitored_item(subscription_mgr__p_monitoredItemQueue,
693
0
         &subscription_mgr__l_continue,
694
0
         &subscription_mgr__l_iterator);
695
0
      while (subscription_mgr__l_continue == true) {
696
0
         subscription_core__continue_iter_monitored_item(subscription_mgr__l_iterator,
697
0
            subscription_mgr__p_monitoredItemQueue,
698
0
            &subscription_mgr__l_continue,
699
0
            &subscription_mgr__l_monitoredItemPointer);
700
0
         subscription_mgr__local_create_notification_if_node_changed_or_monitMode_enabling(subscription_mgr__l_monitoredItemPointer,
701
0
            subscription_mgr__p_added,
702
0
            false);
703
0
      }
704
0
      subscription_core__clear_iter_monitored_item(subscription_mgr__l_iterator);
705
0
   }
706
0
}
707
708
void subscription_mgr__fill_response_subscription_modify_monitored_items(
709
   const constants__t_subscription_i subscription_mgr__p_subscription,
710
   const constants__t_TimestampsToReturn_i subscription_mgr__p_tsToReturn,
711
   const constants__t_msg_i subscription_mgr__p_req_msg,
712
   const constants__t_msg_i subscription_mgr__p_resp_msg,
713
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
714
0
   {
715
0
      t_bool subscription_mgr__l_continue;
716
0
      t_entier4 subscription_mgr__l_index;
717
0
      constants__t_monitoredItemId_i subscription_mgr__l_id;
718
0
      t_bool subscription_mgr__l_bres;
719
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
720
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
721
0
      constants__t_opcua_duration_i subscription_mgr__l_samplingItv;
722
0
      constants__t_monitoringFilter_i subscription_mgr__l_filter;
723
0
      t_bool subscription_mgr__l_discardOldest;
724
0
      t_entier4 subscription_mgr__l_queueSize;
725
0
      t_entier4 subscription_mgr__l_revQueueSize;
726
0
      constants__t_opcua_duration_i subscription_mgr__l_revSamplingItv;
727
0
      constants__t_filterResult_i subscription_mgr__l_filterResult;
728
      
729
0
      subscription_mgr__l_revSamplingItv = constants__c_opcua_duration_indet;
730
0
      subscription_mgr__l_revQueueSize = 0;
731
0
      subscription_mgr__l_filterResult = constants__c_filterResult_indet;
732
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
733
0
         &subscription_mgr__l_continue);
734
0
      while (subscription_mgr__l_continue == true) {
735
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
736
0
            &subscription_mgr__l_index);
737
0
         msg_subscription_monitored_item__getall_modify_monitored_item_req_params(subscription_mgr__p_req_msg,
738
0
            subscription_mgr__l_index,
739
0
            &subscription_mgr__l_bres,
740
0
            &subscription_mgr__l_sc,
741
0
            &subscription_mgr__l_id,
742
0
            &subscription_mgr__l_clientHandle,
743
0
            &subscription_mgr__l_samplingItv,
744
0
            &subscription_mgr__l_filter,
745
0
            &subscription_mgr__l_discardOldest,
746
0
            &subscription_mgr__l_queueSize);
747
0
         if (subscription_mgr__l_bres == true) {
748
0
            subscription_core__modify_monitored_item(subscription_mgr__p_subscription,
749
0
               subscription_mgr__l_id,
750
0
               subscription_mgr__p_tsToReturn,
751
0
               subscription_mgr__l_clientHandle,
752
0
               subscription_mgr__l_filter,
753
0
               subscription_mgr__l_discardOldest,
754
0
               subscription_mgr__l_queueSize,
755
0
               &subscription_mgr__l_sc,
756
0
               &subscription_mgr__l_filterResult,
757
0
               &subscription_mgr__l_revSamplingItv,
758
0
               &subscription_mgr__l_revQueueSize);
759
0
         }
760
0
         msg_subscription_monitored_item__setall_msg_modify_monitored_item_resp_params(subscription_mgr__p_resp_msg,
761
0
            subscription_mgr__l_index,
762
0
            subscription_mgr__l_sc,
763
0
            subscription_mgr__l_revSamplingItv,
764
0
            subscription_mgr__l_revQueueSize,
765
0
            subscription_mgr__l_filterResult);
766
0
      }
767
0
   }
768
0
}
769
770
void subscription_mgr__fill_response_subscription_delete_monitored_items(
771
   const constants__t_subscription_i subscription_mgr__p_subscription,
772
   const constants__t_msg_i subscription_mgr__p_req_msg,
773
   const constants__t_msg_i subscription_mgr__p_resp_msg,
774
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
775
0
   {
776
0
      t_bool subscription_mgr__l_continue;
777
0
      t_entier4 subscription_mgr__l_index;
778
0
      constants__t_monitoredItemId_i subscription_mgr__l_id;
779
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
780
      
781
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
782
0
         &subscription_mgr__l_continue);
783
0
      while (subscription_mgr__l_continue == true) {
784
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
785
0
            &subscription_mgr__l_index);
786
0
         msg_subscription_monitored_item__getall_delete_monitored_item_req_params(subscription_mgr__p_req_msg,
787
0
            subscription_mgr__l_index,
788
0
            &subscription_mgr__l_id);
789
0
         subscription_core__delete_monitored_item(subscription_mgr__p_subscription,
790
0
            subscription_mgr__l_id,
791
0
            &subscription_mgr__l_sc);
792
0
         msg_subscription_monitored_item__setall_msg_delete_monitored_item_resp_params(subscription_mgr__p_resp_msg,
793
0
            subscription_mgr__l_index,
794
0
            subscription_mgr__l_sc);
795
0
      }
796
0
   }
797
0
}
798
799
void subscription_mgr__local_create_delete_notification_on_set_monit_mode_change(
800
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
801
   const constants__t_monitoringMode_i subscription_mgr__p_prevMonitMode,
802
0
   const constants__t_monitoringMode_i subscription_mgr__p_newMonitMode) {
803
0
   if ((subscription_mgr__p_prevMonitMode == constants__e_monitoringMode_disabled) &&
804
0
      (subscription_mgr__p_newMonitMode != constants__e_monitoringMode_disabled)) {
805
0
      subscription_mgr__local_create_notification_if_node_changed_or_monitMode_enabling(subscription_mgr__p_monitoredItemPointer,
806
0
         true,
807
0
         true);
808
0
   }
809
0
   else if ((subscription_mgr__p_prevMonitMode != constants__e_monitoringMode_disabled) &&
810
0
      (subscription_mgr__p_newMonitMode == constants__e_monitoringMode_disabled)) {
811
0
      subscription_core__clear_monitored_item_notifications(subscription_mgr__p_monitoredItemPointer);
812
0
   }
813
0
}
814
815
void subscription_mgr__fill_response_subscription_set_monit_mode_monitored_items(
816
   const constants__t_subscription_i subscription_mgr__p_subscription,
817
   const constants__t_monitoringMode_i subscription_mgr__p_monitoring_mode,
818
   const constants__t_msg_i subscription_mgr__p_req_msg,
819
   const constants__t_msg_i subscription_mgr__p_resp_msg,
820
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
821
0
   {
822
0
      t_bool subscription_mgr__l_continue;
823
0
      t_entier4 subscription_mgr__l_index;
824
0
      constants__t_monitoredItemId_i subscription_mgr__l_id;
825
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
826
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_mi_pointer;
827
0
      constants__t_monitoringMode_i subscription_mgr__l_mi_prevMonitMode;
828
      
829
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
830
0
         &subscription_mgr__l_continue);
831
0
      while (subscription_mgr__l_continue == true) {
832
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
833
0
            &subscription_mgr__l_index);
834
0
         msg_subscription_monitored_item__getall_set_monit_mode_monitored_item_req_params(subscription_mgr__p_req_msg,
835
0
            subscription_mgr__l_index,
836
0
            &subscription_mgr__l_id);
837
0
         subscription_core__set_monit_mode_monitored_item(subscription_mgr__p_subscription,
838
0
            subscription_mgr__l_id,
839
0
            subscription_mgr__p_monitoring_mode,
840
0
            &subscription_mgr__l_sc,
841
0
            &subscription_mgr__l_mi_pointer,
842
0
            &subscription_mgr__l_mi_prevMonitMode);
843
0
         msg_subscription_monitored_item__setall_msg_set_monit_mode_monitored_item_resp_params(subscription_mgr__p_resp_msg,
844
0
            subscription_mgr__l_index,
845
0
            subscription_mgr__l_sc);
846
0
         if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
847
0
            subscription_mgr__local_create_delete_notification_on_set_monit_mode_change(subscription_mgr__l_mi_pointer,
848
0
               subscription_mgr__l_mi_prevMonitMode,
849
0
               subscription_mgr__p_monitoring_mode);
850
0
         }
851
0
      }
852
0
   }
853
0
}
854
855
void subscription_mgr__fill_delete_subscriptions_response(
856
   const constants__t_msg_i subscription_mgr__p_req_msg,
857
   const constants__t_msg_i subscription_mgr__p_resp_msg,
858
   const constants__t_session_i subscription_mgr__p_session,
859
0
   const t_entier4 subscription_mgr__p_nb_reqs) {
860
0
   {
861
0
      t_entier4 subscription_mgr__l_index;
862
0
      constants__t_subscription_i subscription_mgr__l_sub;
863
0
      t_bool subscription_mgr__l_is_valid;
864
      
865
0
      subscription_mgr__l_index = 1;
866
0
      while (subscription_mgr__l_index <= subscription_mgr__p_nb_reqs) {
867
0
         msg_subscription_delete_bs__getall_msg_delete_subscriptions_at_index(subscription_mgr__p_req_msg,
868
0
            subscription_mgr__l_index,
869
0
            &subscription_mgr__l_sub);
870
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
871
0
            subscription_mgr__l_sub,
872
0
            &subscription_mgr__l_is_valid);
873
0
         if (subscription_mgr__l_is_valid == true) {
874
0
            subscription_core__close_subscription(subscription_mgr__l_sub);
875
0
            msg_subscription_delete_bs__setall_msg_subscription_delete_subscriptions_resp_at_index(subscription_mgr__p_resp_msg,
876
0
               subscription_mgr__l_index,
877
0
               true);
878
0
         }
879
0
         else {
880
0
            msg_subscription_delete_bs__setall_msg_subscription_delete_subscriptions_resp_at_index(subscription_mgr__p_resp_msg,
881
0
               subscription_mgr__l_index,
882
0
               false);
883
0
         }
884
0
         subscription_mgr__l_index = subscription_mgr__l_index +
885
0
            1;
886
0
      }
887
0
   }
888
0
}
889
890
void subscription_mgr__fill_set_publishing_mode_response(
891
   const constants__t_msg_i subscription_mgr__p_req_msg,
892
   const constants__t_msg_i subscription_mgr__p_resp_msg,
893
   const constants__t_session_i subscription_mgr__p_session,
894
   const t_bool subscription_mgr__p_pub_enabled,
895
0
   const t_entier4 subscription_mgr__p_nb_reqs) {
896
0
   {
897
0
      t_entier4 subscription_mgr__l_index;
898
0
      constants__t_subscription_i subscription_mgr__l_sub;
899
0
      t_bool subscription_mgr__l_is_valid;
900
      
901
0
      subscription_mgr__l_index = 1;
902
0
      while (subscription_mgr__l_index <= subscription_mgr__p_nb_reqs) {
903
0
         msg_subscription_set_publishing_mode_bs__getall_msg_set_publishing_mode_at_index(subscription_mgr__p_req_msg,
904
0
            subscription_mgr__l_index,
905
0
            &subscription_mgr__l_sub);
906
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
907
0
            subscription_mgr__l_sub,
908
0
            &subscription_mgr__l_is_valid);
909
0
         if (subscription_mgr__l_is_valid == true) {
910
0
            subscription_core__set_subscription_PublishingEnabled(subscription_mgr__l_sub,
911
0
               subscription_mgr__p_pub_enabled);
912
0
            msg_subscription_set_publishing_mode_bs__setall_msg_subscription_set_publishing_mode_resp_at_index(subscription_mgr__p_resp_msg,
913
0
               subscription_mgr__l_index,
914
0
               true);
915
0
         }
916
0
         else {
917
0
            msg_subscription_set_publishing_mode_bs__setall_msg_subscription_set_publishing_mode_resp_at_index(subscription_mgr__p_resp_msg,
918
0
               subscription_mgr__l_index,
919
0
               false);
920
0
         }
921
0
         subscription_mgr__l_index = subscription_mgr__l_index +
922
0
            1;
923
0
      }
924
0
   }
925
0
}
926
927
void subscription_mgr__treat_create_subscription_request(
928
   const constants__t_session_i subscription_mgr__p_session,
929
   const constants__t_msg_i subscription_mgr__p_req_msg,
930
   const constants__t_msg_i subscription_mgr__p_resp_msg,
931
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
932
0
   {
933
0
      t_bool subscription_mgr__l_bres_pub_alloc;
934
0
      constants__t_opcua_duration_i subscription_mgr__l_reqPublishInterval;
935
0
      t_entier4 subscription_mgr__l_reqLifetimeCount;
936
0
      t_entier4 subscription_mgr__l_reqMaxKeepAlive;
937
0
      t_entier4 subscription_mgr__l_maxNotificationsPerPublish;
938
0
      t_bool subscription_mgr__l_publishEnabled;
939
0
      t_entier4 subscription_mgr__l_priority;
940
0
      constants__t_subscription_i subscription_mgr__l_subscription;
941
0
      constants__t_opcua_duration_i subscription_mgr__l_revisedPublishInterval;
942
0
      t_entier4 subscription_mgr__l_revisedLifetimeCount;
943
0
      t_entier4 subscription_mgr__l_revisedMaxKeepAlive;
944
0
      t_entier4 subscription_mgr__l_revisedMaxNotificationsPerPublish;
945
0
      t_entier4 subscription_mgr__l_old_nb_sub;
946
0
      t_entier4 subscription_mgr__l_new_nb_sub;
947
      
948
0
      subscription_mgr__l_subscription = constants__c_subscription_indet;
949
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
950
0
         &subscription_mgr__l_old_nb_sub);
951
0
      if (subscription_mgr__l_old_nb_sub < constants__k_n_subscriptionPerSession_max) {
952
0
         msg_subscription_create_bs__get_msg_create_subscription_req_params(subscription_mgr__p_req_msg,
953
0
            &subscription_mgr__l_reqPublishInterval,
954
0
            &subscription_mgr__l_reqLifetimeCount,
955
0
            &subscription_mgr__l_reqMaxKeepAlive,
956
0
            &subscription_mgr__l_maxNotificationsPerPublish,
957
0
            &subscription_mgr__l_publishEnabled,
958
0
            &subscription_mgr__l_priority);
959
0
         subscription_core__compute_create_subscription_revised_params(subscription_mgr__l_reqPublishInterval,
960
0
            subscription_mgr__l_reqLifetimeCount,
961
0
            subscription_mgr__l_reqMaxKeepAlive,
962
0
            subscription_mgr__l_maxNotificationsPerPublish,
963
0
            &subscription_mgr__l_revisedPublishInterval,
964
0
            &subscription_mgr__l_revisedLifetimeCount,
965
0
            &subscription_mgr__l_revisedMaxKeepAlive,
966
0
            &subscription_mgr__l_revisedMaxNotificationsPerPublish);
967
0
         subscription_core__create_subscription(subscription_mgr__p_session,
968
0
            subscription_mgr__l_revisedPublishInterval,
969
0
            subscription_mgr__l_revisedLifetimeCount,
970
0
            subscription_mgr__l_revisedMaxKeepAlive,
971
0
            subscription_mgr__l_revisedMaxNotificationsPerPublish,
972
0
            subscription_mgr__l_publishEnabled,
973
0
            subscription_mgr__l_priority,
974
0
            subscription_mgr__StatusCode_service,
975
0
            &subscription_mgr__l_subscription);
976
0
         if (*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) {
977
0
            msg_subscription_create_bs__set_msg_create_subscription_resp_params(subscription_mgr__p_resp_msg,
978
0
               subscription_mgr__l_subscription,
979
0
               subscription_mgr__l_revisedPublishInterval,
980
0
               subscription_mgr__l_revisedLifetimeCount,
981
0
               subscription_mgr__l_revisedMaxKeepAlive);
982
0
         }
983
0
      }
984
0
      else {
985
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_subscriptions;
986
0
      }
987
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
988
0
         &subscription_mgr__l_new_nb_sub);
989
0
      if ((subscription_mgr__l_old_nb_sub == 0) &&
990
0
         (subscription_mgr__l_new_nb_sub != 0)) {
991
0
         subscription_core__allocate_new_session_publish_queue(subscription_mgr__p_session,
992
0
            &subscription_mgr__l_bres_pub_alloc);
993
0
         if (subscription_mgr__l_bres_pub_alloc == false) {
994
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
995
0
         }
996
0
      }
997
0
   }
998
0
}
999
1000
void subscription_mgr__treat_modify_subscription_request(
1001
   const constants__t_session_i subscription_mgr__p_session,
1002
   const constants__t_msg_i subscription_mgr__p_req_msg,
1003
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1004
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1005
0
   {
1006
0
      t_bool subscription_mgr__l_is_valid;
1007
0
      constants__t_subscription_i subscription_mgr__l_sub;
1008
0
      constants__t_opcua_duration_i subscription_mgr__l_reqPublishInterval;
1009
0
      t_entier4 subscription_mgr__l_reqLifetimeCount;
1010
0
      t_entier4 subscription_mgr__l_reqMaxKeepAlive;
1011
0
      t_entier4 subscription_mgr__l_maxNotifPerPublish;
1012
0
      constants__t_opcua_duration_i subscription_mgr__l_revisedPublishInterval;
1013
0
      t_entier4 subscription_mgr__l_revisedLifetimeCount;
1014
0
      t_entier4 subscription_mgr__l_revisedMaxKeepAlive;
1015
0
      t_entier4 subscription_mgr__l_revisedMaxNotificationsPerPublish;
1016
0
      t_entier4 subscription_mgr__l_priority;
1017
      
1018
0
      msg_subscription_create_bs__get_msg_modify_subscription_req_params(subscription_mgr__p_req_msg,
1019
0
         &subscription_mgr__l_sub,
1020
0
         &subscription_mgr__l_reqPublishInterval,
1021
0
         &subscription_mgr__l_reqLifetimeCount,
1022
0
         &subscription_mgr__l_reqMaxKeepAlive,
1023
0
         &subscription_mgr__l_maxNotifPerPublish,
1024
0
         &subscription_mgr__l_priority);
1025
0
      subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1026
0
         subscription_mgr__l_sub,
1027
0
         &subscription_mgr__l_is_valid);
1028
0
      if (subscription_mgr__l_is_valid == true) {
1029
0
         subscription_core__compute_create_subscription_revised_params(subscription_mgr__l_reqPublishInterval,
1030
0
            subscription_mgr__l_reqLifetimeCount,
1031
0
            subscription_mgr__l_reqMaxKeepAlive,
1032
0
            subscription_mgr__l_maxNotifPerPublish,
1033
0
            &subscription_mgr__l_revisedPublishInterval,
1034
0
            &subscription_mgr__l_revisedLifetimeCount,
1035
0
            &subscription_mgr__l_revisedMaxKeepAlive,
1036
0
            &subscription_mgr__l_revisedMaxNotificationsPerPublish);
1037
0
         subscription_core__modify_subscription(subscription_mgr__l_sub,
1038
0
            subscription_mgr__l_revisedPublishInterval,
1039
0
            subscription_mgr__l_revisedLifetimeCount,
1040
0
            subscription_mgr__l_revisedMaxKeepAlive,
1041
0
            subscription_mgr__l_revisedMaxNotificationsPerPublish,
1042
0
            subscription_mgr__l_priority);
1043
0
         msg_subscription_create_bs__set_msg_modify_subscription_resp_params(subscription_mgr__p_resp_msg,
1044
0
            subscription_mgr__l_revisedPublishInterval,
1045
0
            subscription_mgr__l_revisedLifetimeCount,
1046
0
            subscription_mgr__l_revisedMaxKeepAlive);
1047
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1048
0
      }
1049
0
      else {
1050
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1051
0
      }
1052
0
   }
1053
0
}
1054
1055
void subscription_mgr__treat_delete_subscriptions_request(
1056
   const constants__t_session_i subscription_mgr__p_session,
1057
   const constants__t_msg_i subscription_mgr__p_req_msg,
1058
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1059
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1060
0
   {
1061
0
      t_entier4 subscription_mgr__l_nb_reqs;
1062
0
      t_bool subscription_mgr__l_bres;
1063
0
      t_entier4 subscription_mgr__l_old_nb_sub;
1064
0
      t_entier4 subscription_mgr__l_new_nb_sub;
1065
      
1066
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
1067
0
         &subscription_mgr__l_old_nb_sub);
1068
0
      msg_subscription_delete_bs__getall_msg_delete_subscriptions_req_params(subscription_mgr__p_req_msg,
1069
0
         &subscription_mgr__l_nb_reqs);
1070
0
      if ((subscription_mgr__l_nb_reqs > 0) &&
1071
0
         (subscription_mgr__l_nb_reqs <= constants__k_n_genericOperationPerReq_max)) {
1072
0
         msg_subscription_delete_bs__allocate_msg_delete_subscriptions_resp_results_array(subscription_mgr__p_resp_msg,
1073
0
            subscription_mgr__l_nb_reqs,
1074
0
            &subscription_mgr__l_bres);
1075
0
         if (subscription_mgr__l_bres == true) {
1076
0
            subscription_mgr__fill_delete_subscriptions_response(subscription_mgr__p_req_msg,
1077
0
               subscription_mgr__p_resp_msg,
1078
0
               subscription_mgr__p_session,
1079
0
               subscription_mgr__l_nb_reqs);
1080
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1081
0
         }
1082
0
         else {
1083
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1084
0
         }
1085
0
      }
1086
0
      else if (subscription_mgr__l_nb_reqs <= 0) {
1087
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_nothing_to_do;
1088
0
      }
1089
0
      else {
1090
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_ops;
1091
0
      }
1092
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
1093
0
         &subscription_mgr__l_new_nb_sub);
1094
0
      if ((subscription_mgr__l_old_nb_sub != 0) &&
1095
0
         (subscription_mgr__l_new_nb_sub == 0)) {
1096
0
         subscription_core__deallocate_publish_queue_and_gen_no_sub_responses(subscription_mgr__p_session,
1097
0
            true);
1098
0
      }
1099
0
   }
1100
0
}
1101
1102
void subscription_mgr__treat_publishing_mode_request(
1103
   const constants__t_session_i subscription_mgr__p_session,
1104
   const constants__t_msg_i subscription_mgr__p_req_msg,
1105
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1106
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1107
0
   {
1108
0
      t_entier4 subscription_mgr__l_nb_reqs;
1109
0
      t_bool subscription_mgr__l_pub_enabled;
1110
0
      t_bool subscription_mgr__l_bres;
1111
      
1112
0
      msg_subscription_set_publishing_mode_bs__getall_msg_subscription_set_publishing_mode_params(subscription_mgr__p_req_msg,
1113
0
         &subscription_mgr__l_nb_reqs,
1114
0
         &subscription_mgr__l_pub_enabled);
1115
0
      if ((subscription_mgr__l_nb_reqs > 0) &&
1116
0
         (subscription_mgr__l_nb_reqs <= constants__k_n_genericOperationPerReq_max)) {
1117
0
         msg_subscription_set_publishing_mode_bs__allocate_msg_subscription_set_publishing_mode_resp_results_array(subscription_mgr__p_resp_msg,
1118
0
            subscription_mgr__l_nb_reqs,
1119
0
            &subscription_mgr__l_bres);
1120
0
         if (subscription_mgr__l_bres == true) {
1121
0
            subscription_mgr__fill_set_publishing_mode_response(subscription_mgr__p_req_msg,
1122
0
               subscription_mgr__p_resp_msg,
1123
0
               subscription_mgr__p_session,
1124
0
               subscription_mgr__l_pub_enabled,
1125
0
               subscription_mgr__l_nb_reqs);
1126
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1127
0
         }
1128
0
         else {
1129
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1130
0
         }
1131
0
      }
1132
0
      else if (subscription_mgr__l_nb_reqs <= 0) {
1133
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_nothing_to_do;
1134
0
      }
1135
0
      else {
1136
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_ops;
1137
0
      }
1138
0
   }
1139
0
}
1140
1141
void subscription_mgr__treat_subscription_publish_request(
1142
   const constants__t_session_i subscription_mgr__p_session,
1143
   const constants__t_msg_header_i subscription_mgr__p_req_header,
1144
   const constants__t_msg_i subscription_mgr__p_req_msg,
1145
   const constants__t_server_request_handle_i subscription_mgr__p_req_handle,
1146
   const constants__t_request_context_i subscription_mgr__p_req_ctx,
1147
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1148
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service,
1149
0
   t_bool * const subscription_mgr__async_resp_msg) {
1150
0
   {
1151
0
      t_bool subscription_mgr__l_continue;
1152
0
      constants__t_timeref_i subscription_mgr__l_req_exp_time;
1153
0
      t_entier4 subscription_mgr__l_nb_subscriptionAcks;
1154
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1155
0
      t_bool subscription_mgr__l_moreNotifs;
1156
0
      t_bool subscription_mgr__l_bres;
1157
0
      t_bool subscription_mgr__l_async_resp_msg;
1158
      
1159
0
      subscription_mgr__l_subscription = constants__c_subscription_indet;
1160
0
      subscription_mgr__l_moreNotifs = false;
1161
0
      *subscription_mgr__async_resp_msg = false;
1162
0
      subscription_mgr__l_async_resp_msg = true;
1163
0
      subscription_core__init_iter_subscription_session(subscription_mgr__p_session,
1164
0
         &subscription_mgr__l_continue);
1165
0
      if (subscription_mgr__l_continue == true) {
1166
0
         msg_subscription_publish_ack_bs__get_msg_header_expiration_time(subscription_mgr__p_req_header,
1167
0
            &subscription_mgr__l_req_exp_time);
1168
0
         msg_subscription_publish_ack_bs__get_msg_publish_request_ack_params(subscription_mgr__p_req_msg,
1169
0
            &subscription_mgr__l_nb_subscriptionAcks);
1170
0
         if ((subscription_mgr__l_nb_subscriptionAcks > 0) &&
1171
0
            (subscription_mgr__l_nb_subscriptionAcks <= constants__k_n_genericOperationPerReq_max)) {
1172
0
            msg_subscription_publish_ack_bs__allocate_subscription_ack_results(subscription_mgr__p_resp_msg,
1173
0
               subscription_mgr__l_nb_subscriptionAcks,
1174
0
               &subscription_mgr__l_bres);
1175
0
            if (subscription_mgr__l_bres == true) {
1176
0
               subscription_mgr__fill_publish_response_msg_ack_results(subscription_mgr__p_session,
1177
0
                  subscription_mgr__p_req_msg,
1178
0
                  subscription_mgr__p_resp_msg,
1179
0
                  subscription_mgr__l_nb_subscriptionAcks);
1180
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1181
0
            }
1182
0
            else {
1183
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1184
0
            }
1185
0
         }
1186
0
         else if (subscription_mgr__l_nb_subscriptionAcks > constants__k_n_genericOperationPerReq_max) {
1187
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_ops;
1188
0
         }
1189
0
         else {
1190
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1191
0
         }
1192
0
         *subscription_mgr__async_resp_msg = true;
1193
0
         while (((*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) &&
1194
0
            (subscription_mgr__l_continue == true)) &&
1195
0
            (*subscription_mgr__async_resp_msg == true)) {
1196
0
            subscription_core__continue_iter_subscription_session(&subscription_mgr__l_continue,
1197
0
               &subscription_mgr__l_subscription);
1198
0
            subscription_core__receive_publish_request(subscription_mgr__l_subscription,
1199
0
               subscription_mgr__p_resp_msg,
1200
0
               subscription_mgr__StatusCode_service,
1201
0
               &subscription_mgr__l_async_resp_msg,
1202
0
               &subscription_mgr__l_moreNotifs);
1203
0
            *subscription_mgr__async_resp_msg = ((*subscription_mgr__async_resp_msg == true) &&
1204
0
               (subscription_mgr__l_async_resp_msg == true));
1205
0
         }
1206
0
         if ((*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) &&
1207
0
            (*subscription_mgr__async_resp_msg == false)) {
1208
0
            subscription_mgr__fill_publish_response_msg(subscription_mgr__p_resp_msg,
1209
0
               subscription_mgr__l_subscription,
1210
0
               subscription_mgr__l_moreNotifs);
1211
0
         }
1212
0
         else if ((*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) &&
1213
0
            (*subscription_mgr__async_resp_msg == true)) {
1214
0
            subscription_core__enqueue_publish_request(subscription_mgr__p_session,
1215
0
               subscription_mgr__l_req_exp_time,
1216
0
               subscription_mgr__p_req_handle,
1217
0
               subscription_mgr__p_req_ctx,
1218
0
               subscription_mgr__p_resp_msg,
1219
0
               subscription_mgr__StatusCode_service,
1220
0
               subscription_mgr__async_resp_msg);
1221
0
         }
1222
0
      }
1223
0
      else {
1224
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_no_subscription;
1225
0
      }
1226
0
   }
1227
0
}
1228
1229
void subscription_mgr__treat_subscription_republish_request(
1230
   const constants__t_session_i subscription_mgr__p_session,
1231
   const constants__t_msg_i subscription_mgr__p_req_msg,
1232
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1233
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1234
0
   {
1235
0
      t_bool subscription_mgr__l_is_valid;
1236
0
      constants__t_subscription_i subscription_mgr__l_sub;
1237
0
      constants__t_sub_seq_num_i subscription_mgr__l_seq_num;
1238
0
      constants__t_notifRepublishQueue_i subscription_mgr__l_republishQueue;
1239
0
      t_bool subscription_mgr__l_bres;
1240
0
      constants__t_notif_msg_i subscription_mgr__l_notifMsg;
1241
      
1242
0
      msg_subscription_publish_ack_bs__getall_msg_republish_request(subscription_mgr__p_req_msg,
1243
0
         &subscription_mgr__l_sub,
1244
0
         &subscription_mgr__l_seq_num);
1245
0
      subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1246
0
         subscription_mgr__l_sub,
1247
0
         &subscription_mgr__l_is_valid);
1248
0
      if (subscription_mgr__l_is_valid == true) {
1249
0
         subscription_core__get_subscription_notifRepublishQueue(subscription_mgr__l_sub,
1250
0
            &subscription_mgr__l_republishQueue);
1251
0
         subscription_core__get_republish_notif_from_queue(subscription_mgr__l_republishQueue,
1252
0
            subscription_mgr__l_seq_num,
1253
0
            &subscription_mgr__l_bres,
1254
0
            &subscription_mgr__l_notifMsg);
1255
0
         subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_sub);
1256
0
         if (subscription_mgr__l_bres == true) {
1257
0
            msg_subscription_publish_ack_bs__setall_msg_republish_response(subscription_mgr__p_resp_msg,
1258
0
               subscription_mgr__l_notifMsg,
1259
0
               subscription_mgr__StatusCode_service);
1260
0
         }
1261
0
         else {
1262
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_message_not_available;
1263
0
         }
1264
0
      }
1265
0
      else {
1266
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1267
0
      }
1268
0
   }
1269
0
}
1270
1271
void subscription_mgr__treat_subscription_create_monitored_items_req(
1272
   const constants__t_session_i subscription_mgr__p_session,
1273
   const constants__t_user_i subscription_mgr__p_user,
1274
   const constants__t_msg_i subscription_mgr__p_req_msg,
1275
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1276
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1277
0
   {
1278
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1279
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1280
0
      t_bool subscription_mgr__l_valid_subscription;
1281
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToRet;
1282
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1283
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
1284
0
      t_bool subscription_mgr__l_bres;
1285
      
1286
0
      msg_subscription_monitored_item__getall_msg_create_monitored_items_req_params(subscription_mgr__p_req_msg,
1287
0
         &subscription_mgr__l_sc,
1288
0
         &subscription_mgr__l_subscription,
1289
0
         &subscription_mgr__l_timestampToRet,
1290
0
         &subscription_mgr__l_nb_monitored_items);
1291
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1292
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1293
0
            subscription_mgr__l_subscription,
1294
0
            &subscription_mgr__l_valid_subscription);
1295
0
         if (subscription_mgr__l_valid_subscription == true) {
1296
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1297
0
            msg_subscription_monitored_item__alloc_msg_create_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1298
0
               subscription_mgr__l_nb_monitored_items,
1299
0
               &subscription_mgr__l_bres);
1300
0
            if (subscription_mgr__l_bres == true) {
1301
0
               session_mgr__get_server_session_preferred_locales(subscription_mgr__p_session,
1302
0
                  &subscription_mgr__l_locales);
1303
0
               subscription_mgr__local_treat_create_monitored_items(subscription_mgr__p_session,
1304
0
                  subscription_mgr__l_subscription,
1305
0
                  subscription_mgr__l_timestampToRet,
1306
0
                  subscription_mgr__p_user,
1307
0
                  subscription_mgr__l_locales,
1308
0
                  subscription_mgr__p_req_msg,
1309
0
                  subscription_mgr__p_resp_msg,
1310
0
                  subscription_mgr__l_nb_monitored_items);
1311
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1312
0
            }
1313
0
            else {
1314
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1315
0
            }
1316
0
         }
1317
0
         else {
1318
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1319
0
         }
1320
0
      }
1321
0
      else {
1322
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1323
0
      }
1324
0
   }
1325
0
}
1326
1327
void subscription_mgr__treat_subscription_modify_monitored_items_req(
1328
   const constants__t_session_i subscription_mgr__p_session,
1329
   const constants__t_msg_i subscription_mgr__p_req_msg,
1330
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1331
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1332
0
   {
1333
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1334
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1335
0
      t_bool subscription_mgr__l_valid_subscription;
1336
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToRet;
1337
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1338
0
      t_bool subscription_mgr__l_bres;
1339
      
1340
0
      msg_subscription_monitored_item__getall_msg_modify_monitored_items_req_params(subscription_mgr__p_req_msg,
1341
0
         &subscription_mgr__l_sc,
1342
0
         &subscription_mgr__l_subscription,
1343
0
         &subscription_mgr__l_timestampToRet,
1344
0
         &subscription_mgr__l_nb_monitored_items);
1345
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1346
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1347
0
            subscription_mgr__l_subscription,
1348
0
            &subscription_mgr__l_valid_subscription);
1349
0
         if (subscription_mgr__l_valid_subscription == true) {
1350
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1351
0
            msg_subscription_monitored_item__alloc_msg_modify_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1352
0
               subscription_mgr__l_nb_monitored_items,
1353
0
               &subscription_mgr__l_bres);
1354
0
            if (subscription_mgr__l_bres == true) {
1355
0
               subscription_mgr__fill_response_subscription_modify_monitored_items(subscription_mgr__l_subscription,
1356
0
                  subscription_mgr__l_timestampToRet,
1357
0
                  subscription_mgr__p_req_msg,
1358
0
                  subscription_mgr__p_resp_msg,
1359
0
                  subscription_mgr__l_nb_monitored_items);
1360
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1361
0
            }
1362
0
            else {
1363
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1364
0
            }
1365
0
         }
1366
0
         else {
1367
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1368
0
         }
1369
0
      }
1370
0
      else {
1371
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1372
0
      }
1373
0
   }
1374
0
}
1375
1376
void subscription_mgr__treat_subscription_delete_monitored_items_req(
1377
   const constants__t_session_i subscription_mgr__p_session,
1378
   const constants__t_msg_i subscription_mgr__p_req_msg,
1379
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1380
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1381
0
   {
1382
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1383
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1384
0
      t_bool subscription_mgr__l_valid_subscription;
1385
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1386
0
      t_bool subscription_mgr__l_bres;
1387
      
1388
0
      msg_subscription_monitored_item__getall_msg_delete_monitored_items_req_params(subscription_mgr__p_req_msg,
1389
0
         &subscription_mgr__l_sc,
1390
0
         &subscription_mgr__l_subscription,
1391
0
         &subscription_mgr__l_nb_monitored_items);
1392
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1393
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1394
0
            subscription_mgr__l_subscription,
1395
0
            &subscription_mgr__l_valid_subscription);
1396
0
         if (subscription_mgr__l_valid_subscription == true) {
1397
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1398
0
            msg_subscription_monitored_item__alloc_msg_delete_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1399
0
               subscription_mgr__l_nb_monitored_items,
1400
0
               &subscription_mgr__l_bres);
1401
0
            if (subscription_mgr__l_bres == true) {
1402
0
               subscription_mgr__fill_response_subscription_delete_monitored_items(subscription_mgr__l_subscription,
1403
0
                  subscription_mgr__p_req_msg,
1404
0
                  subscription_mgr__p_resp_msg,
1405
0
                  subscription_mgr__l_nb_monitored_items);
1406
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1407
0
            }
1408
0
            else {
1409
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1410
0
            }
1411
0
         }
1412
0
         else {
1413
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1414
0
         }
1415
0
      }
1416
0
      else {
1417
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1418
0
      }
1419
0
   }
1420
0
}
1421
1422
void subscription_mgr__treat_subscription_set_monit_mode_monitored_items_req(
1423
   const constants__t_session_i subscription_mgr__p_session,
1424
   const constants__t_msg_i subscription_mgr__p_req_msg,
1425
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1426
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1427
0
   {
1428
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1429
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1430
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoring_mode;
1431
0
      t_bool subscription_mgr__l_valid_subscription;
1432
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1433
0
      t_bool subscription_mgr__l_bres;
1434
      
1435
0
      msg_subscription_monitored_item__getall_msg_set_monit_mode_monitored_items_req_params(subscription_mgr__p_req_msg,
1436
0
         &subscription_mgr__l_sc,
1437
0
         &subscription_mgr__l_subscription,
1438
0
         &subscription_mgr__l_monitoring_mode,
1439
0
         &subscription_mgr__l_nb_monitored_items);
1440
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1441
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1442
0
            subscription_mgr__l_subscription,
1443
0
            &subscription_mgr__l_valid_subscription);
1444
0
         if (subscription_mgr__l_valid_subscription == true) {
1445
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1446
0
            msg_subscription_monitored_item__alloc_msg_set_monit_mode_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1447
0
               subscription_mgr__l_nb_monitored_items,
1448
0
               &subscription_mgr__l_bres);
1449
0
            if (subscription_mgr__l_bres == true) {
1450
0
               subscription_mgr__fill_response_subscription_set_monit_mode_monitored_items(subscription_mgr__l_subscription,
1451
0
                  subscription_mgr__l_monitoring_mode,
1452
0
                  subscription_mgr__p_req_msg,
1453
0
                  subscription_mgr__p_resp_msg,
1454
0
                  subscription_mgr__l_nb_monitored_items);
1455
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1456
0
            }
1457
0
            else {
1458
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1459
0
            }
1460
0
         }
1461
0
         else {
1462
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1463
0
         }
1464
0
      }
1465
0
      else {
1466
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1467
0
      }
1468
0
   }
1469
0
}
1470
1471
void subscription_mgr__server_subscription_event_triggered(
1472
   const constants__t_NodeId_i subscription_mgr__p_notifierId,
1473
   const constants__t_Event_i subscription_mgr__p_event,
1474
   const constants__t_session_i subscription_mgr__p_session,
1475
   const constants__t_subscription_i subscription_mgr__p_sub_id,
1476
   const constants__t_monitoredItemId_i subscription_mgr__p_mi_id,
1477
0
   t_bool * const subscription_mgr__bres) {
1478
0
   {
1479
0
      t_bool subscription_mgr__l_nid_valid;
1480
0
      constants__t_Node_i subscription_mgr__l_node;
1481
0
      constants__t_NodeClass_i subscription_mgr__l_nodeClass;
1482
0
      constants__t_Byte subscription_mgr__l_eventNotifierByte;
1483
0
      t_bool subscription_mgr__l_bres;
1484
0
      constants__t_monitoredItemQueue_i subscription_mgr__l_monitoredItemQueue;
1485
      
1486
0
      subscription_mgr__l_bres = false;
1487
0
      address_space_itf__readall_AddressSpace_Node(subscription_mgr__p_notifierId,
1488
0
         &subscription_mgr__l_nid_valid,
1489
0
         &subscription_mgr__l_node);
1490
0
      if (subscription_mgr__l_nid_valid == true) {
1491
0
         address_space_itf__get_NodeClass(subscription_mgr__l_node,
1492
0
            &subscription_mgr__l_nodeClass);
1493
0
         if ((subscription_mgr__l_nodeClass == constants__e_ncl_Object) ||
1494
0
            (subscription_mgr__l_nodeClass == constants__e_ncl_View)) {
1495
0
            address_space_itf__get_EventNotifier(subscription_mgr__l_node,
1496
0
               &subscription_mgr__l_eventNotifierByte);
1497
0
            constants__is_EventNotifier_SubscribeToEvents(subscription_mgr__l_eventNotifierByte,
1498
0
               &subscription_mgr__l_bres);
1499
0
         }
1500
0
         if (subscription_mgr__l_bres == true) {
1501
0
            subscription_core__get_nodeToMonitoredItemQueue(subscription_mgr__p_notifierId,
1502
0
               &subscription_mgr__l_bres,
1503
0
               &subscription_mgr__l_monitoredItemQueue);
1504
0
            if (subscription_mgr__l_bres == true) {
1505
0
               subscription_mgr__local_create_notification_on_monitored_items_if_event_selected(subscription_mgr__l_monitoredItemQueue,
1506
0
                  subscription_mgr__p_event,
1507
0
                  subscription_mgr__p_session,
1508
0
                  subscription_mgr__p_sub_id,
1509
0
                  subscription_mgr__p_mi_id);
1510
0
            }
1511
0
         }
1512
0
      }
1513
0
      if (subscription_mgr__l_bres == true) {
1514
0
         address_space_itf__is_NodeId_equal(constants__c_Server_NodeId,
1515
0
            subscription_mgr__p_notifierId,
1516
0
            &subscription_mgr__l_bres);
1517
0
         address_space_itf__readall_AddressSpace_Node(constants__c_Server_NodeId,
1518
0
            &subscription_mgr__l_nid_valid,
1519
0
            &subscription_mgr__l_node);
1520
0
         if ((subscription_mgr__l_bres == false) &&
1521
0
            (subscription_mgr__l_nid_valid == true)) {
1522
0
            subscription_core__get_nodeToMonitoredItemQueue(constants__c_Server_NodeId,
1523
0
               &subscription_mgr__l_bres,
1524
0
               &subscription_mgr__l_monitoredItemQueue);
1525
0
            if (subscription_mgr__l_bres == true) {
1526
0
               subscription_mgr__local_create_notification_on_monitored_items_if_event_selected(subscription_mgr__l_monitoredItemQueue,
1527
0
                  subscription_mgr__p_event,
1528
0
                  subscription_mgr__p_session,
1529
0
                  subscription_mgr__p_sub_id,
1530
0
                  subscription_mgr__p_mi_id);
1531
0
            }
1532
0
         }
1533
0
         subscription_mgr__l_bres = true;
1534
0
      }
1535
0
      *subscription_mgr__bres = subscription_mgr__l_bres;
1536
0
   }
1537
0
}
1538
1539
void subscription_mgr__server_subscription_data_changed(
1540
   const constants__t_WriteValuePointer_i subscription_mgr__p_old_write_value_pointer,
1541
0
   const constants__t_WriteValuePointer_i subscription_mgr__p_new_write_value_pointer) {
1542
0
   {
1543
0
      constants__t_NodeId_i subscription_mgr__l_nid;
1544
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
1545
0
      constants__t_monitoredItemQueue_i subscription_mgr__l_monitoredItemQueue;
1546
0
      t_bool subscription_mgr__l_bres;
1547
      
1548
0
      write_value_pointer_bs__get_write_value_pointer_NodeId_AttributeId(subscription_mgr__p_new_write_value_pointer,
1549
0
         &subscription_mgr__l_nid,
1550
0
         &subscription_mgr__l_aid);
1551
0
      subscription_core__get_nodeToMonitoredItemQueue(subscription_mgr__l_nid,
1552
0
         &subscription_mgr__l_bres,
1553
0
         &subscription_mgr__l_monitoredItemQueue);
1554
0
      if (subscription_mgr__l_bres == true) {
1555
0
         subscription_mgr__create_notification_on_monitored_items_if_data_changed(subscription_mgr__l_monitoredItemQueue,
1556
0
            subscription_mgr__p_old_write_value_pointer,
1557
0
            subscription_mgr__p_new_write_value_pointer);
1558
0
      }
1559
0
      write_value_pointer_bs__free_write_value_pointer(subscription_mgr__p_old_write_value_pointer);
1560
0
      write_value_pointer_bs__free_write_value_pointer(subscription_mgr__p_new_write_value_pointer);
1561
0
   }
1562
0
}
1563
1564
void subscription_mgr__server_subscription_node_changed(
1565
   const t_bool subscription_mgr__p_node_added,
1566
0
   const constants__t_NodeId_i subscription_mgr__p_nid) {
1567
0
   {
1568
0
      t_bool subscription_mgr__l_bres;
1569
0
      constants__t_monitoredItemQueue_i subscription_mgr__l_monitoredItemQueue;
1570
      
1571
0
      subscription_core__get_nodeToMonitoredItemQueue(subscription_mgr__p_nid,
1572
0
         &subscription_mgr__l_bres,
1573
0
         &subscription_mgr__l_monitoredItemQueue);
1574
0
      if (subscription_mgr__l_bres == true) {
1575
0
         subscription_mgr__create_notification_on_monitored_items_if_node_changed(subscription_mgr__l_monitoredItemQueue,
1576
0
            subscription_mgr__p_node_added);
1577
0
      }
1578
0
   }
1579
0
}
1580
1581
void subscription_mgr__server_subscription_publish_timeout(
1582
0
   const constants__t_subscription_i subscription_mgr__p_subscription) {
1583
0
   {
1584
0
      t_bool subscription_mgr__l_closeSubscription;
1585
0
      t_bool subscription_mgr__l_msg_to_send;
1586
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_msg_sc;
1587
0
      constants__t_session_i subscription_mgr__l_session;
1588
0
      constants__t_msg_i subscription_mgr__l_publish_resp_msg;
1589
0
      constants__t_server_request_handle_i subscription_mgr__l_req_handle;
1590
0
      constants__t_request_context_i subscription_mgr__l_req_context;
1591
0
      t_bool subscription_mgr__l_moreNotifs;
1592
0
      t_bool subscription_mgr__l_validPublishingReqQueued;
1593
0
      t_entier4 subscription_mgr__l_new_nb_sub;
1594
      
1595
0
      subscription_core__getall_session(subscription_mgr__p_subscription,
1596
0
         &subscription_mgr__l_session);
1597
0
      subscription_core__server_subscription_core_publish_timeout_check_lifetime(subscription_mgr__l_session,
1598
0
         subscription_mgr__p_subscription,
1599
0
         &subscription_mgr__l_closeSubscription,
1600
0
         &subscription_mgr__l_msg_to_send,
1601
0
         &subscription_mgr__l_publish_resp_msg,
1602
0
         &subscription_mgr__l_req_handle,
1603
0
         &subscription_mgr__l_req_context,
1604
0
         &subscription_mgr__l_validPublishingReqQueued);
1605
0
      if (subscription_mgr__l_closeSubscription == false) {
1606
0
         subscription_core__server_subscription_core_publish_timeout(subscription_mgr__l_session,
1607
0
            subscription_mgr__p_subscription,
1608
0
            subscription_mgr__l_validPublishingReqQueued,
1609
0
            &subscription_mgr__l_msg_to_send,
1610
0
            &subscription_mgr__l_msg_sc,
1611
0
            &subscription_mgr__l_publish_resp_msg,
1612
0
            &subscription_mgr__l_req_handle,
1613
0
            &subscription_mgr__l_req_context,
1614
0
            &subscription_mgr__l_moreNotifs);
1615
0
         if (subscription_mgr__l_msg_to_send == true) {
1616
0
            subscription_mgr__fill_publish_response_msg(subscription_mgr__l_publish_resp_msg,
1617
0
               subscription_mgr__p_subscription,
1618
0
               subscription_mgr__l_moreNotifs);
1619
0
            subscription_core__generate_internal_multi_send_publish_response_event(subscription_mgr__l_session,
1620
0
               subscription_mgr__l_publish_resp_msg,
1621
0
               subscription_mgr__l_req_handle,
1622
0
               subscription_mgr__l_req_context,
1623
0
               subscription_mgr__l_msg_sc);
1624
0
            if (subscription_mgr__l_moreNotifs == true) {
1625
0
               subscription_core__server_subscription_core_check_valid_publish_req_queue(subscription_mgr__l_session,
1626
0
                  &subscription_mgr__l_validPublishingReqQueued);
1627
0
               while ((subscription_mgr__l_moreNotifs == true) &&
1628
0
                  (subscription_mgr__l_validPublishingReqQueued == true)) {
1629
0
                  subscription_core__server_subscription_core_publish_timeout_return_moreNotifs(subscription_mgr__l_session,
1630
0
                     subscription_mgr__p_subscription,
1631
0
                     &subscription_mgr__l_msg_to_send,
1632
0
                     &subscription_mgr__l_msg_sc,
1633
0
                     &subscription_mgr__l_publish_resp_msg,
1634
0
                     &subscription_mgr__l_req_handle,
1635
0
                     &subscription_mgr__l_req_context,
1636
0
                     &subscription_mgr__l_moreNotifs);
1637
0
                  subscription_mgr__fill_publish_response_msg(subscription_mgr__l_publish_resp_msg,
1638
0
                     subscription_mgr__p_subscription,
1639
0
                     subscription_mgr__l_moreNotifs);
1640
0
                  subscription_core__generate_internal_multi_send_publish_response_event(subscription_mgr__l_session,
1641
0
                     subscription_mgr__l_publish_resp_msg,
1642
0
                     subscription_mgr__l_req_handle,
1643
0
                     subscription_mgr__l_req_context,
1644
0
                     subscription_mgr__l_msg_sc);
1645
0
                  if (subscription_mgr__l_moreNotifs == true) {
1646
0
                     subscription_core__server_subscription_core_check_valid_publish_req_queue(subscription_mgr__l_session,
1647
0
                        &subscription_mgr__l_validPublishingReqQueued);
1648
0
                  }
1649
0
               }
1650
0
            }
1651
0
            subscription_core__flush_internal_multi_send_publish_response_events();
1652
0
         }
1653
0
      }
1654
0
      else {
1655
0
         subscription_core__close_subscription(subscription_mgr__p_subscription);
1656
0
         if (subscription_mgr__l_msg_to_send == true) {
1657
0
            subscription_mgr__fill_publish_response_msg(subscription_mgr__l_publish_resp_msg,
1658
0
               subscription_mgr__p_subscription,
1659
0
               false);
1660
0
            subscription_core__generate_internal_send_publish_response_event(subscription_mgr__l_session,
1661
0
               subscription_mgr__l_publish_resp_msg,
1662
0
               subscription_mgr__l_req_handle,
1663
0
               subscription_mgr__l_req_context,
1664
0
               constants_statuscodes_bs__e_sc_ok);
1665
0
         }
1666
0
         subscription_core__get_card_session_seq_subscription(subscription_mgr__l_session,
1667
0
            &subscription_mgr__l_new_nb_sub);
1668
0
         if (subscription_mgr__l_new_nb_sub == 0) {
1669
0
            subscription_core__deallocate_publish_queue_and_gen_no_sub_responses(subscription_mgr__l_session,
1670
0
               true);
1671
0
         }
1672
0
      }
1673
0
   }
1674
0
}
1675
1676
void subscription_mgr__server_subscription_session_inactive(
1677
   const constants__t_session_i subscription_mgr__p_session,
1678
0
   const constants__t_sessionState_i subscription_mgr__p_newSessionState) {
1679
0
   {
1680
0
      t_entier4 subscription_mgr__l_nb_sub;
1681
0
      t_bool subscription_mgr__l_continue;
1682
0
      constants__t_subscription_i subscription_mgr__l_sub;
1683
      
1684
0
      if (((subscription_mgr__p_newSessionState == constants__e_session_scOrphaned) ||
1685
0
         (subscription_mgr__p_newSessionState == constants__e_session_scActivating)) ||
1686
0
         (subscription_mgr__p_newSessionState == constants__e_session_closed)) {
1687
0
         subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
1688
0
            &subscription_mgr__l_nb_sub);
1689
0
         if (subscription_mgr__l_nb_sub != 0) {
1690
0
            if (subscription_mgr__p_newSessionState == constants__e_session_closed) {
1691
0
               subscription_core__deallocate_publish_queue_and_gen_no_sub_responses(subscription_mgr__p_session,
1692
0
                  false);
1693
0
            }
1694
0
            else {
1695
0
               subscription_core__clear_session_publish_queue(subscription_mgr__p_session);
1696
0
            }
1697
0
         }
1698
0
         subscription_core__init_iter_subscription_session(subscription_mgr__p_session,
1699
0
            &subscription_mgr__l_continue);
1700
0
         while (subscription_mgr__l_continue == true) {
1701
0
            subscription_core__continue_iter_subscription_session(&subscription_mgr__l_continue,
1702
0
               &subscription_mgr__l_sub);
1703
0
            if (subscription_mgr__p_newSessionState == constants__e_session_closed) {
1704
0
               subscription_core__async_close_subscription(subscription_mgr__l_sub);
1705
0
            }
1706
0
         }
1707
0
      }
1708
0
   }
1709
0
}
1710
1711
void subscription_mgr__internal_server_close_subscription(
1712
   const constants__t_subscription_i subscription_mgr__p_subscription,
1713
0
   t_bool * const subscription_mgr__bres) {
1714
0
   subscription_core__is_valid_subscription(subscription_mgr__p_subscription,
1715
0
      subscription_mgr__bres);
1716
0
   if (*subscription_mgr__bres == true) {
1717
0
      subscription_core__close_subscription(subscription_mgr__p_subscription);
1718
0
   }
1719
0
}
1720
1721
0
void subscription_mgr__subscription_mgr_UNINITIALISATION(void) {
1722
0
   subscription_core__subscription_core_UNINITIALISATION();
1723
0
}
1724