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