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