Coverage Report

Created: 2026-02-26 06:55

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                 : 15/01/2026 14:05:44
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__l_endpoint_config_idx,
265
0
                     subscription_mgr__p_subscription,
266
0
                     subscription_mgr__l_nid,
267
0
                     subscription_mgr__l_aid,
268
0
                     subscription_mgr__l_indexRange,
269
0
                     subscription_mgr__l_value,
270
0
                     subscription_mgr__l_valueSc,
271
0
                     subscription_mgr__l_val_ts_src,
272
0
                     subscription_mgr__l_val_ts_srv,
273
0
                     subscription_mgr__p_tsToReturn,
274
0
                     subscription_mgr__l_monitMode,
275
0
                     subscription_mgr__l_clientHandle,
276
0
                     subscription_mgr__l_filter,
277
0
                     subscription_mgr__l_discardOldest,
278
0
                     subscription_mgr__l_revQueueSize,
279
0
                     &subscription_mgr__l_sc,
280
0
                     &subscription_mgr__l_monitoredItemPointer,
281
0
                     &subscription_mgr__l_monitoredItemId,
282
0
                     &subscription_mgr__l_filterResult);
283
0
                  address_space_itf__read_AddressSpace_free_variant(subscription_mgr__l_value);
284
0
               }
285
0
            }
286
0
         }
287
0
      }
288
0
      msg_subscription_monitored_item__setall_msg_create_monitored_item_resp_params(subscription_mgr__p_resp_msg,
289
0
         subscription_mgr__p_index,
290
0
         subscription_mgr__l_sc,
291
0
         subscription_mgr__l_monitoredItemId,
292
0
         subscription_mgr__l_revSamplingItv,
293
0
         subscription_mgr__l_revQueueSize,
294
0
         subscription_mgr__l_filterResult);
295
0
   }
296
0
}
297
298
void subscription_mgr__local_treat_create_monitored_items(
299
   const constants__t_session_i subscription_mgr__p_session,
300
   const constants__t_subscription_i subscription_mgr__p_subscription,
301
   const constants__t_TimestampsToReturn_i subscription_mgr__p_tsToReturn,
302
   const constants__t_user_i subscription_mgr__p_user,
303
   const constants__t_LocaleIds_i subscription_mgr__p_locales,
304
   const constants__t_msg_i subscription_mgr__p_req_msg,
305
   const constants__t_msg_i subscription_mgr__p_resp_msg,
306
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
307
0
   {
308
0
      t_bool subscription_mgr__l_continue;
309
0
      t_entier4 subscription_mgr__l_index;
310
      
311
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
312
0
         &subscription_mgr__l_continue);
313
0
      while (subscription_mgr__l_continue == true) {
314
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
315
0
            &subscription_mgr__l_index);
316
0
         subscription_mgr__local_treat_create_monitored_item_index(subscription_mgr__p_session,
317
0
            subscription_mgr__p_subscription,
318
0
            subscription_mgr__p_tsToReturn,
319
0
            subscription_mgr__p_user,
320
0
            subscription_mgr__p_locales,
321
0
            subscription_mgr__p_req_msg,
322
0
            subscription_mgr__p_resp_msg,
323
0
            subscription_mgr__l_index);
324
0
      }
325
0
   }
326
0
}
327
328
void subscription_mgr__local_check_filtered_subscription_and_monitored_item(
329
   const constants__t_session_i subscription_mgr__p_opt_session_to_filter,
330
   const constants__t_subscription_i subscription_mgr__p_opt_sub_to_filter,
331
   const constants__t_monitoredItemId_i subscription_mgr__p_opt_mi_to_fitler,
332
   const constants__t_session_i subscription_mgr__p_session,
333
   const constants__t_subscription_i subscription_mgr__p_sub,
334
   const constants__t_monitoredItemId_i subscription_mgr__p_mi,
335
0
   t_bool * const subscription_mgr__bres) {
336
0
   *subscription_mgr__bres = ((((subscription_mgr__p_opt_session_to_filter == constants__c_session_indet) ||
337
0
      (subscription_mgr__p_opt_session_to_filter == subscription_mgr__p_session)) &&
338
0
      ((subscription_mgr__p_opt_sub_to_filter == constants__c_subscription_indet) ||
339
0
      (subscription_mgr__p_opt_sub_to_filter == subscription_mgr__p_sub))) &&
340
0
      ((subscription_mgr__p_opt_mi_to_fitler == constants__c_monitoredItemId_indet) ||
341
0
      (subscription_mgr__p_opt_mi_to_fitler == subscription_mgr__p_mi)));
342
0
}
343
344
void subscription_mgr__local_create_notification_on_monitored_item_if_event_selected(
345
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
346
   const constants__t_Event_i subscription_mgr__p_event,
347
   const constants__t_session_i subscription_mgr__p_session,
348
   const constants__t_subscription_i subscription_mgr__p_sub_id,
349
0
   const constants__t_monitoredItemId_i subscription_mgr__p_mi_id) {
350
0
   {
351
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
352
0
      constants__t_subscription_i subscription_mgr__l_subscription;
353
0
      t_bool subscription_mgr__l_valid_subscription;
354
0
      t_bool subscription_mgr__l_filter_sub_and_mi;
355
0
      constants__t_session_i subscription_mgr__l_session;
356
0
      t_bool subscription_mgr__l_session_valid;
357
0
      constants__t_user_i subscription_mgr__l_user;
358
0
      constants__t_ApplicationDescription_i subscription_mgr__l_client_app_desc;
359
0
      constants__t_CertThumbprint_i subscription_mgr__l_client_cert_tb;
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
         app_cb_call_context_bs__set_app_call_context_session(subscription_mgr__l_session,
411
0
            subscription_mgr__l_client_app_desc,
412
0
            subscription_mgr__l_client_cert_tb,
413
0
            subscription_mgr__l_user);
414
0
         subscription_core__get_event_user_authorization(subscription_mgr__p_event,
415
0
            subscription_mgr__l_user,
416
0
            subscription_mgr__l_roles,
417
0
            &subscription_mgr__l_valid_user_access);
418
0
         app_cb_call_context_bs__clear_app_call_context();
419
0
      }
420
0
      if ((((subscription_mgr__l_session_valid == true) &&
421
0
         (subscription_mgr__l_filter_sub_and_mi == true)) &&
422
0
         (subscription_mgr__l_monitoringMode == constants__e_monitoringMode_reporting)) &&
423
0
         (subscription_mgr__l_aid == constants__e_aid_EventNotifier)) {
424
0
         subscription_core__server_subscription_add_notification_on_event_if_triggered(subscription_mgr__l_valid_user_access,
425
0
            subscription_mgr__l_locales,
426
0
            subscription_mgr__p_monitoredItemPointer,
427
0
            subscription_mgr__l_clientHandle,
428
0
            subscription_mgr__l_timestampToReturn,
429
0
            subscription_mgr__p_event);
430
0
      }
431
0
   }
