1 /*
2  * Copyright (c) 2009 NLNet Labs. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
19  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
21  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
23  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  */
26 
27 #ifndef SIGNER_ZONELIST_H
28 #define SIGNER_ZONELIST_H
29 
30 #include <ldns/ldns.h>
31 #include <stdio.h>
32 #include <time.h>
33 
34 typedef struct zonelist_struct zonelist_type;
35 
36 #include "status.h"
37 #include "locks.h"
38 #include "signer/zone.h"
39 
40 /**
41  * Zone list
42  *
43  */
44 struct zonelist_struct {
45     ldns_rbtree_t* zones;
46     time_t last_modified;
47     int just_added;
48     int just_updated;
49     int just_removed;
50     pthread_mutex_t zl_lock;
51 };
52 
53 /**
54  * Create zone list.
55  * \param[in] allocator memory allocator
56  * \return zonelist_type* created zone list
57  *
58  */
59 extern zonelist_type* zonelist_create(void);
60 
61 /**
62  * Lookup zone by name and class.
63  * \param[in] zl zone list
64  * \param[in] name zone name
65  * \param[in] klass zone class
66  * \return zone_type* found zone
67  *
68  */
69 extern zone_type* zonelist_lookup_zone_by_name(zonelist_type* zonelist,
70     const char* name, ldns_rr_class klass);
71 
72 /**
73  * Lookup zone by dname and class.
74  * \param[in] zl zone list
75  * \param[in] dname zone domain name
76  * \param[in] klass zone class
77  * \return zone_type* found zone
78  *
79  */
80 extern zone_type* zonelist_lookup_zone_by_dname(zonelist_type* zonelist,
81     ldns_rdf* dname, ldns_rr_class klass);
82 
83 /**
84  * Add zone.
85  * \param[in] zl zone list
86  * \param[in] zone zone
87  * \return zone_type* added zone
88  *
89  */
90 extern zone_type* zonelist_add_zone(zonelist_type* zl, zone_type* zone);
91 
92 /**
93  * Delete zone.
94  * \param[in] zl zone list
95  * \param[in] zone zone
96  *
97  */
98 extern void zonelist_del_zone(zonelist_type* zlist, zone_type* zone);
99 
100 /**
101  * Update zonelist.
102  * \param[in] zl zone list
103  * \param[in] zlfile zone list filename
104  * \return ods_status status
105  *
106  */
107 extern ods_status zonelist_update(zonelist_type* zl, const char* zlfile);
108 
109 /**
110  * Clean up zone list.
111  * \param[in] zl zone list
112  *
113  */
114 extern void zonelist_cleanup(zonelist_type* zl);
115 
116 /**
117  * Free zone list.
118  * \param[in] zl zone list
119  *
120  */
121 extern void zonelist_free(zonelist_type* zl);
122 
123 #endif /* SIGNER_ZONELIST_H */
124