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