all: updated FSF address in GPL text
[sip-router] / modules / drouting / routing.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2005-2009 Voice Sistem SRL
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Kamailio 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  * Kamailio is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21  *
22  * History:
23  * ---------
24  *  2005-02-20  first version (cristian)
25  *  2005-02-27  ported to 0.9.0 (bogdan)
26  */
27
28
29 #ifndef routing_h
30 #define routing_h
31
32 #include "../../str.h"
33 #include "../../usr_avp.h"
34 #include "prefix_tree.h"
35 #include "dr_time.h"
36
37 #define RG_HASH_SIZE
38 #define RG_INIT_LEN 4;
39
40 /* the buckets for the rt_data rg_hash */
41 typedef struct hb_ {
42         int rgid;
43         ptree_t *pt;
44         struct hb_*next;
45 } hb_t;
46
47 /* routing data is comprised of:
48         - a list of PSTN gw
49         - a hash over routing groups containing 
50         pointers to the coresponding prefix trees
51 */
52 typedef struct rt_data_ {
53         /* list of PSTN gw */
54         pgw_t *pgw_l;
55         /* list of IP addr for PSTN gw */
56         pgw_addr_t *pgw_addr_l;
57         /* default routing list for prefixless rules */
58         ptree_node_t noprefix;
59         /* hash table with routing prefixes */
60         ptree_t *pt;
61 }rt_data_t;
62
63 typedef struct _dr_group {
64         /* 0 - use grp ; 1 - use AVP */
65         int type;
66         union {
67                 unsigned int grp_id;
68                 struct _avp_id{
69                         int_str name;
70                         unsigned short type;
71                 }avp_id;
72         }u;
73 } dr_group_t;
74
75 /* init new rt_data structure */
76 rt_data_t*
77 build_rt_data( void );
78
79
80 /* add a PSTN gw in the list */
81 int
82 add_dst(
83         rt_data_t*,
84         /* id */
85         int ,
86         /* ip address */ 
87         char*,
88         /* strip len */
89         int,
90         /* pri prefix */
91         char*,
92         /* dst type*/
93         int,
94         /* dst attrs*/
95         char*
96         );
97
98 /* build a routing info list element */
99 rt_info_t*
100 build_rt_info(
101         int priority,
102         tmrec_t* time,
103         /* ser routing table id */
104         int route_id,
105         /* list of destinations indexes */
106         char* dstlst,
107         pgw_t* pgw_l
108 );
109
110 void
111 del_pgw_list(
112                 pgw_t *pgw_l
113                 );
114
115 void 
116 free_rt_data(
117                 rt_data_t*,
118                 int
119                 );
120 #endif