2 libloc - A library to determine the location of someone on the Internet
4 Copyright (C) 2017 IPFire Development Team <info@ipfire.org>
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
17 #ifndef LIBLOC_DATABASE_H
18 #define LIBLOC_DATABASE_H
20 #include <netinet/in.h>
24 #include <loc/libloc.h>
25 #include <loc/network.h>
27 #include <loc/country.h>
28 #include <loc/country-list.h>
31 int loc_database_new(struct loc_ctx
* ctx
, struct loc_database
** database
, FILE* f
);
32 struct loc_database
* loc_database_ref(struct loc_database
* db
);
33 struct loc_database
* loc_database_unref(struct loc_database
* db
);
35 int loc_database_verify(struct loc_database
* db
, FILE* f
);
37 time_t loc_database_created_at(struct loc_database
* db
);
38 const char* loc_database_get_vendor(struct loc_database
* db
);
39 const char* loc_database_get_description(struct loc_database
* db
);
40 const char* loc_database_get_license(struct loc_database
* db
);
42 int loc_database_get_as(struct loc_database
* db
, struct loc_as
** as
, uint32_t number
);
43 size_t loc_database_count_as(struct loc_database
* db
);
45 int loc_database_lookup(struct loc_database
* db
,
46 struct in6_addr
* address
, struct loc_network
** network
);
47 int loc_database_lookup_from_string(struct loc_database
* db
,
48 const char* string
, struct loc_network
** network
);
50 int loc_database_get_country(struct loc_database
* db
,
51 struct loc_country
** country
, const char* code
);
53 enum loc_database_enumerator_mode
{
54 LOC_DB_ENUMERATE_NETWORKS
= 1,
55 LOC_DB_ENUMERATE_ASES
= 2,
56 LOC_DB_ENUMERATE_COUNTRIES
= 3,
59 enum loc_database_enumerator_flags
{
60 LOC_DB_ENUMERATOR_FLAGS_FLATTEN
= (1 << 0),
63 struct loc_database_enumerator
;
64 int loc_database_enumerator_new(struct loc_database_enumerator
** enumerator
,
65 struct loc_database
* db
, enum loc_database_enumerator_mode mode
, int flags
);
66 struct loc_database_enumerator
* loc_database_enumerator_ref(struct loc_database_enumerator
* enumerator
);
67 struct loc_database_enumerator
* loc_database_enumerator_unref(struct loc_database_enumerator
* enumerator
);
69 int loc_database_enumerator_set_string(struct loc_database_enumerator
* enumerator
, const char* string
);
70 struct loc_country_list
* loc_database_enumerator_get_countries(struct loc_database_enumerator
* enumerator
);
71 int loc_database_enumerator_set_countries(
72 struct loc_database_enumerator
* enumerator
, struct loc_country_list
* countries
);
73 struct loc_as_list
* loc_database_enumerator_get_asns(
74 struct loc_database_enumerator
* enumerator
);
75 int loc_database_enumerator_set_asns(
76 struct loc_database_enumerator
* enumerator
, struct loc_as_list
* asns
);
77 int loc_database_enumerator_set_flag(struct loc_database_enumerator
* enumerator
, enum loc_network_flags flag
);
78 int loc_database_enumerator_set_family(struct loc_database_enumerator
* enumerator
, int family
);
79 int loc_database_enumerator_next_as(
80 struct loc_database_enumerator
* enumerator
, struct loc_as
** as
);
81 int loc_database_enumerator_next_network(
82 struct loc_database_enumerator
* enumerator
, struct loc_network
** network
);
83 int loc_database_enumerator_next_country(
84 struct loc_database_enumerator
* enumerator
, struct loc_country
** country
);