h_simpleserver.c revision 313498
1/*	$NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $	*/
2
3#include <sys/types.h>
4
5#include <rump/rump.h>
6
7#include <err.h>
8#include <stdbool.h>
9#include <stdio.h>
10#include <stdlib.h>
11#include <string.h>
12#include <unistd.h>
13
14#include "../../kernspace/kernspace.h"
15
16#define NOFAIL(e) do { int rv = e; if (rv) err(1, #e); } while (/*CONSTCOND*/0)
17
18struct {
19	const char *str;
20	void (*dofun)(char *);
21} actions[] = {
22	{ "sendsig", rumptest_sendsig },
23};
24
25int
26main(int argc, char *argv[])
27{
28	unsigned i;
29	bool match;
30
31	if (argc < 2)
32		exit(1);
33
34	NOFAIL(rump_daemonize_begin());
35	NOFAIL(rump_init());
36	NOFAIL(rump_init_server(argv[1]));
37	NOFAIL(rump_daemonize_done(RUMP_DAEMONIZE_SUCCESS));
38
39	if (argc > 2) {
40		char *arg = NULL;
41
42		if (argc == 4)
43			arg = argv[3];
44
45		for (i = 0; i < __arraycount(actions); i++) {
46			if (strcmp(actions[i].str, argv[2]) == 0) {
47				rump_schedule();
48				actions[i].dofun(arg);
49				rump_unschedule();
50				match = true;
51			}
52		}
53
54		if (!match) {
55			exit(1);
56		}
57		pause();
58	} else {
59		for (;;)
60			pause();
61	}
62
63	return 0;
64}
65