1 /** @file libradsec-impl.h
2 @brief Libraray internal header file for libradsec. */
4 /* See the file COPYING for licensing information. */
6 #ifndef _RADSEC_RADSEC_IMPL_H_
7 #define _RADSEC_RADSEC_IMPL_H_ 1
9 #include <event2/util.h>
11 #if defined(RS_ENABLE_TLS)
12 #include <openssl/ssl.h>
16 #define RS_HEADER_LEN 4
21 RS_CRED_TLS_PSK_RSA, /* RFC 4279. */
23 typedef unsigned int rs_cred_type_t;
25 #if defined (__cplusplus)
29 struct rs_credentials {
30 enum rs_cred_type type;
40 /** Configuration object for a connection. */
42 struct rs_connection *conn;
43 struct rs_realm *realm;
44 struct evutil_addrinfo *addr;
49 /** Configuration object for a RADIUS realm. */
52 enum rs_conn_type type;
59 struct rs_peer *peers;
60 struct rs_realm *next;
63 /** Top configuration object. */
66 struct rs_realm *realms;
71 struct rs_config *config;
72 struct rs_alloc_scheme alloc_scheme;
76 struct rs_connection {
77 struct rs_context *ctx;
78 struct rs_realm *realm; /* Owned by ctx. */
79 struct event_base *evb; /* Event base. */
80 struct event *tev; /* Timeout event. */
81 struct rs_credentials transport_credentials;
82 struct rs_conn_callbacks callbacks;
84 struct rs_peer *peers;
85 struct rs_peer *active_peer;
87 struct timeval timeout;
88 char is_connecting; /* FIXME: replace with a single state member */
89 char is_connected; /* FIXME: replace with a single state member */
91 int tryagain; /* For server failover. */
92 int nextid; /* Next RADIUS packet identifier. */
93 /* TCP transport specifics. */
94 struct bufferevent *bev; /* Buffer event. */
95 /* UDP transport specifics. */
96 struct event *wev; /* Write event (for UDP). */
97 struct event *rev; /* Read event (for UDP). */
98 struct rs_packet *out_queue; /* Queue for outgoing UDP packets. */
99 #if defined(RS_ENABLE_TLS)
106 enum rs_packet_flags {
107 rs_packet_hdr_read_flag,
108 rs_packet_received_flag,
112 struct radius_packet;
115 struct rs_connection *conn;
117 uint8_t hdr[RS_HEADER_LEN];
118 struct radius_packet *rpkt; /* FreeRADIUS object. */
119 struct rs_packet *next; /* Used for UDP output queue. */
122 /* Nonpublic functions (in radsec.c -- FIXME: move?). */
123 struct rs_error *rs_resolv (struct evutil_addrinfo **addr,
125 const char *hostname,
126 const char *service);
128 /** Return the internal packet associated with packet \a pkt. */
129 struct radius_packet *rs_packet_frpkt(struct rs_packet *pkt);
131 #if defined (__cplusplus)
135 /* Convenience macros. */
136 #define rs_calloc(h, nmemb, size) \
137 (h->alloc_scheme.calloc ? h->alloc_scheme.calloc : calloc)(nmemb, size)
138 #define rs_malloc(h, size) \
139 (h->alloc_scheme.malloc ? h->alloc_scheme.malloc : malloc)(size)
140 #define rs_free(h, ptr) \
141 (h->alloc_scheme.free ? h->alloc_scheme.free : free)(ptr)
142 #define rs_realloc(h, realloc, ptr, size) \
143 (h->alloc_scheme.realloc ? h->alloc_scheme.realloc : realloc)(ptr, size)
144 #define min(a, b) ((a) < (b) ? (a) : (b))
145 #define max(a, b) ((a) > (b) ? (a) : (b))
147 #endif /* _RADSEC_RADSEC_IMPL_H_ */
149 /* Local Variables: */
150 /* c-file-style: "stroustrup" */