opc source code
This commit is contained in:
54
third_party/open62541/arch/eventloop_common.c
vendored
Normal file
54
third_party/open62541/arch/eventloop_common.c
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* Copyright 2022 (c) Fraunhofer IOSB (Author: Julius Pfrommer)
|
||||
*/
|
||||
|
||||
#include "eventloop_common.h"
|
||||
|
||||
UA_StatusCode
|
||||
UA_KeyValueRestriction_validate(const UA_Logger *logger, const char *logprefix,
|
||||
const UA_KeyValueRestriction *restrictions, size_t restrictionsSize,
|
||||
const UA_KeyValueMap *map) {
|
||||
for(size_t i = 0; i < restrictionsSize; i++) {
|
||||
const UA_KeyValueRestriction *r = &restrictions[i];
|
||||
const UA_Variant *val = UA_KeyValueMap_get(map, r->name);
|
||||
|
||||
/* Value not present but required? */
|
||||
if(!val) {
|
||||
if(r->required) {
|
||||
UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND,
|
||||
"%s\t| Parameter %.*s required but not defined",
|
||||
logprefix, (int)r->name.name.length, (char*)r->name.name.data);
|
||||
return UA_STATUSCODE_BADINTERNALERROR;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Type matches */
|
||||
if(val->type != r->type) {
|
||||
UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND,
|
||||
"%s\t| Parameter %.*s has the wrong type",
|
||||
logprefix, (int)r->name.name.length, (char*)r->name.name.data);
|
||||
return UA_STATUSCODE_BADINTERNALERROR;
|
||||
}
|
||||
|
||||
/* Scalar / array is allowed */
|
||||
UA_Boolean scalar = UA_Variant_isScalar(val);
|
||||
if(scalar && !r->scalar) {
|
||||
UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND,
|
||||
"%s\t| Parameter %.*s must not be scalar",
|
||||
logprefix, (int)r->name.name.length, (char*)r->name.name.data);
|
||||
return UA_STATUSCODE_BADINTERNALERROR;
|
||||
}
|
||||
if(!scalar && !r->array) {
|
||||
UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND,
|
||||
"%s\t| Parameter %.*s must not be an array",
|
||||
logprefix, (int)r->name.name.length, (char*)r->name.name.data);
|
||||
return UA_STATUSCODE_BADCONNECTIONREJECTED;
|
||||
}
|
||||
}
|
||||
|
||||
return UA_STATUSCODE_GOOD;
|
||||
}
|
||||
Reference in New Issue
Block a user