Add "extern C {...} to header files for C++ builds.
[freeradius.git] / src / include / realms.h
1 #ifndef REALMS_H
2 #define REALMS_H
3
4 /*
5  * realms.h     Structures, prototypes and global variables
6  *              for realms
7  *
8  * Version:     $Id$
9  *
10  */
11
12 #include <freeradius-devel/ident.h>
13 RCSIDH(realms_h, "$Id$")
14
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18
19 #define HOME_TYPE_INVALID (0)
20 #define HOME_TYPE_AUTH    (1)
21 #define HOME_TYPE_ACCT    (2)
22 #ifdef WITH_COA
23 #define HOME_TYPE_COA     (3)
24 #endif
25
26 #define HOME_PING_CHECK_NONE            (0)
27 #define HOME_PING_CHECK_STATUS_SERVER   (1)
28 #define HOME_PING_CHECK_REQUEST         (2)
29
30 #define HOME_STATE_ALIVE                (0)
31 #define HOME_STATE_ZOMBIE               (1)
32 #define HOME_STATE_IS_DEAD              (2)
33
34 typedef struct home_server {
35         const char      *name;
36
37         const char      *hostname;
38         const char      *server; /* for internal proxying */
39
40         fr_ipaddr_t     ipaddr;
41
42         int             port;
43         int             type;           /* auth/acct */
44
45         int             proto;
46         int             max_connections;
47         int             num_connections; /* protected by proxy mutex */
48         int             max_requests;    /* for one connection */
49         int             lifetime;
50         int             idle_timeout;
51
52         /*
53          *      Maybe also have list of source IP/ports, && socket?
54          */
55
56         const char      *secret;
57
58         fr_event_t      *ev;
59         struct timeval  when;
60
61         int             response_window;
62         int             no_response_fail;
63         int             max_outstanding; /* don't overload it */
64         int             currently_outstanding;
65         int             message_authenticator;
66
67         time_t          last_packet;
68         struct timeval  revive_time;
69         struct timeval  zombie_period_start;
70         int             zombie_period; /* unresponsive for T, mark it dead */
71
72         int             state;
73
74         int             ping_check;
75         const char      *ping_user_name;
76         const char      *ping_user_password;
77
78         int             ping_interval;
79         int             num_pings_to_alive;
80         int             num_received_pings;
81         int             ping_timeout;
82
83         int             revive_interval; /* if it doesn't support pings */
84         CONF_SECTION    *cs;
85 #ifdef WITH_COA
86         int                     coa_irt;
87         int                     coa_mrc;
88         int                     coa_mrt;
89         int                     coa_mrd;
90 #endif
91 #ifdef WITH_STATS
92         int             number;
93
94         fr_ipaddr_t     src_ipaddr; /* preferred source IP address */
95
96         fr_stats_t      stats;
97
98         fr_stats_ema_t  ema;
99 #endif
100 } home_server;
101
102
103 typedef enum home_pool_type_t {
104         HOME_POOL_INVALID = 0,
105         HOME_POOL_LOAD_BALANCE,
106         HOME_POOL_FAIL_OVER,
107         HOME_POOL_CLIENT_BALANCE,
108         HOME_POOL_CLIENT_PORT_BALANCE,
109         HOME_POOL_KEYED_BALANCE
110 } home_pool_type_t;
111
112
113 typedef struct home_pool_t {
114         const char              *name;
115         home_pool_type_t        type;
116
117         int                     server_type;
118         CONF_SECTION            *cs;
119
120         const char              *virtual_server; /* for pre/post-proxy */
121         
122         home_server             *fallback;
123
124         int                     num_home_servers;
125         home_server             *servers[1];
126 } home_pool_t;
127
128
129 typedef struct _realm {
130         const char              *name;
131
132         int                     striprealm;
133
134         home_pool_t             *auth_pool;
135         home_pool_t             *acct_pool;
136 } REALM;
137
138 int realms_init(CONF_SECTION *config);
139 void realms_free(void);
140 REALM *realm_find(const char *name); /* name is from a packet */
141 REALM *realm_find2(const char *name); /* ... with name taken from realm_find */
142
143 home_server *home_server_ldb(const char *realmname, home_pool_t *pool, REQUEST *request);
144 home_server *home_server_find(fr_ipaddr_t *ipaddr, int port, int proto);
145 #ifdef WITH_COA
146 home_server *home_server_byname(const char *name, int type);
147 #endif
148 #ifdef WITH_STATS
149 home_server *home_server_bynumber(int number);
150 #endif
151 home_pool_t *home_pool_byname(const char *name, int type);
152
153 #ifdef __cplusplus
154 }
155 #endif
156
157 #endif /* REALMS_H */