Coverage Report

Created: 2026-09-04 06:49

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