MIDAS
Loading...
Searching...
No Matches
mserver.cxx File Reference
#include "midas.h"
#include "msystem.h"
#include "mstrlcpy.h"
Include dependency graph for mserver.cxx:

Go to the source code of this file.

Functions

INT rpc_server_dispatch (INT index, void *prpc_param[])
 
void debug_print (const char *msg)
 
int main (int argc, char **argv)
 
INT rpc_test (BYTE b, WORD w, INT i, float f, double d, BYTE *b1, WORD *w1, INT *i1, float *f1, double *d1)
 

Variables

struct callback_addr callback
 
BOOL use_callback_addr = TRUE
 

Function Documentation

◆ debug_print()

void debug_print ( const char msg)

Definition at line 30 of file mserver.cxx.

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}
std::string cm_get_client_name()
Definition midas.cxx:2059
unsigned int DWORD
Definition mcstd.h:51
DWORD ss_millitime()
Definition system.cxx:3393
std::string ss_getcwd()
Definition system.cxx:5770
INT ss_getpid(void)
Definition system.cxx:1377
bool ends_with_char(const std::string &s, char c)
Definition midas.cxx:403
std::string msprintf(const char *format,...)
Definition midas.cxx:410
#define DIR_SEPARATOR
Definition midas.h:193
struct callback_addr callback
Definition mserver.cxx:22
char str[256]
Definition odbhist.cxx:33
char file_name[256]
Definition odbhist.cxx:41
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
std::string host_name
Definition msystem.h:311
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char **  argv 
)
  • save executable file name *‍/

Definition at line 71 of file mserver.cxx.

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}
#define FALSE
Definition cfortran.h:309
static void usage()
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
INT cm_disconnect_experiment(void)
Definition midas.cxx:2846
INT cm_get_environment(char *host_name, int host_name_size, char *exp_name, int exp_name_size)
Definition midas.cxx:2134
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
#define CM_SUCCESS
Definition midas.h:582
#define DB_SUCCESS
Definition midas.h:631
#define RPC_SHUTDOWN
Definition midas.h:707
#define RPC_SUCCESS
Definition midas.h:698
#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
INT ss_semaphore_create(const char *name, HNDLE *semaphore_handle)
Definition system.cxx:2460
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_flush_buffer()
Definition midas.cxx:865
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 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
void rpc_debug_printf(const char *format,...)
Definition midas.cxx:13161
INT rpc_server_loop(void)
Definition midas.cxx:15843
INT rpc_set_mserver_path(const char *path)
Definition midas.cxx:13064
INT rpc_server_shutdown(void)
Definition midas.cxx:16183
INT rpc_set_debug(void(*func)(const char *), INT mode)
Definition midas.cxx:13134
INT rpc_register_listener(int port, RPC_HANDLER func, int *plsock, int *pport)
Definition midas.cxx:14579
INT rpc_server_accept(int lsock)
Definition midas.cxx:15341
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 HNDLE
Definition midas.h:132
DWORD BOOL
Definition midas.h:105
#define MIDAS_TCP_PORT
Definition midas.h:283
#define TRUE
Definition midas.h:182
#define NAME_LENGTH
Definition midas.h:272
#define name(x)
Definition midas_macro.h:24
INT rpc_server_dispatch(INT index, void *prpc_param[])
Definition mserver.cxx:414
void debug_print(const char *msg)
Definition mserver.cxx:30
BOOL use_callback_addr
Definition mserver.cxx:24
DWORD status
Definition odbhist.cxx:39
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
Here is the call graph for this function:

◆ rpc_server_dispatch()

INT rpc_server_dispatch ( INT  index,
void prpc_param[] 
)

Definition at line 414 of file mserver.cxx.

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}
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
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
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_synchronize(DWORD *seconds)
Definition midas.cxx:1369
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 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 BM_SUCCESS
Definition midas.h:605
#define RPC_INVALID_ID
Definition midas.h:706
#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
INT cm_msg_log(INT message_type, const char *facility, const char *message)
Definition midas.cxx:664
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_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
#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
#define RPC_DB_SET_VALUE
Definition mrpc.h:57
#define RPC_ID_EXIT
Definition mrpc.h:135
#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
#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
#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
#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
#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
#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 index
Definition mana.cxx:271
INT bm_get_buffer_info(INT buffer_handle, BUFFER_HEADER *buffer_header)
Definition midas.cxx:7791
INT bm_get_buffer_level(INT buffer_handle, INT *n_bytes)
Definition midas.cxx:7838
INT bm_init_buffer_counters(INT buffer_handle)
Definition midas.cxx:8063
#define CFLOAT(_i)
Definition midas.h:1640
#define CINT(_i)
Definition midas.h:1622
#define CSHORT(_i)
Definition midas.h:1619
#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 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 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 CPBYTE(_i)
Definition midas.h:1617
#define CPDOUBLE(_i)
Definition midas.h:1644
#define CPDWORD(_i)
Definition midas.h:1632
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
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
Here is the caller graph for this function:

◆ rpc_test()

INT rpc_test ( BYTE  b,
WORD  w,
INT  i,
float  f,
double  d,
BYTE b1,
WORD w1,
INT i1,
float f1,
double d1 
)

Definition at line 399 of file mserver.cxx.

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}
double d
Definition system.cxx:1311
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ callback

Definition at line 22 of file mserver.cxx.

◆ use_callback_addr

BOOL use_callback_addr = TRUE

Definition at line 24 of file mserver.cxx.