PUD: cleanup includes
[olsrd.git] / lib / pud / src / timers.c
1 #include "timers.h"
2
3 /* Plugin includes */
4 #include "pud.h"
5
6 /* OLSRD includes */
7 #include "olsr_cookie.h"
8
9 /* System includes */
10
11 /*
12  * OLSR Tx Timer
13  */
14
15 /** The timer cookie, used to trace back the originator in debug */
16 static struct olsr_cookie_info *pud_olsr_tx_timer_cookie = NULL;
17
18 /** The timer */
19 static struct timer_entry * pud_olsr_tx_timer = NULL;
20
21 /**
22  Start the OLSR tx timer. Does nothing when the timer is already running.
23
24  @param interval
25  The interval in seconds
26  @param cb_func
27  The callback function to call when the timer expires
28
29  @return
30  - false on failure
31  - true otherwise
32  */
33 static int startOlsrTxTimer(unsigned long long interval, timer_cb_func cb_func) {
34         if (pud_olsr_tx_timer == NULL) {
35                 pud_olsr_tx_timer = olsr_start_timer(interval * MSEC_PER_SEC, 0,
36                                 OLSR_TIMER_PERIODIC, cb_func, NULL,
37                                 pud_olsr_tx_timer_cookie);
38                 if (pud_olsr_tx_timer == NULL) {
39                         return false;
40                 }
41         }
42
43         return true;
44 }
45
46 /**
47  Stop the OLSR tx timer
48  */
49 static void stopOlsrTxTimer(void) {
50         if (pud_olsr_tx_timer != NULL) {
51                 olsr_stop_timer(pud_olsr_tx_timer);
52                 pud_olsr_tx_timer = NULL;
53         }
54 }
55
56 /**
57  Restart the OLSR tx timer
58
59  @param interval
60  The interval in seconds
61  @param cb_func
62  The callback function to call when the timer expires
63
64  @return
65  - false on failure
66  - true otherwise
67  */
68 int restartOlsrTxTimer(unsigned long long interval, timer_cb_func cb_func) {
69         stopOlsrTxTimer();
70         return startOlsrTxTimer(interval, cb_func);
71 }
72
73 /**
74  Initialise the OLSR tx timer.
75
76  @return
77  - false on failure
78  - true otherwise
79  */
80 int initOlsrTxTimer(void) {
81         if (pud_olsr_tx_timer_cookie == NULL) {
82                 pud_olsr_tx_timer_cookie = olsr_alloc_cookie(
83                                 PUD_PLUGIN_ABBR ": OLSR tx timer", OLSR_COOKIE_TYPE_TIMER);
84                 if (pud_olsr_tx_timer_cookie == NULL) {
85                         return false;
86                 }
87         }
88         return true;
89 }
90
91 /**
92  Destroy the OLSR tx timer.
93  */
94 void destroyOlsrTxTimer(void) {
95         stopOlsrTxTimer();
96         if (pud_olsr_tx_timer_cookie != NULL) {
97                 olsr_free_cookie(pud_olsr_tx_timer_cookie);
98                 pud_olsr_tx_timer_cookie = NULL;
99         }
100 }
101
102 /*
103  * Uplink Tx Timer
104  */
105
106 /** The timer cookie, used to trace back the originator in debug */
107 static struct olsr_cookie_info *pud_uplink_tx_timer_cookie = NULL;
108
109 /** The timer */
110 static struct timer_entry * pud_uplink_tx_timer = NULL;
111
112 /**
113  Start the uplink tx timer. Does nothing when the timer is already running.
114
115  @param interval
116  The interval in seconds
117  @param cb_func
118  The callback function to call when the timer expires
119
120  @return
121  - false on failure
122  - true otherwise
123  */
124 static int startUplinkTxTimer(unsigned long long interval, timer_cb_func cb_func) {
125         if (pud_uplink_tx_timer == NULL) {
126                 pud_uplink_tx_timer = olsr_start_timer(interval * MSEC_PER_SEC, 0,
127                                 OLSR_TIMER_PERIODIC, cb_func, NULL,
128                                 pud_uplink_tx_timer_cookie);
129                 if (pud_uplink_tx_timer == NULL) {
130                         return false;
131                 }
132         }
133
134         return true;
135 }
136
137 /**
138  Stop the uplink tx timer
139  */
140 static void stopUplinkTxTimer(void) {
141         if (pud_uplink_tx_timer != NULL) {
142                 olsr_stop_timer(pud_uplink_tx_timer);
143                 pud_uplink_tx_timer = NULL;
144         }
145 }
146
147 /**
148  Restart the uplink tx timer
149
150  @param interval
151  The interval in seconds
152  @param cb_func
153  The callback function to call when the timer expires
154
155  @return
156  - false on failure
157  - true otherwise
158  */
159 int restartUplinkTxTimer(unsigned long long interval, timer_cb_func cb_func) {
160         stopUplinkTxTimer();
161         return startUplinkTxTimer(interval, cb_func);
162 }
163
164 /**
165  Initialise the uplink tx timer.
166
167  @return
168  - false on failure
169  - true otherwise
170  */
171 int initUplinkTxTimer(void) {
172         if (pud_uplink_tx_timer_cookie == NULL) {
173                 pud_uplink_tx_timer_cookie = olsr_alloc_cookie(
174                                 PUD_PLUGIN_ABBR ": uplink tx timer", OLSR_COOKIE_TYPE_TIMER);
175                 if (pud_uplink_tx_timer_cookie == NULL) {
176                         return false;
177                 }
178         }
179         return true;
180 }
181
182 /**
183  Destroy the uplink tx timer.
184  */
185 void destroyUplinkTxTimer(void) {
186         stopUplinkTxTimer();
187         if (pud_uplink_tx_timer_cookie != NULL) {
188                 olsr_free_cookie(pud_uplink_tx_timer_cookie);
189                 pud_uplink_tx_timer_cookie = NULL;
190         }
191 }
192
193 /*
194  * Best Gateway Timer
195  */
196
197 /** The timer cookie, used to trace back the originator in debug */
198 static struct olsr_cookie_info *pud_gateway_timer_cookie = NULL;
199
200 /** The timer */
201 static struct timer_entry * pud_gateway_timer = NULL;
202
203 /**
204  Start the gateway timer. Does nothing when the timer is already running.
205
206  @param interval
207  The interval in seconds
208  @param cb_func
209  The callback function to call when the timer expires
210
211  @return
212  - false on failure
213  - true otherwise
214  */
215 static int startGatewayTimer(unsigned long long interval, timer_cb_func cb_func) {
216         if (pud_gateway_timer == NULL) {
217                 pud_gateway_timer = olsr_start_timer(interval * MSEC_PER_SEC, 0,
218                                 OLSR_TIMER_PERIODIC, cb_func, NULL,
219                                 pud_gateway_timer_cookie);
220                 if (pud_gateway_timer == NULL) {
221                         return false;
222                 }
223         }
224
225         return true;
226 }
227
228 /**
229  Stop the gateway timer
230  */
231 static void stopGatewayTimer(void) {
232         if (pud_gateway_timer != NULL) {
233                 olsr_stop_timer(pud_gateway_timer);
234                 pud_gateway_timer = NULL;
235         }
236 }
237
238 /**
239  Restart the gateway timer
240
241  @param interval
242  The interval in seconds
243  @param cb_func
244  The callback function to call when the timer expires
245
246  @return
247  - false on failure
248  - true otherwise
249  */
250 int restartGatewayTimer(unsigned long long interval, timer_cb_func cb_func) {
251         stopGatewayTimer();
252         return startGatewayTimer(interval, cb_func);
253 }
254
255 /**
256  Initialise the gateway timer.
257
258  @return
259  - false on failure
260  - true otherwise
261  */
262 int initGatewayTimer(void) {
263         if (pud_gateway_timer_cookie == NULL) {
264                 pud_gateway_timer_cookie = olsr_alloc_cookie(
265                                 PUD_PLUGIN_ABBR ": gateway timer", OLSR_COOKIE_TYPE_TIMER);
266                 if (pud_gateway_timer_cookie == NULL) {
267                         return false;
268                 }
269         }
270         return true;
271 }
272
273 /**
274  Destroy the gateway timer.
275  */
276 void destroyGatewayTimer(void) {
277         stopGatewayTimer();
278         if (pud_gateway_timer_cookie != NULL) {
279                 olsr_free_cookie(pud_gateway_timer_cookie);
280                 pud_gateway_timer_cookie = NULL;
281         }
282 }