summaryrefslogtreecommitdiff
path: root/lib/examples/client-oyo.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/examples/client-oyo.c')
-rw-r--r--lib/examples/client-oyo.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/examples/client-oyo.c b/lib/examples/client-oyo.c
new file mode 100644
index 0000000..2cee605
--- /dev/null
+++ b/lib/examples/client-oyo.c
@@ -0,0 +1,66 @@
+/* RADIUS/RadSec client using libradsec in on-your-own mode. */
+
+#include <sys/select.h>
+#include <errno.h>
+#include <stdio.h>
+
+int
+loop ()
+{
+ int n;
+ fd_set rfds, wfds, xfds;
+ //struct timeval timeout = {1,0}; /* 1 second. */
+
+ fd = FIXME;
+
+ FD_ZERO(&rfds);
+ FD_SET(fd, &rfds);
+ FD_ZERO(&wfds);
+ FD_SET(fd, &wfds);
+ FD_ZERO(&xfds);
+ FD_SET(fd, &xfds);
+
+ while (1)
+ {
+ n = select (fd + 1, &rfds, &wfds, &xfds, NULL);
+ if (n == 0)
+ {
+ /* Timeout. */
+ fprintf (stderr, "timeout on fd %d after %d seconds\n", fd,
+ timeout.tv_sec);
+ return -1;
+ }
+ else if (n == -1)
+ {
+ /* Error. */
+ perror ("select");
+ return -errno;
+ }
+ else
+ {
+ /* Ready to read/write/<had error>. */
+ if (FD_ISSET(fd, &rfds))
+ {
+ printf ("reading msg\n");
+ radsec_recv_blocking(fd, &msg_in);
+ if (!verify_packet(&msg_in))
+ }
+ if (FD_ISSET(fd, &wfds))
+ {
+ radsec_send(fd, &msg_out);
+ printf ("msg sent\n");
+ }
+ if (FD_ISSET(fd, &xfds))
+ {
+ fprintf (stderr, "error on fd %d\n", fd);
+ return -1;
+ }
+ }
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ return loop ();
+}