432
0
}
433
434
void subscription_mgr__local_create_notification_on_monitored_items_if_event_selected(
435
   const constants__t_monitoredItemQueue_i subscription_mgr__p_monitoredItemQueue,
436
   const constants__t_Event_i subscription_mgr__p_event,
437
   const constants__t_session_i subscription_mgr__p_session,
438
   const constants__t_subscription_i subscription_mgr__p_sub_id,
439
0
   const constants__t_monitoredItemId_i subscription_mgr__p_mi_id) {
440
0
   {
441
0
      t_bool subscription_mgr__l_continue;
442
0
      constants__t_monitoredItemQueueIterator_i subscription_mgr__l_iterator;
443
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
444
      
445
0
      subscription_core__init_iter_monitored_item(subscription_mgr__p_monitoredItemQueue,
446
0
         &subscription_mgr__l_continue,
447
0
         &subscription_mgr__l_iterator);
448
0
      while (subscription_mgr__l_continue == true) {
449
0
         subscription_core__continue_iter_monitored_item(subscription_mgr__l_iterator,
450
0
            subscription_mgr__p_monitoredItemQueue,
451
0
            &subscription_mgr__l_continue,
452
0
            &subscription_mgr__l_monitoredItemPointer);
453
0
         subscription_mgr__local_create_notification_on_monitored_item_if_event_selected(subscription_mgr__l_monitoredItemPointer,
454
0
            subscription_mgr__p_event,
455
0
            subscription_mgr__p_session,
456
0
            subscription_mgr__p_sub_id,
457
0
            subscription_mgr__p_mi_id);
458
0
      }
459
0
      subscription_core__clear_iter_monitored_item(subscription_mgr__l_iterator);
460
0
   }
461
0
}
462
463
void subscription_mgr__local_create_notification_on_monitored_items_if_data_changed(
464
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
465
   const constants__t_WriteValuePointer_i subscription_mgr__p_old_wv_pointer,
466
0
   const constants__t_WriteValuePointer_i subscription_mgr__p_new_wv_pointer) {
467
0
   {
468
0
      t_bool subscription_mgr__l_notification_triggered;
469
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
470
0
      constants__t_subscription_i subscription_mgr__l_subscription;
471
0
      t_bool subscription_mgr__l_valid_subscription;
472
0
      constants__t_session_i subscription_mgr__l_session;
473
0
      t_bool subscription_mgr__l_session_valid;
474
0
      constants__t_user_i subscription_mgr__l_user;
475
0
      constants__t_ApplicationDescription_i subscription_mgr__l_client_app_desc;
476
0
      constants__t_CertThumbprint_i subscription_mgr__l_client_cert_tb;
477
0
      t_bool subscription_mgr__l_valid_user_access;
478
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
479
0
      constants__t_NodeId_i subscription_mgr__l_nid;
480
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
481
0
      constants__t_IndexRange_i subscription_mgr__l_indexRange;
482
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToReturn;
483
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoringMode;
484
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
485
0
      constants__t_sessionRoles_i subscription_mgr__l_roles;
486
      
487
0
      subscription_core__getall_monitoredItemPointer(subscription_mgr__p_monitoredItemPointer,
488
0
         &subscription_mgr__l_monitoredItemId,
489
0
         &subscription_mgr__l_subscription,
490
0
         &subscription_mgr__l_nid,
491
0
         &subscription_mgr__l_aid,
492
0
         &subscription_mgr__l_indexRange,
493
0
         &subscription_mgr__l_timestampToReturn,
494
0
         &subscription_mgr__l_monitoringMode,
495
0
         &subscription_mgr__l_clientHandle);
496
0
      subscription_core__is_valid_subscription(subscription_mgr__l_subscription,
497
0
         &subscription_mgr__l_valid_subscription);
498
0
      subscription_mgr__l_notification_triggered = false;
499
0
      subscription_mgr__l_valid_user_access = false;
500
0
      subscription_mgr__l_locales = constants__c_LocaleIds_empty;
501
0
      if (subscription_mgr__l_valid_subscription == true) {
502
0
         subscription_core__getall_session(subscription_mgr__l_subscription,
503
0
            &subscription_mgr__l_session);
504
0
         session_mgr__is_valid_session(subscription_mgr__l_session,
505
0
            &subscription_mgr__l_session_valid);
506
0
         if (subscription_mgr__l_session_valid == true) {
507
0
            session_mgr__get_session_user_server(subscription_mgr__l_session,
508
0
               &subscription_mgr__l_user);
509
0
            session_mgr__get_server_session_client_app_desc(subscription_mgr__l_session,
510
0
               &subscription_mgr__l_client_app_desc);
511
0
            session_mgr__get_server_session_client_cert_tb(subscription_mgr__l_session,
512
0
               &subscription_mgr__l_client_cert_tb);
513
0
            app_cb_call_context_bs__set_app_call_context_session(subscription_mgr__l_session,
514
0
               subscription_mgr__l_client_app_desc,
515
0
               subscription_mgr__l_client_cert_tb,
516
0
               subscription_mgr__l_user);
517
0
            session_mgr__get_session_roles(subscription_mgr__l_session,
518
0
               &subscription_mgr__l_roles);
519
0
            address_space_itf__get_user_authorization(constants__e_operation_type_read,
520
0
               subscription_mgr__l_nid,
521
0
               subscription_mgr__l_aid,
522
0
               subscription_mgr__l_user,
523
0
               subscription_mgr__l_roles,
524
0
               &subscription_mgr__l_valid_user_access);
525
0
            session_mgr__get_server_session_preferred_locales(subscription_mgr__l_session,
526
0
               &subscription_mgr__l_locales);
527
0
            app_cb_call_context_bs__clear_app_call_context();
528
0
         }
529
0
      }
530
0
      if (subscription_mgr__l_valid_user_access == true) {
531
0
         subscription_core__is_notification_triggered(subscription_mgr__l_locales,
532
0
            subscription_mgr__p_monitoredItemPointer,
533
0
            subscription_mgr__p_old_wv_pointer,
534
0
            subscription_mgr__p_new_wv_pointer,
535
0
            &subscription_mgr__l_notification_triggered);
536
0
      }
537
0
      if ((subscription_mgr__l_notification_triggered == true) &&
538
0
         (subscription_mgr__l_monitoringMode == constants__e_monitoringMode_reporting)) {
539
0
         subscription_core__server_subscription_add_notification_on_value_change(subscription_mgr__l_locales,
540
0
            subscription_mgr__p_monitoredItemPointer,
541
0
            subscription_mgr__l_timestampToReturn,
542
0
            subscription_mgr__p_new_wv_pointer);
543
0
      }
544
0
   }
545
0
}
546
547
void subscription_mgr__create_notification_on_monitored_items_if_data_changed(
548
   const constants__t_monitoredItemQueue_i subscription_mgr__p_monitoredItemQueue,
549
   const constants__t_WriteValuePointer_i subscription_mgr__p_old_wv_pointer,
550
0
   const constants__t_WriteValuePointer_i subscription_mgr__p_new_wv_pointer) {
551
0
   {
552
0
      t_bool subscription_mgr__l_continue;
553
0
      constants__t_monitoredItemQueueIterator_i subscription_mgr__l_iterator;
554
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
555
      
556
0
      subscription_core__init_iter_monitored_item(subscription_mgr__p_monitoredItemQueue,
557
0
         &subscription_mgr__l_continue,
558
0
         &subscription_mgr__l_iterator);
559
0
      while (subscription_mgr__l_continue == true) {
560
0
         subscription_core__continue_iter_monitored_item(subscription_mgr__l_iterator,
561
0
            subscription_mgr__p_monitoredItemQueue,
562
0
            &subscription_mgr__l_continue,
563
0
            &subscription_mgr__l_monitoredItemPointer);
564
0
         subscription_mgr__local_create_notification_on_monitored_items_if_data_changed(subscription_mgr__l_monitoredItemPointer,
565
0
            subscription_mgr__p_old_wv_pointer,
566
0
            subscription_mgr__p_new_wv_pointer);
567
0
      }
568
0
      subscription_core__clear_iter_monitored_item(subscription_mgr__l_iterator);
569
0
   }
570
0
}
571
572
void subscription_mgr__local_create_notification_if_node_changed_or_monitMode_enabling(
573
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
574
   const t_bool subscription_mgr__p_added_or_monitMode,
575
0
   const t_bool subscription_mgr__p_monitMode_enabling) {
576
0
   {
577
0
      constants__t_monitoredItemId_i subscription_mgr__l_monitoredItemId;
578
0
      constants__t_subscription_i subscription_mgr__l_subscription;
579
0
      constants__t_session_i subscription_mgr__l_session;
580
0
      t_bool subscription_mgr__l_session_valid;
581
0
      constants__t_user_i subscription_mgr__l_user;
582
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
583
0
      constants__t_NodeId_i subscription_mgr__l_nid;
584
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
585
0
      constants__t_IndexRange_i subscription_mgr__l_indexRange;
586
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToReturn;
587
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoringMode;
588
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
589
0
      t_bool subscription_mgr__l_valid_subscription;
590
0
      t_bool subscription_mgr__l_bres;
591
0
      constants__t_Node_i subscription_mgr__l_node;
592
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
593
0
      constants__t_Variant_i subscription_mgr__l_value;
594
0
      constants__t_RawStatusCode subscription_mgr__l_valueSc;
595
0
      constants__t_Timestamp subscription_mgr__l_val_ts_src;
596
0
      constants__t_Timestamp subscription_mgr__l_val_ts_srv;
597
      
598
0
      subscription_mgr__l_bres = true;
599
0
      subscription_core__getall_monitoredItemPointer(subscription_mgr__p_monitoredItemPointer,
600
0
         &subscription_mgr__l_monitoredItemId,
601
0
         &subscription_mgr__l_subscription,
602
0
         &subscription_mgr__l_nid,
603
0
         &subscription_mgr__l_aid,
604
0
         &subscription_mgr__l_indexRange,
605
0
         &subscription_mgr__l_timestampToReturn,
606
0
         &subscription_mgr__l_monitoringMode,
607
0
         &subscription_mgr__l_clientHandle);
608
0
      subscription_core__is_valid_subscription(subscription_mgr__l_subscription,
609
0
         &subscription_mgr__l_valid_subscription);
610
0
      if (subscription_mgr__l_valid_subscription == true) {
611
0
         subscription_core__getall_session(subscription_mgr__l_subscription,
612
0
            &subscription_mgr__l_session);
613
0
         session_mgr__is_valid_session(subscription_mgr__l_session,
614
0
            &subscription_mgr__l_session_valid);
615
0
         if (subscription_mgr__l_session_valid == true) {
616
0
            subscription_mgr__l_value = constants__c_Variant_indet;
617
0
            subscription_mgr__l_val_ts_src = constants__c_Timestamp_null;
618
0
            subscription_mgr__l_val_ts_srv = constants__c_Timestamp_null;
619
0
            subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_unexpected_error;
620
0
            constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
621
0
               &subscription_mgr__l_valueSc);
622
0
            if (subscription_mgr__p_added_or_monitMode == true) {
623
0
               session_mgr__get_session_user_server(subscription_mgr__l_session,
624
0
                  &subscription_mgr__l_user);
625
0
               session_mgr__get_server_session_preferred_locales(subscription_mgr__l_session,
626
0
                  &subscription_mgr__l_locales);
627
0
               address_space_itf__readall_AddressSpace_Node(subscription_mgr__l_nid,
628
0
                  &subscription_mgr__l_bres,
629
0
                  &subscription_mgr__l_node);
630
0
               if (subscription_mgr__l_bres == true) {
631
0
                  address_space_itf__read_Node_Attribute(subscription_mgr__l_user,
632
0
                     subscription_mgr__l_locales,
633
0
                     subscription_mgr__l_node,
634
0
                     subscription_mgr__l_nid,
635
0
                     subscription_mgr__l_aid,
636
0
                     subscription_mgr__l_indexRange,
637
0
                     &subscription_mgr__l_sc,
638
0
                     &subscription_mgr__l_value,
639
0
                     &subscription_mgr__l_valueSc,
640
0
                     &subscription_mgr__l_val_ts_src,
641
0
                     &subscription_mgr__l_val_ts_srv);
642
0
                  if (((subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_not_readable) ||
643
0
                     (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_user_access_denied)) ||
644
0
                     (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_bad_index_range_no_data)) {
645
0
                     constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
646
0
                        &subscription_mgr__l_valueSc);
647
0
                     subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_ok;
648
0
                  }
649
0
               }
650
0
               else if (subscription_mgr__p_monitMode_enabling == true) {
651
0
                  subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
652
0
                  constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
653
0
                     &subscription_mgr__l_valueSc);
654
0
               }
655
0
            }
656
0
            else {
657
0
               subscription_mgr__l_sc = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
658
0
               constants_statuscodes_bs__getall_conv_StatusCode_To_RawStatusCode(subscription_mgr__l_sc,
659
0
                  &subscription_mgr__l_valueSc);
660
0
            }
661
0
            if (subscription_mgr__l_bres == true) {
662
0
               subscription_core__server_subscription_add_notification_on_node_or_monitMode_change(subscription_mgr__p_monitoredItemPointer,
663
0
                  subscription_mgr__l_nid,
664
0
                  subscription_mgr__l_aid,
665
0
                  subscription_mgr__l_value,
666
0
                  subscription_mgr__l_valueSc,
667
0
                  subscription_mgr__l_val_ts_src,
668
0
                  subscription_mgr__l_val_ts_srv,
669
0
                  &subscription_mgr__l_bres);
670
0
               address_space_itf__read_AddressSpace_free_variant(subscription_mgr__l_value);
671
0
            }
672
0
         }
