1 /** @file libradsec-impl.h
2 @brief Libraray internal header file for libradsec. */
4 /* Copyright 2010-2013 NORDUnet A/S. All rights reserved.
5 See LICENSE for licensing information. */
7 #ifndef _RADSEC_RADSEC_IMPL_H_
8 #define _RADSEC_RADSEC_IMPL_H_ 1
10 #include <event2/util.h>
12 #if defined(RS_ENABLE_TLS)
13 #include <openssl/ssl.h>
17 #define RS_HEADER_LEN 4
22 /* TLS pre-shared keys, RFC 4279. */
24 /* RS_CRED_TLS_DH_PSK, */
25 /* RS_CRED_TLS_RSA_PSK, */
27 typedef unsigned int rs_cred_type_t;
29 enum rs_key_encoding {
30 RS_KEY_ENCODING_UTF8 = 1,
31 RS_KEY_ENCODING_ASCII_HEX = 2,
33 typedef unsigned int rs_key_encoding_t;
35 #if defined (__cplusplus)
39 struct rs_credentials {
40 enum rs_cred_type type;
43 enum rs_key_encoding secret_encoding;
44 unsigned int secret_len;
52 /** Configuration object for a connection. */
54 struct rs_connection *conn;
55 struct rs_realm *realm;
58 char *secret; /* RADIUS secret. */
59 struct evutil_addrinfo *addr_cache;
63 /** Configuration object for a RADIUS realm. */
66 enum rs_conn_type type;
73 int disable_hostname_check;
74 struct rs_credentials *transport_cred;
75 struct rs_peer *peers;
76 struct rs_realm *next;
79 /** Top configuration object. */
81 struct rs_realm *realms;
86 struct rs_config *config;
87 struct rs_alloc_scheme alloc_scheme;
91 struct rs_connection {
92 struct rs_context *ctx;
93 struct rs_realm *realm; /* Owned by ctx. */
94 struct event_base *evb; /* Event base. */
95 struct event *tev; /* Timeout event. */
96 struct rs_conn_callbacks callbacks;
98 struct rs_peer *peers;
99 struct rs_peer *active_peer;
100 struct rs_error *err;
101 struct timeval timeout;
102 char is_connecting; /* FIXME: replace with a single state member */
103 char is_connected; /* FIXME: replace with a single state member */
104 int fd; /* Socket. */
105 int tryagain; /* For server failover. */
106 int nextid; /* Next RADIUS packet identifier. */
107 /* TCP transport specifics. */
108 struct bufferevent *bev; /* Buffer event. */
109 /* UDP transport specifics. */
110 struct event *wev; /* Write event (for UDP). */
111 struct event *rev; /* Read event (for UDP). */
112 struct rs_packet *out_queue; /* Queue for outgoing UDP packets. */
113 #if defined(RS_ENABLE_TLS)
120 enum rs_packet_flags {
121 RS_PACKET_HEADER_READ,
126 struct radius_packet;
129 struct rs_connection *conn;
131 uint8_t hdr[RS_HEADER_LEN];
132 struct radius_packet *rpkt; /* FreeRADIUS object. */
133 struct rs_packet *next; /* Used for UDP output queue. */
136 #if defined (__cplusplus)
140 /* Convenience macros. */
141 #define rs_calloc(h, nmemb, size) \
142 (h->alloc_scheme.calloc ? h->alloc_scheme.calloc : calloc)(nmemb, size)
143 #define rs_malloc(h, size) \
144 (h->alloc_scheme.malloc ? h->alloc_scheme.malloc : malloc)(size)
145 #define rs_free(h, ptr) \
146 (h->alloc_scheme.free ? h->alloc_scheme.free : free)(ptr)
147 #define rs_realloc(h, realloc, ptr, size) \
148 (h->alloc_scheme.realloc ? h->alloc_scheme.realloc : realloc)(ptr, size)
149 #define min(a, b) ((a) < (b) ? (a) : (b))
150 #define max(a, b) ((a) > (b) ? (a) : (b))
152 #endif /* _RADSEC_RADSEC_IMPL_H_ */
154 /* Local Variables: */
155 /* c-file-style: "stroustrup" */