GPLization banner introduced to *.[hc] files
[sip-router] / modules / tm / timer.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2001-2003 Fhg Fokus
5  *
6  * This file is part of ser, a free SIP server.
7  *
8  * ser is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * For a license to use the ser software under conditions
14  * other than those described here, or to purchase support for this
15  * software, please contact iptel.org by e-mail at the following addresses:
16  *    info@iptel.org
17  *
18  * ser is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License 
24  * along with this program; if not, write to the Free Software 
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26  */
27
28
29 #ifndef _TIMER_H
30 #define _TIMER_H
31
32 #include "lock.h"
33 #include "t_funcs.h"
34
35 /* timer timestamp value indicating a timer has been 
36    deactived and shall not be executed
37 */
38 #define TIMER_DELETED   1
39
40
41 #define is_in_timer_list2(_tl) ( (_tl)->timer_list )
42
43 /* identifiers of timer lists;*/
44 /* fixed-timer retransmission lists (benefit: fixed timer$
45    length allows for appending new items to the list as$
46    opposed to inserting them which is costly */
47 enum lists
48 {
49         FR_TIMER_LIST, FR_INV_TIMER_LIST,
50         WT_TIMER_LIST,
51         DELETE_LIST,
52         RT_T1_TO_1, RT_T1_TO_2, RT_T1_TO_3, RT_T2,
53         NR_OF_TIMER_LISTS
54 };
55
56 /* all you need to put a cell in a timer list
57    links to neighbours and timer value */
58 typedef struct timer_link
59 {
60         struct timer_link *next_tl;
61         struct timer_link *prev_tl;
62         volatile unsigned int       time_out;
63         void              *payload;
64         struct timer      *timer_list;
65         enum timer_groups  tg;
66 }timer_link_type ;
67
68
69 /* timer list: includes head, tail and protection semaphore */
70 typedef struct  timer
71 {
72         struct timer_link  first_tl;
73         struct timer_link  last_tl;
74         ser_lock_t*        mutex;
75         enum lists         id;
76 } timer_type;
77
78 /* transaction table */
79 struct timer_table
80 {
81     /* table of timer lists */
82     struct timer   timers[ NR_OF_TIMER_LISTS ];
83 };
84
85
86
87
88
89 extern int timer_group[NR_OF_TIMER_LISTS];
90 extern unsigned int timer_id2timeout[NR_OF_TIMER_LISTS];
91
92
93
94 struct timer_table * tm_init_timers();
95 void unlink_timer_lists();
96 void free_timer_table();
97 void init_timer_list( enum lists list_id);
98 void reset_timer_list( enum lists list_id);
99 void remove_timer_unsafe(  struct timer_link* tl ) ;
100 void add_timer_unsafe( struct timer*, struct timer_link*, unsigned int);
101 struct timer_link  *check_and_split_time_list( struct timer*, int);
102
103 void reset_timer( struct timer_link* tl );
104 /* determine timer length and put on a correct timer list */
105 void set_timer( struct timer_link *new_tl, enum lists list_id );
106 /* similar to set_timer, except it allows only one-time
107    timer setting and all later attempts are ignored */
108 void set_1timer( struct timer_link *new_tl, enum lists list_id );
109 void unlink_timers( struct cell *t );
110 void timer_routine(unsigned int, void*);
111
112
113 struct timer_table *get_timertable();
114
115 #endif