673
0
      }
674
0
   }
675
0
}
676
677
void subscription_mgr__create_notification_on_monitored_items_if_node_changed(
678
   const constants__t_monitoredItemQueue_i subscription_mgr__p_monitoredItemQueue,
679
0
   const t_bool subscription_mgr__p_added) {
680
0
   {
681
0
      t_bool subscription_mgr__l_continue;
682
0
      constants__t_monitoredItemQueueIterator_i subscription_mgr__l_iterator;
683
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_monitoredItemPointer;
684
      
685
0
      subscription_core__init_iter_monitored_item(subscription_mgr__p_monitoredItemQueue,
686
0
         &subscription_mgr__l_continue,
687
0
         &subscription_mgr__l_iterator);
688
0
      while (subscription_mgr__l_continue == true) {
689
0
         subscription_core__continue_iter_monitored_item(subscription_mgr__l_iterator,
690
0
            subscription_mgr__p_monitoredItemQueue,
691
0
            &subscription_mgr__l_continue,
692
0
            &subscription_mgr__l_monitoredItemPointer);
693
0
         subscription_mgr__local_create_notification_if_node_changed_or_monitMode_enabling(subscription_mgr__l_monitoredItemPointer,
694
0
            subscription_mgr__p_added,
695
0
            false);
696
0
      }
697
0
      subscription_core__clear_iter_monitored_item(subscription_mgr__l_iterator);
698
0
   }
699
0
}
700
701
void subscription_mgr__fill_response_subscription_modify_monitored_items(
702
   const constants__t_endpoint_config_idx_i subscription_mgr__p_endpoint_idx,
703
   const constants__t_subscription_i subscription_mgr__p_subscription,
704
   const constants__t_TimestampsToReturn_i subscription_mgr__p_tsToReturn,
705
   const constants__t_msg_i subscription_mgr__p_req_msg,
706
   const constants__t_msg_i subscription_mgr__p_resp_msg,
707
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
708
0
   {
709
0
      t_bool subscription_mgr__l_continue;
710
0
      t_entier4 subscription_mgr__l_index;
711
0
      constants__t_monitoredItemId_i subscription_mgr__l_id;
712
0
      t_bool subscription_mgr__l_bres;
713
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
714
0
      constants__t_client_handle_i subscription_mgr__l_clientHandle;
715
0
      constants__t_opcua_duration_i subscription_mgr__l_samplingItv;
716
0
      constants__t_monitoringFilter_i subscription_mgr__l_filter;
717
0
      t_bool subscription_mgr__l_discardOldest;
718
0
      t_entier4 subscription_mgr__l_queueSize;
719
0
      t_entier4 subscription_mgr__l_revQueueSize;
720
0
      constants__t_opcua_duration_i subscription_mgr__l_revSamplingItv;
721
0
      constants__t_filterResult_i subscription_mgr__l_filterResult;
722
      
723
0
      subscription_mgr__l_revSamplingItv = constants__c_opcua_duration_indet;
724
0
      subscription_mgr__l_revQueueSize = 0;
725
0
      subscription_mgr__l_filterResult = constants__c_filterResult_indet;
726
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
727
0
         &subscription_mgr__l_continue);
728
0
      while (subscription_mgr__l_continue == true) {
729
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
730
0
            &subscription_mgr__l_index);
731
0
         msg_subscription_monitored_item__getall_modify_monitored_item_req_params(subscription_mgr__p_req_msg,
732
0
            subscription_mgr__l_index,
733
0
            &subscription_mgr__l_bres,
734
0
            &subscription_mgr__l_sc,
735
0
            &subscription_mgr__l_id,
736
0
            &subscription_mgr__l_clientHandle,
737
0
            &subscription_mgr__l_samplingItv,
738
0
            &subscription_mgr__l_filter,
739
0
            &subscription_mgr__l_discardOldest,
740
0
            &subscription_mgr__l_queueSize);
741
0
         if (subscription_mgr__l_bres == true) {
742
0
            subscription_core__modify_monitored_item(subscription_mgr__p_endpoint_idx,
743
0
               subscription_mgr__p_subscription,
744
0
               subscription_mgr__l_id,
745
0
               subscription_mgr__p_tsToReturn,
746
0
               subscription_mgr__l_clientHandle,
747
0
               subscription_mgr__l_filter,
748
0
               subscription_mgr__l_discardOldest,
749
0
               subscription_mgr__l_queueSize,
750
0
               &subscription_mgr__l_sc,
751
0
               &subscription_mgr__l_filterResult,
752
0
               &subscription_mgr__l_revSamplingItv,
753
0
               &subscription_mgr__l_revQueueSize);
754
0
         }
755
0
         msg_subscription_monitored_item__setall_msg_modify_monitored_item_resp_params(subscription_mgr__p_resp_msg,
756
0
            subscription_mgr__l_index,
757
0
            subscription_mgr__l_sc,
758
0
            subscription_mgr__l_revSamplingItv,
759
0
            subscription_mgr__l_revQueueSize,
760
0
            subscription_mgr__l_filterResult);
761
0
      }
762
0
   }
763
0
}
764
765
void subscription_mgr__fill_response_subscription_delete_monitored_items(
766
   const constants__t_subscription_i subscription_mgr__p_subscription,
767
   const constants__t_msg_i subscription_mgr__p_req_msg,
768
   const constants__t_msg_i subscription_mgr__p_resp_msg,
769
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
770
0
   {
771
0
      t_bool subscription_mgr__l_continue;
772
0
      t_entier4 subscription_mgr__l_index;
773
0
      constants__t_monitoredItemId_i subscription_mgr__l_id;
774
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
775
      
776
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
777
0
         &subscription_mgr__l_continue);
778
0
      while (subscription_mgr__l_continue == true) {
779
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
780
0
            &subscription_mgr__l_index);
781
0
         msg_subscription_monitored_item__getall_delete_monitored_item_req_params(subscription_mgr__p_req_msg,
782
0
            subscription_mgr__l_index,
783
0
            &subscription_mgr__l_id);
784
0
         subscription_core__delete_monitored_item(subscription_mgr__p_subscription,
785
0
            subscription_mgr__l_id,
786
0
            &subscription_mgr__l_sc);
787
0
         msg_subscription_monitored_item__setall_msg_delete_monitored_item_resp_params(subscription_mgr__p_resp_msg,
788
0
            subscription_mgr__l_index,
789
0
            subscription_mgr__l_sc);
790
0
      }
791
0
   }
792
0
}
793
794
void subscription_mgr__local_create_delete_notification_on_set_monit_mode_change(
795
   const constants__t_monitoredItemPointer_i subscription_mgr__p_monitoredItemPointer,
796
   const constants__t_monitoringMode_i subscription_mgr__p_prevMonitMode,
797
0
   const constants__t_monitoringMode_i subscription_mgr__p_newMonitMode) {
798
0
   if ((subscription_mgr__p_prevMonitMode == constants__e_monitoringMode_disabled) &&
799
0
      (subscription_mgr__p_newMonitMode != constants__e_monitoringMode_disabled)) {
800
0
      subscription_mgr__local_create_notification_if_node_changed_or_monitMode_enabling(subscription_mgr__p_monitoredItemPointer,
801
0
         true,
802
0
         true);
803
0
   }
804
0
   else if ((subscription_mgr__p_prevMonitMode != constants__e_monitoringMode_disabled) &&
805
0
      (subscription_mgr__p_newMonitMode == constants__e_monitoringMode_disabled)) {
806
0
      subscription_core__clear_monitored_item_notifications(subscription_mgr__p_monitoredItemPointer);
807
0
   }
808
0
}
809
810
void subscription_mgr__fill_response_subscription_set_monit_mode_monitored_items(
811
   const constants__t_subscription_i subscription_mgr__p_subscription,
812
   const constants__t_monitoringMode_i subscription_mgr__p_monitoring_mode,
813
   const constants__t_msg_i subscription_mgr__p_req_msg,
814
   const constants__t_msg_i subscription_mgr__p_resp_msg,
815
0
   const t_entier4 subscription_mgr__p_nb_monitored_items) {
816
0
   {
817
0
      t_bool subscription_mgr__l_continue;
818
0
      t_entier4 subscription_mgr__l_index;
819
0
      constants__t_monitoredItemId_i subscription_mgr__l_id;
820
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
821
0
      constants__t_monitoredItemPointer_i subscription_mgr__l_mi_pointer;
822
0
      constants__t_monitoringMode_i subscription_mgr__l_mi_prevMonitMode;
823
      
824
0
      subscription_create_monitored_item_it__init_iter_monitored_item_request(subscription_mgr__p_nb_monitored_items,
825
0
         &subscription_mgr__l_continue);
826
0
      while (subscription_mgr__l_continue == true) {
827
0
         subscription_create_monitored_item_it__continue_iter_monitored_item_request(&subscription_mgr__l_continue,
828
0
            &subscription_mgr__l_index);
829
0
         msg_subscription_monitored_item__getall_set_monit_mode_monitored_item_req_params(subscription_mgr__p_req_msg,
830
0
            subscription_mgr__l_index,
831
0
            &subscription_mgr__l_id);
832
0
         subscription_core__set_monit_mode_monitored_item(subscription_mgr__p_subscription,
833
0
            subscription_mgr__l_id,
834
0
            subscription_mgr__p_monitoring_mode,
835
0
            &subscription_mgr__l_sc,
836
0
            &subscription_mgr__l_mi_pointer,
837
0
            &subscription_mgr__l_mi_prevMonitMode);
838
0
         msg_subscription_monitored_item__setall_msg_set_monit_mode_monitored_item_resp_params(subscription_mgr__p_resp_msg,
839
0
            subscription_mgr__l_index,
840
0
            subscription_mgr__l_sc);
841
0
         if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
842
0
            subscription_mgr__local_create_delete_notification_on_set_monit_mode_change(subscription_mgr__l_mi_pointer,
843
0
               subscription_mgr__l_mi_prevMonitMode,
844
0
               subscription_mgr__p_monitoring_mode);
845
0
         }
846
0
      }
847
0
   }
