]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/database.c
Implement searching for networks with a certain flag
[people/ms/libloc.git] / src / database.c
index 228188440d4c2d5551e5f4d791f55253c934699c..ea2ae867f1225c5c0757bbba34f2b3b48cf19a7d 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;
                }
        }