ubik-warning-cleanup-20011005
[openafs.git] / src / ubik / utst_client.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 RCSID("$Header$");
14
15 #include <sys/types.h>
16 #ifdef AFS_NT40_ENV
17 #include <winsock2.h>
18 #include <afsutil.h>
19 #else
20 #include <sys/file.h>
21 #include <netdb.h>
22 #include <netinet/in.h>
23 #endif
24 #include <time.h>
25 #include <stdio.h>
26 #ifdef HAVE_STRING_H
27 #include <string.h>
28 #else
29 #ifdef HAVE_STRINGS_H
30 #include <strings.h>
31 #endif
32 #endif
33 #include <rx/xdr.h>
34 #include <rx/rx.h>
35 #include <lock.h>
36 #include "ubik.h"
37 #include "utst_int.h"
38
39 extern int SAMPLE_Inc(), SAMPLE_Test(), SAMPLE_Get(),
40     SAMPLE_Trun(), SAMPLE_QGet();
41
42 /* main program */
43
44 #include "AFS_component_version_number.c"
45
46 main(argc, argv)
47     int argc;
48     char **argv; {
49     register afs_int32 code;
50     struct ubik_client *cstruct=0;
51     afs_int32 serverList[MAXSERVERS];
52     struct rx_connection *serverconns[MAXSERVERS];
53     struct rx_securityClass *sc;
54     register afs_int32 i;
55     afs_int32 temp;
56
57     if (argc == 1) {
58         printf("uclient: usage is 'uclient -servers ... [-try] [-get] [-inc] [-minc] [-trunc]\n");
59         exit(0);
60     }
61 #ifdef AFS_NT40_ENV 
62     /* initialize winsock */
63      if (afs_winsockInit()<0) 
64         return -1;
65 #endif
66     /* first parse '-servers <server-1> <server-2> ... <server-n>' from command line */
67     code = ubik_ParseClientList(argc, argv, serverList);
68     if (code) {
69         printf("could not parse server list, code %d\n", code);
70         exit(1);
71     }
72     rx_Init(0);
73     sc = (struct rx_securityClass *) rxnull_NewClientSecurityObject();
74     for (i=0; i<MAXSERVERS; i++) {
75         if (serverList[i]){
76             serverconns[i] = rx_NewConnection(serverList[i], htons(3000),
77                                               USER_SERVICE_ID, sc, 0);
78         } else {
79             serverconns[i] = (struct rx_connection *)0;
80             break;
81         }
82     }
83     
84     /* next, pass list of server rx_connections (in serverconns), and
85      * a place to put the returned client structure that we'll use in
86      * all of our rpc calls (via ubik_Calll) */
87     code = ubik_ClientInit(serverconns, &cstruct);
88
89     /* check code from init */
90     if (code) {
91         printf("ubik client init failed with code %d\n", code);
92         return;
93     }
94     
95     /* parse command line for our own operations */
96     for(i=1;i<argc;i++) {
97         if (!strcmp(argv[i], "-inc")) {
98             /* use ubik_Call to do the work, finding an up server and handling
99                 the job of finding a sync site, if need be */
100             code = ubik_Call(SAMPLE_Inc, cstruct, 0);
101             printf("return code is %d\n", code);
102         }
103         else if (!strcmp(argv[i], "-try")) {
104             code = ubik_Call(SAMPLE_Test, cstruct, 0);
105             printf("return code is %d\n", code);
106         }
107         else if (!strcmp(argv[i], "-qget")) {
108             code = ubik_Call(SAMPLE_QGet, cstruct, 0, &temp);
109             printf("got quick value %d (code %d)\n", temp, code);
110         }
111         else if (!strcmp(argv[i], "-get")) {
112             code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
113             printf("got value %d (code %d)\n", temp, code);
114         }
115         else if (!strcmp(argv[i], "-trunc")) {
116             code = ubik_Call(SAMPLE_Trun, cstruct, 0);
117             printf("return code is %d\n", code);
118         }
119        else if (!strcmp(argv[i], "-minc")) {
120          afs_int32 temp; 
121          struct timeval tv; 
122          tv.tv_sec = 1; tv.tv_usec = 0;
123          printf("ubik_client: Running minc...\n");
124          
125          while (1) {
126            temp=0; 
127            code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp); 
128            if (code != 0) {
129              printf("SAMPLE_Inc #1 failed with code %ld\n", code);
130            }
131            else {
132              printf("SAMPLE_Get #1 succeeded, got value %d\n", temp);
133            }
134
135            temp=0; 
136            code = ubik_Call(SAMPLE_Inc, cstruct, 0); 
137            if (code != 0) {
138              printf("SAMPLE_Inc #1 failed with code %ld\n", code);
139            }
140            else {
141              printf("SAMPLE_Inc #1 succeeded, incremented integer\n");
142            }
143            temp=0; 
144            code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp); 
145            if (code != 0) {
146              printf("SAMPLE_Get #2 failed with code %ld\n", code);
147            } 
148            else {
149              printf("SAMPLE_Get #2 succeeded, got value %d\n", temp);
150            }
151                          
152            temp=0; 
153            code = ubik_Call(SAMPLE_Inc, cstruct, 0); 
154            if (code != 0) 
155              printf("SAMPLE_Inc #2 failed with code %ld\n", code);
156            else printf("SAMPLE_Inc #2 succeeded, incremented integer\n");
157                          
158            tv.tv_sec = 1; tv.tv_usec = 0; 
159            IOMGR_Select(0, 0, 0, 0, &tv);
160            printf("Repeating the SAMPLE operations again...\n");
161          } 
162        }
163         else if (!strcmp(argv[i], "-mget")) {
164             afs_int32 temp;
165             struct timeval tv;
166             tv.tv_sec = 1;
167             tv.tv_usec = 0;
168             while (1) {
169                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
170                 printf("got value %d (code %d)\n", temp, code);
171
172                 code = ubik_Call(SAMPLE_Inc, cstruct, 0);
173                 printf("update return code is %d\n", code);
174
175                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
176                 printf("got value %d (code %d)\n", temp, code);
177
178                 code = ubik_Call(SAMPLE_Get, cstruct, 0, &temp);
179                 printf("got value %d (code %d)\n", temp, code);
180                 
181                 tv.tv_sec = 1;
182                 tv.tv_usec = 0;
183                 IOMGR_Select(0, 0, 0, 0, &tv);
184             }
185         }
186     }
187 }