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