Coverage Report

Created: 2026-10-15 06:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/open62541_15/src/server/ua_server_internal.h
Line
Count
Source
1
/* This Source Code Form is subject to the terms of the Mozilla Public
2
 * License, v. 2.0. If a copy of the MPL was not distributed with this
3
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
 *
5
 *    Copyright 2019 (c) Fraunhofer IOSB (Author: Klaus Schick)
6
 *    Copyright 2014-2018 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
7
 *    Copyright 2014, 2017 (c) Florian Palm
8
 *    Copyright 2015-2016 (c) Sten GrĂ¼ner
9
 *    Copyright 2015 (c) Chris Iatrou
10
 *    Copyright 2015-2016 (c) Oleksiy Vasylyev
11
 *    Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH
12
 *    Copyright 2017 (c) Julian Grothoff
13
 *    Copyright 2019 (c) Kalycito Infotech Private Limited
14
 *    Copyright 2019 (c) HMS Industrial Networks AB (Author: Jonas Green)
15
 *    Copyright 2021-2025 (c) Fraunhofer IOSB (Author: Andreas Ebner)
16
 *    Copyright 2022 (c) Christian von Arnim, ISW University of Stuttgart (for VDW and umati)
17
 */
18
19
#ifndef UA_SERVER_INTERNAL_H_
20
#define UA_SERVER_INTERNAL_H_
21
22
#define UA_INTERNAL
23
#include <open62541/server.h>
24
#include <open62541/plugin/nodestore.h>
25
26
#include "ua_session.h"
27
#include "ua_services.h"
28
#include "ua_server_async.h"
29
#include "../util/ua_util_internal.h"
30
#include "ziptree.h"
31
32
_UA_BEGIN_DECLS
33
34
#ifdef UA_ENABLE_SUBSCRIPTIONS
35
#include "ua_subscription.h"
36
37
typedef struct {
38
    UA_MonitoredItem monitoredItem;
39
    void *context;
40
    union {
41
        UA_Server_DataChangeNotificationCallback dataChangeCallback;
42
#ifdef UA_ENABLE_SUBSCRIPTIONS_EVENTS
43
        UA_Server_EventNotificationCallback eventCallback;
44
#endif
45
    } callback;
46
47
    /* For Event-MonitoredItems only. The value fields are overwritten before
48
     * each callback. They can contain stray pointers between callbacks. So
49
     * don't clean up the value fields. */
50
    UA_KeyValueMap eventFields;
51
} UA_LocalMonitoredItem;
52
53
#endif /* !UA_ENABLE_SUBSCRIPTIONS */
54
55
/********************/
56
/* GDS Transaction  */
57
/********************/
58
59
typedef enum {
60
    UA_GDSTRANSACTIONSTATE_FRESH,
61
    UA_GDSTRANSACTIONSTATE_PENDING,
62
} UA_GDSTransactionState;
63
64
typedef struct {
65
    UA_ByteString certificate;
66
    UA_ByteString privateKey;
67
    UA_NodeId certificateGroup;
68
    UA_NodeId certificateType;
69
} UA_GDSCertificateInfo;
70
71
typedef struct {
72
    UA_Server *server;
73
    UA_NodeId sessionId;
74
    UA_GDSTransactionState state;
75
76
    UA_ByteString localCsrCertificate;
77
78
    size_t certGroupSize;
79
    UA_CertificateGroup *certGroups;
80
81
    size_t certificateInfosSize;
82
    UA_GDSCertificateInfo *certificateInfos;
83
84
    /* Callback to close all SecureChannels after calling applyChanges
85
     * and freeing the transaction. */
86
    UA_DelayedCallback dc;
87
    /* Prevent duplicate enqueue of the embedded dc (use-after-free). */
88
    UA_Boolean applyChangesQueued;
89
} UA_GDSTransaction;
90
91
UA_StatusCode
92
UA_GDSTransaction_init(UA_GDSTransaction *transaction,
93
                       UA_Server *server,
94
                       const UA_NodeId sessionId);
95
96
/* Returns the appropriate CertificateGroup from the transaction.
97
 * If the CertificateGroup does not exist in the transaction, it will be created. */
98
UA_CertificateGroup*
99
UA_GDSTransaction_getCertificateGroup(UA_GDSTransaction *transaction,
100
                                      const UA_CertificateGroup *certGroup);
101
102
UA_StatusCode
103
UA_GDSTransaction_addCertificateInfo(UA_GDSTransaction *transaction,
104
                                     const UA_NodeId certificateGroupId,
105
                                     const UA_NodeId certificateTypeId,
106
                                     const UA_ByteString *certificate,
107
                                     const UA_ByteString *privateKey);
108
109
void
110
UA_GDSTransaction_clear(UA_GDSTransaction *transaction);
111
112
void
113
UA_GDSTransaction_delete(UA_GDSTransaction *transaction);
114
115
/********************/
116
/*   GDS Manager    */
117
/********************/
118
119
typedef struct {
120
    /* Transaction for certificate management */
121
    UA_GDSTransaction transaction;
122
    /* Contains context information necessary for reading and writing the TrustList as a file type */
123
    void *fileInfoContext;
124
    /* Holds the ID for the repeated callback that verifies the presence of sessions
125
     * with an active transaction or an open trust list */
126
    UA_UInt64 checkSessionCallbackId;
127
} UA_GDSManager;
128
129
void
130
UA_GDSManager_clear(UA_GDSManager *gdsManager);
131
132
/********************/
133
/* Server Component */
134
/********************/
135
136
/* ServerComponents have an explicit lifecycle. But they can only be started
137
 * when the underlying server is started. The starting/stopping of
138
 * ServerComponents is asynchronous. That is, they might require several
139
 * iterations of the EventLoop to finish starting/stopping.
140
 *
141
 * ServerComponents can only be deleted when they are STOPPED. The server will
142
 * not fully shut down as long as there is a component remaining. */
