From df80ab073c4b6c668e5ebedac01a0cfda7ff7c69 Mon Sep 17 00:00:00 2001 From: José Bollo Date: Thu, 24 Oct 2019 11:11:23 +0200 Subject: Unic routine for checking agent names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ibd3601ce97b4bc9e1035642584df0fe7788716db Signed-off-by: José Bollo --- src/CMakeLists.txt | 2 ++ src/cyn.c | 27 +-------------------------- src/cynagora.c | 27 +-------------------------- src/names.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/names.h | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 52 deletions(-) create mode 100644 src/names.c create mode 100644 src/names.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cf98bbe..f9034de 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -25,6 +25,7 @@ set(LIBCORE_SOURCES fbuf.c filedb.c memdb.c + names.c pollitem.c queue.c ) @@ -45,6 +46,7 @@ set(LIBCLI_SOURCES cynagora.c expire.c idgen.c + names.c prot.c socket.c ) diff --git a/src/cyn.c b/src/cyn.c index 7255821..b1477f4 100644 --- a/src/cyn.c +++ b/src/cyn.c @@ -27,12 +27,12 @@ #include #include #include -#include #include "data.h" #include "db.h" #include "queue.h" #include "cyn.h" +#include "names.h" #if !CYN_SEARCH_DEEP_MAX # define CYN_SEARCH_DEEP_MAX 10 @@ -557,31 +557,6 @@ cyn_query_reply( free(query); } -/** - * Check the name and compute its length. Returns 0 in case of invalid name - * @param name the name to check - * @return the length of the name or zero if invalid - */ -static -size_t -agent_check_name( - const char *name -) { - char c; - size_t length = 0; - if (name) { - while ((c = name[length])) { - if (length > UINT8_MAX - || (!isalnum(c) && !strchr("@_-$", c))) { - length = 0; - break; - } - length++; - } - } - return length; -} - /* see cyn.h */ int cyn_agent_add( diff --git a/src/cynagora.c b/src/cynagora.c index a95789e..2e35876 100644 --- a/src/cynagora.c +++ b/src/cynagora.c @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -44,6 +43,7 @@ #include "socket.h" #include "expire.h" #include "idgen.h" +#include "names.h" #define MIN_CACHE_SIZE 400 #define CACHESIZE(x) ((x) >= MIN_CACHE_SIZE ? (x) : (x) ? MIN_CACHE_SIZE : 0) @@ -1231,31 +1231,6 @@ cynagora_drop( /*** PRIVATE AGENT METHODS ***/ /******************************************************************************/ -/** - * Check the name and compute its length. Returns 0 in case of invalid name - * @param name the name to check - * @return the length of the name or zero if invalid - */ -static -size_t -agent_check_name( - const char *name -) { - char c; - size_t length = 0; - if (name) { - while ((c = name[length])) { - if (length > UINT8_MAX - || (!isalnum(c) && !strchr("@_-$", c))) { - length = 0; - break; - } - length++; - } - } - return length; -} - /** * Search the recorded agent of name * diff --git a/src/names.c b/src/names.c new file mode 100644 index 0000000..f9a7817 --- /dev/null +++ b/src/names.c @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018 "IoT.bzh" + * Author José Bollo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/******************************************************************************/ +/******************************************************************************/ +/* IMPLEMENTATION OF NAMES */ +/******************************************************************************/ +/******************************************************************************/ + +#include +#include +#include + +#include "names.h" + +/** + * Check the name and compute its length. Returns 0 in case of invalid name + * @param name the name to check + * @return the length of the name or zero if invalid + */ +size_t +agent_check_name( + const char *name +) { + char c; + size_t length = 0; + if (name) { + while ((c = name[length])) { + if (length > UINT8_MAX + || (!isalnum(c) && !strchr("@_-$", c))) { + length = 0; + break; + } + length++; + } + } + return length; +} + diff --git a/src/names.h b/src/names.h new file mode 100644 index 0000000..30f4a99 --- /dev/null +++ b/src/names.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2018 "IoT.bzh" + * Author José Bollo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once +/******************************************************************************/ +/******************************************************************************/ +/* IMPLEMENTATION OF NAMES */ +/******************************************************************************/ +/******************************************************************************/ + +/** + * Check the name and compute its length. Returns 0 in case of invalid name + * @param name the name to check + * @return the length of the name or zero if invalid + */ +extern +size_t +agent_check_name( + const char *name +); -- cgit 1.2.3-korg