WIP commit for listener support.
[radsecproxy.git] / lib / examples / server.c
1 /* RADIUS/RadSec server using libradsec. */
2
3 /* Copyright 2013 NORDUnet A/S. All rights reserved.
4    See LICENSE for licensing information.  */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <assert.h>
9 #include <string.h>
10 #include <radsec/radsec.h>
11 #include <event2/event.h>
12 #include "debug.h"              /* For rs_dump_message(). */
13
14 #define CONFIG_FILE "examples/test.conf"
15 #define CONFIG "tls"
16
17 #define SECRET "sikrit"
18 #define USER_NAME "molgan@PROJECT-MOONSHOT.ORG"
19 #define USER_PW "password"
20
21 void
22 new_conn_cb (struct rs_connection *conn, void *user_data)
23 {
24   printf ("new connection: fd=%d\n", -1); /* conn->fd */
25 }
26
27 struct rs_error *
28 server (struct rs_context *ctx)
29 {
30   int r = 0;
31   struct rs_error *err = NULL;
32   struct rs_connection *conn = NULL;
33   struct rs_listener *listener = NULL;
34   const struct rs_listener_callbacks cbs = {};
35
36   if (rs_listener_create (ctx, &listener, CONFIG))
37     goto out;
38   rs_listener_set_callbacks (listener, &cbs);
39
40   do
41     {
42       r = rs_listener_dispatch (listener);
43       printf ("DEBUG: rs_listener_dispatch done (r=%d)\n", r);
44     }
45   while (r == 0);
46
47  out:
48   err = rs_err_ctx_pop (ctx);
49   if (err == NULL)
50     err = rs_err_conn_pop (conn);
51
52 #if 0
53   if (listener)
54     rs_listener_destroy (listener);
55   listener = NULL;
56 #endif
57
58   return err;
59 }
60
61 int
62 main (int argc, char *argv[])
63 {
64   struct rs_error *err = NULL;
65   struct rs_context *ctx = NULL;
66
67   if (rs_context_create (&ctx))
68     goto out;
69   if (rs_context_read_config (ctx, CONFIG_FILE))
70     goto out;
71
72   {                             /* DEBUG printouts */
73     char *buf = NULL;
74     int err = rs_context_print_config (ctx, &buf);
75     assert (err == RSE_OK);
76     fputs (buf, stdout);
77     free (buf);
78   }
79
80   err = server (ctx);
81
82  out:
83   if (ctx)
84     rs_context_destroy (ctx);
85
86   if (err)
87     {
88       fprintf (stderr, "error: %s: %d\n", rs_err_msg (err), rs_err_code (err, 0));
89       return rs_err_code (err, 1);
90     }
91   return 0;
92 }