From 5ef02583ecf0f2a954063eb80375b204f3433058 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Sun, 9 Feb 2020 09:00:02 -0600 Subject: hscript: Factor subnet -> CIDR conversion to util function * Also ensures that the unused function in util/net (is_url_valid) doesn't break the build of network.cc (and vis versa for user.cc). --- util/net.hh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'util') diff --git a/util/net.hh b/util/net.hh index 89e5303..3c5c38e 100644 --- a/util/net.hh +++ b/util/net.hh @@ -14,6 +14,8 @@ #define __HORIZON_NET_HH_ #include +#include /* inet_pton */ +#include /* memcpy */ #include /*! Determine if a string starts with a valid, supported protocol @@ -33,4 +35,21 @@ static bool is_valid_url(const std::string &url) { return false; } +static int subnet_mask_to_cidr(const char *mask) { + char addr_buf[4]; + uint32_t tmp; + int real_prefix = ::inet_pton(AF_INET, mask, &addr_buf); + + /* helpfully, we need to init real_prefix to 1 anyway; + * if inet_pton doesn't return 1, we failed to convert */ + if(real_prefix == 1) { + memcpy(&tmp, addr_buf, 4); + tmp = ntohl(tmp); + while((tmp <<= 1) & 0x80000000) { + real_prefix++; + } + } + return real_prefix; +} + #endif /* !__HORIZON_NET_HH */ -- cgit v1.2.3-70-g09d2