00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00164
00165 #include "midasinc.h"
00166
00167
00168 #endif
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 #define DRI_16 (1<<0)
00179 #define DRI_32 (1<<1)
00180 #define DRI_64 (1<<2)
00181 #define DRI_LITTLE_ENDIAN (1<<3)
00182 #define DRI_BIG_ENDIAN (1<<4)
00183 #define DRF_IEEE (1<<5)
00184 #define DRF_G_FLOAT (1<<6)
00185 #define DR_ASCII (1<<7)
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198 #define WORD_SWAP(x) { BYTE _tmp; \
00199 _tmp= *((BYTE *)(x)); \
00200 *((BYTE *)(x)) = *(((BYTE *)(x))+1); \
00201 *(((BYTE *)(x))+1) = _tmp; }
00202
00203
00204
00205 #define DWORD_SWAP(x) { BYTE _tmp; \
00206 _tmp= *((BYTE *)(x)); \
00207 *((BYTE *)(x)) = *(((BYTE *)(x))+3); \
00208 *(((BYTE *)(x))+3) = _tmp; \
00209 _tmp= *(((BYTE *)(x))+1); \
00210 *(((BYTE *)(x))+1) = *(((BYTE *)(x))+2); \
00211 *(((BYTE *)(x))+2) = _tmp; }
00212
00213
00214
00215 #define QWORD_SWAP(x) { BYTE _tmp; \
00216 _tmp= *((BYTE *)(x)); \
00217 *((BYTE *)(x)) = *(((BYTE *)(x))+7); \
00218 *(((BYTE *)(x))+7) = _tmp; \
00219 _tmp= *(((BYTE *)(x))+1); \
00220 *(((BYTE *)(x))+1) = *(((BYTE *)(x))+6); \
00221 *(((BYTE *)(x))+6) = _tmp; \
00222 _tmp= *(((BYTE *)(x))+2); \
00223 *(((BYTE *)(x))+2) = *(((BYTE *)(x))+5); \
00224 *(((BYTE *)(x))+5) = _tmp; \
00225 _tmp= *(((BYTE *)(x))+3); \
00226 *(((BYTE *)(x))+3) = *(((BYTE *)(x))+4); \
00227 *(((BYTE *)(x))+4) = _tmp; }
00228
00229
00230
00231
00232
00233 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00234
00235
00236
00237 #define MESSAGE_BUFFER_SIZE 100000
00238 #define MESSAGE_BUFFER_NAME "SYSMSG"
00239 #define MAX_RPC_CONNECTION 25
00240 #define MAX_STRING_LENGTH 256
00241 #define NET_BUFFER_SIZE (ALIGN8(MAX_EVENT_SIZE)+sizeof(EVENT_HEADER)+\
00242 4*8 + sizeof(NET_COMMAND_HEADER))
00243
00244
00245
00246 #undef DEBUG_MSG
00247
00248
00249 #if !defined ( OS_MSDOS ) && !defined ( OS_VXWORKS )
00250 #define LOCAL_ROUTINES
00251 #endif
00252
00253
00254 #if !defined ( OS_MSDOS )
00255 #define YBOS_SUPPORT
00256 #endif
00257
00258
00259
00260
00261
00262 #ifdef OS_MSDOS
00263
00264 #define closesocket(s) close(s)
00265 #define ioctlsocket(s,c,d) ioctl(s,c,d)
00266 #define malloc(i) farmalloc(i)
00267
00268 #undef NET_TCP_SIZE
00269 #define NET_TCP_SIZE 0x7FFF
00270
00271 #undef MAX_EVENT_SIZE
00272 #define MAX_EVENT_SIZE 4096
00273
00274 #endif
00275
00276 #ifdef OS_VMS
00277
00278 #define closesocket(s) close(s)
00279 #define ioctlsocket(s,c,d)
00280
00281 #ifndef FD_SET
00282 typedef struct {
00283 INT fds_bits;
00284 } fd_set;
00285
00286 #define FD_SET(n, p) ((p)->fds_bits |= (1 << (n)))
00287 #define FD_CLR(n, p) ((p)->fds_bits &= ~(1 << (n)))
00288 #define FD_ISSET(n, p) ((p)->fds_bits & (1 << (n)))
00289 #define FD_ZERO(p) ((p)->fds_bits = 0)
00290 #endif
00291
00292 #endif
00293
00294
00295
00296 #ifdef OS_VMS
00297
00298 #define P_WAIT 0
00299 #define P_NOWAIT 1
00300 #define P_DETACH 4
00301
00302 #endif
00303
00304
00305
00306 #ifdef OS_UNIX
00307
00308 #define closesocket(s) close(s)
00309 #define ioctlsocket(s,c,d) ioctl(s,c,d)
00310
00311 #define P_WAIT 0
00312 #define P_NOWAIT 1
00313 #define P_DETACH 4
00314
00315 extern char **environ;
00316
00317 #endif
00318
00319 #ifndef FD_SETSIZE
00320 #define FD_SETSIZE 32
00321 #endif
00322
00323
00324
00325 #ifdef OS_VXWORKS
00326
00327 #define P_NOWAIT 1
00328 #define closesocket(s) close(s)
00329 #define ioctlsocket(s,c,d) ioctl(s,c,d)
00330
00331 #endif
00332
00333
00334 #ifndef O_BINARY
00335 #define O_BINARY 0
00336 #define O_TEXT 0
00337 #endif
00338
00339
00340 #ifndef max
00341 #define max(a,b) (((a) > (b)) ? (a) : (b))
00342 #endif
00343
00344 #ifndef min
00345 #define min(a,b) (((a) < (b)) ? (a) : (b))
00346 #endif
00347
00348 #ifndef abs
00349 #define abs(a) (((a) < 0) ? -(a) : (a))
00350 #endif
00351
00352
00353 #define TELL(fh) lseek(fh, 0, SEEK_CUR)
00354
00355
00356 #ifdef OS_SOLARIS
00357 #define MAX_SHM_SIZE 0x20000
00358 #endif
00359
00360
00361
00362
00363
00364 typedef struct {
00365 DWORD routine_id;
00366 DWORD param_size;
00367 } NET_COMMAND_HEADER;
00368
00369 typedef struct {
00370 NET_COMMAND_HEADER header;
00371 char param[32];
00372 } NET_COMMAND;
00373
00374
00375 typedef struct {
00376 DWORD serial_number;
00377 DWORD sequence_number;
00378 } UDP_HEADER;
00379
00380 #define UDP_FIRST 0x80000000l
00381 #define TCP_FAST 0x80000000l
00382
00383 #define MSG_BM 1
00384 #define MSG_ODB 2
00385 #define MSG_CLIENT 3
00386 #define MSG_SERVER 4
00387 #define MSG_LISTEN 5
00388 #define MSG_WATCHDOG 6
00389
00390
00391
00392 struct callback_addr {
00393 char host_name[HOST_NAME_LENGTH];
00394 short host_port1;
00395 short host_port2;
00396 short host_port3;
00397 int debug;
00398 char experiment[NAME_LENGTH];
00399 char directory[MAX_STRING_LENGTH];
00400 char user[NAME_LENGTH];
00401 INT index;
00402 };
00403
00404 typedef struct {
00405 char host_name[HOST_NAME_LENGTH];
00406 INT port;
00407 char exp_name[NAME_LENGTH];
00408 int send_sock;
00409 INT remote_hw_type;
00410 char client_name[NAME_LENGTH];
00411 INT transport;
00412 INT rpc_timeout;
00413
00414 } RPC_CLIENT_CONNECTION;
00415
00416 typedef struct {
00417 char host_name[HOST_NAME_LENGTH];
00418 INT port;
00419 char exp_name[NAME_LENGTH];
00420 int send_sock;
00421 int recv_sock;
00422 int event_sock;
00423 INT remote_hw_type;
00424 INT transport;
00425 INT rpc_timeout;
00426
00427 } RPC_SERVER_CONNECTION;
00428
00429 typedef struct {
00430 INT tid;
00431 char prog_name[NAME_LENGTH];
00432 char host_name[HOST_NAME_LENGTH];
00433 int send_sock;
00434 int recv_sock;
00435 int event_sock;
00436 INT remote_hw_type;
00437 INT transport;
00438 INT watchdog_timeout;
00439 DWORD last_activity;
00440 INT convert_flags;
00441 char *net_buffer;
00442 char *ev_net_buffer;
00443 INT net_buffer_size;
00444 INT write_ptr, read_ptr, misalign;
00445 INT ev_write_ptr, ev_read_ptr, ev_misalign;
00446 HNDLE odb_handle;
00447 HNDLE client_handle;
00448
00449 } RPC_SERVER_ACCEPTION;
00450
00451
00452 #endif
00453
00454
00455
00456
00457
00458
00459 typedef struct {
00460 INT size;
00461 INT next_free;
00462 } FREE_DESCRIP;
00463
00464 typedef struct {
00465 INT handle;
00466 WORD access_mode;
00467 WORD flags;
00468
00469 } OPEN_RECORD;
00470
00471 typedef struct {
00472 char name[NAME_LENGTH];
00473 INT pid;
00474 INT tid;
00475 INT thandle;
00476 INT port;
00477 INT num_open_records;
00478 DWORD last_activity;
00479 DWORD watchdog_timeout;
00480 INT max_index;
00481
00482 OPEN_RECORD open_record[MAX_OPEN_RECORDS];
00483
00484 } DATABASE_CLIENT;
00485
00486 typedef struct {
00487 char name[NAME_LENGTH];
00488 INT num_clients;
00489 INT max_client_index;
00490 INT key_size;
00491 INT data_size;
00492 INT root_key;
00493 INT first_free_key;
00494 INT first_free_data;
00495
00496 DATABASE_CLIENT client[MAX_CLIENTS];
00497
00498 } DATABASE_HEADER;
00499
00500
00501
00502 typedef struct {
00503 char name[NAME_LENGTH];
00504 BOOL attached;
00505 INT client_index;
00506 DATABASE_HEADER *database_header;
00507 void *database_data;
00508 HNDLE mutex;
00509 INT lock_cnt;
00510 HNDLE shm_handle;
00511 INT index;
00512 BOOL protect;
00513
00514 } DATABASE;
00515
00516
00517
00518 typedef struct {
00519 HNDLE handle;
00520 HNDLE hDB;
00521 WORD access_mode;
00522 void *data;
00523 void *copy;
00524 INT buf_size;
00525 void (*dispatcher) (INT, INT, void *);
00526 void *info;
00527
00528 } RECORD_LIST;
00529
00530
00531
00532 typedef struct {
00533 INT buffer_handle;
00534 short int event_id;
00535 short int trigger_mask;
00536 void (*dispatcher) (HNDLE, HNDLE, EVENT_HEADER *, void *);
00537
00538 } REQUEST_LIST;
00539
00540
00541
00542
00543
00544 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00545
00546
00547
00548 #define CHN_SETTINGS_STR(_name) char *_name[] = {\
00549 "[Settings]",\
00550 "Active = BOOL : 1",\
00551 "Type = STRING : [8] Disk",\
00552 "Filename = STRING : [256] run%05d.mid",\
00553 "Format = STRING : [8] MIDAS",\
00554 "Compression = INT : 0",\
00555 "ODB dump = BOOL : 1",\
00556 "Log messages = DWORD : 0",\
00557 "Buffer = STRING : [32] SYSTEM",\
00558 "Event ID = INT : -1",\
00559 "Trigger mask = INT : -1",\
00560 "Event limit = DWORD : 0",\
00561 "Byte limit = DOUBLE : 0",\
00562 "Tape capacity = DOUBLE : 0",\
00563 "Subdir format = STRING : [32]",\
00564 "Current filename = STRING : [256]",\
00565 "",\
00566 "[Statistics]",\
00567 "Events written = DOUBLE : 0",\
00568 "Bytes written = DOUBLE : 0",\
00569 "Bytes written total = DOUBLE : 0",\
00570 "Files written = INT : 0",\
00571 "",\
00572 NULL}
00573
00574 typedef struct {
00575 BOOL active;
00576 char type[8];
00577 char filename[256];
00578 char format[8];
00579 INT compression;
00580 BOOL odb_dump;
00581 DWORD log_messages;
00582 char buffer[32];
00583 INT event_id;
00584 INT trigger_mask;
00585 DWORD event_limit;
00586 double byte_limit;
00587 double tape_capacity;
00588 char subdir_format[32];
00589 char current_filename[256];
00590 } CHN_SETTINGS;
00591
00592 typedef struct {
00593 double events_written;
00594 double bytes_written;
00595 double bytes_written_total;
00596 INT files_written;
00597 } CHN_STATISTICS;
00598
00599 typedef struct {
00600 INT handle;
00601 char path[256];
00602 INT type;
00603 INT format;
00604 INT buffer_handle;
00605 INT msg_buffer_handle;
00606 INT request_id;
00607 INT msg_request_id;
00608 HNDLE stats_hkey;
00609 HNDLE settings_hkey;
00610 CHN_SETTINGS settings;
00611 CHN_STATISTICS statistics;
00612 void **format_info;
00613 void *ftp_con;
00614 } LOG_CHN;
00615
00616 #define LOG_TYPE_DISK 1
00617 #define LOG_TYPE_TAPE 2
00618 #define LOG_TYPE_FTP 3
00619
00620
00621
00622 typedef struct {
00623 char name[32];
00624 int priority;
00625 int options;
00626 int stackSize;
00627 int arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10;
00628 } VX_TASK_SPAWN;
00629
00630
00631
00632 #define CH_IPC 1
00633 #define CH_CLIENT 2
00634 #define CH_SERVER 3
00635 #define CH_LISTEN 4
00636
00637
00638
00639
00640 #ifdef __cplusplus
00641 extern "C" {
00642 #endif
00643
00644
00645 INT EXPRT cm_set_path(char *path);
00646 INT EXPRT cm_get_path(char *path);
00647 INT cm_dispatch_ipc(char *message, int socket);
00648 INT EXPRT cm_msg_log(INT message_type, const char *message);
00649 INT EXPRT cm_msg_log1(INT message_type, const char *message, const char *facility);
00650 void EXPRT name2c(char *str);
00651
00652
00653 INT bm_lock_buffer(INT buffer_handle);
00654 INT bm_unlock_buffer(INT buffer_handle);
00655 INT bm_notify_client(char *buffer_name, int socket);
00656 INT EXPRT bm_mark_read_waiting(BOOL flag);
00657 INT bm_push_event(char *buffer_name);
00658 INT bm_check_buffers(void);
00659 INT EXPRT bm_remove_event_request(INT buffer_handle, INT request_id);
00660 void EXPRT bm_defragment_event(HNDLE buffer_handle, HNDLE request_id,
00661 EVENT_HEADER * pevent, void *pdata,
00662 void (*dispatcher) (HNDLE, HNDLE,
00663 EVENT_HEADER *, void *));
00664
00665
00666 INT EXPRT db_lock_database(HNDLE database_handle);
00667 INT EXPRT db_unlock_database(HNDLE database_handle);
00668 INT db_update_record(INT hDB, INT hKey, int socket);
00669 INT db_close_all_records(void);
00670 INT EXPRT db_flush_database(HNDLE hDB);
00671 INT EXPRT db_notify_clients(HNDLE hDB, HNDLE hKey, BOOL bWalk);
00672 INT EXPRT db_set_client_name(HNDLE hDB, char *client_name);
00673 INT db_delete_key1(HNDLE hDB, HNDLE hKey, INT level, BOOL follow_links);
00674 INT EXPRT db_show_mem(HNDLE hDB, char *result, INT buf_size, BOOL verbose);
00675
00676
00677 RPC_LIST EXPRT *rpc_get_internal_list(INT flag);
00678 INT rpc_server_receive(INT index, int sock, BOOL check);
00679 INT rpc_server_callback(struct callback_addr *callback);
00680 INT EXPRT rpc_server_accept(int sock);
00681 INT rpc_client_accept(int sock);
00682 INT rpc_get_server_acception(void);
00683 INT rpc_set_server_acception(INT index);
00684 INT EXPRT rpc_set_server_option(INT item, PTYPE value);
00685 PTYPE EXPRT rpc_get_server_option(INT item);
00686 INT recv_tcp_check(int sock);
00687 INT recv_event_check(int sock);
00688 INT rpc_deregister_functions(void);
00689 INT rpc_check_channels(void);
00690 void EXPRT rpc_client_check();
00691 INT rpc_server_disconnect(void);
00692 int EXPRT rpc_get_send_sock(void);
00693 int EXPRT rpc_get_event_sock(void);
00694 INT EXPRT rpc_set_opt_tcp_size(INT tcp_size);
00695 INT EXPRT rpc_get_opt_tcp_size(void);
00696
00697
00698 INT ss_shm_open(char *name, INT size, void **adr, HNDLE * handle);
00699 INT ss_shm_close(char *name, void *adr, HNDLE handle, INT destroy_flag);
00700 INT ss_shm_flush(char *name, void *adr, INT size);
00701 INT ss_shm_protect(HNDLE handle, void *adr);
00702 INT ss_shm_unprotect(HNDLE handle, void **adr);
00703 INT ss_spawnv(INT mode, char *cmdname, char *argv[]);
00704 INT ss_shell(int sock);
00705 INT EXPRT ss_daemon_init(BOOL keep_stdout);
00706 INT EXPRT ss_system(char *command);
00707 INT EXPRT ss_exec(char *cmd, INT * child_pid);
00708 BOOL EXPRT ss_existpid(INT pid);
00709 INT EXPRT ss_getpid(void);
00710 INT EXPRT ss_gettid(void);
00711 INT ss_getthandle(void);
00712 INT ss_set_async_flag(INT flag);
00713 INT EXPRT ss_mutex_create(char *mutex_name, HNDLE * mutex_handle);
00714 INT EXPRT ss_mutex_wait_for(HNDLE mutex_handle, INT timeout);
00715 INT EXPRT ss_mutex_release(HNDLE mutex_handle);
00716 INT EXPRT ss_mutex_delete(HNDLE mutex_handle, INT destroy_flag);
00717 INT ss_wake(INT pid, INT tid, INT thandle);
00718 INT ss_alarm(INT millitime, void (*func) (int));
00719 INT ss_suspend_get_port(INT * port);
00720 INT ss_suspend_set_dispatch(INT channel, void *connection, INT(*dispatch) ());
00721 INT ss_resume(INT port, char *message);
00722 INT ss_suspend_exit(void);
00723 INT ss_exception_handler(void (*func) ());
00724 void EXPRT ss_force_single_thread();
00725 INT EXPRT ss_suspend(INT millisec, INT msg);
00726 midas_thread_t EXPRT ss_thread_create(INT(*func) (void *), void *param);
00727 INT EXPRT ss_thread_kill(midas_thread_t thread_id);
00728 INT EXPRT ss_get_struct_align(void);
00729 INT EXPRT ss_timezone(void);
00730
00731
00732 INT EXPRT send_tcp(int sock, char *buffer, DWORD buffer_size, INT flags);
00733 INT EXPRT recv_tcp(int sock, char *buffer, DWORD buffer_size, INT flags);
00734 INT send_udp(int sock, char *buffer, DWORD buffer_size, INT flags);
00735 INT recv_udp(int sock, char *buffer, DWORD buffer_size, INT flags);
00736 INT EXPRT recv_string(int sock, char *buffer, DWORD buffer_size, INT flags);
00737
00738
00739 INT EXPRT ss_syslog(const char *message);
00740
00741
00742 INT EXPRT eb_create_buffer(INT size);
00743 INT EXPRT eb_free_buffer(void);
00744 BOOL EXPRT eb_buffer_full(void);
00745 BOOL EXPRT eb_buffer_empty(void);
00746 EVENT_HEADER EXPRT *eb_get_pointer(void);
00747 INT EXPRT eb_increment_pointer(INT buffer_handle, INT event_size);
00748 INT EXPRT eb_send_events(BOOL send_all);
00749
00750
00751 INT EXPRT dm_buffer_create(INT size, INT usize);
00752 INT EXPRT dm_buffer_release(void);
00753 BOOL EXPRT dm_area_full(void);
00754 EVENT_HEADER EXPRT *dm_pointer_get(void);
00755 INT EXPRT dm_pointer_increment(INT buffer_handle, INT event_size);
00756 INT EXPRT dm_area_send(void);
00757 INT EXPRT dm_area_flush(void);
00758 INT EXPRT dm_task(void *pointer);
00759 DWORD EXPRT dm_buffer_time_get(void);
00760 INT EXPRT dm_async_area_send(void *pointer);
00761
00762
00763
00764 #include "mrpc.h"
00765
00766 #ifdef __cplusplus
00767 }
00768 #endif
00769
00770 #endif
00771
00772
00773