]> git.ipfire.org Git - location/libloc.git/blobdiff - src/loc/network.h
Implement an additional flag for hostile networks safe to drop
[location/libloc.git] / src / loc / network.h
index ef13756132eb5f26a749c32dfb73f323e4337b15..a30f65347d4c7143550667c75c02b30c66f79374 100644 (file)
@@ -1,7 +1,7 @@
 /*
        libloc - A library to determine the location of someone on the Internet
 
-       Copyright (C) 2017 IPFire Development Team <info@ipfire.org>
+       Copyright (C) 2017-2021 IPFire Development Team <info@ipfire.org>
 
        This library is free software; you can redistribute it and/or
        modify it under the terms of the GNU Lesser General Public
 
 #include <loc/libloc.h>
 #include <loc/format.h>
+#include <loc/network-list.h>
 
 enum loc_network_flags {
        LOC_NETWORK_FLAG_ANONYMOUS_PROXY    = (1 << 0), // A1
        LOC_NETWORK_FLAG_SATELLITE_PROVIDER = (1 << 1), // A2
        LOC_NETWORK_FLAG_ANYCAST            = (1 << 2), // A3
+       LOC_NETWORK_FLAG_DROP               = (1 << 3), // XD
 };
 
 struct loc_network;
@@ -37,8 +39,11 @@ struct loc_network* loc_network_ref(struct loc_network* network);
 struct loc_network* loc_network_unref(struct loc_network* network);
 char* loc_network_str(struct loc_network* network);
 int loc_network_address_family(struct loc_network* network);
+unsigned int loc_network_prefix(struct loc_network* network);
 
+const struct in6_addr* loc_network_get_first_address(struct loc_network* network);
 char* loc_network_format_first_address(struct loc_network* network);
+const struct in6_addr* loc_network_get_last_address(struct loc_network* network);
 char* loc_network_format_last_address(struct loc_network* network);
 int loc_network_match_address(struct loc_network* network, const struct in6_addr* address);
 
@@ -54,27 +59,14 @@ int loc_network_has_flag(struct loc_network* network, uint32_t flag);
 int loc_network_set_flag(struct loc_network* network, uint32_t flag);
 int loc_network_match_flag(struct loc_network* network, uint32_t flag);
 
-int loc_network_eq(struct loc_network* self, struct loc_network* other);
+int loc_network_cmp(struct loc_network* self, struct loc_network* other);
 int loc_network_overlaps(struct loc_network* self, struct loc_network* other);
-int loc_network_is_subnet_of(struct loc_network* self, struct loc_network* other);
-struct loc_network_list* loc_network_subnets(struct loc_network* network);
+int loc_network_is_subnet(struct loc_network* self, struct loc_network* other);
+int loc_network_subnets(struct loc_network* network, struct loc_network** subnet1, struct loc_network** subnet2);
 struct loc_network_list* loc_network_exclude(
                struct loc_network* self, struct loc_network* other);
-
-// List
-struct loc_network_list;
-int loc_network_list_new(struct loc_ctx* ctx, struct loc_network_list** list);
-struct loc_network_list* loc_network_list_ref(struct loc_network_list* list);
-struct loc_network_list* loc_network_list_unref(struct loc_network_list* list);
-size_t loc_network_list_size(struct loc_network_list* list);
-int loc_network_list_empty(struct loc_network_list* list);
-void loc_network_list_clear(struct loc_network_list* list);
-void loc_network_list_dump(struct loc_network_list* list);
-struct loc_network* loc_network_list_get(struct loc_network_list* list, size_t index);
-int loc_network_list_push(struct loc_network_list* list, struct loc_network* network);
-struct loc_network* loc_network_list_pop(struct loc_network_list* list);
-void loc_network_list_sort(struct loc_network_list* list);
-void loc_network_list_reverse(struct loc_network_list* list);
+struct loc_network_list* loc_network_exclude_list(
+               struct loc_network* network, struct loc_network_list* list);
 
 #ifdef LIBLOC_PRIVATE