From 9268db5ae7c43510c51847b667f9acd22218440a Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 13 Oct 2019 17:02:51 +0000 Subject: [PATCH] Implement searching for networks with a certain flag Signed-off-by: Michael Tremer --- src/database.c | 15 +++++++++++++++ src/loc/database.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/database.c b/src/database.c index 2281884..ea2ae86 100644 --- a/src/database.c +++ b/src/database.c @@ -80,6 +80,7 @@ struct loc_database_enumerator { char* string; char country_code[3]; uint32_t asn; + enum loc_network_flags flags; // Index of the AS we are looking at unsigned int as_index; @@ -662,6 +663,13 @@ LOC_EXPORT int loc_database_enumerator_set_asn( return 0; } +LOC_EXPORT int loc_database_enumerator_set_flag( + struct loc_database_enumerator* enumerator, enum loc_network_flags flag) { + enumerator->flags |= flag; + + return 0; +} + LOC_EXPORT int loc_database_enumerator_next_as( struct loc_database_enumerator* enumerator, struct loc_as** as) { *as = NULL; @@ -807,6 +815,13 @@ LOC_EXPORT int loc_database_enumerator_next_network( continue; } + // Skip if flags do not match + if (enumerator->flags && + !loc_network_match_flag(*network, enumerator->flags)) { + loc_network_unref(*network); + *network = NULL; + } + return 0; } } diff --git a/src/loc/database.h b/src/loc/database.h index 3b3208a..2a23a89 100644 --- a/src/loc/database.h +++ b/src/loc/database.h @@ -57,6 +57,7 @@ struct loc_database_enumerator* loc_database_enumerator_unref(struct loc_databas int loc_database_enumerator_set_string(struct loc_database_enumerator* enumerator, const char* string); int loc_database_enumerator_set_country_code(struct loc_database_enumerator* enumerator, const char* country_code); int loc_database_enumerator_set_asn(struct loc_database_enumerator* enumerator, unsigned int asn); +int loc_database_enumerator_set_flag(struct loc_database_enumerator* enumerator, enum loc_network_flags flag); int loc_database_enumerator_next_as( struct loc_database_enumerator* enumerator, struct loc_as** as); int loc_database_enumerator_next_network( -- 2.39.2