143
144
typedef struct UA_ServerComponent {
145
    UA_UInt64 identifier;
146
    UA_String name;
147
    ZIP_ENTRY(UA_ServerComponent) treeEntry;
148
    UA_LifecycleState state;
149
    UA_Server *server; /* Every ServerComponent has a backpointer to the server */
150
151
    /* Starting fails if the server is not also already started */
152
    UA_StatusCode (*start)(struct UA_ServerComponent *sc, UA_Server *server);
153
154
    /* Stopping is asynchronous and might need a few iterations of the main-loop
155
     * to succeed. */
156
    void (*stop)(struct UA_ServerComponent *sc);
157
158
    /* Clean up the ServerComponent. Can fail if it is not stopped. This does
159
     * not free the memory and does not remove from the ziptree. */
160
    UA_StatusCode (*clear)(struct UA_ServerComponent *sc);
161
162
    /* To be set by the server. So the component can notify the server about
163
     * asynchronous state changes. */
164
    void (*notifyState)(struct UA_ServerComponent *sc,
165
                        UA_LifecycleState state);
166
} UA_ServerComponent;
167
168
enum ZIP_CMP
169
cmpServerComponent(const UA_UInt64 *a, const UA_UInt64 *b);
170
171
typedef ZIP_HEAD(UA_ServerComponentTree, UA_ServerComponent) UA_ServerComponentTree;
172
173
39.2k
ZIP_FUNCTIONS(UA_ServerComponentTree, UA_ServerComponent, treeEntry,
ua_server.c:UA_ServerComponentTree_ZIP_INSERT
Line
Count
Source
173
ZIP_FUNCTIONS(UA_ServerComponentTree, UA_ServerComponent, treeEntry,
ua_server.c:UA_ServerComponentTree_ZIP_ITER
Line
Count
Source
173
ZIP_FUNCTIONS(UA_ServerComponentTree, UA_ServerComponent, treeEntry,
ua_server.c:UA_ServerComponentTree_ZIP_REMOVE
Line
Count
Source
173
ZIP_FUNCTIONS(UA_ServerComponentTree, UA_ServerComponent, treeEntry,
Unexecuted instantiation: fuzz_msg_message.cc:UA_ServerComponentTree_ZIP_ITER(UA_ServerComponentTree*, void* (*)(void*, UA_ServerComponent*), void*)
Unexecuted instantiation: fuzz_opn_message.cc:UA_ServerComponentTree_ZIP_ITER(UA_ServerComponentTree*, void* (*)(void*, UA_ServerComponent*), void*)
fuzz_binary_message.cc:UA_ServerComponentTree_ZIP_ITER(UA_ServerComponentTree*, void* (*)(void*, UA_ServerComponent*), void*)
Line
Count
Source
173
ZIP_FUNCTIONS(UA_ServerComponentTree, UA_ServerComponent, treeEntry,
174
              UA_UInt64, identifier, cmpServerComponent)
175
176
/* Assigns the identifier if the pointer is non-NULL.
177
 * Starts the component if the server is started. */
178
void
179
addServerComponent(UA_Server *server, UA_ServerComponent *sc,
180
                   UA_UInt64 *identifier);
181
182
UA_ServerComponent *
183
getServerComponentByName(UA_Server *server, UA_String name);
184
185
/********************/
186
/* Server Structure */
187
/********************/
188
189
typedef struct session_list_entry {
190
    UA_DelayedCallback cleanupCallback;
191
    LIST_ENTRY(session_list_entry) pointers;
192
    UA_Session session;
193
} session_list_entry;
194
195
struct UA_Server {
196
    /* Config */
197
    UA_ServerConfig config;
198
199
    /* Runtime state */
200
    UA_DateTime startTime;
201
    UA_DateTime endTime; /* Zeroed out. If a time is set, then the server shuts
202
                          * down once the time has been reached */
203
204
    UA_LifecycleState state;
205
    UA_UInt64 houseKeepingCallbackId;
206
207
    UA_UInt64 serverComponentIds; /* Counter to assign ids from */
208
    UA_ServerComponentTree serverComponents;
209
210
    UA_AsyncManager asyncManager;
211
212
    /* Custom datatypes that are internally created and cleaned up at the end of
213
     * the server lifecycle. The next->pointer points to the server config. So
214
     * we can use customTypes_internal as the universal entry. */
215
    UA_DataTypeArray *customTypes_internal;
216
    size_t customTypes_internalSize;
217
218
    /* Session Management */
219
    LIST_HEAD(session_list, session_list_entry) sessions;
220
    UA_UInt32 sessionCount;
221
    UA_UInt32 activeSessionCount;
222
223
    /* Session for local access to the services for upkeep and the C API. Comes
224
     * equipped with all possible access rights (Session Id: 1). */
225
    UA_Session adminSession;
226
227
    /* SecureChannels */
228
    TAILQ_HEAD(, UA_SecureChannel) channels;
229
    UA_UInt32 lastChannelId;
230
    UA_UInt32 lastTokenId;
231
232
    /* Namespaces */
233
    size_t namespacesSize;
234
    UA_String *namespaces;
235
236
    /* For bootstrapping, omit some consistency checks, creating a reference to
237
     * the parent and member instantiation */
238
    UA_Boolean bootstrapNS0;
239
240
    /* Current depth while recursively instantiating node children */
241
    size_t nodeInstantiationDepth;
242
243
    /* Subscriptions */
244
#ifdef UA_ENABLE_SUBSCRIPTIONS
245
    /* The admin session is initialized with a special subscription. This
246
     * subscription generates delayed callbacks with notifications for local
247
     * processing. */
248
    UA_Subscription *adminSubscription;
249
250
    size_t subscriptionsSize;  /* Number of active subscriptions */
251
    size_t monitoredItemsSize; /* Number of active monitored items */
252
    LIST_HEAD(, UA_Subscription) subscriptions; /* All subscriptions in the
253
                                                 * server. They may be detached
254
                                                 * from a session. */
255
    UA_UInt32 lastSubscriptionId; /* To generate unique SubscriptionIds */
256
257
# ifdef UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS
258
    LIST_HEAD(, UA_ConditionSource) conditionSources;
259
# endif
260
#endif
261
262
#if UA_MULTITHREADING >= 100
263
    UA_Lock serviceMutex;
264
#endif
265
266
    /* Statistics */
267
    UA_SecureChannelStatistics secureChannelStatistics;
268
    UA_ServerDiagnosticsSummaryDataType serverDiagnosticsSummary;
269
270
    /* GDS Manager for certificate management */
271
    UA_GDSManager gdsManager;
272
};
273
274
/* In case the configuration was updated. Make the ->next pointer in the
275
 * internal customTypes point into the configuration. */
276
const UA_DataTypeArray *
277
serverCustomTypes(UA_Server *server);
278
279
/***********************/
280
/* References Handling */
281
/***********************/
282
283
enum ZIP_CMP
284
cmpRefTargetId(const void *a, const void *b);
285
286
enum ZIP_CMP
287
cmpRefTargetName(const void *a, const void *b);
288
289
/* Static inline methods for tree handling */
290
typedef ZIP_HEAD(UA_ReferenceIdTree, UA_ReferenceTargetTreeElem) UA_ReferenceIdTree;
291
11.7M
ZIP_FUNCTIONS(UA_ReferenceIdTree, UA_ReferenceTargetTreeElem, idTreeEntry,
ua_nodes.c:UA_ReferenceIdTree_ZIP_ITER
Line
Count
Source
291
ZIP_FUNCTIONS(UA_ReferenceIdTree, UA_ReferenceTargetTreeElem, idTreeEntry,
ua_nodes.c:UA_ReferenceIdTree_ZIP_INSERT
Line
Count
Source
291
ZIP_FUNCTIONS(UA_ReferenceIdTree, UA_ReferenceTargetTreeElem, idTreeEntry,
ua_nodes.c:UA_ReferenceIdTree_ZIP_REMOVE
Line
Count
Source
291
ZIP_FUNCTIONS(UA_ReferenceIdTree, UA_ReferenceTargetTreeElem, idTreeEntry,
Unexecuted instantiation: ua_services_view.c:UA_ReferenceIdTree_ZIP_UNZIP
Unexecuted instantiation: ua_services_view.c:UA_ReferenceIdTree_ZIP_ZIP
292
              UA_ReferenceTargetTreeElem, target, cmpRefTargetId)
293
294
typedef ZIP_HEAD(UA_ReferenceNameTree, UA_ReferenceTargetTreeElem) UA_ReferenceNameTree;
295
9.99M
ZIP_FUNCTIONS(UA_ReferenceNameTree, UA_ReferenceTargetTreeElem, nameTreeEntry,
ua_nodes.c:UA_ReferenceNameTree_ZIP_INSERT
Line
Count
Source
295
ZIP_FUNCTIONS(UA_ReferenceNameTree, UA_ReferenceTargetTreeElem, nameTreeEntry,
ua_nodes.c:UA_ReferenceNameTree_ZIP_REMOVE
Line
Count
Source
295
ZIP_FUNCTIONS(UA_ReferenceNameTree, UA_ReferenceTargetTreeElem, nameTreeEntry,
ua_services_view.c:UA_ReferenceNameTree_ZIP_ITER_KEY
Line
Count
Source
295
ZIP_FUNCTIONS(UA_ReferenceNameTree, UA_ReferenceTargetTreeElem, nameTreeEntry,
296
              UA_ReferenceTarget, target, cmpRefTargetName)
297
298
/**************************/
299
/* SecureChannel Handling */
300
/**************************/
301
302
/* Session and channel can be NULL, only used for logging.
303
 * Ad can be NULL, then the ApplicationUri is not checked. */
304
UA_StatusCode
305
validateCertificate(UA_Server *server, UA_CertificateGroup *cg,
306
                    UA_SecureChannel *channel, UA_Session *session,
307
                    const char *logPrefix,
308
                    const UA_ApplicationDescription *ad,
309
                    const UA_ByteString certificate);
310
311
void
312
serverNetworkCallback(UA_ConnectionManager *cm, uintptr_t connectionId,
313
                      void *application, void **connectionContext,
314
                      UA_ConnectionState state,
315
                      const UA_KeyValueMap *params,
316
                      UA_ByteString msg);
317
318
UA_StatusCode
319
sendServiceFault(UA_Server *server, UA_SecureChannel *channel, UA_UInt32 requestId,
320
                 UA_UInt32 requestHandle, UA_StatusCode statusCode);
321
322
/* Validate the remote certificate received in the OPN message and create the
323
 * SecureChannel context. This is needed before OPN is decrypted. */
324
UA_StatusCode
325
processOPN_AsymHeader(void *application, UA_SecureChannel *channel,
326
                      const UA_AsymmetricAlgorithmSecurityHeader *asymHeader);
327
328
/* Gets the a pointer to the context of a security policy supported by the
329
 * server matched by the security policy uri. */
330
UA_SecurityPolicy *
331
getSecurityPolicyByUri(const UA_Server *server,
332
                       const UA_String *securityPolicyUri);
333
334
/* Get only the #None or #Basic256Sha256 postfix of a SecurityPolicyUri */
335
UA_String
336
securityPolicyUriPostfix(const UA_String uri);
337
338
UA_SecurityPolicy *
339
getSecurityPolicyByPostfix(const UA_Server *server,
340
                           const UA_String uriPostfix);
341
342
void
343
notifySecureChannel(UA_Server *server, UA_SecureChannel *channel,
344
                    UA_ApplicationNotificationType type);
345
346
/********************/
347
/* Session Handling */
348
/********************/
349
350
UA_StatusCode
351
getNamespaceByName(UA_Server *server, const UA_String namespaceUri,
352
                   size_t *foundIndex);
353
354
UA_StatusCode
355
getNamespaceByIndex(UA_Server *server, const size_t namespaceIndex,
356
                    UA_String *foundUri);
357
358
UA_StatusCode
359
getBoundSession(UA_Server *server, const UA_SecureChannel *channel,
360
                const UA_NodeId *token, UA_Session **session);
361
362
UA_StatusCode
363
UA_Session_create(UA_Server *server, UA_SecureChannel *channel,
364
                  const UA_CreateSessionRequest *request,
365
                  UA_Session **session);
366
367
void
368
UA_Session_remove(UA_Server *server, UA_Session *session,
369
                  UA_ShutdownReason shutdownReason);
370
371
void
372
cleanupSessions(UA_Server *server, UA_DateTime nowMonotonic);
373
374
UA_Session *
375
getSessionByToken(UA_Server *server, const UA_NodeId *token);
376
377
UA_Session *
378
getSessionById(UA_Server *server, const UA_NodeId *sessionId);
379
380
/*****************/
381
/* Node Handling */
382
/*****************/
383
384
/* Calls the callback with the node retrieved from the nodestore on top of the
385
 * stack. Either a copy or the original node for in-situ editing. Depends on
386
 * multithreading and the nodestore.*/
387
typedef UA_StatusCode (*UA_EditNodeCallback)(UA_Server*, UA_Session*,
388
                                             UA_Node *node, void*);
389
UA_StatusCode
390
editNode(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
391
         UA_UInt32 attributeMask, UA_ReferenceTypeSet references,
392
         UA_BrowseDirection referenceDirections,
393
         UA_EditNodeCallback callback, void *data);
394
395
/* Search for a child with a given browseNamee. Returns the first match. Does
396
 * not touch outChildNodeId if no child is found. */
397
UA_StatusCode
398
findChildByBrowsename(UA_Server *server, UA_Session *session,
399
                      const UA_NodeId parentId, UA_NodeClass nodeClassMask,
400
                      const UA_Byte refType, const UA_NodeId refTypeId,
401
                      const UA_QualifiedName *browseName,
402
                      UA_NodeId *outChildNodeId);
403
404
/*********************/
405
/* Utility Functions */
406
/*********************/
407
408
void setServerLifecycleState(UA_Server *server, UA_LifecycleState state);
409
410
void setupNs1Uri(UA_Server *server);
411
UA_UInt16 addNamespace(UA_Server *server, const UA_String name);
412
413
UA_Boolean
414
UA_Node_hasSubTypeOrInstances(const UA_NodeHead *head);
415
416
/* Recursively searches "upwards" in the tree following specific reference types */
417
UA_Boolean
418
isNodeInTree(UA_Server *server, const UA_NodeId *leafNode,
419
             const UA_NodeId *nodeToFind, const UA_ReferenceTypeSet *relevantRefs);
420
421
/* Convenience function with just a single ReferenceTypeIndex */
422
UA_Boolean
423
isNodeInTree_singleRef(UA_Server *server, const UA_NodeId *leafNode,
424
                       const UA_NodeId *nodeToFind, const UA_Byte relevantRefTypeIndex);
425
426
/* Returns an array with the hierarchy of nodes. The start nodes can be returned
427
 * as well. The returned array starts at the leaf and continues "upwards" or
428
 * "downwards". Duplicate entries are removed. */
429
UA_StatusCode
430
browseRecursive(UA_Server *server, size_t startNodesSize, const UA_NodeId *startNodes,
431
                UA_BrowseDirection browseDirection, const UA_ReferenceTypeSet *refTypes,
432
                UA_UInt32 nodeClassMask, UA_Boolean includeStartNodes,
433
                size_t *resultsSize, UA_ExpandedNodeId **results);
434
435
/* Get the bitfield indices of a ReferenceType and possibly its subtypes.
436
 * refType must point to a ReferenceTypeNode. */
437
UA_StatusCode
438
referenceTypeIndices(UA_Server *server, const UA_NodeId *refType,
439
                     UA_ReferenceTypeSet *indices, UA_Boolean includeSubtypes);
440
441
/* Returns the recursive type hierarchy for an Object/ObjectType or
442
 * Variable/VariableType. Does not return interfaces. */
443
UA_StatusCode
444
getTypeAndInterfaceHierarchy(UA_Server *server, const UA_NodeId *leafNode,
445
                             UA_Boolean includeLeaf, UA_NodeId **typeHierarchy,
446
                             size_t *typeHierarchySize);
447
448
/* Returns the recursive interface hierarchy of the node */
449
UA_StatusCode
450
getAllInterfaces(UA_Server *server, const UA_NodeId *objectNode,
451
                 UA_NodeId **interfaceNodes, size_t *interfaceNodesSize);
452
453
#ifdef UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS
454
455
UA_StatusCode
456
UA_getConditionId(UA_Server *server, const UA_NodeId *conditionNodeId,
457
                  UA_NodeId *outConditionId);
458
459
void
460
UA_ConditionList_delete(UA_Server *server);
461
462
UA_Boolean
463
isConditionOrBranch(UA_Server *server,
464
                    const UA_NodeId *condition,
465
                    const UA_NodeId *conditionSource,
466
                    UA_Boolean *isCallerAC);
467
468
#endif /* UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS */
469
470
/* Returns the first "HasTypeDefinition" or "HasSubtype" reference to the
471
 * (parent) type. Some types have very many instances. If the type is created
472
 * ad-hoc by the Nodestore, the attributeMask and reference characterization can
473
 * be used to return only relevant attributes/references. */
474
const UA_Node *
475
getNodeType(UA_Server *server, const UA_NodeHead *nodeHead,
476
            UA_UInt32 attributeMask, UA_ReferenceTypeSet references,
477
            UA_BrowseDirection referenceDirections);
478
479
/* Returns whether the response is done (async call or not) */
480
UA_Boolean
481
processRequest(UA_Server *server, UA_SecureChannel *channel,
482
               UA_UInt32 requestId, UA_ServiceDescription *sd,
483
               const UA_Request *request, UA_Response *response);
484
485
UA_StatusCode
486
sendResponse(UA_Server *server, UA_SecureChannel *channel, UA_UInt32 requestId,
487
             UA_Response *response, const UA_DataType *responseType);
488
489
typedef void (*UA_ServiceOperation)(UA_Server *server, UA_Session *session,
490
                                    const void *context,
491
                                    const void *requestOperation,
492
                                    void *responseOperation);
493
494
/* Many services come as an array of operations. This function generalizes the
495
 * processing of the operations. */
496
UA_StatusCode
497
allocProcessServiceOperations(UA_Server *server, UA_Session *session,
498
                              UA_ServiceOperation operationCallback,
499
                              const void *context,
500
                              const size_t *requestOperations,
501
                              const UA_DataType *requestOperationsType,
502
                              size_t *responseOperations,
503
                              const UA_DataType *responseOperationsType)
504
    UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT;
505
506
/*********************/
507
/* Locking/Unlocking */
508
/*********************/
509
510
/* In order to prevent deadlocks between the EventLoop mutex and the
511
 * server-mutex, we always take the EventLoop mutex first. */
512
513
void lockServer(UA_Server *server);
514
void unlockServer(UA_Server *server);
515
516
/******************************************/
517
/* Internal function calls, without locks */
518
/******************************************/
519
UA_StatusCode
520
deleteNode(UA_Server *server, const UA_NodeId nodeId,
521
           UA_Boolean deleteReferences);
522
523
UA_StatusCode
524
addRef(UA_Server *server, const UA_NodeId sourceId,
525
       const UA_NodeId referenceTypeId, const UA_NodeId targetId,
526
       UA_Boolean forward);
527
528
UA_StatusCode
529
deleteReference(UA_Server *server, const UA_NodeId sourceNodeId,
530
                const UA_NodeId referenceTypeId, UA_Boolean isForward,
531
                const UA_ExpandedNodeId targetNodeId,
532
                UA_Boolean deleteBidirectional);
533
534
UA_StatusCode
535
addRefWithSession(UA_Server *server, UA_Session *session, const UA_NodeId *sourceId,
536
                  const UA_NodeId *referenceTypeId, const UA_NodeId *targetId,
537
                  UA_Boolean forward);
538
539
UA_StatusCode
540
setVariableNode_callbackValueSource(UA_Server *server, const UA_NodeId nodeId,
541
                                    const UA_CallbackValueSource evs);
542
543
UA_StatusCode
544
setVariableNode_internalValueSource(UA_Server *server, const UA_NodeId nodeId,
545
                                    const UA_DataValue *value,
546
                                    const UA_ValueSourceNotifications *notifications);
547
548
UA_StatusCode
549
setMethodNode_callback(UA_Server *server, const UA_NodeId methodNodeId,
550
                       UA_MethodCallback methodCallback);
551
552
UA_StatusCode
553
setNodeTypeLifecycle(UA_Server *server, UA_NodeId nodeId,
554
                     UA_NodeTypeLifecycle lifecycle);
555
556
UA_StatusCode
557
writeAttribute(UA_Server *server, UA_Session *session,
558
               const UA_NodeId *nodeId, const UA_AttributeId attributeId,
559
               const void *attr, const UA_DataType *attr_type);
560
561
#define UA_WRITEATTRIBUTEFUNCS(ATTR, ATTRID, TYPE, TYPENAME)            \
562
    static UA_INLINE UA_StatusCode                                      \
563
    write##ATTR##Attribute(UA_Server *server, const UA_NodeId nodeId,   \
564
70.4k
                           const TYPE value) {                          \
565
70.4k
        return writeAttribute(server, &server->adminSession, &nodeId,   \
566
70.4k
                              ATTRID, &value, &UA_TYPES[UA_TYPES_##TYPENAME]); \
567
70.4k
    }                                                                   \
Unexecuted instantiation: ua_session.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_session.c:writeValueRankAttribute
Unexecuted instantiation: ua_session.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_session.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_nodes.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_nodes.c:writeValueRankAttribute
Unexecuted instantiation: ua_nodes.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_nodes.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_server.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server.c:writeValueRankAttribute
Unexecuted instantiation: ua_server.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server.c:writeMinimumSamplingIntervalAttribute
ua_server_ns0.c:writeValueRankAttribute
Line
Count
Source
564
35.2k
                           const TYPE value) {                          \
565
35.2k
        return writeAttribute(server, &server->adminSession, &nodeId,   \
566
35.2k
                              ATTRID, &value, &UA_TYPES[UA_TYPES_##TYPENAME]); \
567
35.2k
    }                                                                   \
ua_server_ns0.c:writeMinimumSamplingIntervalAttribute
Line
Count
Source
564
17.6k
                           const TYPE value) {                          \
565
17.6k
        return writeAttribute(server, &server->adminSession, &nodeId,   \
566
17.6k
                              ATTRID, &value, &UA_TYPES[UA_TYPES_##TYPENAME]); \
567
17.6k
    }                                                                   \
ua_server_ns0.c:writeAccessLevelAttribute
Line
Count
Source
564
17.6k
                           const TYPE value) {                          \
565
17.6k
        return writeAttribute(server, &server->adminSession, &nodeId,   \
566
17.6k
                              ATTRID, &value, &UA_TYPES[UA_TYPES_##TYPENAME]); \
567
17.6k
    }                                                                   \
Unexecuted instantiation: ua_server_ns0.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeValueRankAttribute
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_server_ns0_gds.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_ns0_gds.c:writeValueRankAttribute
Unexecuted instantiation: ua_server_ns0_gds.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server_ns0_gds.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_server_config.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_config.c:writeValueRankAttribute
Unexecuted instantiation: ua_server_config.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server_config.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_server_binary.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_binary.c:writeValueRankAttribute
Unexecuted instantiation: ua_server_binary.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server_binary.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_server_utils.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_utils.c:writeValueRankAttribute
Unexecuted instantiation: ua_server_utils.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server_utils.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_server_async.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_server_async.c:writeValueRankAttribute
Unexecuted instantiation: ua_server_async.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_server_async.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_subscription.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_subscription.c:writeValueRankAttribute
Unexecuted instantiation: ua_subscription.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_subscription.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_subscription_datachange.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_subscription_datachange.c:writeValueRankAttribute
Unexecuted instantiation: ua_subscription_datachange.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_subscription_datachange.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_subscription_event.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_subscription_event.c:writeValueRankAttribute
Unexecuted instantiation: ua_subscription_event.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_subscription_event.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeValueRankAttribute
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services.c:writeValueRankAttribute
Unexecuted instantiation: ua_services.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_view.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_view.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_view.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_view.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_method.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_method.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_method.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_method.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_session.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_session.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_session.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_session.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_attribute.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_attribute.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_attribute.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_attribute.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_discovery.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_discovery.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_discovery.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_discovery.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_subscription.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_subscription.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_subscription.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_subscription.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_monitoreditem.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_monitoreditem.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_monitoreditem.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_monitoreditem.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_securechannel.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_securechannel.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_securechannel.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_securechannel.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_services_nodemanagement.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_services_nodemanagement.c:writeValueRankAttribute
Unexecuted instantiation: ua_services_nodemanagement.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_services_nodemanagement.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_connection.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_connection.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_connection.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_connection.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_dataset.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_dataset.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_dataset.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_dataset.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_writer.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_writer.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_writer.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_writer.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_writergroup.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_writergroup.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_writergroup.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_writergroup.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_reader.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_reader.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_reader.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_reader.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_readergroup.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_readergroup.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_readergroup.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_readergroup.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_manager.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_manager.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_manager.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_manager.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_ns0.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_ns0.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_ns0.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_ns0.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeValueRankAttribute
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_discovery_mdns.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_discovery_mdns.c:writeValueRankAttribute
Unexecuted instantiation: ua_discovery_mdns.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_discovery_mdns.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: ua_discovery.c:writeIsAbstractAttribute
Unexecuted instantiation: ua_discovery.c:writeValueRankAttribute
Unexecuted instantiation: ua_discovery.c:writeAccessLevelAttribute
Unexecuted instantiation: ua_discovery.c:writeMinimumSamplingIntervalAttribute
Unexecuted instantiation: fuzz_server_services.cc:writeIsAbstractAttribute(UA_Server*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_server_services.cc:writeValueRankAttribute(UA_Server*, UA_NodeId, int)
Unexecuted instantiation: fuzz_server_services.cc:writeAccessLevelAttribute(UA_Server*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_server_services.cc:writeMinimumSamplingIntervalAttribute(UA_Server*, UA_NodeId, double)
Unexecuted instantiation: fuzz_tcp_message.cc:writeIsAbstractAttribute(UA_Server*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_tcp_message.cc:writeValueRankAttribute(UA_Server*, UA_NodeId, int)
Unexecuted instantiation: fuzz_tcp_message.cc:writeAccessLevelAttribute(UA_Server*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_tcp_message.cc:writeMinimumSamplingIntervalAttribute(UA_Server*, UA_NodeId, double)
Unexecuted instantiation: fuzz_msg_message.cc:writeIsAbstractAttribute(UA_Server*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_msg_message.cc:writeValueRankAttribute(UA_Server*, UA_NodeId, int)
Unexecuted instantiation: fuzz_msg_message.cc:writeAccessLevelAttribute(UA_Server*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_msg_message.cc:writeMinimumSamplingIntervalAttribute(UA_Server*, UA_NodeId, double)
Unexecuted instantiation: fuzz_opn_message.cc:writeIsAbstractAttribute(UA_Server*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_opn_message.cc:writeValueRankAttribute(UA_Server*, UA_NodeId, int)
Unexecuted instantiation: fuzz_opn_message.cc:writeAccessLevelAttribute(UA_Server*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_opn_message.cc:writeMinimumSamplingIntervalAttribute(UA_Server*, UA_NodeId, double)
Unexecuted instantiation: fuzz_process_request.cc:writeIsAbstractAttribute(UA_Server*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_process_request.cc:writeValueRankAttribute(UA_Server*, UA_NodeId, int)
Unexecuted instantiation: fuzz_process_request.cc:writeAccessLevelAttribute(UA_Server*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_process_request.cc:writeMinimumSamplingIntervalAttribute(UA_Server*, UA_NodeId, double)
Unexecuted instantiation: fuzz_binary_message.cc:writeIsAbstractAttribute(UA_Server*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_binary_message.cc:writeValueRankAttribute(UA_Server*, UA_NodeId, int)
Unexecuted instantiation: fuzz_binary_message.cc:writeAccessLevelAttribute(UA_Server*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_binary_message.cc:writeMinimumSamplingIntervalAttribute(UA_Server*, UA_NodeId, double)
568
    static UA_INLINE UA_StatusCode                                      \
569
    write##ATTR##AttributeWithSession(UA_Server *server, UA_Session *session, \
570
0
                                      const UA_NodeId nodeId, const TYPE value) { \
571
0
        return writeAttribute(server, session, &nodeId, ATTRID, &value, \
572
0
                              &UA_TYPES[UA_TYPES_##TYPENAME]);          \
573
0
    }
Unexecuted instantiation: ua_session.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_session.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_session.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_session.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_nodes.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_nodes.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_nodes.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_nodes.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_ns0.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_ns0.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_ns0.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_ns0.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_ns0_gds.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_ns0_gds.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_ns0_gds.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_ns0_gds.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_config.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_config.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_config.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_config.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_binary.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_binary.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_binary.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_binary.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_utils.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_utils.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_utils.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_utils.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_server_async.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_server_async.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_server_async.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_server_async.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_subscription.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_subscription.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_subscription.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_subscription.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_subscription_datachange.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_subscription_datachange.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_subscription_datachange.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_subscription_datachange.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_subscription_event.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_subscription_event.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_subscription_event.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_subscription_event.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_view.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_view.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_view.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_view.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_method.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_method.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_method.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_method.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_session.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_session.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_session.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_session.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_attribute.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_attribute.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_attribute.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_attribute.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_discovery.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_discovery.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_discovery.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_discovery.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_subscription.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_subscription.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_subscription.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_subscription.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_monitoreditem.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_monitoreditem.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_monitoreditem.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_monitoreditem.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_securechannel.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_securechannel.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_securechannel.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_securechannel.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_services_nodemanagement.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_services_nodemanagement.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_services_nodemanagement.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_services_nodemanagement.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_connection.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_connection.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_connection.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_connection.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_dataset.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_dataset.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_dataset.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_dataset.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_writer.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_writer.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_writer.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_writer.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_writergroup.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_writergroup.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_writergroup.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_writergroup.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_reader.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_reader.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_reader.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_reader.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_readergroup.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_readergroup.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_readergroup.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_readergroup.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_manager.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_manager.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_manager.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_manager.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_discovery_mdns.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_discovery_mdns.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_discovery_mdns.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_discovery_mdns.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: ua_discovery.c:writeIsAbstractAttributeWithSession
Unexecuted instantiation: ua_discovery.c:writeValueRankAttributeWithSession
Unexecuted instantiation: ua_discovery.c:writeAccessLevelAttributeWithSession
Unexecuted instantiation: ua_discovery.c:writeMinimumSamplingIntervalAttributeWithSession
Unexecuted instantiation: fuzz_server_services.cc:writeIsAbstractAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_server_services.cc:writeValueRankAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, int)
Unexecuted instantiation: fuzz_server_services.cc:writeAccessLevelAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_server_services.cc:writeMinimumSamplingIntervalAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, double)
Unexecuted instantiation: fuzz_tcp_message.cc:writeIsAbstractAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_tcp_message.cc:writeValueRankAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, int)
Unexecuted instantiation: fuzz_tcp_message.cc:writeAccessLevelAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_tcp_message.cc:writeMinimumSamplingIntervalAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, double)
Unexecuted instantiation: fuzz_msg_message.cc:writeIsAbstractAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_msg_message.cc:writeValueRankAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, int)
Unexecuted instantiation: fuzz_msg_message.cc:writeAccessLevelAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_msg_message.cc:writeMinimumSamplingIntervalAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, double)
Unexecuted instantiation: fuzz_opn_message.cc:writeIsAbstractAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_opn_message.cc:writeValueRankAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, int)
Unexecuted instantiation: fuzz_opn_message.cc:writeAccessLevelAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_opn_message.cc:writeMinimumSamplingIntervalAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, double)
Unexecuted instantiation: fuzz_process_request.cc:writeIsAbstractAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_process_request.cc:writeValueRankAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, int)
Unexecuted instantiation: fuzz_process_request.cc:writeAccessLevelAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_process_request.cc:writeMinimumSamplingIntervalAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, double)
Unexecuted instantiation: fuzz_binary_message.cc:writeIsAbstractAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, bool)
Unexecuted instantiation: fuzz_binary_message.cc:writeValueRankAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, int)
Unexecuted instantiation: fuzz_binary_message.cc:writeAccessLevelAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, unsigned char)
Unexecuted instantiation: fuzz_binary_message.cc:writeMinimumSamplingIntervalAttributeWithSession(UA_Server*, UA_Session*, UA_NodeId, double)
574
575
static UA_INLINE UA_StatusCode
576
writeValueAttribute(UA_Server *server, const UA_NodeId nodeId,
577
423k
                    const UA_Variant *value) {
578
423k
    return writeAttribute(server, &server->adminSession, &nodeId,
579
423k
                          UA_ATTRIBUTEID_VALUE, value, &UA_TYPES[UA_TYPES_VARIANT]);
580
423k
}
Unexecuted instantiation: ua_session.c:writeValueAttribute
Unexecuted instantiation: ua_nodes.c:writeValueAttribute
ua_server.c:writeValueAttribute
Line
Count
Source
577
1.00k
                    const UA_Variant *value) {
578
1.00k
    return writeAttribute(server, &server->adminSession, &nodeId,
579
1.00k
                          UA_ATTRIBUTEID_VALUE, value, &UA_TYPES[UA_TYPES_VARIANT]);
580
1.00k
}
ua_server_ns0.c:writeValueAttribute
Line
Count
Source
577
405k
                    const UA_Variant *value) {
578
405k
    return writeAttribute(server, &server->adminSession, &nodeId,
579
405k
                          UA_ATTRIBUTEID_VALUE, value, &UA_TYPES[UA_TYPES_VARIANT]);
580
405k
}
Unexecuted instantiation: ua_server_ns0_diagnostics.c:writeValueAttribute
Unexecuted instantiation: ua_server_ns0_gds.c:writeValueAttribute
Unexecuted instantiation: ua_server_config.c:writeValueAttribute
Unexecuted instantiation: ua_server_binary.c:writeValueAttribute
Unexecuted instantiation: ua_server_utils.c:writeValueAttribute
Unexecuted instantiation: ua_server_async.c:writeValueAttribute
Unexecuted instantiation: ua_subscription.c:writeValueAttribute
Unexecuted instantiation: ua_subscription_datachange.c:writeValueAttribute
Unexecuted instantiation: ua_subscription_event.c:writeValueAttribute
Unexecuted instantiation: ua_subscription_alarms_conditions.c:writeValueAttribute
Unexecuted instantiation: ua_services.c:writeValueAttribute
Unexecuted instantiation: ua_services_view.c:writeValueAttribute
Unexecuted instantiation: ua_services_method.c:writeValueAttribute
Unexecuted instantiation: ua_services_session.c:writeValueAttribute
Unexecuted instantiation: ua_services_attribute.c:writeValueAttribute
Unexecuted instantiation: ua_services_discovery.c:writeValueAttribute
Unexecuted instantiation: ua_services_subscription.c:writeValueAttribute
Unexecuted instantiation: ua_services_monitoreditem.c:writeValueAttribute
Unexecuted instantiation: ua_services_securechannel.c:writeValueAttribute
Unexecuted instantiation: ua_services_nodemanagement.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_connection.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_dataset.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_writer.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_writergroup.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_reader.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_readergroup.c:writeValueAttribute
Unexecuted instantiation: ua_pubsub_manager.c:writeValueAttribute
ua_pubsub_ns0.c:writeValueAttribute
Line
Count
Source
577
17.6k
                    const UA_Variant *value) {
578
17.6k
    return writeAttribute(server, &server->adminSession, &nodeId,
579
17.6k
                          UA_ATTRIBUTEID_VALUE, value, &UA_TYPES[UA_TYPES_VARIANT]);
580
17.6k
}
Unexecuted instantiation: ua_pubsub_ns0_sks.c:writeValueAttribute
Unexecuted instantiation: ua_discovery_mdns.c:writeValueAttribute
Unexecuted instantiation: ua_discovery.c:writeValueAttribute
Unexecuted instantiation: fuzz_server_services.cc:writeValueAttribute(UA_Server*, UA_NodeId, UA_Variant const*)
Unexecuted instantiation: fuzz_tcp_message.cc:writeValueAttribute(UA_Server*, UA_NodeId, UA_Variant const*)
Unexecuted instantiation: fuzz_msg_message.cc:writeValueAttribute(UA_Server*, UA_NodeId, UA_Variant const*)
Unexecuted instantiation: fuzz_opn_message.cc:writeValueAttribute(UA_Server*, UA_NodeId, UA_Variant const*)
Unexecuted instantiation: fuzz_process_request.cc:writeValueAttribute(UA_Server*, UA_NodeId, UA_Variant const*)
Unexecuted instantiation: fuzz_binary_message.cc:writeValueAttribute(UA_Server*, UA_NodeId, UA_Variant const*)
581
582
UA_WRITEATTRIBUTEFUNCS(IsAbstract, UA_ATTRIBUTEID_ISABSTRACT, UA_Boolean, BOOLEAN)
583
UA_WRITEATTRIBUTEFUNCS(ValueRank, UA_ATTRIBUTEID_VALUERANK, UA_Int32, INT32)
584
UA_WRITEATTRIBUTEFUNCS(AccessLevel, UA_ATTRIBUTEID_ACCESSLEVEL, UA_Byte, BYTE)
585
UA_WRITEATTRIBUTEFUNCS(MinimumSamplingInterval, UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL,
586
                       UA_Double, DOUBLE)
587
588
UA_DataValue
589
readWithSession(UA_Server *server, UA_Session *session,
590
                const UA_ReadValueId *item,
591
                UA_TimestampsToReturn timestampsToReturn);
592
593
UA_StatusCode
594
readWithReadValue(UA_Server *server, const UA_NodeId *nodeId,
595
                  const UA_AttributeId attributeId, void *v);
596
597
UA_StatusCode
598
readObjectProperty(UA_Server *server, const UA_NodeId objectId,
599
                   const UA_QualifiedName propertyName,
600
                   UA_Variant *value);
601
602
UA_BrowsePathResult
603
translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath);
604
605
/* Returns the "best" configured SecurityPolicy with encryption. The _NONE type
606
 * is the wildcard for any SecurityPolicy. */
607
UA_SecurityPolicy *
608
getDefaultEncryptedSecurityPolicy(UA_Server *server,
609
                                  UA_SecurityPolicyType type);
610
611
/* If the channel is non-NULL, then only compatible endpoints are returned.
612
 * Depending on ECC/RSA for the SecurityPolicy of the existing channel. */
613
UA_StatusCode
614
setCurrentEndpointsArray(UA_Server *server, const UA_String endpointUrl,
615
                         UA_String *profileUris, size_t profileUrisSize,
616
                         UA_EndpointDescription **arr, size_t *arrSize);
617
618
UA_BrowsePathResult
619
browseSimplifiedBrowsePath(UA_Server *server, const UA_NodeId origin,
620
                           size_t browsePathSize, const UA_QualifiedName *browsePath);
621
622
UA_StatusCode
623
writeObjectProperty(UA_Server *server, const UA_NodeId objectId,
624
                    const UA_QualifiedName propertyName, const UA_Variant value);
625
626
UA_StatusCode
627
writeObjectProperty_scalar(UA_Server *server, const UA_NodeId objectId,
628
                                     const UA_QualifiedName propertyName,
629
                                     const void *value, const UA_DataType *type);
630
631
UA_StatusCode
632
getNodeContext(UA_Server *server, UA_NodeId nodeId, void **nodeContext);
633
634
UA_StatusCode
635
setNodeContext(UA_Server *server, UA_NodeId nodeId, void *nodeContext);
636
637
void
638
removeCallback(UA_Server *server, UA_UInt64 callbackId);
639
640
UA_StatusCode
641
changeRepeatedCallbackInterval(UA_Server *server, UA_UInt64 callbackId,
642
                               UA_Double interval_ms);
643
644
UA_StatusCode
645
addRepeatedCallback(UA_Server *server, UA_ServerCallback callback,
646
                    void *data, UA_Double interval_ms, UA_UInt64 *callbackId);
647
648
#ifdef UA_ENABLE_DISCOVERY
649
UA_ServerComponent * UA_DiscoveryManager_new(void);
650
#endif
651
652
UA_ServerComponent * UA_BinaryProtocolManager_new(UA_Server *server);
653
654
655
#ifdef UA_ENABLE_PUBSUB
656
UA_ServerComponent * UA_PubSubManager_new(UA_Server *server);
657
#endif
658
659
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
660
/* AuthenticationToken of the session prepared by the message fuzzer. */
661
extern UA_NodeId unsafe_fuzz_authenticationToken;
662
#endif
663
664
/***********/
665
/* RefTree */
666
/***********/
667
668
/* A RefTree is a sorted set of NodeIds that ensures we consider each node just
669
 * once. It holds a single array for both the ExpandedNodeIds and the entries of
670
 * a tree-structure for fast lookup. A single realloc operation (with some
671
 * pointer repairing) can be used to increase the capacity of the RefTree.
672
 *
673
 * When the RefTree is complete, the tree-part at the end of the targets array
674
 * can be ignored / cut away to use it as a simple ExpandedNodeId array.
675
 *
676
 * The layout of the targets array is as follows:
677
 *
678
 * | Targets [ExpandedNodeId, n times] | Tree [RefEntry, n times] | */
679
680
131M
#define UA_REFTREE_INITIAL_SIZE 16
681
682
typedef struct RefEntry {
683
    ZIP_ENTRY(RefEntry) zipfields;
684
    const UA_ExpandedNodeId *target;
685
    UA_UInt32 targetHash; /* Hash of the target nodeid */
686
} RefEntry;
687
688
ZIP_HEAD(RefHead, RefEntry);
689
typedef struct RefHead RefHead;
690
691
typedef struct {
692
    UA_ExpandedNodeId *targets;
693
    RefHead head;
694
    size_t capacity; /* available space */
695
    size_t size;     /* used space */
696
} RefTree;
697
698
UA_StatusCode UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT
699
RefTree_init(RefTree *rt);
700
701
void RefTree_clear(RefTree *rt);
702
703
UA_StatusCode UA_INTERNAL_FUNC_ATTR_WARN_UNUSED_RESULT
704
RefTree_addNodeId(RefTree *rt, const UA_NodeId *target, UA_Boolean *duplicate);
705
706
UA_Boolean
707
RefTree_contains(RefTree *rt, const UA_ExpandedNodeId *target);
708
709
UA_Boolean
710
RefTree_containsNodeId(RefTree *rt, const UA_NodeId *target);
711
712
/* Browse recursive starting from all nodes already in the rt. Add matching
713
 * targets to the rt and continue. Does not clean up the rt in case of an
714
 * error. */
715
UA_StatusCode
716
browseRecursiveRefTree(UA_Server *server, RefTree *rt,
717
                       UA_BrowseDirection browseDirection,
718
                       const UA_ReferenceTypeSet *refTypes,
719
                       UA_UInt32 nodeClassMask);
720
721
/***************************************/
722
/* Check Information Model Consistency */
723
/***************************************/
724
725
UA_StatusCode
726
readValueAttribute(UA_Server *server, UA_Session *session,
727
                   const UA_VariableNode *vn, UA_DataValue *v);
728
729
/* Test whether the value matches a variable definition given by
730
 * - datatype
731
 * - valuerank
732
 * - array dimensions.
733
 * Sometimes it can be necessary to transform the content of the value, e.g.
734
 * byte array to bytestring or uint32 to some enum. If editableValue is non-NULL,
735
 * we try to create a matching variant that points to the original data.
736
 *
737
 * The reason is set whenever the return value is false */
738
UA_Boolean
739
compatibleValue(UA_Server *server, UA_Session *session, const UA_NodeId *targetDataTypeId,
740
                UA_Int32 targetValueRank, size_t targetArrayDimensionsSize,
741
                const UA_UInt32 *targetArrayDimensions, const UA_Variant *value,
742
                const UA_NumericRange *range, const char **reason);
743
744
/* Is the DataType compatible */
745
UA_Boolean
746
compatibleDataTypes(UA_Server *server, const UA_NodeId *dataType,
747
                    const UA_NodeId *constraintDataType);
748
749
/* Set to the target type if compatible */
750
void
751
adjustValueType(UA_Server *server, UA_Variant *value,
752
                const UA_NodeId *targetDataTypeId);
753
754
/* Is the Value compatible with the DataType? Can perform additional checks
755
 * compared to compatibleDataTypes. */
756
UA_Boolean
757
compatibleValueDataType(UA_Server *server, const UA_DataType *dataType,
758
                        const UA_NodeId *constraintDataType);
759
760
761
UA_Boolean
762
compatibleArrayDimensions(size_t constraintArrayDimensionsSize,
763
                          const UA_UInt32 *constraintArrayDimensions,
764
                          size_t testArrayDimensionsSize,
765
                          const UA_UInt32 *testArrayDimensions);
766
767
UA_Boolean
768
compatibleValueArrayDimensions(const UA_Variant *value, size_t targetArrayDimensionsSize,
769
                               const UA_UInt32 *targetArrayDimensions);
770
771
UA_Boolean
772
compatibleValueRankArrayDimensions(UA_Server *server, UA_Session *session,
773
                                   UA_Int32 valueRank, size_t arrayDimensionsSize);
774
775
UA_Boolean
776
compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank);
777
778
struct BrowseOpts {
779
    UA_UInt32 maxReferences;
780
    UA_Boolean recursive;
781
};
782
783
void
784
Operation_Browse(UA_Server *server, UA_Session *session, const UA_UInt32 *maxrefs,
785
                 const UA_BrowseDescription *descr, UA_BrowseResult *result);
786
787
/* External data either from a datasource callback or with a _beforeRead
788
 * callback where fresh values get switched in on demand. Variables with an
789
 * external data source require monitoring with a sampling interval. As we
790
 * cannot just hook into the write service to get all changes. */
791
UA_Boolean
792
VariableNode_externalDataSource(const UA_VariableNode *vn);
793
794
/************/
795
/* AddNodes */
796
/************/
797
798
UA_StatusCode
799
addNode(UA_Server *server, const UA_NodeClass nodeClass,
800
        const UA_NodeId requestedNewNodeId,
801
        const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
802
        const UA_QualifiedName browseName, const UA_NodeId typeDefinition,
803
        const void *attr, const UA_DataType *attributeType,
804
        void *nodeContext, UA_NodeId *outNewNodeId);
805
806
UA_StatusCode
807
addMethodNode(UA_Server *server, const UA_NodeId requestedNewNodeId,
808
              const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId,
809
              const UA_QualifiedName browseName,
810
              const UA_MethodAttributes *attr, UA_MethodCallback method,
811
              size_t inputArgumentsSize, const UA_Argument *inputArguments,
812
              const UA_NodeId inputArgumentsRequestedNewNodeId,
813
              UA_NodeId *inputArgumentsOutNewNodeId,
814
              size_t outputArgumentsSize, const UA_Argument *outputArguments,
815
              const UA_NodeId outputArgumentsRequestedNewNodeId,
816
              UA_NodeId *outputArgumentsOutNewNodeId,
817
              void *nodeContext, UA_NodeId *outNewNodeId);
818
819
UA_StatusCode
820
addNode_begin(UA_Server *server, const UA_NodeClass nodeClass,
821
              const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId,
822
              const UA_NodeId referenceTypeId, const UA_QualifiedName browseName,
823
              const UA_NodeId typeDefinition, const void *attr,
824
              const UA_DataType *attributeType, void *nodeContext,
825
              UA_NodeId *outNewNodeId);
826
827
/* Creates a new node in the nodestore. */
828
UA_StatusCode
829
addNode_raw(UA_Server *server, UA_Session *session, void *nodeContext,
830
            const UA_AddNodesItem *item, UA_NodeId *outNewNodeId);
831
832
/* Check the reference to the parent node; Add references. */
833
UA_StatusCode
834
addNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
835
                const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId,
836
                const UA_NodeId *typeDefinitionId);
837
838
/* Type-check type-definition; Run the constructors */
839
UA_StatusCode
840
addNode_finish(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId);
841
842
/**********************/
843
/* Create Namespace 0 */
844
/**********************/
845
846
UA_StatusCode initNS0(UA_Server *server);
847
848
/* Connect data sources to existing NS0 nodes */
849
UA_StatusCode initNS0_dataSources(UA_Server *server);
850
851
#ifdef UA_ENABLE_GDS_PUSHMANAGEMENT
852
UA_StatusCode
853
initNS0PushManagement(UA_Server *server);
854
#endif
855
856
857
#ifdef UA_ENABLE_DIAGNOSTICS
858
void createSessionObject(UA_Server *server, UA_Session *session);
859
860
void createSubscriptionObject(UA_Server *server, UA_Session *session,
861
                              UA_Subscription *sub);
862
863
UA_StatusCode
864
readDiagnostics(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
865
                const UA_NodeId *nodeId, void *nodeContext, UA_Boolean sourceTimestamp,
866
                const UA_NumericRange *range, UA_DataValue *value);
867
868
UA_StatusCode
869
readSubscriptionDiagnosticsArray(UA_Server *server,
870
                                 const UA_NodeId *sessionId, void *sessionContext,
871
                                 const UA_NodeId *nodeId, void *nodeContext,
872
                                 UA_Boolean sourceTimestamp,
873
                                 const UA_NumericRange *range, UA_DataValue *value);
874
875
UA_StatusCode
876
readSessionDiagnosticsArray(UA_Server *server,
877
                            const UA_NodeId *sessionId, void *sessionContext,
878
                            const UA_NodeId *nodeId, void *nodeContext,
879
                            UA_Boolean sourceTimestamp,
880
                            const UA_NumericRange *range, UA_DataValue *value);
881
882
UA_StatusCode
883
readSessionSecurityDiagnostics(UA_Server *server,
884
                               const UA_NodeId *sessionId, void *sessionContext,
885
                               const UA_NodeId *nodeId, void *nodeContext,
886
                               UA_Boolean sourceTimestamp,
887
                               const UA_NumericRange *range, UA_DataValue *value);
888
#endif
889
890
/***************************/
891
/* Nodestore Access Macros */
892
/***************************/
893
894
#define UA_NODESTORE_NEW(server, nodeClass)                             \
895
16.1M
    server->config.nodestore->newNode(server->config.nodestore, nodeClass)
896
897
#define UA_NODESTORE_DELETE(server, node)                               \
898
0
    server->config.nodestore->deleteNode(server->config.nodestore, node)
899
900
/* Get the node with all attributes and references */
901
static UA_INLINE const UA_Node *
902
191M
UA_NODESTORE_GET(UA_Server *server, const UA_NodeId *nodeId) {
903
191M
    return server->config.nodestore->
904
191M
        getNode(server->config.nodestore, nodeId, UA_NODEATTRIBUTESMASK_ALL,
905
191M
                UA_REFERENCETYPESET_ALL, UA_BROWSEDIRECTION_BOTH);
906
191M
}
Unexecuted instantiation: ua_session.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_nodes.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_server.c:UA_NODESTORE_GET
ua_server_ns0.c:UA_NODESTORE_GET
Line
Count
Source
902
17.6k
UA_NODESTORE_GET(UA_Server *server, const UA_NodeId *nodeId) {
903
17.6k
    return server->config.nodestore->
904
17.6k
        getNode(server->config.nodestore, nodeId, UA_NODEATTRIBUTESMASK_ALL,
905
17.6k
                UA_REFERENCETYPESET_ALL, UA_BROWSEDIRECTION_BOTH);
906
17.6k
}
Unexecuted instantiation: ua_server_ns0_diagnostics.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_server_ns0_gds.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_server_config.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_server_binary.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_server_utils.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_server_async.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_subscription.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_subscription_datachange.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_subscription_event.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_subscription_alarms_conditions.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_view.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_method.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_session.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_attribute.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_discovery.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_subscription.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_monitoreditem.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_services_securechannel.c:UA_NODESTORE_GET
ua_services_nodemanagement.c:UA_NODESTORE_GET
Line
Count
Source
902
191M
UA_NODESTORE_GET(UA_Server *server, const UA_NodeId *nodeId) {
903
191M
    return server->config.nodestore->
904
191M
        getNode(server->config.nodestore, nodeId, UA_NODEATTRIBUTESMASK_ALL,
905
191M
                UA_REFERENCETYPESET_ALL, UA_BROWSEDIRECTION_BOTH);
906
191M
}
Unexecuted instantiation: ua_pubsub_connection.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_dataset.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_writer.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_writergroup.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_reader.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_readergroup.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_manager.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_ns0.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_pubsub_ns0_sks.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_discovery_mdns.c:UA_NODESTORE_GET
Unexecuted instantiation: ua_discovery.c:UA_NODESTORE_GET
Unexecuted instantiation: fuzz_server_services.cc:UA_NODESTORE_GET(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_tcp_message.cc:UA_NODESTORE_GET(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_msg_message.cc:UA_NODESTORE_GET(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_opn_message.cc:UA_NODESTORE_GET(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_process_request.cc:UA_NODESTORE_GET(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_binary_message.cc:UA_NODESTORE_GET(UA_Server*, UA_NodeId const*)
907
908
/* Get the editable node with all attributes and references */
909
static UA_INLINE UA_Node *
910
0
UA_NODESTORE_GET_EDIT(UA_Server *server, const UA_NodeId *nodeId) {
911
0
    return server->config.nodestore->
912
0
        getEditNode(server->config.nodestore, nodeId,
913
0
                    UA_NODEATTRIBUTESMASK_ALL, UA_REFERENCETYPESET_ALL,
914
0
                    UA_BROWSEDIRECTION_BOTH);
915
0
}
Unexecuted instantiation: ua_session.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_nodes.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_ns0.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_ns0_diagnostics.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_ns0_gds.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_config.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_binary.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_utils.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_server_async.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_subscription.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_subscription_datachange.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_subscription_event.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_subscription_alarms_conditions.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_view.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_method.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_session.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_attribute.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_discovery.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_subscription.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_monitoreditem.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_securechannel.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_services_nodemanagement.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_connection.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_dataset.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_writer.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_writergroup.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_reader.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_readergroup.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_manager.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_ns0.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_pubsub_ns0_sks.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_discovery_mdns.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: ua_discovery.c:UA_NODESTORE_GET_EDIT
Unexecuted instantiation: fuzz_server_services.cc:UA_NODESTORE_GET_EDIT(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_tcp_message.cc:UA_NODESTORE_GET_EDIT(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_msg_message.cc:UA_NODESTORE_GET_EDIT(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_opn_message.cc:UA_NODESTORE_GET_EDIT(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_process_request.cc:UA_NODESTORE_GET_EDIT(UA_Server*, UA_NodeId const*)
Unexecuted instantiation: fuzz_binary_message.cc:UA_NODESTORE_GET_EDIT(UA_Server*, UA_NodeId const*)
916
917
/* Get the node with all attributes and references */
918
static UA_INLINE const UA_Node *
919
735k
UA_NODESTORE_GETFROMREF(UA_Server *server, UA_NodePointer target) {
920
735k
    return server->config.nodestore->
921
735k
        getNodeFromPtr(server->config.nodestore,
922
735k
                       target, UA_NODEATTRIBUTESMASK_ALL,
923
735k
                       UA_REFERENCETYPESET_ALL, UA_BROWSEDIRECTION_BOTH);
924
735k
}
Unexecuted instantiation: ua_session.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_nodes.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_ns0.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_ns0_diagnostics.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_ns0_gds.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_config.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_binary.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_utils.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_server_async.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_subscription.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_subscription_datachange.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_subscription_event.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_subscription_alarms_conditions.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_view.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_method.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_session.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_attribute.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_discovery.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_subscription.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_monitoreditem.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_services_securechannel.c:UA_NODESTORE_GETFROMREF
ua_services_nodemanagement.c:UA_NODESTORE_GETFROMREF
Line
Count
Source
919
735k
UA_NODESTORE_GETFROMREF(UA_Server *server, UA_NodePointer target) {
920
735k
    return server->config.nodestore->
921
735k
        getNodeFromPtr(server->config.nodestore,
922
735k
                       target, UA_NODEATTRIBUTESMASK_ALL,
923
735k
                       UA_REFERENCETYPESET_ALL, UA_BROWSEDIRECTION_BOTH);
924
735k
}
Unexecuted instantiation: ua_pubsub_connection.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_dataset.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_writer.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_writergroup.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_reader.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_readergroup.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_manager.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_ns0.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_pubsub_ns0_sks.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_discovery_mdns.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: ua_discovery.c:UA_NODESTORE_GETFROMREF
Unexecuted instantiation: fuzz_server_services.cc:UA_NODESTORE_GETFROMREF(UA_Server*, UA_NodePointer)
Unexecuted instantiation: fuzz_tcp_message.cc:UA_NODESTORE_GETFROMREF(UA_Server*, UA_NodePointer)
Unexecuted instantiation: fuzz_msg_message.cc:UA_NODESTORE_GETFROMREF(UA_Server*, UA_NodePointer)
Unexecuted instantiation: fuzz_opn_message.cc:UA_NODESTORE_GETFROMREF(UA_Server*, UA_NodePointer)
Unexecuted instantiation: fuzz_process_request.cc:UA_NODESTORE_GETFROMREF(UA_Server*, UA_NodePointer)
Unexecuted instantiation: fuzz_binary_message.cc:UA_NODESTORE_GETFROMREF(UA_Server*, UA_NodePointer)
925
926
#define UA_NODESTORE_GET_SELECTIVE(server, nodeid, attrMask, refs, refDirs) \
927
127M
    server->config.nodestore->getNode(server->config.nodestore,             \
928
127M
                                      nodeid, attrMask, refs, refDirs)
929
930
#define UA_NODESTORE_GET_EDIT_SELECTIVE(server, nodeid, attrMask, refs, refDirs) \
931
50.4M
    server->config.nodestore->getEditNode(server->config.nodestore,              \
932
57.6M
                                          nodeid, attrMask, refs, refDirs)
933
934
#define UA_NODESTORE_GETFROMREF_SELECTIVE(server, target, attrMask, refs, refDirs) \
935
330M
    server->config.nodestore->getNodeFromPtr(server->config.nodestore,             \
936
330M
                                             target, attrMask, refs, refDirs)
937
938
#define UA_NODESTORE_RELEASE(server, node)                              \
939
695M
    server->config.nodestore->releaseNode(server->config.nodestore, node)
940
941
#define UA_NODESTORE_GETCOPY(server, nodeid, outnode)                      \
942
    server->config.nodestore->getNodeCopy(server->config.nodestore, nodeid, outnode)
943
944
#define UA_NODESTORE_INSERT(server, node, addedNodeId)                    \
945
16.1M
    server->config.nodestore->insertNode(server->config.nodestore, node, addedNodeId)
946
947
#define UA_NODESTORE_REPLACE(server, node)                              \
948
    server->config.nodestore->replaceNode(server->config.nodestore, node)
949
950
#define UA_NODESTORE_REMOVE(server, nodeId)                             \
951
745k
    server->config.nodestore->removeNode(server->config.nodestore, nodeId)
952
953
#define UA_NODESTORE_GETREFERENCETYPEID(server, index)                  \
954
11.1M
    server->config.nodestore->getReferenceTypeId(server->config.nodestore, index)
955
956
/* Handling of Locales */
957
958
/* Returns a shallow copy */
959
UA_LocalizedText
960
UA_Session_getNodeDisplayName(const UA_Session *session,
961
                              const UA_NodeHead *head);
962
963
UA_LocalizedText
964
UA_Session_getNodeDescription(const UA_Session *session,
965
                              const UA_NodeHead *head);
966
967
_UA_END_DECLS
968
969
#endif /* UA_SERVER_INTERNAL_H_ */