Coverage Report

Created: 2025-07-18 06:54

/src/S2OPC/src/ClientServer/services/bgenc/address_space.c
Line
Count
Source (jump to first uncovered line)
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            : address_space.c
23
24
 Date                 : 02/04/2025 07:55:15
25
26
 C Translator Version : tradc Java V1.2 (06/02/2022)
27
28
******************************************************************************/
29
30
/*------------------------
31
   Exported Declarations
32
  ------------------------*/
33
#include "address_space.h"
34
35
/*------------------------
36
   INITIALISATION Clause
37
  ------------------------*/
38
0
void address_space__INITIALISATION(void) {
39
0
}
40
41
/*--------------------
42
   OPERATIONS Clause
43
  --------------------*/
44
void address_space__local_is_mandatory_attribute(
45
   const constants__t_NodeClass_i address_space__p_ncl,
46
   const constants__t_AttributeId_i address_space__p_aid,
47
0
   t_bool * const address_space__bres) {
48
0
   *address_space__bres = ((((address_space__p_aid == constants__e_aid_BrowseName) ||
49
0
      (address_space__p_aid == constants__e_aid_DisplayName)) ||
50
0
      (address_space__p_aid == constants__e_aid_NodeClass)) ||
51
0
      (address_space__p_aid == constants__e_aid_NodeId));
52
0
   if (*address_space__bres == false) {
53
0
      switch (address_space__p_ncl) {
54
0
      case constants__e_ncl_Variable:
55
0
         *address_space__bres = ((((((((address_space__p_aid == constants__e_aid_AccessLevel) ||
56
0
            (address_space__p_aid == constants__e_aid_AccessLevelEx)) ||
57
0
            (address_space__p_aid == constants__e_aid_DataType)) ||
58
0
            (address_space__p_aid == constants__e_aid_Historizing)) ||
59
0
            (address_space__p_aid == constants__e_aid_UserAccessLevel)) ||
60
0
            (address_space__p_aid == constants__e_aid_Value)) ||
61
0
            (address_space__p_aid == constants__e_aid_ValueRank)) ||
62
0
            (address_space__p_aid == constants__e_aid_ArrayDimensions));
63
0
         break;
64
0
      case constants__e_ncl_VariableType:
65
0
         *address_space__bres = ((((address_space__p_aid == constants__e_aid_DataType) ||
66
0
            (address_space__p_aid == constants__e_aid_IsAbstract)) ||
67
0
            (address_space__p_aid == constants__e_aid_ValueRank)) ||
68
0
            (address_space__p_aid == constants__e_aid_ArrayDimensions));
69
0
         break;
70
0
      case constants__e_ncl_Object:
71
0
         *address_space__bres = (address_space__p_aid == constants__e_aid_EventNotifier);
72
0
         break;
73
0
      case constants__e_ncl_ObjectType:
74
0
         *address_space__bres = (address_space__p_aid == constants__e_aid_IsAbstract);
75
0
         break;
76
0
      case constants__e_ncl_ReferenceType:
77
0
         *address_space__bres = ((address_space__p_aid == constants__e_aid_IsAbstract) ||
78
0
            (address_space__p_aid == constants__e_aid_Symmetric));
79
0
         break;
80
0
      case constants__e_ncl_DataType:
81
0
         *address_space__bres = ((address_space__p_aid == constants__e_aid_IsAbstract) ||
82
0
            (address_space__p_aid == constants__e_aid_DataTypeDefinition));
83
0
         break;
84
0
      case constants__e_ncl_Method:
85
0
         *address_space__bres = ((address_space__p_aid == constants__e_aid_Executable) ||
86
0
            (address_space__p_aid == constants__e_aid_UserExecutable));
87
0
         break;
88
0
      case constants__e_ncl_View:
89
0
         *address_space__bres = ((address_space__p_aid == constants__e_aid_EventNotifier) ||
90
0
            (address_space__p_aid == constants__e_aid_ContainsNoLoops));
91
0
         break;
92
0
      default:
93
0
         break;
94
0
      }
95
0
   }
96
0
}
97
98
void address_space__is_mandatory_attribute(
99
   const constants__t_NodeClass_i address_space__p_ncl,
100
   const constants__t_AttributeId_i address_space__p_aid,
101
0
   t_bool * const address_space__bres) {
102
0
   address_space__local_is_mandatory_attribute(address_space__p_ncl,
103
0
      address_space__p_aid,
104
0
      address_space__bres);
105
0
}
106
107
void address_space__treat_write_request_WriteValue(
108
   const constants__t_user_i address_space__p_user,
109
   const constants__t_LocaleIds_i address_space__p_locales,
110
   const constants__t_WriteValue_i address_space__p_wvi,
111
0
   constants_statuscodes_bs__t_StatusCode_i * const address_space__p_status) {
112
0
   {
113
0
      constants__t_AttributeId_i address_space__l_aid;
114
0
      constants__t_NodeId_i address_space__l_nid;
115
0
      constants__t_DataValue_i address_space__l_dataValue;
116
0
      constants__t_IndexRange_i address_space__l_index_range;
117
0
      constants_statuscodes_bs__t_StatusCode_i address_space__l_status1;
118
0
      constants__t_DataValue_i address_space__l_prev_dataValue;
119
0
      constants__t_Node_i address_space__l_node;
120
0
      t_bool address_space__l_access_read;
121
0
      t_bool address_space__l_isvalid;
122
0
      t_bool address_space__l_local_treatment;
123
0
      constants__t_WriteValuePointer_i address_space__l_wv;
124
0
      t_bool address_space__l_bres_wv_copy;
125
0
      constants__t_WriteValuePointer_i address_space__l_wv_copy;
126
0
      constants_statuscodes_bs__t_StatusCode_i address_space__l_new_sc;
127
0
      constants__t_Variant_i address_space__l_new_val;
128
0
      constants__t_RawStatusCode address_space__l_new_val_sc;
129
0
      constants__t_Timestamp address_space__l_new_val_ts_src;
130
0
      constants__t_Timestamp address_space__l_new_val_ts_srv;
131
      
132
0
      service_write_decode_bs__getall_WriteValue(address_space__p_wvi,
133
0
         &address_space__l_isvalid,
134
0
         &address_space__l_status1,
135
0
         &address_space__l_nid,
136
0
         &address_space__l_aid,
137
0
         &address_space__l_dataValue,
138
0
         &address_space__l_index_range);
139
0
      address_space__treat_write_1(address_space__l_isvalid,
140
0
         address_space__l_status1,
141
0
         address_space__p_user,
142
0
         address_space__p_locales,
143
0
         address_space__l_nid,
144
0
         address_space__l_aid,
145
0
         address_space__l_dataValue,
146
0
         address_space__l_index_range,
147
0
         address_space__p_status,
148
0
         &address_space__l_prev_dataValue,
149
0
         &address_space__l_node);
150
0
      address_space__l_new_val = constants__c_Variant_indet;
151
0
      service_write_decode_bs__getall_WriteValuePointer(address_space__p_wvi,
152
0
         &address_space__l_wv);
153
0
      if (*address_space__p_status == constants_statuscodes_bs__e_sc_ok) {
154
0
         address_space_authorization__has_access_level_read(address_space__l_node,
155
0
            &address_space__l_access_read);
156
0
         if (address_space__l_access_read == true) {
157
0
            address_space_authorization__read_AddressSpace_Raw_Node_Value_value(address_space__l_node,
158
0
               address_space__l_nid,
159
0
               address_space__l_aid,
160
0
               &address_space__l_new_sc,
161
0
               &address_space__l_new_val,
162
0
               &address_space__l_new_val_sc,
163
0
               &address_space__l_new_val_ts_src);
164
0
            if (address_space__l_new_sc == constants_statuscodes_bs__e_sc_ok) {
165
0
               constants__get_CurrentTimestamp(&address_space__l_new_val_ts_srv);
166
0
               gen_subscription_event_bs__gen_data_changed_event(address_space__l_nid,
167
0
                  address_space__l_aid,
168
0
                  address_space__l_prev_dataValue,
169
0
                  address_space__l_new_val,
170
0
                  address_space__l_new_val_sc,
171
0
                  address_space__l_new_val_ts_src,
172
0
                  address_space__l_new_val_ts_srv);
173
0
            }
174
0
            else {
175
0
               gen_subscription_event_bs__gen_data_changed_event_failed();
176
0
            }
177
0
         }
178
0
      }
179
0
      address_space_authorization__write_AddressSpace_free_dataValue(address_space__l_prev_dataValue);
180
0
      address_space_authorization__read_AddressSpace_free_variant(address_space__l_new_val);
181
0
      address_space_authorization__is_local_service_treatment(&address_space__l_local_treatment);
182
0
      if (address_space__l_local_treatment == false) {
183
0
         write_value_pointer_bs__copy_write_value_pointer_content(address_space__l_wv,
184
0
            &address_space__l_bres_wv_copy,
185
0
            &address_space__l_wv_copy);
186
0
         if (address_space__l_bres_wv_copy == true) {
187
0
            service_response_cb_bs__srv_write_notification(address_space__l_wv_copy,
188
0
               *address_space__p_status);
189
0
         }
190
0
         else {
191
0
            ;
192
0
         }
193
0
      }
194
0
   }
195
0
}
196
197
void address_space__treat_write_1(
198
   const t_bool address_space__isvalid,
199
   const constants_statuscodes_bs__t_StatusCode_i address_space__status,
200
   const constants__t_user_i address_space__p_user,
201
   const constants__t_LocaleIds_i address_space__p_locales,
202
   const constants__t_NodeId_i address_space__nid,
203
   const constants__t_AttributeId_i address_space__aid,
204
   const constants__t_DataValue_i address_space__dataValue,
205
   const constants__t_IndexRange_i address_space__index_range,
206
   constants_statuscodes_bs__t_StatusCode_i * const address_space__serviceStatusCode,
207
   constants__t_DataValue_i * const address_space__prev_dataValue,
208
0
   constants__t_Node_i * const address_space__node) {
209
0
   {
210
0
      t_bool address_space__l_isvalid;
211
0
      constants__t_NodeClass_i address_space__l_ncl;
212
0
      t_bool address_space__l_access_write;
213
0
      t_bool address_space__l_authorized_write;
214
0
      t_bool address_space__l_compatible_type;
215
0
      t_bool address_space__l_compat_with_conv;
216
0
      constants__t_NodeId_i address_space__l_var_datatype_nid;
217
0
      t_entier4 address_space__l_var_vr;
218
0
      constants__t_NodeId_i address_space__l_dv_datatype_nid;
219
0
      t_entier4 address_space__l_dv_datatype_vr;
220
0
      constants__t_Variant_i address_space__l_variant;
221
0
      constants__t_Timestamp address_space__l_source_ts;
222
0
      constants__t_Timestamp address_space__l_server_ts;
223
0
      t_bool address_space__l_server_ts_null;
224
0
      t_bool address_space__l_local_treatment;
225
0
      constants__t_RawStatusCode address_space__l_raw_sc;
226
0
      constants__t_sessionRoles_i address_space__l_roles;
227
      
228
0
      *address_space__node = constants__c_Node_indet;
229
0
      *address_space__prev_dataValue = constants__c_DataValue_indet;
230
0
      if (address_space__isvalid == true) {
231
0
         address_space_authorization__readall_AddressSpace_Node(address_space__nid,
232
0
            &address_space__l_isvalid,
233
0
            address_space__node);
234
0
         if (address_space__l_isvalid == true) {
235
0
            address_space_authorization__get_NodeClass(*address_space__node,
236
0
               &address_space__l_ncl);
237
0
            if ((address_space__aid == constants__e_aid_Value) &&
238
0
               (address_space__l_ncl == constants__e_ncl_Variable)) {
239
0
               address_space_authorization__get_DataType(*address_space__node,
240
0
                  &address_space__l_var_datatype_nid);
241
0
               address_space_authorization__get_ValueRank(*address_space__node,
242
0
                  &address_space__l_var_vr);
243
0
               data_value_pointer_bs__get_conv_DataValue_Variant(address_space__dataValue,
244
0
                  &address_space__l_variant);
245
0
               address_space_authorization__get_conv_Variant_Type(address_space__l_variant,
246
0
                  &address_space__l_dv_datatype_nid);
247
0
               data_value_pointer_bs__get_conv_DataValue_ValueRank(address_space__dataValue,
248
0
                  &address_space__l_dv_datatype_vr);
249
0
               address_space__is_variable_compat_type(address_space__l_dv_datatype_nid,
250
0
                  address_space__l_dv_datatype_vr,
251
0
                  address_space__l_var_datatype_nid,
252
0
                  address_space__l_var_vr,
253
0
                  &address_space__l_compatible_type,
254
0
                  &address_space__l_compat_with_conv);
255
0
               node_id_pointer_bs__free_node_id_pointer(address_space__l_dv_datatype_nid);
256
0
               data_value_pointer_bs__get_conv_DataValue_ServerTimestamp(address_space__dataValue,
257
0
                  &address_space__l_server_ts);
258
0
               constants__is_Timestamps_Null(address_space__l_server_ts,
259
0
                  &address_space__l_server_ts_null);
260
0
               address_space_authorization__is_local_service_treatment(&address_space__l_local_treatment);
261
0
               if ((address_space__l_compatible_type == true) &&
262
0
                  ((address_space__l_server_ts_null == true) ||
263
0
                  (address_space__l_local_treatment == true))) {
264
0
                  data_value_pointer_bs__get_conv_DataValue_SourceTimestamp(address_space__dataValue,
265
0
                     &address_space__l_source_ts);
266
0
                  data_value_pointer_bs__get_conv_DataValue_Status(address_space__dataValue,
267
0
                     &address_space__l_raw_sc);
268
0
                  address_space_authorization__has_access_level_write(*address_space__node,
269
0
                     address_space__l_raw_sc,
270
0
                     address_space__l_source_ts,
271
0
                     &address_space__l_access_write);
272
0
                  if (address_space__l_access_write == true) {
273
0
                     address_space_authorization__get_user_roles(address_space__p_user,
274
0
                        &address_space__l_roles);
275
0
                     address_space_authorization__get_user_authorization(constants__e_operation_type_write,
276
0
                        address_space__nid,
277
0
                        address_space__aid,
278
0
                        address_space__p_user,
279
0
                        address_space__l_roles,
280
0
                        &address_space__l_authorized_write);
281
0
                     if (address_space__l_authorized_write == true) {
282
0
                        address_space_authorization__set_Value(address_space__p_user,
283
0
                           address_space__p_locales,
284
0
                           *address_space__node,
285
0
                           address_space__l_variant,
286
0
                           address_space__l_compat_with_conv,
287
0
                           address_space__index_range,
288
0
                           address_space__serviceStatusCode,
289
0
                           address_space__prev_dataValue);
290
0
                        if (*address_space__serviceStatusCode == constants_statuscodes_bs__e_sc_ok) {
291
0
                           address_space_authorization__set_Value_StatusCode(address_space__p_user,
292
0
                              *address_space__node,
293
0
                              address_space__l_raw_sc);
294
0
                           address_space_authorization__set_Value_SourceTimestamp(address_space__p_user,
295
0
                              *address_space__node,
296
0
                              address_space__l_source_ts);
297
0
                        }
298
0
                     }
299
0
                     else {
300
0
                        *address_space__serviceStatusCode = constants_statuscodes_bs__e_sc_bad_user_access_denied;
301
0
                     }
302
0
                  }
303
0
                  else {
304
0
                     *address_space__serviceStatusCode = constants_statuscodes_bs__e_sc_bad_not_writable;
305
0
                  }
306
0
               }
307
0
               else if (address_space__l_compatible_type == false) {
308
0
                  *address_space__serviceStatusCode = constants_statuscodes_bs__e_sc_bad_type_mismatch;
309
0
               }
310
0
               else {
311
0
                  *address_space__serviceStatusCode = constants_statuscodes_bs__e_sc_bad_write_not_supported;
312
0
               }
313
0
            }
314
0
            else {
315
0
               *address_space__serviceStatusCode = constants_statuscodes_bs__e_sc_bad_not_writable;
316
0
            }
317
0
         }
318
0
         else {
319
0
            *address_space__serviceStatusCode = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
320
0
         }
321
0
      }
322
0
      else {
323
0
         *address_space__serviceStatusCode = address_space__status;
324
0
      }
325
0
   }
326
0
}
327
328
void address_space__is_variable_compat_type(
329
   const constants__t_NodeId_i address_space__p_dv_typ_nid,
330
   const t_entier4 address_space__p_dv_vr,
331
   const constants__t_NodeId_i address_space__p_var_typ_nid,
332
   const t_entier4 address_space__p_var_vr,
333
   t_bool * const address_space__btyp_ok,
334
0
   t_bool * const address_space__btyp_need_conv) {
335
0
   {
336
0
      t_bool address_space__l_node_ids_eq;
337
0
      t_bool address_space__l_dv_is_null_type;
338
0
      t_bool address_space__l_dv_is_sub_typ;
339
0
      t_bool address_space__l_dv_is_sub_typ_or_compat;
340
0
      t_bool address_space__l_dv_is_byte_type;
341
0
      t_bool address_space__l_dv_is_bytestring_type;
342
0
      t_bool address_space__l_var_is_byte_type;
343
0
      t_bool address_space__l_var_is_bytestring_type;
344
0
      t_bool address_space__l_var_is_scalar_vr;
345
0
      t_bool address_space__l_var_is_one_dim_vr;
346
0
      t_bool address_space__l_typ_is_ok;
347
0
      t_bool address_space__l_typ_need_conv;
348
0
      t_bool address_space__l_value_rank_is_ok;
349
      
350
0
      address_space__l_typ_is_ok = false;
351
0
      address_space__l_typ_need_conv = false;
352
0
      address_space__l_value_rank_is_ok = false;
353
0
      if (address_space__p_dv_typ_nid != constants__c_NodeId_indet) {
354
0
         address_space_authorization__is_NodeId_equal(address_space__p_dv_typ_nid,
355
0
            address_space__p_var_typ_nid,
356
0
            &address_space__l_node_ids_eq);
357
0
         address_space_authorization__is_NodeId_equal(address_space__p_dv_typ_nid,
358
0
            constants__c_Null_Type_NodeId,
359
0
            &address_space__l_dv_is_null_type);
360
0
         constants__is_included_ValueRank(address_space__p_dv_vr,
361
0
            address_space__p_var_vr,
362
0
            &address_space__l_value_rank_is_ok);
363
0
         if (address_space__l_node_ids_eq == true) {
364
0
            address_space__l_typ_is_ok = true;
365
0
         }
366
0
         else if (address_space__l_dv_is_null_type == true) {
367
0
            address_space__l_typ_is_ok = true;
368
0
         }
369
0
         else {
370
0
            address_space_typing__is_transitive_subtype(address_space__p_dv_typ_nid,
371
0
               address_space__p_var_typ_nid,
372
0
               &address_space__l_dv_is_sub_typ);
373
0
            address_space_typing__is_transitive_subtype_or_compatible_simple_type_or_enumeration(address_space__l_dv_is_sub_typ,
374
0
               address_space__p_dv_typ_nid,
375
0
               address_space__p_var_typ_nid,
376
0
               &address_space__l_dv_is_sub_typ_or_compat);
377
0
            if (address_space__l_dv_is_sub_typ_or_compat == true) {
378
0
               address_space__l_typ_is_ok = true;
379
0
            }
380
0
            else {
381
0
               address_space_authorization__is_NodeId_equal(address_space__p_dv_typ_nid,
382
0
                  constants__c_ByteString_Type_NodeId,
383
0
                  &address_space__l_dv_is_bytestring_type);
384
0
               address_space_authorization__is_NodeId_equal(address_space__p_dv_typ_nid,
385
0
                  constants__c_Byte_Type_NodeId,
386
0
                  &address_space__l_dv_is_byte_type);
387
0
               address_space_authorization__is_NodeId_equal(address_space__p_var_typ_nid,
388
0
                  constants__c_ByteString_Type_NodeId,
389
0
                  &address_space__l_var_is_bytestring_type);
390
0
               address_space_authorization__is_NodeId_equal(address_space__p_var_typ_nid,
391
0
                  constants__c_Byte_Type_NodeId,
392
0
                  &address_space__l_var_is_byte_type);
393
0
               constants__is_included_ValueRank(constants__c_ValueRank_Scalar,
394
0
                  address_space__p_var_vr,
395
0
                  &address_space__l_var_is_scalar_vr);
396
0
               constants__is_included_ValueRank(constants__c_ValueRank_OneDimension,
397
0
                  address_space__p_var_vr,
398
0
                  &address_space__l_var_is_one_dim_vr);
399
0
               if ((((address_space__l_dv_is_bytestring_type == true) &&
400
0
                  (address_space__p_dv_vr == constants__c_ValueRank_Scalar)) &&
401
0
                  (address_space__l_var_is_byte_type == true)) &&
402
0
                  (address_space__l_var_is_one_dim_vr == true)) {
403
0
                  address_space__l_typ_is_ok = true;
404
0
                  address_space__l_typ_need_conv = true;
405
0
                  address_space__l_value_rank_is_ok = true;
406
0
               }
407
0
               else if ((((address_space__l_dv_is_byte_type == true) &&
408
0
                  (address_space__p_dv_vr == constants__c_ValueRank_OneDimension)) &&
409
0
                  (address_space__l_var_is_bytestring_type == true)) &&
410
0
                  (address_space__l_var_is_scalar_vr == true)) {
411
0
                  address_space__l_typ_is_ok = true;
412
0
                  address_space__l_typ_need_conv = true;
413
0
                  address_space__l_value_rank_is_ok = true;
414
0
               }
415
0
            }
416
0
         }
417
0
      }
418
0
      *address_space__btyp_ok = ((address_space__l_typ_is_ok == true) &&
419
0
         (address_space__l_value_rank_is_ok == true));
420
0
      *address_space__btyp_need_conv = address_space__l_typ_need_conv;
421
0
   }
422
0
}
423
424
void address_space__read_AddressSpace_Attribute_value(
425
   const constants__t_user_i address_space__p_user,
426
   const constants__t_LocaleIds_i address_space__p_locales,
427
   const constants__t_Node_i address_space__p_node,
428
   const constants__t_NodeId_i address_space__p_nid,
429
   const constants__t_AttributeId_i address_space__p_aid,
430
   const constants__t_IndexRange_i address_space__p_index_range,
431
   constants_statuscodes_bs__t_StatusCode_i * const address_space__sc,
432
   constants__t_Variant_i * const address_space__val,
433
   constants__t_RawStatusCode * const address_space__val_sc,
434
   constants__t_Timestamp * const address_space__val_ts_src,
435
0
   constants__t_Timestamp * const address_space__val_ts_srv) {
436
0
   {
437
0
      t_bool address_space__l_user_read_auth;
438
0
      t_bool address_space__l_user_write_auth;
439
0
      t_bool address_space__l_is_range_defined;
440
0
      t_bool address_space__l_user_executable_auth;
441
0
      t_bool address_space__l_local_treatment;
442
0
      constants__t_sessionRoles_i address_space__l_roles;
443
      
444
0
      *address_space__sc = constants_statuscodes_bs__e_sc_ok;
445
0
      constants_statuscodes_bs__get_const_RawStatusCode_Good(address_space__val_sc);
446
0
      *address_space__val = constants__c_Variant_indet;
447
0
      constants__get_CurrentTimestamp(address_space__val_ts_srv);
448
0
      *address_space__val_ts_src = constants__c_Timestamp_null;
449
0
      address_space_authorization__is_IndexRangeDefined(address_space__p_index_range,
450
0
         &address_space__l_is_range_defined);
451
0
      if ((address_space__p_aid != constants__e_aid_Value) &&
452
0
         (address_space__l_is_range_defined == true)) {
453
0
         *address_space__sc = constants_statuscodes_bs__e_sc_bad_index_range_no_data;
454
0
      }
455
0
      else {
456
0
         address_space_authorization__is_local_service_treatment(&address_space__l_local_treatment);
457
0
         switch (address_space__p_aid) {
458
0
         case constants__e_aid_AccessLevel:
459
0
            address_space_authorization__read_AddressSpace_AccessLevel_value(address_space__p_node,
460
0
               address_space__sc,
461
0
               address_space__val);
462
0
            break;
463
0
         case constants__e_aid_AccessLevelEx:
464
0
            address_space_authorization__read_AddressSpace_AccessLevelEx_value(address_space__p_node,
465
0
               address_space__sc,
466
0
               address_space__val);
467
0
            break;
468
0
         case constants__e_aid_BrowseName:
469
0
            address_space_authorization__read_AddressSpace_BrowseName_value(address_space__p_node,
470
0
               address_space__l_local_treatment,
471
0
               address_space__sc,
472
0
               address_space__val);
473
0
            break;
474
0
         case constants__e_aid_ContainsNoLoops:
475
0
            address_space_authorization__read_AddressSpace_ContainsNoLoops_value(address_space__p_node,
476
0
               address_space__sc,
477
0
               address_space__val);
478
0
            break;
479
0
         case constants__e_aid_DataType:
480
0
            address_space_authorization__read_AddressSpace_DataType_value(address_space__p_node,
481
0
               address_space__l_local_treatment,
482
0
               address_space__sc,
483
0
               address_space__val);
484
0
            break;
485
0
         case constants__e_aid_DisplayName:
486
0
            address_space_authorization__read_AddressSpace_DisplayName_value(address_space__p_locales,
487
0
               address_space__p_node,
488
0
               address_space__l_local_treatment,
489
0
               address_space__sc,
490
0
               address_space__val);
491
0
            break;
492
0
         case constants__e_aid_EventNotifier:
493
0
            address_space_authorization__read_AddressSpace_EventNotifier_value(address_space__p_node,
494
0
               address_space__sc,
495
0
               address_space__val);
496
0
            break;
497
0
         case constants__e_aid_Executable:
498
0
            address_space_authorization__read_AddressSpace_Executable_value(address_space__p_node,
499
0
               address_space__sc,
500
0
               address_space__val);
501
0
            break;
502
0
         case constants__e_aid_Historizing:
503
0
            address_space_authorization__read_AddressSpace_Historizing_value(address_space__p_node,
504
0
               address_space__sc,
505
0
               address_space__val);
506
0
            break;
507
0
         case constants__e_aid_IsAbstract:
508
0
            address_space_authorization__read_AddressSpace_IsAbstract_value(address_space__p_node,
509
0
               address_space__sc,
510
0
               address_space__val);
511
0
            break;
512
0
         case constants__e_aid_NodeClass:
513
0
            address_space_authorization__read_AddressSpace_NodeClass_value(address_space__p_node,
514
0
               address_space__sc,
515
0
               address_space__val);
516
0
            break;
517
0
         case constants__e_aid_NodeId:
518
0
            address_space_authorization__read_AddressSpace_NodeId_value(address_space__p_node,
519
0
               address_space__l_local_treatment,
520
0
               address_space__sc,
521
0
               address_space__val);
522
0
            break;
523
0
         case constants__e_aid_Symmetric:
524
0
            address_space_authorization__read_AddressSpace_Symmetric_value(address_space__p_node,
525
0
               address_space__sc,
526
0
               address_space__val);
527
0
            break;
528
0
         case constants__e_aid_UserAccessLevel:
529
0
            address_space_authorization__get_user_roles(address_space__p_user,
530
0
               &address_space__l_roles);
531
0
            address_space_authorization__get_user_authorization(constants__e_operation_type_read,
532
0
               address_space__p_nid,
533
0
               constants__e_aid_Value,
534
0
               address_space__p_user,
535
0
               address_space__l_roles,
536
0
               &address_space__l_user_read_auth);
537
0
            address_space_authorization__get_user_authorization(constants__e_operation_type_write,
538
0
               address_space__p_nid,
539
0
               constants__e_aid_Value,
540
0
               address_space__p_user,
541
0
               address_space__l_roles,
542
0
               &address_space__l_user_write_auth);
543
0
            address_space_authorization__read_AddressSpace_UserAccessLevel_value(address_space__p_node,
544
0
               address_space__l_user_read_auth,
545
0
               address_space__l_user_write_auth,
546
0
               address_space__sc,
547
0
               address_space__val);
548
0
            break;
549
0
         case constants__e_aid_UserExecutable:
550
0
            address_space_authorization__get_user_roles(address_space__p_user,
551
0
               &address_space__l_roles);
552
0
            address_space_authorization__get_user_authorization(constants__e_operation_type_executable,
553
0
               address_space__p_nid,
554
0
               constants__e_aid_Executable,
555
0
               address_space__p_user,
556
0
               address_space__l_roles,
557
0
               &address_space__l_user_executable_auth);
558
0
            address_space_authorization__read_AddressSpace_UserExecutable_value(address_space__p_node,
559
0
               address_space__l_user_executable_auth,
560
0
               address_space__sc,
561
0
               address_space__val);
562
0
            break;
563
0
         case constants__e_aid_DataTypeDefinition:
564
0
            address_space_authorization__read_AddressSpace_DataTypeDefinition_value(address_space__p_node,
565
0
               address_space__l_local_treatment,
566
0
               address_space__sc,
567
0
               address_space__val);
568
0
            break;
569
0
         case constants__e_aid_Value:
570
0
            address_space_authorization__read_AddressSpace_Value_value(address_space__p_locales,
571
0
               address_space__p_node,
572
0
               address_space__p_index_range,
573
0
               address_space__l_local_treatment,
574
0
               address_space__sc,
575
0
               address_space__val,
576
0
               address_space__val_sc,
577
0
               address_space__val_ts_src);
578
0
            break;
579
0
         case constants__e_aid_ValueRank:
580
0
            address_space_authorization__read_AddressSpace_ValueRank_value(address_space__p_node,
581
0
               address_space__sc,
582
0
               address_space__val);
583
0
            break;
584
0
         case constants__e_aid_ArrayDimensions:
585
0
            address_space_authorization__read_AddressSpace_ArrayDimensions_value(address_space__p_node,
586
0
               address_space__l_local_treatment,
587
0
               address_space__sc,
588
0
               address_space__val);
589
0
            break;
590
0
         default:
591
0
            break;
592
0
         }
593
0
      }
594
0
   }
595
0
}
596
597
void address_space__read_AddressSpace_Identities_value(
598
   const constants__t_Node_i address_space__p_identities_node,
599
   const constants__t_NodeId_i address_space__p_identities_nid,
600
   constants__t_Variant_i * const address_space__p_val,
601
0
   constants_statuscodes_bs__t_StatusCode_i * const address_space__p_sc) {
602
0
   {
603
0
      constants__t_RawStatusCode address_space__l_val_sc;
604
0
      constants__t_Timestamp address_space__l_val_ts_src;
605
      
606
0
      address_space_authorization__read_AddressSpace_Raw_Node_Value_value(address_space__p_identities_node,
607
0
         address_space__p_identities_nid,
608
0
         constants__e_aid_Value,
609
0
         address_space__p_sc,
610
0
         address_space__p_val,
611
0
         &address_space__l_val_sc,
612
0
         &address_space__l_val_ts_src);
613
0
   }
614
0
}
615
616
0
void address_space__address_space_UNINITIALISATION(void) {
617
0
   address_space_authorization__address_space_bs_UNINITIALISATION();
618
0
   address_space_authorization__address_space_default_role_permissions_array_bs_UNINITIALISATION();
619
0
}
620
621
void address_space__read_Node_Attribute(
622
   const constants__t_user_i address_space__p_user,
623
   const constants__t_LocaleIds_i address_space__p_locales,
624
   const constants__t_Node_i address_space__p_node,
625
   const constants__t_NodeId_i address_space__p_nid,
626
   const constants__t_AttributeId_i address_space__p_aid,
627
   const constants__t_IndexRange_i address_space__p_index_range,
628
   constants_statuscodes_bs__t_StatusCode_i * const address_space__sc,
629
   constants__t_Variant_i * const address_space__val,
630
   constants__t_RawStatusCode * const address_space__val_sc,
631
   constants__t_Timestamp * const address_space__val_ts_src,
632
0
   constants__t_Timestamp * const address_space__val_ts_srv) {
633
0
   {
634
0
      t_bool address_space__l_is_mandatory_attribute;
635
0
      constants__t_NodeClass_i address_space__l_ncl;
636
0
      t_bool address_space__l_access_read;
637
0
      t_bool address_space__l_user_auth;
638
0
      constants__t_sessionRoles_i address_space__l_roles;
639
      
640
0
      *address_space__sc = constants_statuscodes_bs__e_sc_bad_attribute_id_invalid;
641
0
      constants_statuscodes_bs__get_const_RawStatusCode_BadInvalidState(address_space__val_sc);
642
0
      *address_space__val = constants__c_Variant_indet;
643
0
      *address_space__val_ts_src = constants__c_Timestamp_null;
644
0
      *address_space__val_ts_srv = constants__c_Timestamp_null;
645
0
      address_space_authorization__get_NodeClass(address_space__p_node,
646
0
         &address_space__l_ncl);
647
0
      address_space__local_is_mandatory_attribute(address_space__l_ncl,
648
0
         address_space__p_aid,
649
0
         &address_space__l_is_mandatory_attribute);
650
0
      if (address_space__l_is_mandatory_attribute == true) {
651
0
         if ((address_space__l_ncl == constants__e_ncl_Variable) &&
652
0
            (address_space__p_aid == constants__e_aid_Value)) {
653
0
            address_space_authorization__has_access_level_read(address_space__p_node,
654
0
               &address_space__l_access_read);
655
0
            if (address_space__l_access_read == true) {
656
0
               address_space_authorization__get_user_roles(address_space__p_user,
657
0
                  &address_space__l_roles);
658
0
               address_space_authorization__get_user_authorization(constants__e_operation_type_read,
659
0
                  address_space__p_nid,
660
0
                  address_space__p_aid,
661
0
                  address_space__p_user,
662
0
                  address_space__l_roles,
663
0
                  &address_space__l_user_auth);
664
0
               if (address_space__l_user_auth == true) {
665
0
                  address_space__read_AddressSpace_Attribute_value(address_space__p_user,
666
0
                     address_space__p_locales,
667
0
                     address_space__p_node,
668
0
                     address_space__p_nid,
669
0
                     address_space__p_aid,
670
0
                     address_space__p_index_range,
671
0
                     address_space__sc,
672
0
                     address_space__val,
673
0
                     address_space__val_sc,
674
0
                     address_space__val_ts_src,
675
0
                     address_space__val_ts_srv);
676
0
               }
677
0
               else {
678
0
                  *address_space__sc = constants_statuscodes_bs__e_sc_bad_user_access_denied;
679
0
               }
680
0
            }
681
0
            else {
682
0
               *address_space__sc = constants_statuscodes_bs__e_sc_bad_not_readable;
683
0
            }
684
0
         }
685
0
         else {
686
0
            address_space__read_AddressSpace_Attribute_value(address_space__p_user,
687
0
               address_space__p_locales,
688
0
               address_space__p_node,
689
0
               address_space__p_nid,
690
0
               address_space__p_aid,
691
0
               address_space__p_index_range,
692
0
               address_space__sc,
693
0
               address_space__val,
694
0
               address_space__val_sc,
695
0
               address_space__val_ts_src,
696
0
               address_space__val_ts_srv);
697
0
         }
698
0
      }
699
0
   }
700
0
}
701
702
void address_space__check_nodeId_isValid(
703
   const constants__t_NodeId_i address_space__nodeid,
704
   constants_statuscodes_bs__t_StatusCode_i * const address_space__statusCode,
705
0
   constants__t_Node_i * const address_space__node) {
706
0
   {
707
0
      t_bool address_space__l_isvalid;
708
      
709
0
      *address_space__statusCode = constants_statuscodes_bs__e_sc_ok;
710
0
      *address_space__node = constants__c_Node_indet;
711
0
      if (address_space__nodeid == constants__c_NodeId_indet) {
712
0
         *address_space__statusCode = constants_statuscodes_bs__e_sc_bad_node_id_invalid;
713
0
      }
714
0
      else {
715
0
         address_space_authorization__readall_AddressSpace_Node(address_space__nodeid,
716
0
            &address_space__l_isvalid,
717
0
            address_space__node);
718
0
         if (address_space__l_isvalid == false) {
719
0
            *address_space__statusCode = constants_statuscodes_bs__e_sc_bad_node_id_unknown;
720
0
         }
721
0
      }
722
0
   }
723
0
}
724
725
void address_space__read_variable_compat_type(
726
   const constants__t_NodeId_i address_space__p_dv_typ_nid,
727
   const t_entier4 address_space__p_dv_vr,
728
   const constants__t_NodeId_i address_space__p_var_typ_nid,
729
   const t_entier4 address_space__p_var_vr,
730
   t_bool * const address_space__btyp_ok,
731
0
   t_bool * const address_space__btyp_need_conv) {
732
0
   address_space__is_variable_compat_type(address_space__p_dv_typ_nid,
733
0
      address_space__p_dv_vr,
734
0
      address_space__p_var_typ_nid,
735
0
      address_space__p_var_vr,
736
0
      address_space__btyp_ok,
737
0
      address_space__btyp_need_conv);
738
0
}
739
740
void address_space__addNode_AddressSpace(
741
   const constants__t_ExpandedNodeId_i address_space__p_parentNid,
742
   const constants__t_NodeId_i address_space__p_refTypeId,
743
   const constants__t_NodeId_i address_space__p_newNodeId,
744
   const constants__t_QualifiedName_i address_space__p_browseName,
745
   const constants__t_NodeClass_i address_space__p_nodeClass,
746
   const constants__t_NodeAttributes_i address_space__p_nodeAttributes,
747
   const constants__t_ExpandedNodeId_i address_space__p_typeDefId,
748
0
   constants_statuscodes_bs__t_StatusCode_i * const address_space__sc_addnode) {
749
0
   {
750
0
      t_bool address_space__l_bres;
751
      
752
0
      address_space_authorization__addNode_check_valid_node_attributes_type(address_space__p_nodeClass,
753
0
         address_space__p_nodeAttributes,
754
0
         &address_space__l_bres);
755
0
      if (address_space__l_bres == true) {
756
0
         if (address_space__p_nodeClass == constants__e_ncl_Variable) {
757
0
            address_space_authorization__addNode_AddressSpace_Variable(address_space__p_parentNid,
758
0
               address_space__p_refTypeId,
759
0
               address_space__p_newNodeId,
760
0
               address_space__p_browseName,
761
0
               address_space__p_nodeClass,
762
0
               address_space__p_nodeAttributes,
763
0
               address_space__p_typeDefId,
764
0
               address_space__sc_addnode);
765
0
         }
766
0
         else if (address_space__p_nodeClass == constants__e_ncl_Object) {
767
0
            address_space_authorization__addNode_AddressSpace_Object(address_space__p_parentNid,
768
0
               address_space__p_refTypeId,
769
0
               address_space__p_newNodeId,
770
0
               address_space__p_browseName,
771
0
               address_space__p_nodeClass,
772
0
               address_space__p_nodeAttributes,
773
0
               address_space__p_typeDefId,
774
0
               address_space__sc_addnode);
775
0
         }
776
0
         else if (address_space__p_nodeClass == constants__e_ncl_Method) {
777
0
            address_space_authorization__addNode_AddressSpace_Method(address_space__p_parentNid,
778
0
               address_space__p_refTypeId,
779
0
               address_space__p_newNodeId,
780
0
               address_space__p_browseName,
781
0
               address_space__p_nodeClass,
782
0
               address_space__p_nodeAttributes,
783
0
               address_space__sc_addnode);
784
0
         }
785
0
         else {
786
0
            *address_space__sc_addnode = constants_statuscodes_bs__e_sc_bad_node_class_invalid;
787
0
         }
788
0
         if (*address_space__sc_addnode == constants_statuscodes_bs__e_sc_ok) {
789
0
            address_space_authorization__gen_addNode_event(address_space__p_newNodeId);
790
0
         }
791
0
      }
792
0
      else {
793
0
         *address_space__sc_addnode = constants_statuscodes_bs__e_sc_bad_node_attributes_invalid;
794
0
      }
795
0
   }
796
0
}
797