Source code for include/validators/ipv4.h

#ifndef _IPV4_H_
#define _IPV4_H_
#define IPV4_DELIMITER "."
#define IPV4_DELIMITER_CHAR '.'
#define IP_CIDR_DELIMITER "/"
#include "split.h" #include "utils.h" bool is_ipv4(char *ipv4_addr); bool is_ipv4_cidr(char *ipv4_addr_cidr);
[docs]/** * Returns ``true`` if given string is a IPv4 otherwise ``false``. * * Args: * ipv4_addr(char *): target string to be validated * * Returns: * ``true`` if given address is a IPv4 address */ bool is_ipv4(char *ipv4_addr) { if (startswith(ipv4_addr, IPV4_DELIMITER_CHAR) || endswith(ipv4_addr, IPV4_DELIMITER_CHAR)) return false; struct split_t splitted = split(ipv4_addr, IPV4_DELIMITER); int blank_counts = blanks(ipv4_addr, IPV4_DELIMITER_CHAR); if (splitted.length + blank_counts != 4) return free_split_r(&splitted, false); for (size_t i = 0; i < splitted.length; i++) { char *part = splitted.tokens[i]; if (!is_digit(part)) return free_split_r(&splitted, false); if (!(0 <= atoi(part) && atoi(part) < 256)) return free_split_r(&splitted, false); } return free_split_r(&splitted, true); }
[docs]/** * Returns ``true`` if given string is a IPv4CIDR otherwise ``false``. * * Args: * ipv4_addr_cidrr(char *): target string to be validated * * Returns: * ``true`` if given address is a IPv4CIDR */ bool is_ipv4_cidr(char *ipv4_addr_cidr) { struct split_t splitted = split(ipv4_addr_cidr, IP_CIDR_DELIMITER); if (splitted.length != 2) return free_split_r(&splitted, false); char *prefix = splitted.tokens[0]; char *suffix = splitted.tokens[1]; if (!is_ipv4(prefix) || !is_digit(suffix)) return free_split_r(&splitted, false); if (!(0 <= atoi(suffix) && atoi(suffix) <= 32)) return free_split_r(&splitted, false); return free_split_r(&splitted, true); }
#endif