848
0
}
849
850
void subscription_mgr__fill_delete_subscriptions_response(
851
   const constants__t_msg_i subscription_mgr__p_req_msg,
852
   const constants__t_msg_i subscription_mgr__p_resp_msg,
853
   const constants__t_session_i subscription_mgr__p_session,
854
0
   const t_entier4 subscription_mgr__p_nb_reqs) {
855
0
   {
856
0
      t_entier4 subscription_mgr__l_index;
857
0
      constants__t_subscription_i subscription_mgr__l_sub;
858
0
      t_bool subscription_mgr__l_is_valid;
859
      
860
0
      subscription_mgr__l_index = 1;
861
0
      while (subscription_mgr__l_index <= subscription_mgr__p_nb_reqs) {
862
0
         msg_subscription_delete_bs__getall_msg_delete_subscriptions_at_index(subscription_mgr__p_req_msg,
863
0
            subscription_mgr__l_index,
864
0
            &subscription_mgr__l_sub);
865
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
866
0
            subscription_mgr__l_sub,
867
0
            &subscription_mgr__l_is_valid);
868
0
         if (subscription_mgr__l_is_valid == true) {
869
0
            subscription_core__close_subscription(subscription_mgr__l_sub);
870
0
            msg_subscription_delete_bs__setall_msg_subscription_delete_subscriptions_resp_at_index(subscription_mgr__p_resp_msg,
871
0
               subscription_mgr__l_index,
872
0
               true);
873
0
         }
874
0
         else {
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
               false);
878
0
         }
879
0
         subscription_mgr__l_index = subscription_mgr__l_index +
880
0
            1;
881
0
      }
882
0
   }
883
0
}
884
885
void subscription_mgr__fill_set_publishing_mode_response(
886
   const constants__t_msg_i subscription_mgr__p_req_msg,
887
   const constants__t_msg_i subscription_mgr__p_resp_msg,
888
   const constants__t_session_i subscription_mgr__p_session,
889
   const t_bool subscription_mgr__p_pub_enabled,
890
0
   const t_entier4 subscription_mgr__p_nb_reqs) {
891
0
   {
892
0
      t_entier4 subscription_mgr__l_index;
893
0
      constants__t_subscription_i subscription_mgr__l_sub;
894
0
      t_bool subscription_mgr__l_is_valid;
895
      
896
0
      subscription_mgr__l_index = 1;
897
0
      while (subscription_mgr__l_index <= subscription_mgr__p_nb_reqs) {
898
0
         msg_subscription_set_publishing_mode_bs__getall_msg_set_publishing_mode_at_index(subscription_mgr__p_req_msg,
899
0
            subscription_mgr__l_index,
900
0
            &subscription_mgr__l_sub);
901
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
902
0
            subscription_mgr__l_sub,
903
0
            &subscription_mgr__l_is_valid);
904
0
         if (subscription_mgr__l_is_valid == true) {
905
0
            subscription_core__set_subscription_PublishingEnabled(subscription_mgr__l_sub,
906
0
               subscription_mgr__p_pub_enabled);
907
0
            msg_subscription_set_publishing_mode_bs__setall_msg_subscription_set_publishing_mode_resp_at_index(subscription_mgr__p_resp_msg,
908
0
               subscription_mgr__l_index,
909
0
               true);
910
0
         }
911
0
         else {
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
               false);
915
0
         }
916
0
         subscription_mgr__l_index = subscription_mgr__l_index +
917
0
            1;
918
0
      }
919
0
   }
920
0
}
921
922
void subscription_mgr__treat_create_subscription_request(
923
   const constants__t_session_i subscription_mgr__p_session,
924
   const constants__t_msg_i subscription_mgr__p_req_msg,
925
   const constants__t_msg_i subscription_mgr__p_resp_msg,
926
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
927
0
   {
928
0
      t_bool subscription_mgr__l_bres_pub_alloc;
929
0
      constants__t_opcua_duration_i subscription_mgr__l_reqPublishInterval;
930
0
      t_entier4 subscription_mgr__l_reqLifetimeCount;
931
0
      t_entier4 subscription_mgr__l_reqMaxKeepAlive;
932
0
      t_entier4 subscription_mgr__l_maxNotificationsPerPublish;
933
0
      t_bool subscription_mgr__l_publishEnabled;
934
0
      t_entier4 subscription_mgr__l_priority;
935
0
      constants__t_subscription_i subscription_mgr__l_subscription;
936
0
      constants__t_opcua_duration_i subscription_mgr__l_revisedPublishInterval;
937
0
      t_entier4 subscription_mgr__l_revisedLifetimeCount;
938
0
      t_entier4 subscription_mgr__l_revisedMaxKeepAlive;
939
0
      t_entier4 subscription_mgr__l_revisedMaxNotificationsPerPublish;
940
0
      t_entier4 subscription_mgr__l_old_nb_sub;
941
0
      t_entier4 subscription_mgr__l_new_nb_sub;
942
      
943
0
      subscription_mgr__l_subscription = constants__c_subscription_indet;
944
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
945
0
         &subscription_mgr__l_old_nb_sub);
946
0
      if (subscription_mgr__l_old_nb_sub < constants__k_n_subscriptionPerSession_max) {
947
0
         msg_subscription_create_bs__get_msg_create_subscription_req_params(subscription_mgr__p_req_msg,
948
0
            &subscription_mgr__l_reqPublishInterval,
949
0
            &subscription_mgr__l_reqLifetimeCount,
950
0
            &subscription_mgr__l_reqMaxKeepAlive,
951
0
            &subscription_mgr__l_maxNotificationsPerPublish,
952
0
            &subscription_mgr__l_publishEnabled,
953
0
            &subscription_mgr__l_priority);
954
0
         subscription_core__compute_create_subscription_revised_params(subscription_mgr__l_reqPublishInterval,
955
0
            subscription_mgr__l_reqLifetimeCount,
956
0
            subscription_mgr__l_reqMaxKeepAlive,
957
0
            subscription_mgr__l_maxNotificationsPerPublish,
958
0
            &subscription_mgr__l_revisedPublishInterval,
959
0
            &subscription_mgr__l_revisedLifetimeCount,
960
0
            &subscription_mgr__l_revisedMaxKeepAlive,
961
0
            &subscription_mgr__l_revisedMaxNotificationsPerPublish);
962
0
         subscription_core__create_subscription(subscription_mgr__p_session,
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_mgr__l_publishEnabled,
968
0
            subscription_mgr__l_priority,
969
0
            subscription_mgr__StatusCode_service,
970
0
            &subscription_mgr__l_subscription);
971
0
         if (*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) {
972
0
            msg_subscription_create_bs__set_msg_create_subscription_resp_params(subscription_mgr__p_resp_msg,
973
0
               subscription_mgr__l_subscription,
974
0
               subscription_mgr__l_revisedPublishInterval,
975
0
               subscription_mgr__l_revisedLifetimeCount,
976
0
               subscription_mgr__l_revisedMaxKeepAlive);
977
0
         }
978
0
      }
979
0
      else {
980
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_subscriptions;
981
0
      }
982
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
983
0
         &subscription_mgr__l_new_nb_sub);
984
0
      if ((subscription_mgr__l_old_nb_sub == 0) &&
985
0
         (subscription_mgr__l_new_nb_sub != 0)) {
986
0
         subscription_core__allocate_new_session_publish_queue(subscription_mgr__p_session,
987
0
            &subscription_mgr__l_bres_pub_alloc);
988
0
         if (subscription_mgr__l_bres_pub_alloc == false) {
989
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
990
0
         }
991
0
      }
992
0
   }
