Implement searching for networks with a certain flag
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 13 Oct 2019 17:02:51 +0000 (17:02 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 13 Oct 2019 17:02:51 +0000 (17:02 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/database.c
src/loc/database.h

index 2281884..ea2ae86 100644 (file)
@@ -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;
                }
        }
index 3b3208a..2a23a89 100644 (file)
@@ -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(