d7e7270b9d55e83754dd655e43e46c368778c8dc
[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_UDP, 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 #if 0
42   if (rs_packet_recv (conn, &resp))
43     return rs_conn_err_pop (conn);
44 #if defined (DEBUG)
45   rs_dump_packet (resp);
46 #endif
47 #endif
48
49   rs_conn_destroy (conn);
50   rs_context_destroy (h);
51   return NULL;
52 }
53
54 int
55 main (int argc, char *argv[])
56 {
57   struct rs_error *err;
58   char *host;
59   int port;
60
61   host = strsep (argv + 1, ":");
62   port = atoi (argv[1]);
63   err = rsx_client (host, port);
64   if (err)
65     {
66       fprintf (stderr, "%s\n", rs_err_msg (err, 0));
67       return rs_err_code (err, 1);
68     }
69   return 0;
70 }