993
0
}
994
995
void subscription_mgr__treat_modify_subscription_request(
996
   const constants__t_session_i subscription_mgr__p_session,
997
   const constants__t_msg_i subscription_mgr__p_req_msg,
998
   const constants__t_msg_i subscription_mgr__p_resp_msg,
999
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1000
0
   {
1001
0
      t_bool subscription_mgr__l_is_valid;
1002
0
      constants__t_subscription_i subscription_mgr__l_sub;
1003
0
      constants__t_opcua_duration_i subscription_mgr__l_reqPublishInterval;
1004
0
      t_entier4 subscription_mgr__l_reqLifetimeCount;
1005
0
      t_entier4 subscription_mgr__l_reqMaxKeepAlive;
1006
0
      t_entier4 subscription_mgr__l_maxNotifPerPublish;
1007
0
      constants__t_opcua_duration_i subscription_mgr__l_revisedPublishInterval;
1008
0
      t_entier4 subscription_mgr__l_revisedLifetimeCount;
1009
0
      t_entier4 subscription_mgr__l_revisedMaxKeepAlive;
1010
0
      t_entier4 subscription_mgr__l_revisedMaxNotificationsPerPublish;
1011
0
      t_entier4 subscription_mgr__l_priority;
1012
      
1013
0
      msg_subscription_create_bs__get_msg_modify_subscription_req_params(subscription_mgr__p_req_msg,
1014
0
         &subscription_mgr__l_sub,
1015
0
         &subscription_mgr__l_reqPublishInterval,
1016
0
         &subscription_mgr__l_reqLifetimeCount,
1017
0
         &subscription_mgr__l_reqMaxKeepAlive,
1018
0
         &subscription_mgr__l_maxNotifPerPublish,
1019
0
         &subscription_mgr__l_priority);
1020
0
      subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1021
0
         subscription_mgr__l_sub,
1022
0
         &subscription_mgr__l_is_valid);
1023
0
      if (subscription_mgr__l_is_valid == true) {
1024
0
         subscription_core__compute_create_subscription_revised_params(subscription_mgr__l_reqPublishInterval,
1025
0
            subscription_mgr__l_reqLifetimeCount,
1026
0
            subscription_mgr__l_reqMaxKeepAlive,
1027
0
            subscription_mgr__l_maxNotifPerPublish,
1028
0
            &subscription_mgr__l_revisedPublishInterval,
1029
0
            &subscription_mgr__l_revisedLifetimeCount,
1030
0
            &subscription_mgr__l_revisedMaxKeepAlive,
1031
0
            &subscription_mgr__l_revisedMaxNotificationsPerPublish);
1032
0
         subscription_core__modify_subscription(subscription_mgr__l_sub,
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_mgr__l_priority);
1038
0
         msg_subscription_create_bs__set_msg_modify_subscription_resp_params(subscription_mgr__p_resp_msg,
1039
0
            subscription_mgr__l_revisedPublishInterval,
1040
0
            subscription_mgr__l_revisedLifetimeCount,
1041
0
            subscription_mgr__l_revisedMaxKeepAlive);
1042
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1043
0
      }
1044
0
      else {
1045
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1046
0
      }
1047
0
   }
1048
0
}
1049
1050
void subscription_mgr__treat_delete_subscriptions_request(
1051
   const constants__t_session_i subscription_mgr__p_session,
1052
   const constants__t_msg_i subscription_mgr__p_req_msg,
1053
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1054
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1055
0
   {
1056
0
      t_entier4 subscription_mgr__l_nb_reqs;
1057
0
      t_bool subscription_mgr__l_bres;
1058
0
      t_entier4 subscription_mgr__l_old_nb_sub;
1059
0
      t_entier4 subscription_mgr__l_new_nb_sub;
1060
      
1061
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
1062
0
         &subscription_mgr__l_old_nb_sub);
1063
0
      msg_subscription_delete_bs__getall_msg_delete_subscriptions_req_params(subscription_mgr__p_req_msg,
1064
0
         &subscription_mgr__l_nb_reqs);
1065
0
      if ((subscription_mgr__l_nb_reqs > 0) &&
1066
0
         (subscription_mgr__l_nb_reqs <= constants__k_n_genericOperationPerReq_max)) {
1067
0
         msg_subscription_delete_bs__allocate_msg_delete_subscriptions_resp_results_array(subscription_mgr__p_resp_msg,
1068
0
            subscription_mgr__l_nb_reqs,
1069
0
            &subscription_mgr__l_bres);
1070
0
         if (subscription_mgr__l_bres == true) {
1071
0
            subscription_mgr__fill_delete_subscriptions_response(subscription_mgr__p_req_msg,
1072
0
               subscription_mgr__p_resp_msg,
1073
0
               subscription_mgr__p_session,
1074
0
               subscription_mgr__l_nb_reqs);
1075
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1076
0
         }
1077
0
         else {
1078
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1079
0
         }
1080
0
      }
1081
0
      else if (subscription_mgr__l_nb_reqs <= 0) {
1082
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_nothing_to_do;
1083
0
      }
1084
0
      else {
1085
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_ops;
1086
0
      }
1087
0
      subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
1088
0
         &subscription_mgr__l_new_nb_sub);
1089
0
      if ((subscription_mgr__l_old_nb_sub != 0) &&
1090
0
         (subscription_mgr__l_new_nb_sub == 0)) {
1091
0
         subscription_core__deallocate_publish_queue_and_gen_no_sub_responses(subscription_mgr__p_session,
1092
0
            true);
1093
0
      }
1094
0
   }
1095
0
}
1096
1097
void subscription_mgr__treat_publishing_mode_request(
1098
   const constants__t_session_i subscription_mgr__p_session,
1099
   const constants__t_msg_i subscription_mgr__p_req_msg,
1100
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1101
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1102
0
   {
1103
0
      t_entier4 subscription_mgr__l_nb_reqs;
1104
0
      t_bool subscription_mgr__l_pub_enabled;
1105
0
      t_bool subscription_mgr__l_bres;
1106
      
1107
0
      msg_subscription_set_publishing_mode_bs__getall_msg_subscription_set_publishing_mode_params(subscription_mgr__p_req_msg,
1108
0
         &subscription_mgr__l_nb_reqs,
1109
0
         &subscription_mgr__l_pub_enabled);
1110
0
      if ((subscription_mgr__l_nb_reqs > 0) &&
1111
0
         (subscription_mgr__l_nb_reqs <= constants__k_n_genericOperationPerReq_max)) {
1112
0
         msg_subscription_set_publishing_mode_bs__allocate_msg_subscription_set_publishing_mode_resp_results_array(subscription_mgr__p_resp_msg,
1113
0
            subscription_mgr__l_nb_reqs,
1114
0
            &subscription_mgr__l_bres);
1115
0
         if (subscription_mgr__l_bres == true) {
1116
0
            subscription_mgr__fill_set_publishing_mode_response(subscription_mgr__p_req_msg,
1117
0
               subscription_mgr__p_resp_msg,
1118
0
               subscription_mgr__p_session,
1119
0
               subscription_mgr__l_pub_enabled,
1120
0
               subscription_mgr__l_nb_reqs);
1121
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1122
0
         }
1123
0
         else {
1124
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1125
0
         }
1126
0
      }
1127
0
      else if (subscription_mgr__l_nb_reqs <= 0) {
1128
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_nothing_to_do;
1129
0
      }
1130
0
      else {
1131
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_ops;
1132
0
      }
1133
0
   }
1134
0
}
1135
1136
void subscription_mgr__treat_subscription_publish_request(
1137
   const constants__t_session_i subscription_mgr__p_session,
1138
   const constants__t_msg_header_i subscription_mgr__p_req_header,
1139
   const constants__t_msg_i subscription_mgr__p_req_msg,
1140
   const constants__t_server_request_handle_i subscription_mgr__p_req_handle,
1141
   const constants__t_request_context_i subscription_mgr__p_req_ctx,
1142
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1143
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service,
1144
0
   t_bool * const subscription_mgr__async_resp_msg) {
1145
0
   {
1146
0
      t_bool subscription_mgr__l_continue;
1147
0
      constants__t_timeref_i subscription_mgr__l_req_exp_time;
1148
0
      t_entier4 subscription_mgr__l_nb_subscriptionAcks;
1149
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1150
0
      t_bool subscription_mgr__l_moreNotifs;
1151
0
      t_bool subscription_mgr__l_bres;
1152
0
      t_bool subscription_mgr__l_async_resp_msg;
1153
      
1154
0
      subscription_mgr__l_subscription = constants__c_subscription_indet;
1155
0
      subscription_mgr__l_moreNotifs = false;
1156
0
      *subscription_mgr__async_resp_msg = false;
1157
0
      subscription_mgr__l_async_resp_msg = true;
1158
0
      subscription_core__init_iter_subscription_session(subscription_mgr__p_session,
1159
0
         &subscription_mgr__l_continue);
1160
0
      if (subscription_mgr__l_continue == true) {
1161
0
         msg_subscription_publish_ack_bs__get_msg_header_expiration_time(subscription_mgr__p_req_header,
1162
0
            &subscription_mgr__l_req_exp_time);
1163
0
         msg_subscription_publish_ack_bs__get_msg_publish_request_ack_params(subscription_mgr__p_req_msg,
1164
0
            &subscription_mgr__l_nb_subscriptionAcks);
1165
0
         if ((subscription_mgr__l_nb_subscriptionAcks > 0) &&
1166
0
            (subscription_mgr__l_nb_subscriptionAcks <= constants__k_n_genericOperationPerReq_max)) {
1167
0
            msg_subscription_publish_ack_bs__allocate_subscription_ack_results(subscription_mgr__p_resp_msg,
1168
0
               subscription_mgr__l_nb_subscriptionAcks,
1169
0
               &subscription_mgr__l_bres);
1170
0
            if (subscription_mgr__l_bres == true) {
1171
0
               subscription_mgr__fill_publish_response_msg_ack_results(subscription_mgr__p_session,
1172
0
                  subscription_mgr__p_req_msg,
1173
0
                  subscription_mgr__p_resp_msg,
1174
0
                  subscription_mgr__l_nb_subscriptionAcks);
1175
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1176
0
            }
1177
0
            else {
1178
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1179
0
            }
1180
0
         }
1181
0
         else if (subscription_mgr__l_nb_subscriptionAcks > constants__k_n_genericOperationPerReq_max) {
1182
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_too_many_ops;
1183
0
         }
1184
0
         else {
1185
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1186
0
         }
1187
0
         *subscription_mgr__async_resp_msg = true;
1188
0
         while (((*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) &&
1189
0
            (subscription_mgr__l_continue == true)) &&
1190
0
            (*subscription_mgr__async_resp_msg == true)) {
1191
0
            subscription_core__continue_iter_subscription_session(&subscription_mgr__l_continue,
1192
0
               &subscription_mgr__l_subscription);
1193
0
            subscription_core__receive_publish_request(subscription_mgr__l_subscription,
1194
0
               subscription_mgr__p_resp_msg,
1195
0
               subscription_mgr__StatusCode_service,
1196
0
               &subscription_mgr__l_async_resp_msg,
1197
0
               &subscription_mgr__l_moreNotifs);
1198
0
            *subscription_mgr__async_resp_msg = ((*subscription_mgr__async_resp_msg == true) &&
1199
0
               (subscription_mgr__l_async_resp_msg == true));
1200
0
         }
1201
0
         if ((*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) &&
1202
0
            (*subscription_mgr__async_resp_msg == false)) {
1203
0
            subscription_mgr__fill_publish_response_msg(subscription_mgr__p_resp_msg,
1204
0
               subscription_mgr__l_subscription,
1205
0
               subscription_mgr__l_moreNotifs);
1206
0
         }
1207
0
         else if ((*subscription_mgr__StatusCode_service == constants_statuscodes_bs__e_sc_ok) &&
1208
0
            (*subscription_mgr__async_resp_msg == true)) {
1209
0
            subscription_core__enqueue_publish_request(subscription_mgr__p_session,
1210
0
               subscription_mgr__l_req_exp_time,
1211
0
               subscription_mgr__p_req_handle,
1212
0
               subscription_mgr__p_req_ctx,
1213
0
               subscription_mgr__p_resp_msg,
1214
0
               subscription_mgr__StatusCode_service,
1215
0
               subscription_mgr__async_resp_msg);
1216
0
         }
1217
0
      }
1218
0
      else {
1219
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_no_subscription;
1220
0
      }
1221
0
   }
1222
0
}
1223
1224
void subscription_mgr__treat_subscription_republish_request(
1225
   const constants__t_session_i subscription_mgr__p_session,
1226
   const constants__t_msg_i subscription_mgr__p_req_msg,
1227
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1228
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1229
0
   {
1230
0
      t_bool subscription_mgr__l_is_valid;
1231
0
      constants__t_subscription_i subscription_mgr__l_sub;
1232
0
      constants__t_sub_seq_num_i subscription_mgr__l_seq_num;
1233
0
      constants__t_notifRepublishQueue_i subscription_mgr__l_republishQueue;
1234
0
      t_bool subscription_mgr__l_bres;
1235
0
      constants__t_notif_msg_i subscription_mgr__l_notifMsg;
1236
      
1237
0
      msg_subscription_publish_ack_bs__getall_msg_republish_request(subscription_mgr__p_req_msg,
1238
0
         &subscription_mgr__l_sub,
1239
0
         &subscription_mgr__l_seq_num);
1240
0
      subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1241
0
         subscription_mgr__l_sub,
1242
0
         &subscription_mgr__l_is_valid);
1243
0
      if (subscription_mgr__l_is_valid == true) {
1244
0
         subscription_core__get_subscription_notifRepublishQueue(subscription_mgr__l_sub,
1245
0
            &subscription_mgr__l_republishQueue);
1246
0
         subscription_core__get_republish_notif_from_queue(subscription_mgr__l_republishQueue,
1247
0
            subscription_mgr__l_seq_num,
1248
0
            &subscription_mgr__l_bres,
1249
0
            &subscription_mgr__l_notifMsg);
1250
0
         subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_sub);
1251
0
         if (subscription_mgr__l_bres == true) {
1252
0
            msg_subscription_publish_ack_bs__setall_msg_republish_response(subscription_mgr__p_resp_msg,
1253
0
               subscription_mgr__l_notifMsg,
1254
0
               subscription_mgr__StatusCode_service);
1255
0
         }
1256
0
         else {
1257
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_message_not_available;
1258
0
         }
1259
0
      }
