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