1 /** @file libradsec-impl.h
2 @brief Libraray internal header file for libradsec. */
4 /* See LICENSE 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 /* TLS pre-shared keys, RFC 4279. */
23 /* RS_CRED_TLS_DH_PSK, */
24 /* RS_CRED_TLS_RSA_PSK, */
26 typedef unsigned int rs_cred_type_t;
28 enum rs_key_encoding {
29 RS_KEY_ENCODING_UTF8 = 1,
30 RS_KEY_ENCODING_ASCII_HEX = 2,
32 typedef unsigned int rs_key_encoding_t;
34 #if defined (__cplusplus)
38 struct rs_credentials {
39 enum rs_cred_type type;
42 enum rs_key_encoding secret_encoding;
51 RS_PEER_TYPE_CLIENT = 1,
52 RS_PEER_TYPE_SERVER = 2
55 /** Configuration object for a connection. */
57 enum rs_peer_type type;
58 struct rs_connection *conn;
59 struct rs_realm *realm;
62 char *secret; /* RADIUS secret. */
63 struct evutil_addrinfo *addr_cache;
68 struct rs_credentials *transport_cred;
72 /** Configuration object for a RADIUS realm. */
75 enum rs_conn_type type;
78 struct rs_peer *peers;
79 struct rs_realm *next;
82 /** Top configuration object. */
84 struct rs_realm *realms;
89 struct rs_config *config;
90 struct rs_alloc_scheme alloc_scheme;
94 struct rs_connection {
95 struct rs_context *ctx;
96 struct rs_realm *realm; /* Owned by ctx. */
97 struct event_base *evb; /* Event base. */
98 struct event *tev; /* Timeout event. */
99 struct rs_conn_callbacks callbacks;
101 struct rs_peer *peers;
102 struct rs_peer *active_peer;
103 struct rs_error *err;
104 struct timeval timeout;
105 char is_connecting; /* FIXME: replace with a single state member */
106 char is_connected; /* FIXME: replace with a single state member */
107 int fd; /* Socket. */
108 int tryagain; /* For server failover. */
109 int nextid; /* Next RADIUS packet identifier. */
110 /* TCP transport specifics. */
111 struct bufferevent *bev; /* Buffer event. */
112 /* UDP transport specifics. */
113 struct event *wev; /* Write event (for UDP). */
114 struct event *rev; /* Read event (for UDP). */
115 struct rs_message *out_queue; /* Queue for outgoing UDP packets. */
116 #if defined(RS_ENABLE_TLS)
123 enum rs_message_flags {
124 RS_MESSAGE_HEADER_READ,
129 struct radius_packet;
132 struct rs_connection *conn;
134 uint8_t hdr[RS_HEADER_LEN];
135 struct radius_packet *rpkt; /* FreeRADIUS object. */
136 struct rs_message *next; /* Used for UDP output queue. */
139 #if defined (__cplusplus)
143 /* Convenience macros. */
144 #define rs_calloc(h, nmemb, size) \
145 (h->alloc_scheme.calloc ? h->alloc_scheme.calloc : calloc)(nmemb, size)
146 #define rs_malloc(h, size) \
147 (h->alloc_scheme.malloc ? h->alloc_scheme.malloc : malloc)(size)
148 #define rs_free(h, ptr) \
149 (h->alloc_scheme.free ? h->alloc_scheme.free : free)(ptr)
150 #define rs_realloc(h, realloc, ptr, size) \
151 (h->alloc_scheme.realloc ? h->alloc_scheme.realloc : realloc)(ptr, size)
152 #define min(a, b) ((a) < (b) ? (a) : (b))
153 #define max(a, b) ((a) > (b) ? (a) : (b))
155 #endif /* _RADSEC_RADSEC_IMPL_H_ */
157 /* Local Variables: */
158 /* c-file-style: "stroustrup" */