1260
0
      else {
1261
0
         *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1262
0
      }
1263
0
   }
1264
0
}
1265
1266
void subscription_mgr__treat_subscription_create_monitored_items_req(
1267
   const constants__t_session_i subscription_mgr__p_session,
1268
   const constants__t_user_i subscription_mgr__p_user,
1269
   const constants__t_msg_i subscription_mgr__p_req_msg,
1270
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1271
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1272
0
   {
1273
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1274
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1275
0
      t_bool subscription_mgr__l_valid_subscription;
1276
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToRet;
1277
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1278
0
      constants__t_LocaleIds_i subscription_mgr__l_locales;
1279
0
      t_bool subscription_mgr__l_bres;
1280
      
1281
0
      msg_subscription_monitored_item__getall_msg_create_monitored_items_req_params(subscription_mgr__p_req_msg,
1282
0
         &subscription_mgr__l_sc,
1283
0
         &subscription_mgr__l_subscription,
1284
0
         &subscription_mgr__l_timestampToRet,
1285
0
         &subscription_mgr__l_nb_monitored_items);
1286
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1287
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1288
0
            subscription_mgr__l_subscription,
1289
0
            &subscription_mgr__l_valid_subscription);
1290
0
         if (subscription_mgr__l_valid_subscription == true) {
1291
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1292
0
            msg_subscription_monitored_item__alloc_msg_create_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1293
0
               subscription_mgr__l_nb_monitored_items,
1294
0
               &subscription_mgr__l_bres);
1295
0
            if (subscription_mgr__l_bres == true) {
1296
0
               session_mgr__get_server_session_preferred_locales(subscription_mgr__p_session,
1297
0
                  &subscription_mgr__l_locales);
1298
0
               subscription_mgr__local_treat_create_monitored_items(subscription_mgr__p_session,
1299
0
                  subscription_mgr__l_subscription,
1300
0
                  subscription_mgr__l_timestampToRet,
1301
0
                  subscription_mgr__p_user,
1302
0
                  subscription_mgr__l_locales,
1303
0
                  subscription_mgr__p_req_msg,
1304
0
                  subscription_mgr__p_resp_msg,
1305
0
                  subscription_mgr__l_nb_monitored_items);
1306
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1307
0
            }
1308
0
            else {
1309
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1310
0
            }
1311
0
         }
1312
0
         else {
1313
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1314
0
         }
1315
0
      }
1316
0
      else {
1317
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1318
0
      }
1319
0
   }
1320
0
}
1321
1322
void subscription_mgr__treat_subscription_modify_monitored_items_req(
1323
   const constants__t_session_i subscription_mgr__p_session,
1324
   const constants__t_msg_i subscription_mgr__p_req_msg,
1325
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1326
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1327
0
   {
1328
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1329
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1330
0
      t_bool subscription_mgr__l_valid_subscription;
1331
0
      constants__t_endpoint_config_idx_i subscription_mgr__l_endpoint_config_idx;
1332
0
      constants__t_TimestampsToReturn_i subscription_mgr__l_timestampToRet;
1333
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1334
0
      t_bool subscription_mgr__l_bres;
1335
      
1336
0
      msg_subscription_monitored_item__getall_msg_modify_monitored_items_req_params(subscription_mgr__p_req_msg,
1337
0
         &subscription_mgr__l_sc,
1338
0
         &subscription_mgr__l_subscription,
1339
0
         &subscription_mgr__l_timestampToRet,
1340
0
         &subscription_mgr__l_nb_monitored_items);
1341
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1342
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1343
0
            subscription_mgr__l_subscription,
1344
0
            &subscription_mgr__l_valid_subscription);
1345
0
         session_mgr__session_get_endpoint_config(subscription_mgr__p_session,
1346
0
            &subscription_mgr__l_endpoint_config_idx);
1347
0
         channel_mgr__is_valid_endpoint_config_idx(subscription_mgr__l_endpoint_config_idx,
1348
0
            &subscription_mgr__l_bres);
1349
0
         if ((subscription_mgr__l_valid_subscription == true) &&
1350
0
            (subscription_mgr__l_bres == true)) {
1351
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1352
0
            msg_subscription_monitored_item__alloc_msg_modify_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1353
0
               subscription_mgr__l_nb_monitored_items,
1354
0
               &subscription_mgr__l_bres);
1355
0
            if (subscription_mgr__l_bres == true) {
1356
0
               subscription_mgr__fill_response_subscription_modify_monitored_items(subscription_mgr__l_endpoint_config_idx,
1357
0
                  subscription_mgr__l_subscription,
1358
0
                  subscription_mgr__l_timestampToRet,
1359
0
                  subscription_mgr__p_req_msg,
1360
0
                  subscription_mgr__p_resp_msg,
1361
0
                  subscription_mgr__l_nb_monitored_items);
1362
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1363
0
            }
1364
0
            else {
1365
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1366
0
            }
1367
0
         }
1368
0
         else {
1369
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1370
0
         }
1371
0
      }
1372
0
      else {
1373
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1374
0
      }
1375
0
   }
