1: #include <stdio.h>
2: #include <string.h>
3: #include <errno.h>
4: #include <sys/time.h>
5: #include <pthread.h>
6: #include <aitrpc_cli.h>
7: #include "rc.h"
8:
9:
10: int main(int argc, char **argv)
11: {
12: rpc_cli_t *cli = NULL, *cli2 = NULL;
13: int c, i, ret;
14: ait_val_t tval, *v = NULL;
15: array_t *valz, *arr;
16: char *mem, *blob43 = e_malloc(512);
17: struct timeval after, before;
18:
19: // printf("MM model=%d\n", elwix_mm_inuse());
20: // getchar();
21:
22: if (argc > 1) {
23: if (argc > 2)
24: cli = rpc_cli_openClient(2, 1024 * 10, "::1", 0, SOCK_RAW);
25: else
26: cli = rpc_cli_openClient(2, 1024 * 10, "::1", 11111, SOCK_DGRAM);
27: } else
28: cli = rpc_cli_openClient(2, 1024 * 10, "::1", 11111, 0);
29: if (!cli) {
30: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
31: e_free(blob43);
32: return 1;
33: }
34:
35: cli2 = rpc_cli_openBLOBClient(cli, 0);
36: if (!cli2) {
37: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
38: rpc_cli_closeClient(&cli);
39: e_free(blob43);
40: return 1;
41: }
42:
43: //#if 0
44: printf("\n\n1 pass>>> RPC ping\n\n");
45: for (i = 0; i < 1000; i++) {
46: gettimeofday(&before, NULL);
47: if ((ret = rpc_cli_ping(cli)) == -1) {
48: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
49: rpc_cli_closeBLOBClient(&cli2);
50: rpc_cli_closeClient(&cli);
51: e_free(blob43);
52: return 127;
53: }
54: gettimeofday(&after, NULL);
55: printf("RPC ping seq[0x%04x] #%d --- %f\n", ret, i,
56: (after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6);
57: }
58: //#if 0
59: printf("\n\n2 pass>>> RPC ping without reply!!!\n\n");
60: for (i = 0; i < 10; i++) {
61: gettimeofday(&before, NULL);
62: if (rpc_cli_execCall(cli, RPC_NOREPLY, CALL_SRVPING, NULL, &arr)) {
63: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
64: rpc_cli_closeBLOBClient(&cli2);
65: rpc_cli_closeClient(&cli);
66: e_free(blob43);
67: return 127;
68: }
69: gettimeofday(&after, NULL);
70: rpc_cli_freeCall(&arr);
71: printf("RPC ping #%d --- %f\n", i, (after.tv_sec - before.tv_sec) +
72: (after.tv_usec - before.tv_usec) / 1.e6);
73: }
74: #if 0
75: printf("\n\n3 pass>>> RPC ping\n\n");
76: for (i = 0; i < 10000; i++) {
77: gettimeofday(&before, NULL);
78: if ((ret = rpc_cli_ping(cli)) == -1) {
79: printf("error %d:: errno=%d %s\n", i, rpc_GetErrno(), rpc_GetError());
80: rpc_cli_closeBLOBClient(&cli2);
81: rpc_cli_closeClient(&cli);
82: e_free(blob43);
83: return 127;
84: }
85: gettimeofday(&after, NULL);
86: printf("RPC ping seq[0x%04x] #%d --- %f\n", ret, i,
87: (after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6);
88: }
89: #endif
90: //#endif
91:
92: memset(blob43, 0, 512);
93: strlcpy(blob43, "aaaaaaaaaaaaaaa cddddddddddddddd zzzzzzzzzzzzzzzzzzzzz !!!!\n\n\n675675676...\n", 512);
94:
95: valz = ait_allocVars(3);
96: v = array(valz, 0, ait_val_t*);
97: AIT_SET_I32(v, 12345678);
98: v = array(valz, 1, ait_val_t*);
99: AIT_SET_STR(v, "gniah_blah SHMINK!");
100: v = array(valz, 2, ait_val_t*);
101: AIT_NEW_BLOB(v, 512);
102: if (rpc_cli_sendBLOB(cli2, v, blob43, 0) == -1) {
103: printf("!!!!! blob error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
104: ait_freeVars(&valz);
105: rpc_cli_closeBLOBClient(&cli2);
106: rpc_cli_closeClient(&cli);
107: e_free(blob43);
108: return 2;
109: } else
110: printf("Get BLOB = %x\n", AIT_GET_BLOB(v));
111:
112: /* test case for unknown blob ...
113: AIT_SET_BLOB(&tval, 0x554C1BC7, BUFSIZ);
114: printf("test not found blob=%d\n", rpc_cli_getBLOB(cli2, &tval, (void**) &mem));
115: if (mem)
116: e_free(mem);
117: */
118:
119: // for (i = 0; i < 1000000; i++)
120: if ((ret = rpc_cli_execCall(cli, RPC_REPLY, RC_BBB, valz, &arr)) < 0) {
121: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
122: ait_freeVars(&valz);
123: rpc_cli_closeBLOBClient(&cli2);
124: rpc_cli_closeClient(&cli);
125: e_free(blob43);
126: return 2;
127: } else {
128: printf("ret=%d\n", ret);
129: if (arr) {
130: v = array(arr, 0, ait_val_t*);
131: printf("ret_val0:: %p %s len=%d type=%d\n",
132: v, AIT_GET_BUF(v), AIT_LEN(v), AIT_TYPE(v));
133: v = array(arr, 1, ait_val_t*);
134: printf("ret_val1:: %d len=%d type=%d\n",
135: AIT_GET_I8(v), AIT_LEN(v), AIT_TYPE(v));
136: v = array(arr, 2, ait_val_t*);
137: printf("ret_val2:: is_empty? %d %s len=%d type=%d\n",
138: AIT_ISEMPTY(v), AIT_GET_STR(v), AIT_LEN(v), AIT_TYPE(v));
139: //#if 0
140: v = array(arr, 3, ait_val_t*);
141: printf("ret_val3:: %X %d\n", AIT_GET_BLOB(v), AIT_LEN(v));
142: printf("test found blob=%d\n", rpc_cli_getBLOB(cli2, v, (void**) &mem));
143: // printf("+++++++++ test found blob=%d\n", rpc_cli_recvBLOB(cli2, v, (void**) &mem));
144: if (mem) {
145: printf("+++++++ BLOB=%s", mem);
146: e_free(mem);
147: }
148: //#endif
149: rpc_cli_freeCall(&arr);
150: }
151: }
152: ait_freeVars(&valz);
153: e_free(blob43);
154:
155: if (rpc_cli_execCall(cli, RPC_REPLY, RC_aaa, NULL, &arr) < 0) {
156: printf("error:: \"aaa\" errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
157: return 3;
158: }
159: printf("return=%d aaa arr=%p\n", arr ? array_Size(arr) : 42424242, arr);
160:
161: valz = ait_allocVars(1);
162: v = ait_getVars(&valz, 0);
163: printf("cli_id=%d\n", cli->cli_id);
164: AIT_SET_I32(v, (cli->cli_id == SOCK_STREAM || cli->cli_id == SOCK_EXT) ? 50000 : 5000);
165: if (rpc_cli_execCall(cli, RPC_REPLY, RC_big, valz, &arr) < 0) {
166: printf("error:: \"big\" errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
167: } else
168: printf("return=%d big arr=%p\n", arr ? array_Size(arr) : 42424242, arr);
169: ait_freeVars(&arr);
170: ait_freeVars(&valz);
171:
172:
173: valz = ait_allocVars(1);
174: v = array(valz, 0, ait_val_t*);
175: AIT_SET_DATA(v, "1234567890", 11);
176: array_Set(valz, 0, v);
177: if (rpc_cli_execCall(cli, RPC_NOREPLY, RC_xxx, valz, &arr) < 0) {
178: printf("0) error:: \"xxx\" errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
179: ait_freeVars(&valz);
180: if (arr)
181: rpc_cli_freeCall(&arr);
182: rpc_cli_closeBLOBClient(&cli2);
183: rpc_cli_closeClient(&cli);
184: return 3;
185: }
186: printf("0) return=%d xxx arr=%p\n", arr ? array_Size(arr) : 42424242, arr);
187: ait_freeVars(&valz);
188: if (arr) {
189: printf("...REPLY --- ");
190: v = array(arr, 0, ait_val_t*);
191: printf("ret_val0:: %p %s len=%d type=%d\n",
192: v, AIT_GET_BUF(v), AIT_LEN(v), AIT_TYPE(v));
193: rpc_cli_freeCall(&arr);
194: }
195:
196: valz = ait_allocVars(1);
197: v = array(valz, 0, ait_val_t*);
198: AIT_SET_DATA(v, "0987654321", 11);
199: array_Set(valz, 0, v);
200: if (rpc_cli_execCall(cli, RPC_REPLY, RC_xxx, valz, &arr) < 0) {
201: printf("1) error:: \"xxx\" errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
202: ait_freeVars(&valz);
203: if (arr)
204: rpc_cli_freeCall(&arr);
205: rpc_cli_closeBLOBClient(&cli2);
206: rpc_cli_closeClient(&cli);
207: return 3;
208: }
209: printf("1) return=%d xxx arr=%p\n", arr ? array_Size(arr) : 42424242, arr);
210: ait_freeVars(&valz);
211: if (arr) {
212: printf("@REPLY --- ");
213: v = array(arr, 0, ait_val_t*);
214: printf("ret_val0:: %p %s len=%d type=%d\n",
215: v, AIT_GET_BUF(v), AIT_LEN(v), AIT_TYPE(v));
216: rpc_cli_freeCall(&arr);
217: }
218:
219:
220: if (rpc_cli_execCall(cli, RPC_REPLY, CALL_SRVCLIENTS, NULL, &arr) < 0) {
221: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
222: rpc_cli_closeBLOBClient(&cli2);
223: rpc_cli_closeClient(&cli);
224: return 4;
225: }
226: printf("return=%d registeredClient\n", (arr ? array_Size(arr) : 0));
227: for (i = 0; i < (arr ? array_Size(arr) : 0); i++)
228: printf("registeredClient(%d)=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
229: rpc_cli_freeCall(&arr);
230:
231: if (rpc_cli_execCall(cli, RPC_REPLY, CALL_BLOBCLIENTS, NULL, &arr) < 0) {
232: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
233: rpc_cli_closeBLOBClient(&cli2);
234: rpc_cli_closeClient(&cli);
235: return 4;
236: }
237: printf("return=%d registeredBLOBClient\n", (arr ? array_Size(arr) : 0));
238: for (i = 0; i < (arr ? array_Size(arr) : 0); i++)
239: printf("registeredBLOBClient(%d)=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
240: rpc_cli_freeCall(&arr);
241:
242: if (rpc_cli_execCall(cli, RPC_REPLY, CALL_BLOBVARS, NULL, &arr) < 0) {
243: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
244: rpc_cli_closeBLOBClient(&cli2);
245: rpc_cli_closeClient(&cli);
246: return 5;
247: }
248: for (i = 0; i < (arr ? array_Size(arr) : 0); i++)
249: printf("registeredBLOBVars(%d)=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
250: rpc_cli_freeCall(&arr);
251:
252: if (rpc_cli_execCall(cli, RPC_REPLY, CALL_SRVCALLS, NULL, &arr) < 0) {
253: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
254: rpc_cli_closeBLOBClient(&cli2);
255: rpc_cli_closeClient(&cli);
256: return 5;
257: }
258: for (i = 0; i < (arr ? array_Size(arr) : 0); i++)
259: printf("registeredCall(%d)=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
260: rpc_cli_freeCall(&arr);
261:
262: if (rpc_cli_execCall(cli, RPC_REPLY, CALL_SRVSESSIONS, NULL, &arr) < 0) {
263: printf("error:: errno=%d %s\n", rpc_GetErrno(), rpc_GetError());
264: rpc_cli_closeBLOBClient(&cli2);
265: rpc_cli_closeClient(&cli);
266: return 6;
267: }
268: printf("c=%d v=%p\n", array_Size(arr), arr);
269: printf("session(%d:%d) clients=%d\n", (uint8_t) AIT_GET_U8(array(arr, 0, ait_val_t*)),
270: AIT_GET_U8(array(arr, 1, ait_val_t*)), AIT_GET_I32(array(arr, 2, ait_val_t*)));
271: rpc_cli_freeCall(&arr);
272:
273: printf("shutdown rpc server? (y/n): ");
274: if (getchar() == 'y')
275: rpc_cli_execCall(cli, RPC_NOREPLY, CALL_SRVSHUTDOWN, NULL, NULL);
276:
277: rpc_cli_closeBLOBClient(&cli2);
278: rpc_cli_closeClient(&cli);
279: return 0;
280: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>