1/*	$OpenBSD: test.c,v 1.2 2017/01/21 08:33:51 krw Exp $	*/
2
3#include <stdio.h>
4#include <rpc/rpc.h>
5#include <rpcsvc/sm_inter.h>
6
7
8/* Default timeout can be changed using clnt_control() */
9static struct timeval TIMEOUT = {25, 0};
10
11struct sm_stat_res *
12sm_stat_1(argp, clnt)
13	struct sm_name *argp;
14	CLIENT *clnt;
15{
16	static struct sm_stat_res res;
17
18	bzero((char *) &res, sizeof(res));
19	if (clnt_call(clnt, SM_STAT, xdr_sm_name, argp, xdr_sm_stat_res,
20	    &res, TIMEOUT) != RPC_SUCCESS)
21		return (NULL);
22	return (&res);
23}
24
25
26struct sm_stat_res *
27sm_mon_1(argp, clnt)
28	struct mon *argp;
29	CLIENT *clnt;
30{
31	static struct sm_stat_res res;
32
33	bzero((char *) &res, sizeof(res));
34	if (clnt_call(clnt, SM_MON, xdr_mon, argp, xdr_sm_stat_res,
35	    &res, TIMEOUT) != RPC_SUCCESS)
36		return (NULL);
37	return (&res);
38}
39
40
41struct sm_stat *
42sm_unmon_1(argp, clnt)
43	struct mon_id *argp;
44	CLIENT *clnt;
45{
46	static struct sm_stat res;
47
48	bzero((char *) &res, sizeof(res));
49	if (clnt_call(clnt, SM_UNMON, xdr_mon_id, argp, xdr_sm_stat,
50	    &res, TIMEOUT) != RPC_SUCCESS)
51		return (NULL);
52	return (&res);
53}
54
55
56struct sm_stat *
57sm_unmon_all_1(argp, clnt)
58	struct my_id *argp;
59	CLIENT *clnt;
60{
61	static struct sm_stat res;
62
63	bzero((char *) &res, sizeof(res));
64	if (clnt_call(clnt, SM_UNMON_ALL, xdr_my_id, argp, xdr_sm_stat,
65	    &res, TIMEOUT) != RPC_SUCCESS)
66		return (NULL);
67	return (&res);
68}
69
70
71void *
72sm_simu_crash_1(argp, clnt)
73	void   *argp;
74	CLIENT *clnt;
75{
76	static char res;
77
78	bzero((char *) &res, sizeof(res));
79	if (clnt_call(clnt, SM_SIMU_CRASH, xdr_void, argp, xdr_void,
80	    &res, TIMEOUT) != RPC_SUCCESS)
81		return (NULL);
82	return ((void *) &res);
83}
84
85
86int
87main(argc, argv)
88	int argc;
89	char **argv;
90{
91	CLIENT *cli;
92	char dummy;
93	void *out;
94	struct mon mon;
95
96	if (argc < 2) {
97		warnx("usage: test {<hostname> | crash}");
98		errx(1, "Always talks to statd at localhost");
99	}
100	printf("Creating client for localhost\n");
101	cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp");
102	if (!cli) {
103		errx(1, "Failed to create client");
104	}
105	mon.mon_id.mon_name = argv[1];
106	mon.mon_id.my_id.my_name = argv[1];
107	mon.mon_id.my_id.my_prog = SM_PROG;
108	mon.mon_id.my_id.my_vers = SM_VERS;
109	mon.mon_id.my_id.my_proc = 1;	/* have it call sm_stat() !!! */
110
111	if (strcmp(argv[1], "crash")) {
112		/* Hostname given */
113		struct sm_stat_res *res;
114		if (res = sm_mon_1(&mon, cli))
115			printf("Success!\n");
116		else
117			printf("Fail\n");
118	} else {
119		if (out = sm_simu_crash_1(&dummy, cli))
120			printf("Success!\n");
121		else
122			printf("Fail\n");
123	}
124
125	return 0;
126}
127