1376
0
}
1377
1378
void subscription_mgr__treat_subscription_delete_monitored_items_req(
1379
   const constants__t_session_i subscription_mgr__p_session,
1380
   const constants__t_msg_i subscription_mgr__p_req_msg,
1381
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1382
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1383
0
   {
1384
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1385
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1386
0
      t_bool subscription_mgr__l_valid_subscription;
1387
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1388
0
      t_bool subscription_mgr__l_bres;
1389
      
1390
0
      msg_subscription_monitored_item__getall_msg_delete_monitored_items_req_params(subscription_mgr__p_req_msg,
1391
0
         &subscription_mgr__l_sc,
1392
0
         &subscription_mgr__l_subscription,
1393
0
         &subscription_mgr__l_nb_monitored_items);
1394
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1395
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1396
0
            subscription_mgr__l_subscription,
1397
0
            &subscription_mgr__l_valid_subscription);
1398
0
         if (subscription_mgr__l_valid_subscription == true) {
1399
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1400
0
            msg_subscription_monitored_item__alloc_msg_delete_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1401
0
               subscription_mgr__l_nb_monitored_items,
1402
0
               &subscription_mgr__l_bres);
1403
0
            if (subscription_mgr__l_bres == true) {
1404
0
               subscription_mgr__fill_response_subscription_delete_monitored_items(subscription_mgr__l_subscription,
1405
0
                  subscription_mgr__p_req_msg,
1406
0
                  subscription_mgr__p_resp_msg,
1407
0
                  subscription_mgr__l_nb_monitored_items);
1408
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1409
0
            }
1410
0
            else {
1411
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1412
0
            }
1413
0
         }
1414
0
         else {
1415
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1416
0
         }
1417
0
      }
1418
0
      else {
1419
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1420
0
      }
1421
0
   }
