913de4a379d186fea432d1ed11e40d9dfa8688eb
[radsecproxy.git] / lib / libradsec-impl.h
1 /** @file libradsec-impl.h
2     @brief Libraray internal header file for libradsec.  */
3
4 /* See the file COPYING for licensing information.  */
5
6 /* Constants.  */
7 #define RS_HEADER_LEN 4
8
9 /* Data types.  */
10 enum rs_conn_type {
11     RS_CONN_TYPE_NONE = 0,
12     RS_CONN_TYPE_UDP,
13     RS_CONN_TYPE_TCP,
14     RS_CONN_TYPE_TLS,
15     RS_CONN_TYPE_DTLS,
16 };
17 typedef unsigned int rs_conn_type_t;
18
19 enum rs_cred_type {
20     RS_CRED_NONE = 0,
21     RS_CRED_TLS_PSK_RSA,        /* RFC 4279.  */
22 };
23 typedef unsigned int rs_cred_type_t;
24
25 struct rs_credentials {
26     enum rs_cred_type type;
27     char *identity;
28     char *secret;
29 };
30
31 typedef void * (*rs_calloc_fp)(size_t nmemb, size_t size);
32 typedef void * (*rs_malloc_fp)(size_t size);
33 typedef void (*rs_free_fp)(void *ptr);
34 typedef void * (*rs_realloc_fp)(void *ptr, size_t size);
35 struct rs_alloc_scheme {
36     rs_calloc_fp calloc;
37     rs_malloc_fp malloc;
38     rs_free_fp free;
39     rs_realloc_fp realloc;
40 };
41
42 typedef void (*rs_conn_connected_cb)(void *user_data /* FIXME: peer? */);
43 typedef void (*rs_conn_disconnected_cb)(void *user_data /* FIXME: reason? */);
44 typedef void (*rs_conn_packet_received_cb)(const struct rs_packet *packet,
45                                            void *user_data);
46 typedef void (*rs_conn_packet_sent_cb)(void *user_data);
47
48 /** Connection callbacks.  */
49 struct rs_conn_callbacks {
50     /** Callback invoked when the connection has been established.  */
51     rs_conn_connected_cb connected_cb;
52     /** Callback invoked when the connection has been torn down.  */
53     rs_conn_disconnected_cb disconnected_cb;
54     /** Callback invoked when a packet was received.  */
55     rs_conn_packet_received_cb received_cb;
56     /** Callback invoked when a packet was successfully sent.  */
57     rs_conn_packet_sent_cb sent_cb;
58 };
59
60 struct rs_handle {
61     struct rs_alloc_scheme alloc_scheme;
62     /* TODO: dictionary? */
63 };
64
65 struct rs_connection {
66     struct rs_handle *ctx;
67     enum rs_conn_type conn_type;
68     struct rs_credentials transport_credentials;
69     struct rs_conn_callbacks callbacks;
70 };
71
72 struct rs_attribute {
73     uint8_t type;
74     uint8_t length;
75     uint8_t *value;
76 };
77
78 struct rs_packet {
79     uint8_t code;
80     uint8_t id;
81     uint8_t auth[16];
82     struct list *attrs;
83 };
84
85 /* Convenience macros.  */
86 #define rs_calloc(ctx, nmemb, size) \
87     (ctx->alloc_scheme.calloc ? ctx->alloc_scheme.calloc : calloc)(nmemb, size)
88 #define rs_malloc(ctx, size) \
89     (ctx->alloc_scheme.malloc ? ctx->alloc_scheme.malloc : malloc)(size)
90 #define rs_free(ctx, ptr) \
91     (ctx->alloc_scheme.free ? ctx->alloc_scheme.free : free)(ptr)
92 #define rs_(ctx, realloc, ptr, size) \
93     (ctx->alloc_scheme.realloc ? ctx->alloc_scheme.realloc : realloc)(ptr, size)
94
95 /* Local Variables: */
96 /* c-file-style: "stroustrup" */
97 /* End: */