msystem.h

Go to the documentation of this file.
00001 /********************************************************************\
00002 
00003   Name:         MSYSTEM.H
00004   Created by:   Stefan Ritt
00005 
00006   Contents:     Function declarations and constants for internal
00007                 routines
00008 
00009   $Log: msystem.h,v $
00010   Revision 1.43  2004/10/04 23:54:39  midas
00011   Implemented ODB version
00012 
00013   Revision 1.42  2004/09/29 00:58:35  midas
00014   Increased various constants
00015 
00016   Revision 1.41  2004/07/21 05:41:23  pierre
00017   fix dox doc
00018 
00019   Revision 1.40  2004/05/07 19:40:11  midas
00020   Replaced min/max by MIN/MAX macros
00021 
00022   Revision 1.39  2004/01/19 20:20:42  midas
00023   Made ss_timezone() EXPRTable
00024 
00025   Revision 1.38  2004/01/19 16:56:15  olchansk
00026   add ss_timezone()
00027   change ss_thread_create() and ss_thread_kill() to use midas_thread_t
00028 
00029   Revision 1.37  2004/01/17 05:35:53  olchansk
00030   replace #define ALIGN() with ALIGN8() to dodge namespace pollution under macosx
00031   hide strlcpy() & co #ifdef HAVE_STRLCPY (macosx already has strlcpy())
00032   correct inconsistent prototype of dbg_malloc() and dbg_calloc()
00033 
00034   Revision 1.36  2004/01/13 00:51:15  pierre
00035   fix dox comment for vxworks
00036 
00037   Revision 1.35  2004/01/12 23:03:42  pierre
00038   fix dox
00039 
00040   Revision 1.34  2004/01/08 08:40:09  midas
00041   Implemented standard indentation
00042 
00043   Revision 1.33  2004/01/08 06:29:39  pierre
00044   Doxygen the file
00045 
00046   Revision 1.32  2003/11/24 08:22:45  midas
00047   Changed timeouts from INT to DWORD, added ignore_timeout to cm_cleanup, adde '-f' flag to ODBEdit 'cleanup'
00048 
00049   Revision 1.31  2003/10/16 22:53:57  midas
00050   Changed return values for ss_thread_create to return threadId.
00051   Added ss_thread_kill for killing the passed threadId. (DBM - Triumf)
00052 
00053   Revision 1.30  2003/05/01 18:10:50  midas
00054   Made rpc_client_check() EXPRT
00055 
00056   Revision 1.29  2003/04/25 11:47:17  midas
00057   Added ss_force_single_thread()
00058 
00059   Revision 1.28  2003/04/22 12:00:56  midas
00060   Added rpc_client_check
00061 
00062   Revision 1.27  2003/04/15 08:17:08  midas
00063   Added verbose flag to db_show_mem
00064 
00065   Revision 1.26  2003/04/14 12:59:51  midas
00066   Added 'compression' in channel settings
00067 
00068   Revision 1.25  2003/04/07 23:55:55  olchansk
00069   add c++ wrappers
00070 
00071   Revision 1.24  2002/06/03 06:07:14  midas
00072   Added extra parameter to ss_daemon_init to keep stdout
00073 
00074   Revision 1.23  2002/05/16 18:01:13  midas
00075   Added subdir creation in logger and improved program restart scheme
00076 
00077   Revision 1.22  2002/05/15 23:45:46  midas
00078   Increased number of RPC connections
00079 
00080   Revision 1.21  2001/06/15 09:50:29  midas
00081   Made recv_string EXPRT (for bl_psi.ch)
00082 
00083   Revision 1.20  2000/10/20 19:03:17  pierre
00084   - Added ss_exec(...) for pid return
00085   - Added ss_existpid(...) for pid check
00086 
00087   Revision 1.19  2000/08/21 07:05:47  midas
00088   Added cm_msg_log1(...,facility) to be compatible with older programs
00089 
00090   Revision 1.18  2000/08/11 11:43:50  midas
00091   Added cm_msg1 to produce messages which go to a differnt logging file
00092 
00093   Revision 1.17  1999/12/08 00:34:24  pierre
00094   - EXPRT db_un/lock_database.
00095   - mod dm_buffer_create arg list.
00096 
00097   Revision 1.16  1999/11/09 13:17:00  midas
00098   Changed shared memory function names to ss_shm_xxx instead ss_xxx_shm
00099 
00100   Revision 1.15  1999/10/11 14:16:04  midas
00101   Added ss_daemon_init and ss_system
00102 
00103   Revision 1.14  1999/10/07 13:17:34  midas
00104   Put a few EXPRT im msystem.h to make NT happy, updated NT makefile
00105 
00106   Revision 1.13  1999/10/04 10:37:51  midas
00107   Removed reduced MAX_EVENT_SIZE for VxWorks
00108 
00109   Revision 1.12  1999/06/23 09:59:00  midas
00110   Added dm_task and dm_buffer_time_get
00111 
00112   Revision 1.11  1999/04/30 13:19:53  midas
00113   Changed inter-process communication (ss_resume, bm_notify_clients, etc)
00114   to strings so that server process can receive it's own watchdog produced
00115   messages (pass buffer name insteas buffer handle)
00116 
00117   Revision 1.10  1999/04/30 10:58:20  midas
00118   Added mode to rpc_set_debug
00119 
00120   Revision 1.9  1999/04/29 12:14:49  midas
00121   Made db_notify_clients EXPRT
00122 
00123   Revision 1.8  1999/02/11 13:19:44  midas
00124   Added DR_ASCII
00125 
00126   Revision 1.7  1999/02/09 14:38:54  midas
00127   Added debug logging facility
00128 
00129   Revision 1.6  1999/01/21 23:01:13  pierre
00130   - Change ss_create_thread to ss_thread_create.
00131   - Include VX_TASK_SPAWN struct for ss_thread_create.
00132   - Adjust dm_async_area_read arg for ss_thread_create.
00133 
00134   Revision 1.5  1999/01/20 08:55:43  midas
00135   - Renames ss_xxx_mutex to ss_mutex_xxx
00136   - Added timout flag to ss_mutex_wait_for
00137 
00138   Revision 1.4  1999/01/18 17:28:47  pierre
00139   - Added prototypes for dm_()
00140 
00141   Revision 1.3  1998/10/27 10:54:03  midas
00142   Added ss_shell()
00143 
00144   Revision 1.2  1998/10/12 12:19:01  midas
00145   Added Log tag in header
00146 
00147 
00148 \********************************************************************/
00149 
00150 /* MIDAS library version number. This value is returned by 
00151    cm_get_version and will be incremented whenever changes are done
00152    to the MIDAS library. First digit is major release, second
00153    digit is minor release, third digit is patch level */
00154 
00155 /**dox***************************************************************/
00156 /** @file msystem.h
00157 The Midas System include file
00158 */
00159 
00160 /** @defgroup msystemincludecode The msystem.h & system.c
00161  */
00162 /** @defgroup msdefineh System Define
00163  */
00164 /** @defgroup msmacroh System Macros
00165  */
00166 /** @defgroup mssectionh System Structure Declaration
00167  */
00168 
00169 /**dox***************************************************************/
00170 /** @addtogroup msystemincludecode
00171  *  
00172  *  @{  */
00173 
00174 /**dox***************************************************************/
00175 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00176 
00177 #include "midasinc.h"
00178 
00179 /**dox***************************************************************/
00180 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00181 
00182 /**dox***************************************************************/
00183 /** @addtogroup msdefineh
00184  *  
00185  *  @{  */
00186 
00187 /**
00188 data representations
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 /**dox***************************************************************/
00200 /** @} */ /* end of msdefineh */
00201 
00202 /**dox***************************************************************/
00203 /** @addtogroup msmacroh
00204  *  
00205  *  @{  */
00206 
00207 /* Byte and Word swapping big endian <-> little endian */
00208 /**
00209 SWAP WORD macro */
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 SWAP DWORD macro */
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 SWAP QWORD macro */
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 /**dox***************************************************************/
00242 /** @} */ /* end of msmacroh */
00243 
00244 /**dox***************************************************************/
00245 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00246 
00247 /**
00248 Definition of implementation specific constants */
00249 #define MESSAGE_BUFFER_SIZE    100000   /**< buffer used for messages */
00250 #define MESSAGE_BUFFER_NAME    "SYSMSG" /**< buffer name for messages */
00251 #define MAX_RPC_CONNECTION     64       /**< server/client connections   */
00252 #define MAX_STRING_LENGTH      256      /**< max string length for odb */
00253 #define NET_BUFFER_SIZE        (ALIGN8(MAX_EVENT_SIZE)+sizeof(EVENT_HEADER)+\
00254 4*8 + sizeof(NET_COMMAND_HEADER))
00255 
00256 /*------------------------------------------------------------------*/
00257 /* flag for conditional compilation of debug messages */
00258 #undef  DEBUG_MSG
00259 
00260 /* flag for local routines (not for pure network clients) */
00261 #if !defined ( OS_MSDOS ) && !defined ( OS_VXWORKS )
00262 #define LOCAL_ROUTINES
00263 #endif
00264 
00265 /* YBOS support not in MSDOS */
00266 #if !defined ( OS_MSDOS )
00267 #define YBOS_SUPPORT
00268 #endif
00269 
00270 /*------------------------------------------------------------------*/
00271 
00272 /* Mapping of function names for socket operations */
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                          /* OS_MSDOS */
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                          /* FD_SET */
00303 
00304 #endif                          /* OS_VMS */
00305 
00306 /* Missing #defines in VMS */
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 /* and for UNIX */
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 /* and VXWORKS */
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 /* missing O_BINARY for non-PC */
00346 #ifndef O_BINARY
00347 #define O_BINARY 0
00348 #define O_TEXT   0
00349 #endif
00350 
00351 /* min/max/abs macros */
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 /* missing tell() for some operating systems */
00365 #define TELL(fh) lseek(fh, 0, SEEK_CUR)
00366 
00367 /* reduced shared memory size */
00368 #ifdef OS_SOLARIS
00369 #define MAX_SHM_SIZE      0x20000       /* 128k */
00370 #endif
00371 
00372 /*------------------------------------------------------------------*/
00373 
00374 /* Network structures */
00375 
00376 typedef struct {
00377    DWORD routine_id;            /* routine ID like ID_BM_xxx    */
00378    DWORD param_size;            /* size in Bytes of parameter   */
00379 } NET_COMMAND_HEADER;
00380 
00381 typedef struct {
00382    NET_COMMAND_HEADER header;
00383    char param[32];              /* parameter array              */
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 /* RPC structures */
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];    /*  server name        */
00418    INT port;                    /*  ip port                 */
00419    char exp_name[NAME_LENGTH];  /*  experiment to connect   */
00420    int send_sock;               /*  tcp send socket         */
00421    INT remote_hw_type;          /*  remote hardware type    */
00422    char client_name[NAME_LENGTH];       /* name of remote client    */
00423    INT transport;               /*  RPC_TCP/RPC_FTCP        */
00424    INT rpc_timeout;             /*  in milliseconds         */
00425 
00426 } RPC_CLIENT_CONNECTION;
00427 
00428 typedef struct {
00429    char host_name[HOST_NAME_LENGTH];    /*  server name        */
00430    INT port;                    /*  ip port                 */
00431    char exp_name[NAME_LENGTH];  /*  experiment to connect   */
00432    int send_sock;               /*  tcp send socket         */
00433    int recv_sock;               /*  tcp receive socket      */
00434    int event_sock;              /*  event socket            */
00435    INT remote_hw_type;          /*  remote hardware type    */
00436    INT transport;               /*  RPC_TCP/RPC_FTCP        */
00437    INT rpc_timeout;             /*  in milliseconds         */
00438 
00439 } RPC_SERVER_CONNECTION;
00440 
00441 typedef struct {
00442    INT tid;                     /*  thread id               */
00443    char prog_name[NAME_LENGTH]; /*  client program name     */
00444    char host_name[HOST_NAME_LENGTH];    /*  client name        */
00445    int send_sock;               /*  tcp send socket         */
00446    int recv_sock;               /*  tcp receive socket      */
00447    int event_sock;              /*  tcp event socket        */
00448    INT remote_hw_type;          /*  hardware type           */
00449    INT transport;               /*  RPC_TCP/RPC_FTCP        */
00450    INT watchdog_timeout;        /*  in milliseconds         */
00451    DWORD last_activity;         /*  time of last recv       */
00452    INT convert_flags;           /*  convertion flags        */
00453    char *net_buffer;            /*  TCP cache buffer        */
00454    char *ev_net_buffer;
00455    INT net_buffer_size;         /*  size of TCP cache       */
00456    INT write_ptr, read_ptr, misalign;   /* pointers for cache */
00457    INT ev_write_ptr, ev_read_ptr, ev_misalign;
00458    HNDLE odb_handle;            /*  handle to online datab. */
00459    HNDLE client_handle;         /*  client key handle .     */
00460 
00461 } RPC_SERVER_ACCEPTION;
00462 
00463 /**dox***************************************************************/
00464 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00465 
00466 /**dox***************************************************************/
00467 /** @addtogroup mssectionh
00468  *  
00469  *  @{  */
00470 
00471 typedef struct {
00472    INT size;                          /**< size in bytes              */
00473    INT next_free;                     /**< Address of next free block */
00474 } FREE_DESCRIP;
00475 
00476 typedef struct {
00477    INT handle;                        /**< Handle of record base key  */
00478    WORD access_mode;                  /**< R/W flags                  */
00479    WORD flags;                        /**< Data format, ...           */
00480 
00481 } OPEN_RECORD;
00482 
00483 typedef struct {
00484    char name[NAME_LENGTH];      /* name of client             */
00485    INT pid;                     /* process ID                 */
00486    INT tid;                     /* thread ID                  */
00487    INT thandle;                 /* thread handle              */
00488    INT port;                    /* UDP port for wake up       */
00489    INT num_open_records;        /* number of open records     */
00490    DWORD last_activity;         /* time of last activity      */
00491    DWORD watchdog_timeout;      /* timeout in ms              */
00492    INT max_index;               /* index of last opren record */
00493 
00494    OPEN_RECORD open_record[MAX_OPEN_RECORDS];
00495 
00496 } DATABASE_CLIENT;
00497 
00498 typedef struct {
00499    char name[NAME_LENGTH];      /* name of database           */
00500    INT version;                 /* database version           */
00501    INT num_clients;             /* no of active clients       */
00502    INT max_client_index;        /* index of last client       */
00503    INT key_size;                /* size of key area in bytes  */
00504    INT data_size;               /* size of data area in bytes */
00505    INT root_key;                /* root key offset            */
00506    INT first_free_key;          /* first free key memory      */
00507    INT first_free_data;         /* first free data memory     */
00508 
00509    DATABASE_CLIENT client[MAX_CLIENTS]; /* entries for clients        */
00510 
00511 } DATABASE_HEADER;
00512 
00513 /* Per-process buffer access structure (descriptor) */
00514 
00515 typedef struct {
00516    char name[NAME_LENGTH];      /* Name of database             */
00517    BOOL attached;               /* TRUE if database is attached */
00518    INT client_index;            /* index to CLIENT str. in buf. */
00519    DATABASE_HEADER *database_header;    /* pointer to database header   */
00520    void *database_data;         /* pointer to database data     */
00521    HNDLE mutex;                 /* mutex/semaphore handle       */
00522    INT lock_cnt;                /* flag to avoid multiple locks */
00523    HNDLE shm_handle;            /* handle (id) to shared memory */
00524    INT index;                   /* connection index / tid       */
00525    BOOL protect;                /* read/write protection        */
00526 
00527 } DATABASE;
00528 
00529 /* Open record descriptor */
00530 
00531 typedef struct {
00532    HNDLE handle;                /* Handle of record base key  */
00533    HNDLE hDB;                   /* Handle of record's database */
00534    WORD access_mode;            /* R/W flags                  */
00535    void *data;                  /* Pointer to local data      */
00536    void *copy;                  /* Pointer of copy to data    */
00537    INT buf_size;                /* Record size in bytes       */
00538    void (*dispatcher) (INT, INT, void *);       /* Pointer to dispatcher func. */
00539    void *info;                  /* addtl. info for dispatcher */
00540 
00541 } RECORD_LIST;
00542 
00543 /* Event request descriptor */
00544 
00545 typedef struct {
00546    INT buffer_handle;           /* Buffer handle */
00547    short int event_id;          /* same as in EVENT_HEADER */
00548    short int trigger_mask;
00549    void (*dispatcher) (HNDLE, HNDLE, EVENT_HEADER *, void *);   /* Dispatcher func. */
00550 
00551 } REQUEST_LIST;
00552 
00553 /**dox***************************************************************/
00554 /** @} */ /* end of mssectionh */
00555 
00556 /**dox***************************************************************/
00557 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00558 
00559 /*---- Logging channel information ---------------------------------*/
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 /*---- VxWorks specific taskSpawn arguments ----------------------*/
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 /*---- Channels for ss_suspend_set_dispatch() ----------------------*/
00644 
00645 #define CH_IPC        1
00646 #define CH_CLIENT     2
00647 #define CH_SERVER     3
00648 #define CH_LISTEN     4
00649 
00650 /*---- Function declarations ---------------------------------------*/
00651 
00652 /* make functions callable from a C++ program */
00653 #ifdef __cplusplus
00654 extern "C" {
00655 #endif
00656 
00657 /*---- common function ----*/
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 /*---- buffer manager ----*/
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 /*---- online database ----*/
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 /*---- rpc functions -----*/
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 /*---- system services ----*/
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 /*---- socket routines ----*/
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 /*---- system logging ----*/
00752    INT EXPRT ss_syslog(const char *message);
00753 
00754 /*---- event buffer routines ----*/
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 /*---- dual memory event buffer routines ----*/
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 /*---- Include RPC identifiers -------------------------------------*/
00776 
00777 #include "mrpc.h"
00778 
00779 #ifdef __cplusplus
00780 }
00781 #endif
00782 /**dox***************************************************************/
00783 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00784 
00785 /**dox***************************************************************/
00786 /** @} */ /* end of msystemincludecode */

Midas DOC Version 1.9.3 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Suzannah Daviel - Doxygen - Peter Green - Greg Hackman - Gertjan Hofman - Paul Knowles - Rudi Meier - Glenn Moloney - Dave Morris - John M O'Donnell - Konstantin Olchanski - Renee Poutissou - Andreas Suter - Jan M.Wouters - Piotr Adam Zolnierczuk