1422
0
}
1423
1424
void subscription_mgr__treat_subscription_set_monit_mode_monitored_items_req(
1425
   const constants__t_session_i subscription_mgr__p_session,
1426
   const constants__t_msg_i subscription_mgr__p_req_msg,
1427
   const constants__t_msg_i subscription_mgr__p_resp_msg,
1428
0
   constants_statuscodes_bs__t_StatusCode_i * const subscription_mgr__StatusCode_service) {
1429
0
   {
1430
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_sc;
1431
0
      constants__t_subscription_i subscription_mgr__l_subscription;
1432
0
      constants__t_monitoringMode_i subscription_mgr__l_monitoring_mode;
1433
0
      t_bool subscription_mgr__l_valid_subscription;
1434
0
      t_entier4 subscription_mgr__l_nb_monitored_items;
1435
0
      t_bool subscription_mgr__l_bres;
1436
      
1437
0
      msg_subscription_monitored_item__getall_msg_set_monit_mode_monitored_items_req_params(subscription_mgr__p_req_msg,
1438
0
         &subscription_mgr__l_sc,
1439
0
         &subscription_mgr__l_subscription,
1440
0
         &subscription_mgr__l_monitoring_mode,
1441
0
         &subscription_mgr__l_nb_monitored_items);
1442
0
      if (subscription_mgr__l_sc == constants_statuscodes_bs__e_sc_ok) {
1443
0
         subscription_core__is_valid_subscription_on_session(subscription_mgr__p_session,
1444
0
            subscription_mgr__l_subscription,
1445
0
            &subscription_mgr__l_valid_subscription);
1446
0
         if (subscription_mgr__l_valid_subscription == true) {
1447
0
            subscription_core__reset_subscription_LifetimeCounter(subscription_mgr__l_subscription);
1448
0
            msg_subscription_monitored_item__alloc_msg_set_monit_mode_monitored_items_resp_results(subscription_mgr__p_resp_msg,
1449
0
               subscription_mgr__l_nb_monitored_items,
1450
0
               &subscription_mgr__l_bres);
1451
0
            if (subscription_mgr__l_bres == true) {
1452
0
               subscription_mgr__fill_response_subscription_set_monit_mode_monitored_items(subscription_mgr__l_subscription,
1453
0
                  subscription_mgr__l_monitoring_mode,
1454
0
                  subscription_mgr__p_req_msg,
1455
0
                  subscription_mgr__p_resp_msg,
1456
0
                  subscription_mgr__l_nb_monitored_items);
1457
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_ok;
1458
0
            }
1459
0
            else {
1460
0
               *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_out_of_memory;
1461
0
            }
1462
0
         }
1463
0
         else {
1464
0
            *subscription_mgr__StatusCode_service = constants_statuscodes_bs__e_sc_bad_subscription_id_invalid;
1465
0
         }
1466
0
      }
1467
0
      else {
1468
0
         *subscription_mgr__StatusCode_service = subscription_mgr__l_sc;
1469
0
      }
1470
0
   }
1471
0
}
1472
1473
void subscription_mgr__server_subscription_event_triggered(
1474
   const constants__t_NodeId_i subscription_mgr__p_notifierId,
1475
   const constants__t_Event_i subscription_mgr__p_event,
1476
   const constants__t_session_i subscription_mgr__p_session,
1477
   const constants__t_subscription_i subscription_mgr__p_sub_id,
1478
   const constants__t_monitoredItemId_i subscription_mgr__p_mi_id,
1479
0
   t_bool * const subscription_mgr__bres) {
1480
0
   {
1481
0
      t_bool subscription_mgr__l_nid_valid;
1482
0
      constants__t_Node_i subscription_mgr__l_node;
1483
0
      constants__t_NodeClass_i subscription_mgr__l_nodeClass;
1484
0
      constants__t_Byte subscription_mgr__l_eventNotifierByte;
1485
0
      t_bool subscription_mgr__l_bres;
1486
0
      constants__t_monitoredItemQueue_i subscription_mgr__l_monitoredItemQueue;
1487
      
1488
0
      subscription_mgr__l_bres = false;
1489
0
      address_space_itf__readall_AddressSpace_Node(subscription_mgr__p_notifierId,
1490
0
         &subscription_mgr__l_nid_valid,
1491
0
         &subscription_mgr__l_node);
1492
0
      if (subscription_mgr__l_nid_valid == true) {
1493
0
         address_space_itf__get_NodeClass(subscription_mgr__l_node,
1494
0
            &subscription_mgr__l_nodeClass);
1495
0
         if ((subscription_mgr__l_nodeClass == constants__e_ncl_Object) ||
1496
0
            (subscription_mgr__l_nodeClass == constants__e_ncl_View)) {
1497
0
            address_space_itf__get_EventNotifier(subscription_mgr__l_node,
1498
0
               &subscription_mgr__l_eventNotifierByte);
1499
0
            constants__is_EventNotifier_SubscribeToEvents(subscription_mgr__l_eventNotifierByte,
1500
0
               &subscription_mgr__l_bres);
1501
0
         }
1502
0
         if (subscription_mgr__l_bres == true) {
1503
0
            subscription_core__get_nodeToMonitoredItemQueue(subscription_mgr__p_notifierId,
1504
0
               &subscription_mgr__l_bres,
1505
0
               &subscription_mgr__l_monitoredItemQueue);
1506
0
            if (subscription_mgr__l_bres == true) {
1507
0
               subscription_mgr__local_create_notification_on_monitored_items_if_event_selected(subscription_mgr__l_monitoredItemQueue,
1508
0
                  subscription_mgr__p_event,
1509
0
                  subscription_mgr__p_session,
1510
0
                  subscription_mgr__p_sub_id,
1511
0
                  subscription_mgr__p_mi_id);
1512
0
            }
1513
0
         }
1514
0
      }
1515
0
      if (subscription_mgr__l_bres == true) {
1516
0
         address_space_itf__is_NodeId_equal(constants__c_Server_NodeId,
1517
0
            subscription_mgr__p_notifierId,
1518
0
            &subscription_mgr__l_bres);
1519
0
         address_space_itf__readall_AddressSpace_Node(constants__c_Server_NodeId,
1520
0
            &subscription_mgr__l_nid_valid,
1521
0
            &subscription_mgr__l_node);
1522
0
         if ((subscription_mgr__l_bres == false) &&
1523
0
            (subscription_mgr__l_nid_valid == true)) {
1524
0
            subscription_core__get_nodeToMonitoredItemQueue(constants__c_Server_NodeId,
1525
0
               &subscription_mgr__l_bres,
1526
0
               &subscription_mgr__l_monitoredItemQueue);
1527
0
            if (subscription_mgr__l_bres == true) {
1528
0
               subscription_mgr__local_create_notification_on_monitored_items_if_event_selected(subscription_mgr__l_monitoredItemQueue,
1529
0
                  subscription_mgr__p_event,
1530
0
                  subscription_mgr__p_session,
1531
0
                  subscription_mgr__p_sub_id,
1532
0
                  subscription_mgr__p_mi_id);
1533
0
            }
1534
0
         }
1535
0
         subscription_mgr__l_bres = true;
1536
0
      }
1537
0
      *subscription_mgr__bres = subscription_mgr__l_bres;
1538
0
   }
1539
0
}
1540
1541
void subscription_mgr__server_subscription_data_changed(
1542
   const constants__t_WriteValuePointer_i subscription_mgr__p_old_write_value_pointer,
1543
0
   const constants__t_WriteValuePointer_i subscription_mgr__p_new_write_value_pointer) {
1544
0
   {
1545
0
      constants__t_NodeId_i subscription_mgr__l_nid;
1546
0
      constants__t_AttributeId_i subscription_mgr__l_aid;
1547
0
      constants__t_monitoredItemQueue_i subscription_mgr__l_monitoredItemQueue;
1548
0
      t_bool subscription_mgr__l_bres;
1549
      
1550
0
      write_value_pointer_bs__get_write_value_pointer_NodeId_AttributeId(subscription_mgr__p_new_write_value_pointer,
1551
0
         &subscription_mgr__l_nid,
1552
0
         &subscription_mgr__l_aid);
1553
0
      subscription_core__get_nodeToMonitoredItemQueue(subscription_mgr__l_nid,
1554
0
         &subscription_mgr__l_bres,
1555
0
         &subscription_mgr__l_monitoredItemQueue);
1556
0
      if (subscription_mgr__l_bres == true) {
1557
0
         subscription_mgr__create_notification_on_monitored_items_if_data_changed(subscription_mgr__l_monitoredItemQueue,
1558
0
            subscription_mgr__p_old_write_value_pointer,
1559
0
            subscription_mgr__p_new_write_value_pointer);
1560
0
      }
1561
0
      write_value_pointer_bs__free_write_value_pointer(subscription_mgr__p_old_write_value_pointer);
1562
0
      write_value_pointer_bs__free_write_value_pointer(subscription_mgr__p_new_write_value_pointer);
1563
0
   }
1564
0
}
1565
1566
void subscription_mgr__server_subscription_node_changed(
1567
   const t_bool subscription_mgr__p_node_added,
1568
0
   const constants__t_NodeId_i subscription_mgr__p_nid) {
1569
0
   {
1570
0
      t_bool subscription_mgr__l_bres;
1571
0
      constants__t_monitoredItemQueue_i subscription_mgr__l_monitoredItemQueue;
1572
      
1573
0
      subscription_core__get_nodeToMonitoredItemQueue(subscription_mgr__p_nid,
1574
0
         &subscription_mgr__l_bres,
1575
0
         &subscription_mgr__l_monitoredItemQueue);
1576
0
      if (subscription_mgr__l_bres == true) {
1577
0
         subscription_mgr__create_notification_on_monitored_items_if_node_changed(subscription_mgr__l_monitoredItemQueue,
1578
0
            subscription_mgr__p_node_added);
1579
0
      }
1580
0
   }
1581
0
}
1582
1583
void subscription_mgr__server_subscription_publish_timeout(
1584
0
   const constants__t_subscription_i subscription_mgr__p_subscription) {
1585
0
   {
1586
0
      t_bool subscription_mgr__l_closeSubscription;
1587
0
      t_bool subscription_mgr__l_msg_to_send;
1588
0
      constants_statuscodes_bs__t_StatusCode_i subscription_mgr__l_msg_sc;
1589
0
      constants__t_session_i subscription_mgr__l_session;
1590
0
      constants__t_msg_i subscription_mgr__l_publish_resp_msg;
1591
0
      constants__t_server_request_handle_i subscription_mgr__l_req_handle;
1592
0
      constants__t_request_context_i subscription_mgr__l_req_context;
1593
0
      t_bool subscription_mgr__l_moreNotifs;
1594
0
      t_bool subscription_mgr__l_validPublishingReqQueued;
1595
0
      t_entier4 subscription_mgr__l_new_nb_sub;
1596
      
1597
0
      subscription_core__getall_session(subscription_mgr__p_subscription,
1598
0
         &subscription_mgr__l_session);
1599
0
      subscription_core__server_subscription_core_publish_timeout_check_lifetime(subscription_mgr__l_session,
1600
0
         subscription_mgr__p_subscription,
1601
0
         &subscription_mgr__l_closeSubscription,
1602
0
         &subscription_mgr__l_msg_to_send,
1603
0
         &subscription_mgr__l_publish_resp_msg,
1604
0
         &subscription_mgr__l_req_handle,
1605
0
         &subscription_mgr__l_req_context,
1606
0
         &subscription_mgr__l_validPublishingReqQueued);
1607
0
      if (subscription_mgr__l_closeSubscription == false) {
1608
0
         subscription_core__server_subscription_core_publish_timeout(subscription_mgr__l_session,
1609
0
            subscription_mgr__p_subscription,
1610
0
            subscription_mgr__l_validPublishingReqQueued,
1611
0
            &subscription_mgr__l_msg_to_send,
1612
0
            &subscription_mgr__l_msg_sc,
1613
0
            &subscription_mgr__l_publish_resp_msg,
1614
0
            &subscription_mgr__l_req_handle,
1615
0
            &subscription_mgr__l_req_context,
1616
0
            &subscription_mgr__l_moreNotifs);
1617
0
         if (subscription_mgr__l_msg_to_send == true) {
1618
0
            subscription_mgr__fill_publish_response_msg(subscription_mgr__l_publish_resp_msg,
1619
0
               subscription_mgr__p_subscription,
1620
0
               subscription_mgr__l_moreNotifs);
1621
0
            subscription_core__generate_internal_multi_send_publish_response_event(subscription_mgr__l_session,
1622
0
               subscription_mgr__l_publish_resp_msg,
1623
0
               subscription_mgr__l_req_handle,
1624
0
               subscription_mgr__l_req_context,
1625
0
               subscription_mgr__l_msg_sc);
1626
0
            if (subscription_mgr__l_moreNotifs == true) {
1627
0
               subscription_core__server_subscription_core_check_valid_publish_req_queue(subscription_mgr__l_session,
1628
0
                  &subscription_mgr__l_validPublishingReqQueued);
1629
0
               while ((subscription_mgr__l_moreNotifs == true) &&
1630
0
                  (subscription_mgr__l_validPublishingReqQueued == true)) {
1631
0
                  subscription_core__server_subscription_core_publish_timeout_return_moreNotifs(subscription_mgr__l_session,
1632
0
                     subscription_mgr__p_subscription,
1633
0
                     &subscription_mgr__l_msg_to_send,
1634
0
                     &subscription_mgr__l_msg_sc,
1635
0
                     &subscription_mgr__l_publish_resp_msg,
1636
0
                     &subscription_mgr__l_req_handle,
1637
0
                     &subscription_mgr__l_req_context,
1638
0
                     &subscription_mgr__l_moreNotifs);
1639
0
                  subscription_mgr__fill_publish_response_msg(subscription_mgr__l_publish_resp_msg,
1640
0
                     subscription_mgr__p_subscription,
1641
0
                     subscription_mgr__l_moreNotifs);
1642
0
                  subscription_core__generate_internal_multi_send_publish_response_event(subscription_mgr__l_session,
1643
0
                     subscription_mgr__l_publish_resp_msg,
1644
0
                     subscription_mgr__l_req_handle,
1645
0
                     subscription_mgr__l_req_context,
1646
0
                     subscription_mgr__l_msg_sc);
1647
0
                  if (subscription_mgr__l_moreNotifs == true) {
1648
0
                     subscription_core__server_subscription_core_check_valid_publish_req_queue(subscription_mgr__l_session,
1649
0
                        &subscription_mgr__l_validPublishingReqQueued);
1650
0
                  }
1651
0
               }
1652
0
            }
1653
0
            subscription_core__flush_internal_multi_send_publish_response_events();
1654
0
         }
1655
0
      }
1656
0
      else {
1657
0
         subscription_core__close_subscription(subscription_mgr__p_subscription);
1658
0
         if (subscription_mgr__l_msg_to_send == true) {
1659
0
            subscription_mgr__fill_publish_response_msg(subscription_mgr__l_publish_resp_msg,
1660
0
               subscription_mgr__p_subscription,
1661
0
               false);
1662
0
            subscription_core__generate_internal_send_publish_response_event(subscription_mgr__l_session,
1663
0
               subscription_mgr__l_publish_resp_msg,
1664
0
               subscription_mgr__l_req_handle,
1665
0
               subscription_mgr__l_req_context,
1666
0
               constants_statuscodes_bs__e_sc_ok);
1667
0
         }
1668
0
         subscription_core__get_card_session_seq_subscription(subscription_mgr__l_session,
1669
0
            &subscription_mgr__l_new_nb_sub);
1670
0
         if (subscription_mgr__l_new_nb_sub == 0) {
1671
0
            subscription_core__deallocate_publish_queue_and_gen_no_sub_responses(subscription_mgr__l_session,
1672
0
               true);
1673
0
         }
1674
0
      }
1675
0
   }
1676
0
}
1677
1678
void subscription_mgr__server_subscription_session_inactive(
1679
   const constants__t_session_i subscription_mgr__p_session,
1680
0
   const constants__t_sessionState_i subscription_mgr__p_newSessionState) {
1681
0
   {
1682
0
      t_entier4 subscription_mgr__l_nb_sub;
1683
0
      t_bool subscription_mgr__l_continue;
1684
0
      constants__t_subscription_i subscription_mgr__l_sub;
1685
      
1686
0
      if (((subscription_mgr__p_newSessionState == constants__e_session_scOrphaned) ||
1687
0
         (subscription_mgr__p_newSessionState == constants__e_session_scActivating)) ||
1688
0
         (subscription_mgr__p_newSessionState == constants__e_session_closed)) {
1689
0
         subscription_core__get_card_session_seq_subscription(subscription_mgr__p_session,
1690
0
            &subscription_mgr__l_nb_sub);
1691
0
         if (subscription_mgr__l_nb_sub != 0) {
1692
0
            subscription_core__deallocate_publish_queue_and_gen_no_sub_responses(subscription_mgr__p_session,
1693
0
               false);
1694
0
         }
1695
0
         subscription_core__init_iter_subscription_session(subscription_mgr__p_session,
1696
0
            &subscription_mgr__l_continue);
1697
0
         while (subscription_mgr__l_continue == true) {
1698
0
            subscription_core__continue_iter_subscription_session(&subscription_mgr__l_continue,
1699
0
               &subscription_mgr__l_sub);
1700
0
            if (subscription_mgr__p_newSessionState == constants__e_session_closed) {
1701
0
               subscription_core__async_close_subscription(subscription_mgr__l_sub);
1702
0
            }
1703
0
         }
1704
0
      }
1705
0
   }
1706
0
}
1707
1708
void subscription_mgr__internal_server_close_subscription(
1709
   const constants__t_subscription_i subscription_mgr__p_subscription,
1710
0
   t_bool * const subscription_mgr__bres) {
1711
0
   subscription_core__is_valid_subscription(subscription_mgr__p_subscription,
1712
0
      subscription_mgr__bres);
1713
0
   if (*subscription_mgr__bres == true) {
1714
0
      subscription_core__close_subscription(subscription_mgr__p_subscription);
1715
0
   }
1716
0
}
1717
1718
0
void subscription_mgr__subscription_mgr_UNINITIALISATION(void) {
1719
0
   subscription_core__subscription_core_UNINITIALISATION();
1720
0
}
1721