Files
softbus_OPC/third_party/open62541/arch/eventloop_common.c
2026-06-09 17:27:24 +08:00

55 lines
2.2 KiB
C

/* 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;
}