/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_ */ |