1 /** @file libradsec-impl.h
2 @brief Libraray internal header file for libradsec. */
4 /* See the file COPYING for licensing information. */
6 #include <freeradius/libradius.h>
7 #include <event2/util.h>
9 #if defined(RS_ENABLE_TLS)
10 #include <openssl/ssl.h>
14 #define RS_HEADER_LEN 4
19 /* TLS pre-shared keys, RFC 4279. */
21 /* RS_CRED_TLS_DH_PSK, */
22 /* RS_CRED_TLS_RSA_PSK, */
24 typedef unsigned int rs_cred_type_t;
26 enum rs_key_encoding {
27 RS_KEY_ENCODING_UTF8 = 1,
28 RS_KEY_ENCODING_ASCII_HEX = 2,
30 typedef unsigned int rs_key_encoding_t;
32 #if defined (__cplusplus)
36 struct rs_credentials {
37 enum rs_cred_type type;
40 enum rs_key_encoding secret_encoding;
41 unsigned int secret_len;
49 /** Configuration object for a connection. */
51 struct rs_connection *conn;
52 struct rs_realm *realm;
53 struct evutil_addrinfo *addr;
54 char *secret; /* RADIUS secret. */
58 /** Configuration object for a RADIUS realm. */
61 enum rs_conn_type type;
68 struct rs_credentials *transport_cred;
69 struct rs_peer *peers;
70 struct rs_realm *next;
73 /** Top configuration object. */
76 struct rs_realm *realms;
81 struct rs_config *config;
82 struct rs_alloc_scheme alloc_scheme;
84 fr_randctx fr_randctx;
87 struct rs_connection {
88 struct rs_context *ctx;
89 struct rs_realm *realm; /* Owned by ctx. */
90 struct event_base *evb; /* Event base. */
91 struct event *tev; /* Timeout event. */
92 struct rs_conn_callbacks callbacks;
94 struct rs_peer *peers;
95 struct rs_peer *active_peer;
97 struct timeval timeout;
98 char is_connecting; /* FIXME: replace with a single state member */
99 char is_connected; /* FIXME: replace with a single state member */
100 int fd; /* Socket. */
101 int tryagain; /* For server failover. */
102 int nextid; /* Next RADIUS packet identifier. */
103 /* TCP transport specifics. */
104 struct bufferevent *bev; /* Buffer event. */
105 /* UDP transport specifics. */
106 struct event *wev; /* Write event (for UDP). */
107 struct event *rev; /* Read event (for UDP). */
108 struct rs_packet *out_queue; /* Queue for outgoing UDP packets. */
109 #if defined(RS_ENABLE_TLS)
116 enum rs_packet_flags {
117 rs_packet_hdr_read_flag,
118 rs_packet_received_flag,
123 struct rs_connection *conn;
125 uint8_t hdr[RS_HEADER_LEN];
126 RADIUS_PACKET *rpkt; /* FreeRADIUS object. */
127 struct rs_packet *next; /* Used for UDP output queue. */
130 /* Nonpublic functions (in radsec.c -- FIXME: move?). */
131 struct rs_error *rs_resolv (struct evutil_addrinfo **addr,
133 const char *hostname,
134 const char *service);
135 #if defined (__cplusplus)
139 /* Convenience macros. */
140 #define rs_calloc(h, nmemb, size) \
141 (h->alloc_scheme.calloc ? h->alloc_scheme.calloc : calloc)(nmemb, size)
142 #define rs_malloc(h, size) \
143 (h->alloc_scheme.malloc ? h->alloc_scheme.malloc : malloc)(size)
144 #define rs_free(h, ptr) \
145 (h->alloc_scheme.free ? h->alloc_scheme.free : free)(ptr)
146 #define rs_realloc(h, realloc, ptr, size) \
147 (h->alloc_scheme.realloc ? h->alloc_scheme.realloc : realloc)(ptr, size)
148 #define min(a, b) ((a) < (b) ? (a) : (b))
149 #define max(a, b) ((a) > (b) ? (a) : (b))
151 /* Local Variables: */
152 /* c-file-style: "stroustrup" */