MIDAS
Loading...
Searching...
No Matches
mserver.cxx
Go to the documentation of this file.
1/********************************************************************\
2
3 Name: mserver.c
4 Created by: Stefan Ritt
5
6 Contents: Server program for midas RPC calls
7
8 $Id$
9
10\********************************************************************/
11
12#undef NDEBUG // midas required assert() to be always enabled
13
14#include "midas.h"
15#include "msystem.h"
16#include "mstrlcpy.h"
17
18#ifdef OS_UNIX
19#include <sys/types.h>
20#endif
21
23
25
27
28/*---- debug_print -------------------------------------------------*/
29
30void debug_print(const char *msg)
31{
32 std::string file_name;
33 static std::string client_name;
34 static DWORD start_time = 0;
35
36 if (!start_time)
37 start_time = ss_millitime();
38
39 /* print message to file */
40#ifdef OS_LINUX
41 file_name = "/tmp/mserver.log";
42#else
46 }
47 file_name += "mserver.log";
48#endif
49
50 FILE *f = fopen(file_name.c_str(), "a");
51
52 if (!f) {
53 fprintf(stderr, "Cannot open \"%s\", errno %d (%s)\n", file_name.c_str(), errno, strerror(errno));
54 return;
55 }
56
57 if (client_name.empty())
58 client_name = cm_get_client_name();
59
60 std::string str = msprintf("%10.3lf [%d,%s,%s] ", (ss_millitime() - start_time) / 1000.0,
61 ss_getpid(), callback.host_name.c_str(), client_name.c_str());
62 str += msg;
63 str += "\n";
64
65 fputs(str.c_str(), f);
66 fclose(f);
67}
68
69/*---- main --------------------------------------------------------*/
70
71int main(int argc, char **argv)
72/********************************************************************\
73
74 Routine: main (server.exe)
75
76 Purpose: Main routine for MIDAS server process. If called one
77 parameter, it listens for a connection under
78 MIDAS_TCP_PORT. If a connection is requested, the action
79 depends on the parameter:
80
81 0: Single process server: This process executes RPC calls
82 even if there are several connections.
83
84 1: Multi thread server (only Windows NT): For each conn-
85 ection, a seperate thread is started which servers this
86 connection.
87
88 2: Multi process server (Not MS-DOS): For each conn-
89 ection, a seperate subprocess is started which servers
90 this connection. The subprocess is again server.exe, now
91 with four parameters: the IP address of the calling
92 host, the two port numbers used by the calling
93 host and optionally the name of the experiment to connect
94 to. With this information it calles back the client.
95
96 This technique is necessary since the usual fork() doesn't
97 work on some of the supported systems.
98
99 Input:
100 int argc Number of parameters in command line
101 char **argv Command line parameters:
102
103 ip-addr callback address as longword
104 port-no port number
105 program program name as string
106 experiment experiment name as string
107
108
109 Output:
110 none
111
112 Function value:
113 BM_SUCCESS Successful completion
114
115\********************************************************************/
116{
117 int i, flag;
118 socklen_t size;
119 //char name[256];
120 char str[1000];
122
123#if defined(SIGPIPE) && defined(SIG_IGN)
125#endif
126
129
131 //if (argv[0] == NULL || argv[0][0] == 0)
132 // mstrlcpy(name, "mserver", sizeof(name));
133 //else
134 // mstrlcpy(name, argv[0], sizeof(name));
135
136#ifdef OS_UNIX
138 //if (strchr(name, '/') == 0) {
139 // mstrlcpy(str, "/usr/local/bin/", sizeof(str));
140 // mstrlcat(str, name, sizeof(str));
141 // mstrlcpy(name, str, sizeof(name));
142 //}
143#endif
144
145#if 0
146 printf("mserver main, name [%s]\n", name);
147 for (i=0; i<=argc; i++)
148 printf("argv[%d] is [%s]\n", i, argv[i]);
149 system("/bin/ls -la /proc/self/fd");
150#endif
151
152 if (getenv("MIDAS_MSERVER_DO_NOT_USE_CALLBACK_ADDR"))
154
155 //rpc_set_mserver_path(name);
156
157 /* find out if we were started by inetd */
158 size = sizeof(int);
159 inetd = (getsockopt(0, SOL_SOCKET, SO_TYPE, (void *) &flag, &size) == 0);
160
161 /* check for debug flag */
162 debug = FALSE;
163 for (i = 1; i < argc; i++)
164 if (argv[i][0] == '-' && argv[i][1] == 'd')
165 debug = TRUE;
166
167 if (debug) {
168 debug_print("mserver startup");
169 for (i = 0; i < argc; i++)
172 }
173
174 if (argc < 7 && inetd) {
175 /* accept connection from stdin */
177 return 0;
178 }
179
180 if (!inetd && argc < 7)
181 printf("%s started interactively\n", argv[0]);
182
183 debug = daemon = FALSE;
184
185 if (argc < 7 || argv[1][0] == '-') {
186 int status;
188 int port = 0;
189
190 /* Get if existing the pre-defined experiment */
191 expt_name[0] = 0;
193
194 /* parse command line parameters */
195 for (i = 1; i < argc; i++) {
196 if (strncmp(argv[i], "-e", 2) == 0) {
197 mstrlcpy(expt_name, argv[++i], sizeof(expt_name));
198 } else if (argv[i][0] == '-' && argv[i][1] == 'd')
199 debug = TRUE;
200 else if (argv[i][0] == '-' && argv[i][1] == 'D')
201 daemon = TRUE;
202 else if (argv[i][0] == '-' && argv[i][1] == 'p')
203 port = strtoul(argv[++i], NULL, 0);
204 else if (argv[i][0] == '-') {
205 if (i + 1 >= argc || argv[i + 1][0] == '-')
206 goto usage;
207 else {
208 usage:
209 printf("usage: mserver [-e Experiment] [-s][-t][-m][-d][-p port]\n");
210 printf(" -e experiment to connect to\n");
211 printf(" -m Multi process server (default)\n");
212 printf(" -p port Listen for connections on specifed tcp port. Default value is taken from ODB \"/Experiment/midas server port\"\n");
213#ifdef OS_LINUX
214 printf(" -D Become a daemon\n");
215 printf(" -d Write debug info to stdout or to \"/tmp/mserver.log\"\n\n");
216#else
217 printf(" -d Write debug info\"\n\n");
218#endif
219 return 0;
220 }
221 }
222 }
223
224 /* turn on debugging */
225 if (debug) {
226 if (daemon || inetd)
228 else
229 rpc_set_debug((void (*)(const char *)) puts, 1);
230
231 sprintf(str, "Arguments: ");
232 for (i = 0; i < argc; i++)
233 sprintf(str + strlen(str), " %s", argv[i]);
235
236 rpc_debug_printf("Debugging mode is on");
237 }
238
239 /* become a daemon */
240 if (daemon) {
241 printf("Becoming a daemon...\n");
243 }
244
245 /* connect to experiment */
246 status = cm_connect_experiment(NULL, expt_name, "mserver", 0);
247 if (status != CM_SUCCESS) {
248 printf("cannot connect to experiment \"%s\", status %d\n", expt_name, status);
249 exit(1);
250 }
251
252 HNDLE hDB;
254
256 assert(status == CM_SUCCESS);
257
259 int size = sizeof(odb_port);
260
261 status = db_get_value(hDB, 0, "/Experiment/Midas server port", &odb_port, &size, TID_DWORD, TRUE);
262 assert(status == DB_SUCCESS);
263
264 if (port == 0)
265 port = odb_port;
266
267 if (port == 0)
268 port = MIDAS_TCP_PORT;
269
270 printf("mserver will listen on TCP port %d\n", port);
271
272 int lsock = 0; // mserver main listener socket
273 int lport = 0; // mserver listener port number
274
275 /* register server */
277 if (status != RPC_SUCCESS) {
278 printf("Cannot start server, rpc_register_server() status %d\n", status);
279 return 1;
280 }
281
282 /* register path of mserver executable */
284
285 /* register MIDAS library functions */
287
289
290 /* run forever */
291 while (1) {
292 status = cm_yield(1000);
293 //printf("status %d\n", status);
294 if (status == RPC_SHUTDOWN)
295 break;
296 }
297
299
301 } else {
302
303 /* here we come if this program is started as a subprocess */
304
305 callback.clear();
306
307 /* extract callback arguments and start receiver */
308#ifdef OS_VMS
313 callback.debug = atoi(argv[6]);
314 if (argc > 7)
316 if (argc > 8)
318 if (argc > 9)
319 mstrlcpy(callback.user, argv[9], sizeof(callback.user));
320#else
325 callback.debug = atoi(argv[5]);
326 if (argc > 6)
328 if (argc > 7)
330 if (argc > 8)
331 callback.user = argv[8];
332#endif
333 //callback.index = 0;
334
335 if (callback.debug) {
337 if (callback.directory[0]) {
338 if (callback.user[0])
339 rpc_debug_printf("Start subprocess in %s under user %s", callback.directory.c_str(), callback.user.c_str());
340 else
341 rpc_debug_printf("Start subprocess in %s", callback.directory.c_str());
342
343 } else
344 rpc_debug_printf("Start subprocess in current directory");
345 }
346
347 /* change the directory and uid */
348 if (callback.directory.length() > 0)
349 if (chdir(callback.directory.c_str()) != 0)
350 rpc_debug_printf("Cannot change to directory \"%s\"", callback.directory.c_str());
351
353
354 /* set the experiment name and expt path name */
355
356 if (callback.directory.length() > 0)
358
359 if (callback.experiment.length() > 0)
361
362 /* must be done after cm_set_path() */
364
365 /* register system functions */
367
368 /* register MIDAS library functions */
370
372
373 if (status != RPC_SUCCESS) {
375 printf("Cannot start mserver, rpc_server_callback() status %d\n", status);
376 return 1;
377 }
378
379 /* create alarm and elog semaphores */
386
389
391 }
392
393 return 0;
394}
395
396/*------------------------------------------------------------------*/
397
398/* just a small test routine which doubles numbers */
399INT rpc_test(BYTE b, WORD w, INT i, float f, double d, BYTE * b1, WORD * w1, INT * i1, float *f1, double *d1)
400{
401 printf("rpc_test: %d %d %d %1.1f %1.1lf\n", b, w, i, f, d);
402
403 *b1 = b * 2;
404 *w1 = w * 2;
405 *i1 = i * 2;
406 *f1 = f * 2;
407 *d1 = d * 2;
408
409 return 1;
410}
411
412/*----- rpc_server_dispatch ----------------------------------------*/
413
415/********************************************************************\
416
417 Routine: rpc_server_dispatch
418
419 Purpose: This routine gets registered as the callback function
420 for all RPC calls via rpc_server_register. It acts as a
421 stub to call the local midas subroutines. It uses the
422 Cxxx(i) macros to cast parameters in prpc_param to
423 their appropriate types.
424
425 Input:
426 int index RPC index defined in RPC.H
427 void *prpc_param pointer to rpc parameter array
428
429 Output:
430 none
431
432 Function value:
433 status status returned from local midas function
434
435\********************************************************************/
436{
437 INT status = 0;
438
439 int convert_flags = rpc_get_convert_flags();
440
441 switch (index) {
442 /* common functions */
443
446 CSTRING(3), CINT(4), CSTRING(5), CINT(6));
447 break;
448
451 break;
452
455 break;
456
457 case RPC_CM_CLEANUP:
458 status = cm_cleanup(CSTRING(0), CBOOL(1));
459 break;
460
463 break;
464
465 case RPC_CM_MSG:
466 status = cm_msg(CINT(0), CSTRING(1), CINT(2), CSTRING(3), "%s", CSTRING(4));
467 break;
468
469 case RPC_CM_MSG_LOG:
470 status = cm_msg_log(CINT(0), CSTRING(1), CSTRING(2));
471 break;
472
473 case RPC_CM_EXECUTE:
474 status = cm_execute(CSTRING(0), CSTRING(1), CINT(2));
475 break;
476
477 case RPC_CM_EXIST:
478 status = cm_exist(CSTRING(0), CBOOL(1));
479 break;
480
483 break;
484
485 case RPC_CM_ASCTIME: {
486 std::string now = cm_asctime();
487 mstrlcpy(CSTRING(0), now.c_str(), CINT(1));
489 break;
490 }
491
492 case RPC_CM_TIME:
493 status = cm_time(CPDWORD(0));
494 break;
495
497 status = cm_msg_retrieve(CINT(0), CSTRING(1), CINT(2));
498 break;
499
500 /* buffer manager functions */
501
503 status = bm_open_buffer(CSTRING(0), CINT(1), CPINT(2));
504 break;
505
507 //printf("RPC_BM_CLOSE_BUFFER(%d)!\n", CINT(0));
509 break;
510
512 //printf("RPC_BM_CLOSE_ALL_BUFFERS!\n");
514 break;
515
518 if (convert_flags) {
520
521 /* convert event header */
522 pb = (BUFFER_HEADER *) CARRAY(1);
523 rpc_convert_single(&pb->num_clients, TID_INT, RPC_OUTGOING, convert_flags);
524 rpc_convert_single(&pb->max_client_index, TID_INT, RPC_OUTGOING, convert_flags);
525 rpc_convert_single(&pb->size, TID_INT, RPC_OUTGOING, convert_flags);
526 rpc_convert_single(&pb->read_pointer, TID_INT, RPC_OUTGOING, convert_flags);
527 rpc_convert_single(&pb->write_pointer, TID_INT, RPC_OUTGOING, convert_flags);
528 rpc_convert_single(&pb->num_in_events, TID_INT, RPC_OUTGOING, convert_flags);
529 rpc_convert_single(&pb->num_out_events, TID_INT, RPC_OUTGOING, convert_flags);
530 }
531 break;
532
535 break;
536
539 break;
540
542 status = bm_set_cache_size(CINT(0), CINT(1), CINT(2));
543 break;
544
547 CSHORT(2), CINT(3), (void (*)(HNDLE, HNDLE, EVENT_HEADER *, void *))
548 (POINTER_T)
549 CINT(4), CINT(5));
550 break;
551
554 break;
555
557 if (convert_flags) {
558 EVENT_HEADER *pevent;
559
560 /* convert event header */
561 pevent = (EVENT_HEADER *) CARRAY(1);
562 rpc_convert_single(&pevent->event_id, TID_SHORT, 0, convert_flags);
563 rpc_convert_single(&pevent->trigger_mask, TID_SHORT, 0, convert_flags);
564 rpc_convert_single(&pevent->serial_number, TID_DWORD, 0, convert_flags);
565 rpc_convert_single(&pevent->time_stamp, TID_DWORD, 0, convert_flags);
566 rpc_convert_single(&pevent->data_size, TID_DWORD, 0, convert_flags);
567 }
568
569 status = bm_send_event(CINT(0), (const EVENT_HEADER*)(CARRAY(1)), CINT(2), CINT(3));
570 break;
571
573 status = bm_receive_event(CINT(0), CARRAY(1), CPINT(2), CINT(3));
574 break;
575
578 break;
579
581 //printf("RPC_BM_FLUSH_CACHE(%d,%d)!\n", CINT(0), CINT(1));
582 if (CINT(0) == 0) {
584 } else {
585 status = bm_flush_cache(CINT(0), CINT(1));
586 }
587 break;
588
591 break;
592
595 break;
596
597 /* database functions */
598
601 break;
602
605 break;
606
609 break;
610
613 break;
614
617 break;
618
621 break;
622
623 case RPC_DB_SET_VALUE:
624 rpc_convert_data(CARRAY(3), CDWORD(6), RPC_FIXARRAY, CINT(4), convert_flags);
625 status = db_set_value(CHNDLE(0), CHNDLE(1), CSTRING(2), CARRAY(3), CINT(4), CINT(5), CDWORD(6));
626 break;
627
628 case RPC_DB_GET_VALUE:
629 rpc_convert_data(CARRAY(3), CDWORD(5), RPC_FIXARRAY, CINT(4), convert_flags);
630 status = db_get_value(CHNDLE(0), CHNDLE(1), CSTRING(2), CARRAY(3), CPINT(4), CDWORD(5), CBOOL(6));
631 rpc_convert_data(CARRAY(3), CDWORD(5), RPC_FIXARRAY | RPC_OUTGOING, CINT(4), convert_flags);
632 break;
633
634 case RPC_DB_FIND_KEY:
635 status = db_find_key(CHNDLE(0), CHNDLE(1), CSTRING(2), CPHNDLE(3));
636 break;
637
638 case RPC_DB_FIND_LINK:
640 break;
641
642 case RPC_DB_GET_PATH: {
643 std::string path = db_get_path(CHNDLE(0), CHNDLE(1));
644 mstrlcpy(CSTRING(2), path.c_str(), CINT(3));
646 break;
647 }
648
651 break;
652
654 status = db_delete_key(CHNDLE(0), CHNDLE(1), CBOOL(2));
655 break;
656
657 case RPC_DB_ENUM_KEY:
658 status = db_enum_key(CHNDLE(0), CHNDLE(1), CINT(2), CPHNDLE(3));
659 break;
660
661 case RPC_DB_ENUM_LINK:
662 status = db_enum_link(CHNDLE(0), CHNDLE(1), CINT(2), CPHNDLE(3));
663 break;
664
667 break;
668
669 case RPC_DB_GET_KEY:
670 status = db_get_key(CHNDLE(0), CHNDLE(1), (KEY*)CARRAY(2));
671 if (convert_flags) {
672 KEY *pkey;
673
674 pkey = (KEY *) CARRAY(2);
675 rpc_convert_single(&pkey->type, TID_DWORD, RPC_OUTGOING, convert_flags);
676 rpc_convert_single(&pkey->num_values, TID_INT, RPC_OUTGOING, convert_flags);
677 rpc_convert_single(&pkey->data, TID_INT, RPC_OUTGOING, convert_flags);
678 rpc_convert_single(&pkey->total_size, TID_INT, RPC_OUTGOING, convert_flags);
679 rpc_convert_single(&pkey->item_size, TID_INT, RPC_OUTGOING, convert_flags);
680 rpc_convert_single(&pkey->access_mode, TID_WORD, RPC_OUTGOING, convert_flags);
681 rpc_convert_single(&pkey->notify_count, TID_WORD, RPC_OUTGOING, convert_flags);
682 rpc_convert_single(&pkey->next_key, TID_INT, RPC_OUTGOING, convert_flags);
683 rpc_convert_single(&pkey->parent_keylist, TID_INT, RPC_OUTGOING, convert_flags);
684 rpc_convert_single(&pkey->last_written, TID_INT, RPC_OUTGOING, convert_flags);
685 }
686 break;
687
688 case RPC_DB_GET_LINK:
689 status = db_get_link(CHNDLE(0), CHNDLE(1), (KEY*)CARRAY(2));
690 if (convert_flags) {
691 KEY *pkey;
692
693 pkey = (KEY *) CARRAY(2);
694 rpc_convert_single(&pkey->type, TID_DWORD, RPC_OUTGOING, convert_flags);
695 rpc_convert_single(&pkey->num_values, TID_INT, RPC_OUTGOING, convert_flags);
696 rpc_convert_single(&pkey->data, TID_INT, RPC_OUTGOING, convert_flags);
697 rpc_convert_single(&pkey->total_size, TID_INT, RPC_OUTGOING, convert_flags);
698 rpc_convert_single(&pkey->item_size, TID_INT, RPC_OUTGOING, convert_flags);
699 rpc_convert_single(&pkey->access_mode, TID_WORD, RPC_OUTGOING, convert_flags);
700 rpc_convert_single(&pkey->notify_count, TID_WORD, RPC_OUTGOING, convert_flags);
701 rpc_convert_single(&pkey->next_key, TID_INT, RPC_OUTGOING, convert_flags);
702 rpc_convert_single(&pkey->parent_keylist, TID_INT, RPC_OUTGOING, convert_flags);
703 rpc_convert_single(&pkey->last_written, TID_INT, RPC_OUTGOING, convert_flags);
704 }
705 break;
706
708 status = db_get_key_info(CHNDLE(0), CHNDLE(1), CSTRING(2), CINT(3), CPINT(4), CPINT(5), CPINT(6));
709 break;
710
713 break;
714
717 break;
718
720 status = db_reorder_key(CHNDLE(0), CHNDLE(1), CINT(2));
721 break;
722
723 case RPC_DB_GET_DATA:
724 status = db_get_data(CHNDLE(0), CHNDLE(1), CARRAY(2), CPINT(3), CDWORD(4));
725 rpc_convert_data(CARRAY(2), CDWORD(4), RPC_FIXARRAY | RPC_OUTGOING, CINT(3), convert_flags);
726 break;
727
729 status = db_get_link_data(CHNDLE(0), CHNDLE(1), CARRAY(2), CPINT(3), CDWORD(4));
730 rpc_convert_data(CARRAY(2), CDWORD(4), RPC_FIXARRAY | RPC_OUTGOING, CINT(3), convert_flags);
731 break;
732
733 case RPC_DB_GET_DATA1:
734 status = db_get_data1(CHNDLE(0), CHNDLE(1), CARRAY(2), CPINT(3), CDWORD(4), CPINT(5));
735 rpc_convert_data(CARRAY(2), CDWORD(4), RPC_FIXARRAY | RPC_OUTGOING, CINT(3), convert_flags);
736 break;
737
739 status = db_get_data_index(CHNDLE(0), CHNDLE(1), CARRAY(2), CPINT(3), CINT(4), CDWORD(5));
740 rpc_convert_single(CARRAY(2), CDWORD(5), RPC_OUTGOING, convert_flags);
741 break;
742
743 case RPC_DB_SET_DATA:
744 rpc_convert_data(CARRAY(2), CDWORD(5), RPC_FIXARRAY, CINT(3), convert_flags);
745 status = db_set_data(CHNDLE(0), CHNDLE(1), CARRAY(2), CINT(3), CINT(4), CDWORD(5));
746 break;
747
748 case RPC_DB_SET_DATA1:
749 rpc_convert_data(CARRAY(2), CDWORD(5), RPC_FIXARRAY, CINT(3), convert_flags);
750 status = db_set_data1(CHNDLE(0), CHNDLE(1), CARRAY(2), CINT(3), CINT(4), CDWORD(5));
751 break;
752
754 rpc_convert_data(CARRAY(1), CINT(2), RPC_FIXARRAY, TID_DWORD, convert_flags);
756 break;
757
759 rpc_convert_data(CARRAY(2), CDWORD(5), RPC_FIXARRAY, CINT(3), convert_flags);
760 status = db_set_link_data(CHNDLE(0), CHNDLE(1), CARRAY(2), CINT(3), CINT(4), CDWORD(5));
761 break;
762
764 rpc_convert_single(CARRAY(2), CDWORD(5), 0, convert_flags);
765 status = db_set_data_index(CHNDLE(0), CHNDLE(1), CARRAY(2), CINT(3), CINT(4), CDWORD(5));
766 break;
767
769 rpc_convert_single(CARRAY(2), CDWORD(5), 0, convert_flags);
771 break;
772
774 rpc_convert_single(CARRAY(2), CDWORD(5), 0, convert_flags);
775 status = db_set_data_index1(CHNDLE(0), CHNDLE(1), CARRAY(2), CINT(3), CINT(4), CDWORD(5), CBOOL(6));
776 break;
777
780 break;
781
782 case RPC_DB_SET_MODE:
783 status = db_set_mode(CHNDLE(0), CHNDLE(1), CWORD(2), CBOOL(3));
784 break;
785
787 status = db_get_record(CHNDLE(0), CHNDLE(1), CARRAY(2), CPINT(3), CINT(4));
788 break;
789
791 status = db_set_record(CHNDLE(0), CHNDLE(1), CARRAY(2), CINT(3), CINT(4));
792 break;
793
796 break;
797
800 break;
801
804 break;
805
808 break;
809
812 break;
813
814 case RPC_DB_LOAD:
815 status = db_load(CHNDLE(0), CHNDLE(1), CSTRING(2), CBOOL(3));
816 break;
817
818 case RPC_DB_SAVE:
819 status = db_save(CHNDLE(0), CHNDLE(1), CSTRING(2), CBOOL(3));
820 break;
821
824 break;
825
828 break;
829
830 case RPC_DB_COPY_XML:
831 status = db_copy_xml(CHNDLE(0), CHNDLE(1), CSTRING(2), CPINT(3), CBOOL(4));
832 break;
833
834 case RPC_EL_SUBMIT:
835 status = el_submit(CINT(0), CSTRING(1), CSTRING(2), CSTRING(3), CSTRING(4),
836 CSTRING(5), CSTRING(6), CSTRING(7),
837 CSTRING(8), (char*)CARRAY(9), CINT(10),
838 CSTRING(11), (char*)CARRAY(12), CINT(13),
839 CSTRING(14), (char*)CARRAY(15), CINT(16), CSTRING(17), CINT(18));
840 break;
841
842 case RPC_AL_CHECK:
843 status = al_check();
844 break;
845
848 break;
849
850 /* exit functions */
851 case RPC_ID_EXIT:
852 //printf("RPC_ID_EXIT!\n");
854 break;
855
856 case RPC_ID_SHUTDOWN:
858 break;
859
860 /* various functions */
861
862 case RPC_TEST:
863 status = rpc_test(CBYTE(0), CWORD(1), CINT(2), CFLOAT(3), CDOUBLE(4),
864 CPBYTE(5), CPWORD(6), CPINT(7), CPFLOAT(8), CPDOUBLE(9));
865 break;
866
867 case RPC_TEST2: {
868
870
871 if (CINT(0) != 123) {
872 cm_msg(MERROR, "rpc_test2", "CINT(0) mismatch");
873 status = 0;
874 }
875
876 CINT(1) = 789;
877
878 if (CINT(2) != 456) {
879 cm_msg(MERROR, "rpc_test2", "CINT(2) mismatch");
880 status = 0;
881 }
882
883 CINT(2) = 2*CINT(2);
884
885 if (strcmp(CSTRING(3), "test string") != 0) {
886 cm_msg(MERROR, "rpc_test2", "CSTRING(3) mismatch");
887 status = 0;
888 }
889
890 if (CINT(5) != 32) {
891 cm_msg(MERROR, "rpc_test2", "CINT(5) string_out size mismatch");
892 status = 0;
893 }
894
895 strcpy(CSTRING(4), "string_out");
896
897 if (CINT(7) != 48) {
898 cm_msg(MERROR, "rpc_test2", "CINT(7) string2_out size mismatch");
899 status = 0;
900 }
901
902 strcpy(CSTRING(6), "second string_out");
903
904 if (CINT(9) != 25) {
905 cm_msg(MERROR, "rpc_test2", "CINT(9) string_inout size mismatch");
906 status = 0;
907 }
908
909 if (strcmp(CSTRING(8), "string_inout") != 0) {
910 cm_msg(MERROR, "rpc_test2", "CSTRING(8) mismatch");
911 status = 0;
912 }
913
914 strcpy(CSTRING(8), "return string_inout");
915
916 // 10, 11, 12 is TID_STRUCT of type KEY
917
918 KEY *pkey;
919
920 pkey = (KEY*)CARRAY(10);
921
922 if (pkey->type != 111 || pkey->num_values != 222 || strcmp(pkey->name, "name") || pkey->last_written != 333) {
923 printf("CKEY(10): type %d, num_values %d, name [%s], last_written %d\n", pkey->type, pkey->num_values, pkey->name, pkey->last_written);
924
925 cm_msg(MERROR, "rpc_test2", "CARRAY(10) KEY mismatch");
926 status = 0;
927 }
928
929 pkey = (KEY*)CARRAY(11);
930
931 pkey->type = 444;
932 pkey->num_values = 555;
933 strcpy(pkey->name, "out_name");
934 pkey->last_written = 666;
935
936 //printf("CKEY(11): type %d, num_values %d, name [%s], last_written %d\n", pkey->type, pkey->num_values, pkey->name, pkey->last_written);
937
938 pkey = (KEY*)CARRAY(12);
939
940 if (pkey->type != 111111 || pkey->num_values != 222222 || strcmp(pkey->name, "name_name") || pkey->last_written != 333333) {
941 printf("CKEY(10): type %d, num_values %d, name [%s], last_written %d\n", pkey->type, pkey->num_values, pkey->name, pkey->last_written);
942
943 cm_msg(MERROR, "rpc_test2", "CARRAY(12) KEY mismatch");
944 status = 0;
945 }
946
947 pkey->type = 444444;
948 pkey->num_values = 555555;
949 strcpy(pkey->name, "inout_name");
950 pkey->last_written = 666666;
951
952 //printf("CKEY(10): type %d, num_values %d, name [%s], last_written %d\n", pkey->type, pkey->num_values, pkey->name, pkey->last_written);
953
954 if (CINT(14) != 40) {
955 cm_msg(MERROR, "rpc_test2", "CINT(14) array_in size mismatch");
956 status = 0;
957 } else {
958 //printf("CARRAY(13): %p, 0x%08x [%s]\n", CARRAY(9), *(uint32_t*)CARRAY(9), (char*)CARRAY(9));
959
960 uint32_t size = CINT(14)/4;
961 for (uint32_t i=0; i<size; i++) {
962 if (((uint32_t*)CARRAY(13))[i] != i*10) {
963 cm_msg(MERROR, "rpc_test2", "CARRAY(13) dwordarray_inout mismatch at %d, %d vs %d", i, ((uint32_t*)CARRAY(13))[i], i*10);
964 status = 0;
965 }
966 }
967 }
968
969 for (int i=0; i<5; i++) {
970 ((uint32_t*)CARRAY(13))[i] = i*10 + i;
971 }
972
973 CINT(14) = 20;
974
975 if (CINT(16) != 10) {
976 cm_msg(MERROR, "rpc_test2", "CINT(16) array_in size mismatch");
977 status = 0;
978 } else {
979 //printf("CARRAY(15): %p, 0x%08x [%s]\n", CARRAY(15), *(uint32_t*)CARRAY(15), (char*)CARRAY(15));
980
981 for (int i=0; i<CINT(16); i++) {
982 if (((char*)CARRAY(15))[i] != 'a'+i) {
983 cm_msg(MERROR, "rpc_test2", "CARRAY(15) array_in data mismatch at %d, %d vs %d", i, ((char*)CARRAY(15))[i], 'a'+i);
984 status = 0;
985 }
986 }
987 }
988
989 if (CINT(18) != 16) {
990 cm_msg(MERROR, "rpc_test2", "CINT(14) array_out size mismatch");
991 status = 0;
992 }
993
994 break;
995 }
996
997 default:
998 cm_msg(MERROR, "rpc_server_dispatch", "received unrecognized command %d", index);
1000 }
1001
1002 return status;
1003}
1004
1005/* emacs
1006 * Local Variables:
1007 * tab-width: 8
1008 * c-basic-offset: 3
1009 * indent-tabs-mode: nil
1010 * End:
1011 */
#define FALSE
Definition cfortran.h:309
static void usage()
INT al_trigger_alarm(const char *alarm_name, const char *alarm_message, const char *default_class, const char *cond_str, INT type)
Definition alarm.cxx:283
INT al_check()
Definition alarm.cxx:614
INT bm_open_buffer(const char *buffer_name, INT buffer_size, INT *buffer_handle)
Definition midas.cxx:6717
INT bm_send_event(INT buffer_handle, const EVENT_HEADER *pevent, int unused, int timeout_msec)
Definition midas.cxx:9678
static int bm_skip_event(BUFFER *pbuf)
Definition midas.cxx:10833
INT bm_close_all_buffers(void)
Definition midas.cxx:7243
INT bm_add_event_request(INT buffer_handle, short int event_id, short int trigger_mask, INT sampling_type, EVENT_HANDLER *func, INT request_id)
Definition midas.cxx:8314
INT bm_empty_buffers()
Definition midas.cxx:11240
INT bm_set_cache_size(INT buffer_handle, size_t read_size, size_t write_size)
Definition midas.cxx:8140
INT bm_receive_event(INT buffer_handle, void *destination, INT *buf_size, int timeout_msec)
Definition midas.cxx:10650
INT bm_remove_event_request(INT buffer_handle, INT request_id)
Definition midas.cxx:8518
INT bm_close_buffer(INT buffer_handle)
Definition midas.cxx:7096
INT bm_flush_cache(int buffer_handle, int timeout_msec)
Definition midas.cxx:10207
INT cm_set_path(const char *path)
Definition midas.cxx:1497
INT cm_yield(INT millisec)
Definition midas.cxx:5642
INT cm_get_experiment_database(HNDLE *hDB, HNDLE *hKeyClient)
Definition midas.cxx:3011
INT cm_connect_experiment(const char *host_name, const char *exp_name, const char *client_name, void(*func)(char *))
Definition midas.cxx:2278
std::string cm_asctime()
Definition midas.cxx:1412
INT cm_check_client(HNDLE hDB, HNDLE hKeyClient)
Definition midas.cxx:1869
INT cm_execute(const char *command, char *result, INT bufsize)
Definition midas.cxx:5723
INT cm_get_watchdog_info(HNDLE hDB, const char *client_name, DWORD *timeout, DWORD *last)
Definition midas.cxx:3336
INT cm_cleanup(const char *client_name, BOOL ignore_timeout)
Definition midas.cxx:7610
std::string cm_get_client_name()
Definition midas.cxx:2059
INT cm_set_client_info(HNDLE hDB, HNDLE *hKeyClient, const char *host_name, char *client_name, INT hw_type, const char *password, DWORD watchdog_timeout)
Definition midas.cxx:1893
INT cm_disconnect_experiment(void)
Definition midas.cxx:2846
INT cm_synchronize(DWORD *seconds)
Definition midas.cxx:1369
INT cm_get_environment(char *host_name, int host_name_size, char *exp_name, int exp_name_size)
Definition midas.cxx:2134
INT cm_time(DWORD *t)
Definition midas.cxx:1434
INT cm_set_watchdog_params(BOOL call_watchdog, DWORD timeout)
Definition midas.cxx:3283
INT cm_exist(const char *name, BOOL bUnique)
Definition midas.cxx:7520
INT cm_set_experiment_semaphore(INT semaphore_alarm, INT semaphore_elog, INT semaphore_history, INT semaphore_msg)
Definition midas.cxx:2958
INT cm_set_experiment_name(const char *name)
Definition midas.cxx:1558
INT el_submit(int run, const char *author, const char *type, const char *syst, const char *subject, const char *text, const char *reply_to, const char *encoding, const char *afilename1, const char *buffer1, INT buffer_size1, const char *afilename2, const char *buffer2, INT buffer_size2, const char *afilename3, const char *buffer3, INT buffer_size3, char *tag, INT tag_size)
Definition elog.cxx:124
#define CM_SUCCESS
Definition midas.h:582
#define BM_SUCCESS
Definition midas.h:605
#define DB_SUCCESS
Definition midas.h:631
#define RPC_SHUTDOWN
Definition midas.h:707
#define RPC_SUCCESS
Definition midas.h:698
#define RPC_INVALID_ID
Definition midas.h:706
unsigned short int WORD
Definition mcstd.h:49
unsigned char BYTE
Definition mcstd.h:48
unsigned int DWORD
Definition mcstd.h:51
#define TID_SHORT
Definition midas.h:334
#define TID_WORD
Definition midas.h:332
#define MERROR
Definition midas.h:559
#define TID_INT
Definition midas.h:338
#define TID_DWORD
Definition midas.h:336
RPC_LIST * rpc_get_internal_list(INT flag)
Definition mrpc.cxx:716
INT ss_suspend_init_odb_port()
Definition system.cxx:4305
DWORD ss_millitime()
Definition system.cxx:3393
INT ss_semaphore_create(const char *name, HNDLE *semaphore_handle)
Definition system.cxx:2460
std::string ss_getcwd()
Definition system.cxx:5770
INT ss_getpid(void)
Definition system.cxx:1377
INT ss_daemon_init(BOOL keep_stdout)
Definition system.cxx:2001
INT ss_suspend_exit()
Definition system.cxx:4226
INT ss_suspend_set_server_listener(int listen_socket)
Definition system.cxx:4277
int cm_msg_early_init(void)
Definition midas.cxx:467
INT cm_msg_log(INT message_type, const char *facility, const char *message)
Definition midas.cxx:664
INT cm_msg_flush_buffer()
Definition midas.cxx:865
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
Definition midas.cxx:915
INT cm_msg_retrieve(INT n_message, char *message, INT buf_size)
Definition midas.cxx:1334
INT db_flush_database(HNDLE hDB)
Definition odb.cxx:2268
INT db_remove_open_record(HNDLE hDB, HNDLE hKey, BOOL lock)
Definition odb.cxx:12498
INT db_get_data_index(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, INT idx, DWORD type)
Definition odb.cxx:6893
INT db_delete_key(HNDLE hDB, HNDLE hKey, BOOL follow_links)
Definition odb.cxx:3856
INT db_find_link(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
Definition odb.cxx:4274
INT db_get_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, void *data, INT *buf_size, DWORD type, BOOL create)
Definition odb.cxx:5415
INT db_reorder_key(HNDLE hDB, HNDLE hKey, INT idx)
Definition odb.cxx:6361
static const KEY * db_get_parent(const DATABASE_HEADER *pheader, const KEY *pkey, int *pstatus, const char *caller, db_err_msg **msg)
Definition odb.cxx:1030
INT db_open_database(const char *xdatabase_name, INT database_size, HNDLE *hDB, const char *client_name)
Definition odb.cxx:1787
INT db_get_open_records(HNDLE hDB, HNDLE hKey, char *str, INT buf_size, BOOL fix)
Definition odb.cxx:5188
INT db_set_link_data(HNDLE hDB, HNDLE hKey, const void *data, INT buf_size, INT num_values, DWORD type)
Definition odb.cxx:7425
INT db_get_path(HNDLE hDB, HNDLE hKey, char *path, INT buf_size)
Definition odb.cxx:4990
INT db_set_link_data_index(HNDLE hDB, HNDLE hKey, const void *data, INT data_size, INT idx, DWORD type)
Definition odb.cxx:7754
INT db_get_record_size(HNDLE hDB, HNDLE hKey, INT align, INT *buf_size)
Definition odb.cxx:11615
INT db_get_data(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, DWORD type)
Definition odb.cxx:6539
INT db_create_key(HNDLE hDB, HNDLE hKey, const char *key_name, DWORD type)
Definition odb.cxx:3308
INT db_check_record(HNDLE hDB, HNDLE hKey, const char *keyname, const char *rec_str, BOOL correct)
Definition odb.cxx:12972
INT db_copy_xml(HNDLE hDB, HNDLE hKey, char *buffer, int *buffer_size, bool header)
Definition odb.cxx:9037
INT db_get_record(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, INT align)
Definition odb.cxx:11709
INT db_set_mode(HNDLE hDB, HNDLE hKey, WORD mode, BOOL recurse)
Definition odb.cxx:8027
INT db_get_next_link(HNDLE hDB, HNDLE hKey, HNDLE *subkey_handle)
Definition odb.cxx:5816
INT db_save(HNDLE hDB, HNDLE hKey, const char *filename, BOOL bRemote)
Definition odb.cxx:9245
INT db_get_key(HNDLE hDB, HNDLE hKey, KEY *key)
Definition odb.cxx:6019
INT db_get_link(HNDLE hDB, HNDLE hKey, KEY *key)
Definition odb.cxx:6072
INT db_load(HNDLE hDB, HNDLE hKeyRoot, const char *filename, BOOL bRemote)
Definition odb.cxx:8126
INT db_set_data_index(HNDLE hDB, HNDLE hKey, const void *data, INT data_size, INT idx, DWORD type)
Definition odb.cxx:7648
INT db_get_key_info(HNDLE hDB, HNDLE hKey, char *name, INT name_size, INT *type, INT *num_values, INT *item_size)
Definition odb.cxx:6191
INT db_close_all_databases(void)
Definition odb.cxx:2360
INT db_set_data(HNDLE hDB, HNDLE hKey, const void *data, INT buf_size, INT num_values, DWORD type)
Definition odb.cxx:7215
INT db_enum_link(HNDLE hDB, HNDLE hKey, INT idx, HNDLE *subkey_handle)
Definition odb.cxx:5725
INT db_set_data1(HNDLE hDB, HNDLE hKey, const void *data, INT buf_size, INT num_values, DWORD type)
Definition odb.cxx:7313
INT db_get_data1(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, DWORD type, INT *num_values)
Definition odb.cxx:6756
INT db_set_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, const void *data, INT data_size, INT num_values, DWORD type)
Definition odb.cxx:5261
INT db_find_key(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
Definition odb.cxx:4079
INT db_get_link_data(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, DWORD type)
Definition odb.cxx:6656
INT db_rename_key(HNDLE hDB, HNDLE hKey, const char *name)
Definition odb.cxx:6261
INT db_get_key_time(HNDLE hDB, HNDLE hKey, DWORD *delta)
Definition odb.cxx:6132
INT db_set_client_name(HNDLE hDB, const char *client_name)
Definition odb.cxx:2402
INT db_notify_clients_array(HNDLE hDB, HNDLE hKeys[], INT size)
Definition odb.cxx:12623
INT db_set_record(HNDLE hDB, HNDLE hKey, void *data, INT buf_size, INT align)
Definition odb.cxx:12291
INT db_set_data_index1(HNDLE hDB, HNDLE hKey, const void *data, INT data_size, INT idx, DWORD type, BOOL bNotify)
Definition odb.cxx:7828
INT db_enum_key(HNDLE hDB, HNDLE hKey, INT idx, HNDLE *subkey_handle)
Definition odb.cxx:5586
INT db_create_record(HNDLE hDB, HNDLE hKey, const char *orig_key_name, const char *init_str)
Definition odb.cxx:12800
INT db_add_open_record(HNDLE hDB, HNDLE hKey, WORD access_mode)
Definition odb.cxx:12363
INT db_set_num_values(HNDLE hDB, HNDLE hKey, INT num_values)
Definition odb.cxx:7502
INT db_create_link(HNDLE hDB, HNDLE hKey, const char *link_name, const char *destination)
Definition odb.cxx:3601
INT db_close_database(HNDLE hDB)
Definition odb.cxx:2152
#define RPC_DB_ADD_OPEN_RECORD
Definition mrpc.h:72
#define RPC_EL_SUBMIT
Definition mrpc.h:111
#define RPC_DB_SET_DATA_INDEX
Definition mrpc.h:67
void rpc_convert_data(void *data, INT tid, INT flags, INT total_size, INT convert_flags)
Definition midas.cxx:11706
#define RPC_DB_CLOSE_DATABASE
Definition mrpc.h:53
#define RPC_CM_TIME
Definition mrpc.h:29
#define RPC_BM_ADD_EVENT_REQUEST
Definition mrpc.h:43
#define RPC_DB_CREATE_RECORD
Definition mrpc.h:80
#define RPC_CM_EXIST
Definition mrpc.h:31
#define RPC_DB_LOAD
Definition mrpc.h:75
#define RPC_TEST2
Definition mrpc.h:123
#define RPC_CM_CHECK_CLIENT
Definition mrpc.h:34
#define RPC_DB_CREATE_LINK
Definition mrpc.h:56
#define RPC_DB_NOTIFY_CLIENTS_ARRAY
Definition mrpc.h:96
#define RPC_BM_MARK_READ_WAITING
Definition mrpc.h:48
#define RPC_CM_ASCTIME
Definition mrpc.h:28
#define RPC_DB_ENUM_LINK
Definition mrpc.h:78
#define RPC_BM_SEND_EVENT
Definition mrpc.h:45
INT rpc_register_functions(const RPC_LIST *new_list, RPC_HANDLER func)
Definition midas.cxx:11827
INT rpc_server_callback(struct callback_addr *pcallback)
Definition midas.cxx:15702
#define RPC_DB_DELETE_KEY
Definition mrpc.h:62
#define RPC_CM_SYNCHRONIZE
Definition mrpc.h:27
#define RPC_DB_SET_NUM_VALUES
Definition mrpc.h:88
#define RPC_BM_GET_BUFFER_INFO
Definition mrpc.h:39
#define RPC_CM_SET_CLIENT_INFO
Definition mrpc.h:21
#define RPC_DB_COPY_XML
Definition mrpc.h:98
#define RPC_DB_ENUM_KEY
Definition mrpc.h:63
#define RPC_BM_REMOVE_EVENT_REQUEST
Definition mrpc.h:44
void rpc_debug_printf(const char *format,...)
Definition midas.cxx:13161
#define RPC_DB_SET_VALUE
Definition mrpc.h:57
#define RPC_ID_EXIT
Definition mrpc.h:135
INT rpc_server_loop(void)
Definition midas.cxx:15843
#define RPC_DB_SET_CLIENT_NAME
Definition mrpc.h:76
#define RPC_CM_MSG
Definition mrpc.h:30
#define RPC_DB_GET_DATA1
Definition mrpc.h:87
#define RPC_DB_REMOVE_OPEN_RECORD
Definition mrpc.h:73
#define RPC_DB_CLOSE_ALL_DATABASES
Definition mrpc.h:54
INT rpc_set_mserver_path(const char *path)
Definition midas.cxx:13064
#define RPC_DB_SET_LINK_DATA_INDEX
Definition mrpc.h:94
#define RPC_BM_CLOSE_BUFFER
Definition mrpc.h:37
#define RPC_DB_RENAME_KEY
Definition mrpc.h:77
#define RPC_AL_TRIGGER_ALARM
Definition mrpc.h:114
#define RPC_DB_GET_NEXT_LINK
Definition mrpc.h:90
#define RPC_DB_GET_DATA
Definition mrpc.h:65
#define RPC_BM_SET_CACHE_SIZE
Definition mrpc.h:42
#define RPC_ID_SHUTDOWN
Definition mrpc.h:134
#define RPC_DB_SET_MODE
Definition mrpc.h:68
#define RPC_DB_FIND_LINK
Definition mrpc.h:60
#define RPC_DB_GET_LINK
Definition mrpc.h:91
#define RPC_DB_GET_KEY
Definition mrpc.h:64
#define RPC_DB_SET_DATA
Definition mrpc.h:66
#define RPC_BM_CLOSE_ALL_BUFFERS
Definition mrpc.h:38
INT rpc_server_shutdown(void)
Definition midas.cxx:16183
#define RPC_DB_SET_LINK_DATA
Definition mrpc.h:93
int rpc_flush_event_socket(int timeout_msec)
Definition midas.cxx:16136
#define RPC_DB_GET_LINK_DATA
Definition mrpc.h:92
#define RPC_DB_SET_DATA_INDEX1
Definition mrpc.h:85
#define RPC_DB_GET_PARENT
Definition mrpc.h:97
INT rpc_set_debug(void(*func)(const char *), INT mode)
Definition midas.cxx:13134
#define RPC_DB_REORDER_KEY
Definition mrpc.h:79
#define RPC_DB_OPEN_DATABASE
Definition mrpc.h:52
#define RPC_DB_CHECK_RECORD
Definition mrpc.h:89
#define RPC_BM_GET_BUFFER_LEVEL
Definition mrpc.h:40
#define RPC_DB_GET_DATA_INDEX
Definition mrpc.h:81
#define RPC_DB_GET_VALUE
Definition mrpc.h:58
INT rpc_register_listener(int port, RPC_HANDLER func, int *plsock, int *pport)
Definition midas.cxx:14579
#define RPC_BM_OPEN_BUFFER
Definition mrpc.h:36
#define RPC_DB_GET_KEY_INFO
Definition mrpc.h:86
#define RPC_BM_EMPTY_BUFFERS
Definition mrpc.h:49
INT rpc_server_accept(int lsock)
Definition midas.cxx:15341
#define RPC_DB_FLUSH_DATABASE
Definition mrpc.h:84
#define RPC_CM_SET_WATCHDOG_PARAMS
Definition mrpc.h:22
#define RPC_CM_MSG_LOG
Definition mrpc.h:25
#define RPC_BM_RECEIVE_EVENT
Definition mrpc.h:47
#define RPC_CM_MSG_RETRIEVE
Definition mrpc.h:32
#define RPC_BM_SKIP_EVENT
Definition mrpc.h:50
#define RPC_DB_SAVE
Definition mrpc.h:74
#define RPC_DB_GET_PATH
Definition mrpc.h:61
#define RPC_BM_INIT_BUFFER_COUNTERS
Definition mrpc.h:41
#define RPC_DB_GET_KEY_TIME
Definition mrpc.h:82
#define RPC_CM_EXECUTE
Definition mrpc.h:26
#define RPC_DB_SET_RECORD
Definition mrpc.h:71
#define RPC_DB_GET_RECORD_SIZE
Definition mrpc.h:69
#define RPC_BM_FLUSH_CACHE
Definition mrpc.h:46
#define RPC_CM_CLEANUP
Definition mrpc.h:23
#define RPC_DB_FIND_KEY
Definition mrpc.h:59
#define RPC_DB_GET_OPEN_RECORDS
Definition mrpc.h:83
#define RPC_AL_CHECK
Definition mrpc.h:113
#define RPC_CM_GET_WATCHDOG_INFO
Definition mrpc.h:24
INT rpc_get_convert_flags(void)
Definition midas.cxx:13030
#define RPC_TEST
Definition mrpc.h:122
void rpc_convert_single(void *data, INT tid, INT flags, INT convert_flags)
Definition midas.cxx:11681
#define RPC_DB_SET_DATA1
Definition mrpc.h:95
#define RPC_DB_CREATE_KEY
Definition mrpc.h:55
#define RPC_DB_GET_RECORD
Definition mrpc.h:70
int main()
Definition hwtest.cxx:23
INT index
Definition mana.cxx:271
BOOL debug
debug printouts
Definition mana.cxx:254
BOOL daemon
Definition mana.cxx:258
HNDLE hDB
main ODB handle
Definition mana.cxx:207
INT i
Definition mdump.cxx:32
#define closesocket(s)
Definition melog.cxx:29
char expt_name[NAME_LENGTH]
Definition mevb.cxx:44
HNDLE hClient
Definition mfe.cxx:59
INT bm_get_buffer_info(INT buffer_handle, BUFFER_HEADER *buffer_header)
Definition midas.cxx:7791
bool ends_with_char(const std::string &s, char c)
Definition midas.cxx:403
INT bm_get_buffer_level(INT buffer_handle, INT *n_bytes)
Definition midas.cxx:7838
std::string msprintf(const char *format,...)
Definition midas.cxx:410
INT bm_init_buffer_counters(INT buffer_handle)
Definition midas.cxx:8063
#define CFLOAT(_i)
Definition midas.h:1640
#define DIR_SEPARATOR
Definition midas.h:193
INT HNDLE
Definition midas.h:132
#define CINT(_i)
Definition midas.h:1622
#define CSHORT(_i)
Definition midas.h:1619
DWORD BOOL
Definition midas.h:105
#define CDOUBLE(_i)
Definition midas.h:1643
int INT
Definition midas.h:129
#define CHNDLE(_i)
Definition midas.h:1634
#define CDWORD(_i)
Definition midas.h:1631
#define RPC_OUTGOING
Definition midas.h:1585
#define CBOOL(_i)
Definition midas.h:1637
#define MIDAS_TCP_PORT
Definition midas.h:283
#define CSTRING(_i)
Definition midas.h:1646
#define CPWORD(_i)
Definition midas.h:1626
#define CPINT(_i)
Definition midas.h:1623
#define CWORD(_i)
Definition midas.h:1625
#define TRUE
Definition midas.h:182
#define CARRAY(_i)
Definition midas.h:1647
#define CBYTE(_i)
Definition midas.h:1616
#define POINTER_T
Definition midas.h:166
#define RPC_FIXARRAY
Definition midas.h:1583
#define CPFLOAT(_i)
Definition midas.h:1641
#define CPHNDLE(_i)
Definition midas.h:1635
#define NAME_LENGTH
Definition midas.h:272
#define CPBYTE(_i)
Definition midas.h:1617
#define CPDOUBLE(_i)
Definition midas.h:1644
#define CPDWORD(_i)
Definition midas.h:1632
#define name(x)
Definition midas_macro.h:24
struct callback_addr callback
Definition mserver.cxx:22
INT rpc_server_dispatch(INT index, void *prpc_param[])
Definition mserver.cxx:414
INT rpc_test(BYTE b, WORD w, INT i, float f, double d, BYTE *b1, WORD *w1, INT *i1, float *f1, double *d1)
Definition mserver.cxx:399
void debug_print(const char *msg)
Definition mserver.cxx:30
BOOL use_callback_addr
Definition mserver.cxx:24
char str[256]
Definition odbhist.cxx:33
char file_name[256]
Definition odbhist.cxx:41
DWORD status
Definition odbhist.cxx:39
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
short int event_id
Definition midas.h:852
DWORD data_size
Definition midas.h:856
DWORD serial_number
Definition midas.h:854
DWORD time_stamp
Definition midas.h:855
short int trigger_mask
Definition midas.h:853
Definition midas.h:1026
unsigned short host_port1
Definition msystem.h:312
std::string user
Definition msystem.h:318
void clear()
Definition msystem.h:320
unsigned short host_port2
Definition msystem.h:313
std::string experiment
Definition msystem.h:316
unsigned short host_port3
Definition msystem.h:314
std::string directory
Definition msystem.h:317
std::string host_name
Definition msystem.h:311
double d
Definition system.cxx:1311