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>
30 int loc_database_new(struct loc_ctx
* ctx
, struct loc_database
** database
, FILE* f
);
31 struct loc_database
* loc_database_ref(struct loc_database
* db
);
32 struct loc_database
* loc_database_unref(struct loc_database
* db
);
34 int loc_database_verify(struct loc_database
* db
, FILE* f
);
36 time_t loc_database_created_at(struct loc_database
* db
);
37 const char* loc_database_get_vendor(struct loc_database
* db
);
38 const char* loc_database_get_description(struct loc_database
* db
);
39 const char* loc_database_get_license(struct loc_database
* db
);
41 int loc_database_get_as(struct loc_database
* db
, struct loc_as
** as
, uint32_t number
);
42 size_t loc_database_count_as(struct loc_database
* db
);
44 int loc_database_lookup(struct loc_database
* db
,
45 struct in6_addr
* address
, struct loc_network
** network
);
46 int loc_database_lookup_from_string(struct loc_database
* db
,
47 const char* string
, struct loc_network
** network
);
49 int loc_database_get_country(struct loc_database
* db
,
50 struct loc_country
** country
, const char* code
);
52 enum loc_database_enumerator_mode
{
53 LOC_DB_ENUMERATE_NETWORKS
= 1,
54 LOC_DB_ENUMERATE_ASES
= 2,
57 struct loc_database_enumerator
;
58 int loc_database_enumerator_new(struct loc_database_enumerator
** enumerator
,
59 struct loc_database
* db
, enum loc_database_enumerator_mode mode
);
60 struct loc_database_enumerator
* loc_database_enumerator_ref(struct loc_database_enumerator
* enumerator
);
61 struct loc_database_enumerator
* loc_database_enumerator_unref(struct loc_database_enumerator
* enumerator
);
63 int loc_database_enumerator_set_string(struct loc_database_enumerator
* enumerator
, const char* string
);
64 int loc_database_enumerator_set_country_code(struct loc_database_enumerator
* enumerator
, const char* country_code
);
65 int loc_database_enumerator_set_asn(struct loc_database_enumerator
* enumerator
, unsigned int asn
);
66 int loc_database_enumerator_set_flag(struct loc_database_enumerator
* enumerator
, enum loc_network_flags flag
);
67 int loc_database_enumerator_next_as(
68 struct loc_database_enumerator
* enumerator
, struct loc_as
** as
);
69 int loc_database_enumerator_next_network(
70 struct loc_database_enumerator
* enumerator
, struct loc_network
** network
);