aboutsummaryrefslogtreecommitdiffstats
path: root/src/libwpactrl/wpactrl_start.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-07-06 21:42:01 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-07-06 21:42:01 +0000
commit330f54ac7f780872223f9cac62347393ffb4ef86 (patch)
tree1de817bd4b556e487b93884ac21561e1e5779635 /src/libwpactrl/wpactrl_start.c
downloadbcnm-330f54ac7f780872223f9cac62347393ffb4ef86.tar.gz
Initial commit
Diffstat (limited to 'src/libwpactrl/wpactrl_start.c')
-rw-r--r--src/libwpactrl/wpactrl_start.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/libwpactrl/wpactrl_start.c b/src/libwpactrl/wpactrl_start.c
new file mode 100644
index 0000000..86a266b
--- /dev/null
+++ b/src/libwpactrl/wpactrl_start.c
@@ -0,0 +1,45 @@
+/* ISC license. */
+
+#include <string.h>
+#include <errno.h>
+#include <skalibs/djbunix.h>
+#include <skalibs/webipc.h>
+#include <skalibs/unix-timed.h>
+#include <bcnm/wpactrl.h>
+#include "wpactrl-internal.h"
+
+int wpactrl_start (wpactrl_t *a, char const *path, tain_t const *deadline, tain_t *stamp)
+{
+ int fda, fds ;
+ fds = ipc_datagram_nbcoe() ;
+ if (fds < 0) goto err ;
+ if (!ipc_timed_connect(fds, path, deadline, stamp)) goto errs ;
+ fda = ipc_datagram_nbcoe() ;
+ if (fda < 0) goto errs ;
+ if (!ipc_timed_connect(fda, path, deadline, stamp)) goto erra ;
+ if (!ipc_timed_send(fda, "ATTACH", 6, deadline, stamp)) goto erra ;
+ {
+ ssize_t r ;
+ char answer[3] ;
+ r = wpactrl_fd_timed_recv(fda, answer, 3, deadline, stamp) ;
+ if (r != 3 || memcmp(answer, "OK\n", 3)) goto erra ;
+ }
+ a->fds = fds ;
+ a->fda = fda ;
+ return 1 ;
+
+ erra:
+ {
+ int e = errno ;
+ fd_close(fda) ;
+ errno = e ;
+ }
+ errs:
+ {
+ int e = errno ;
+ fd_close(fds) ;
+ errno = e ;
+ }
+ err:
+ return 0 ;
+}