WIP.
[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 "../libradsec.h"
8 #include "../debug.h"
9
10 #define SECRET "sikrit"
11 #define USER_NAME "bob"
12 #define USER_PW "hemligt"
13
14 struct rs_error *
15 rsx_client (const char *srvname, int srvport)
16 {
17   struct rs_handle *h;
18   struct rs_connection *conn;
19   struct rs_peer *server;
20   struct rs_packet *req;
21   //struct rs_packet  *resp;
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   printf ("waiting for response\n");
43   if (rs_packet_recv (conn, &resp))
44     return rs_conn_err_pop (conn);
45   printf ("got response\n");
46   rs_dump_packet (resp);
47 #endif
48
49   rs_conn_destroy (conn);
50   rs_context_destroy (h);
51   return 0;
52 }
53
54 int
55 main (int argc, char *argv[])
56 {
57   struct rs_error *err;
58
59   err = rsx_client (strsep (argv + 1, ":"), atoi (argv[1]));
60   if (!err)
61     return -1;
62   fprintf (stderr, "%s\n", rs_err_msg (err, 0));
63   return rs_err_code (err, 1);
64 }