WIP -- connecting and sending a packet using libevent.
[radsecproxy.git] / lib / examples / client.c
1 /* RADIUS client doing blocking i/o.  */
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <unistd.h>
6 #include <stdlib.h>
7 #include <event2/event.h>
8 #include "../libradsec.h"
9 #include "../debug.h"
10
11 #define SECRET "sikrit"
12 #define USER_NAME "bob"
13 #define USER_PW "hemligt"
14
15 struct rs_error *
16 rsx_client (const char *srvname, int srvport)
17 {
18   struct rs_handle *h;
19   struct rs_connection *conn;
20   struct rs_peer *server;
21   struct rs_packet *req;
22
23   if (rs_context_create (&h, "/usr/share/freeradius/dictionary"))
24     return NULL;
25
26   if (rs_conn_create (h, &conn))
27     return rs_conn_err_pop (conn);
28   if (rs_conn_add_server (conn, &server, RS_CONN_TYPE_TCP, srvname, srvport))
29     return rs_conn_err_pop (conn);
30   rs_server_set_timeout (server, 10);
31   rs_server_set_tries (server, 3);
32   rs_server_set_secret (server, SECRET);
33
34   if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
35     return rs_conn_err_pop (conn);
36
37   if (rs_packet_send (conn, req, NULL))
38     return rs_conn_err_pop (conn);
39   req = NULL;
40
41   rs_conn_destroy (conn);
42   rs_context_destroy (h);
43   return 0;
44 }
45
46 int
47 main (int argc, char *argv[])
48 {
49   struct rs_error *err;
50   char *host;
51   int port;
52
53   host = strsep (argv + 1, ":");
54   port = atoi (argv[1]);
55   err = rsx_client (host, port);
56   if (!err)
57     return -1;
58   fprintf (stderr, "%s\n", rs_err_msg (err, 0));
59   return rs_err_code (err, 1);
60 }