1
0
Fork 0
mirror of https://github.com/pavel-odintsov/fastnetmon synced 2024-06-18 21:59:19 +02:00

Reworked patricia logic to use const strings for tree construction

This commit is contained in:
Pavel Odintsov 2022-06-26 15:18:21 +01:00
parent 6833220676
commit 62bac2a870
4 changed files with 18 additions and 16 deletions

View File

@ -1074,7 +1074,7 @@ bool load_our_networks_list() {
continue;
}
network_entries++;
make_and_lookup(whitelist_tree_ipv4, const_cast<char*>(text_subnet.c_str()));
make_and_lookup(whitelist_tree_ipv4, text_subnet.c_str());
}
logger << log4cpp::Priority::INFO << "We loaded " << network_entries << " networks from whitelist file";
@ -1197,7 +1197,7 @@ bool load_our_networks_list() {
network_address_in_cidr_form = new_network_address_as_string;
}
make_and_lookup(lookup_tree_ipv4, const_cast<char*>(network_address_in_cidr_form.c_str()));
make_and_lookup(lookup_tree_ipv4, network_address_in_cidr_form.c_str());
}
for (std::vector<std::string>::iterator ii = networks_list_ipv6_as_string.begin();

View File

@ -222,11 +222,11 @@ prefix_t* New_Prefix(int family, void* dest, int bitlen) {
}
// Converts string representation of prefix into out prefix_t structure
prefix_t* ascii2prefix(int family, char* string) {
prefix_t* ascii2prefix(int family, const char* string) {
u_long bitlen = 0;
u_long maxbitlen = 0;
char* cp = nullptr;
const char* cp = nullptr;
struct in_addr sin {};
struct in6_addr sin6 {};
@ -715,8 +715,9 @@ patricia_node_t* patricia_lookup(patricia_tree_t* patricia, prefix_t* prefix) {
return new_node;
}
patricia_node_t* make_and_lookup(patricia_tree_t* tree, char* string) {
prefix_t* prefix = ascii2prefix(AF_INET, string);
patricia_node_t* make_and_lookup(patricia_tree_t* tree, const char* prefix_as_string) {
prefix_t* prefix = ascii2prefix(AF_INET, prefix_as_string);
patricia_node_t* node = patricia_lookup(tree, prefix);
Deref_Prefix(prefix);
@ -725,8 +726,9 @@ patricia_node_t* make_and_lookup(patricia_tree_t* tree, char* string) {
}
patricia_node_t* make_and_lookup_ipv6(patricia_tree_t* tree, const char* string) {
prefix_t* prefix = ascii2prefix(AF_INET6, (char*)string);
patricia_node_t* make_and_lookup_ipv6(patricia_tree_t* tree, const char* prefix_as_string) {
prefix_t* prefix = ascii2prefix(AF_INET6, prefix_as_string);
patricia_node_t* node = patricia_lookup(tree, prefix);
Deref_Prefix(prefix);
@ -735,8 +737,8 @@ patricia_node_t* make_and_lookup_ipv6(patricia_tree_t* tree, const char* string)
}
// Add custom pointer to this subnet leaf
patricia_node_t* make_and_lookup_with_data(patricia_tree_t* tree, char* string, void* user_data) {
prefix_t* prefix = ascii2prefix(AF_INET, string);
patricia_node_t* make_and_lookup_with_data(patricia_tree_t* tree, const char* prefix_as_string, void* user_data) {
prefix_t* prefix = ascii2prefix(AF_INET, prefix_as_string);
patricia_node_t* node = patricia_lookup(tree, prefix);
node->data = user_data;
@ -747,8 +749,8 @@ patricia_node_t* make_and_lookup_with_data(patricia_tree_t* tree, char* string,
}
// Add custom pointer to subnet leaf for IPv6
patricia_node_t* make_and_lookup_ipv6_with_data(patricia_tree_t* tree, const char* string, void* user_data) {
prefix_t* prefix = ascii2prefix(AF_INET6, (char*)string);
patricia_node_t* make_and_lookup_ipv6_with_data(patricia_tree_t* tree, const char* prefix_as_string, void* user_data) {
prefix_t* prefix = ascii2prefix(AF_INET6, prefix_as_string);
patricia_node_t* node = patricia_lookup(tree, prefix);

View File

@ -65,8 +65,8 @@ class patricia_tree_t {
patricia_tree_t* New_Patricia(int maxbits);
// Add elements to IPv4 tree
patricia_node_t* make_and_lookup(patricia_tree_t* tree, char* string);
patricia_node_t* make_and_lookup_with_data(patricia_tree_t* tree, char* string, void* user_data);
patricia_node_t* make_and_lookup(patricia_tree_t* tree, const char* string);
patricia_node_t* make_and_lookup_with_data(patricia_tree_t* tree, const char* string, void* user_data);
// Add elements to IPv6 tree
patricia_node_t* make_and_lookup_ipv6(patricia_tree_t* tree, const char* string);
@ -92,4 +92,4 @@ void Destroy_Patricia(patricia_tree_t* patricia);
char* prefix_toa(prefix_t* prefix);
// ASCII to prefix
prefix_t* ascii2prefix(int family, char* string);
prefix_t* ascii2prefix(int family, const char* string);

View File

@ -112,7 +112,7 @@ int main(int argc, char* argv[]) {
for (std::vector<std::string>::iterator ii = network_list_from_config.begin(); ii != network_list_from_config.end(); ++ii) {
std::string network_address_in_cidr_form = *ii;
make_and_lookup(lookup_tree, const_cast<char*>(network_address_in_cidr_form.c_str()));
make_and_lookup(lookup_tree, network_address_in_cidr_form.c_str());
}
#endif