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.32  2003/11/24 08:22:45  midas
00011   Changed timeouts from INT to DWORD, added ignore_timeout to cm_cleanup, adde '-f' flag to ODBEdit 'cleanup'
00012 
00013   Revision 1.31  2003/10/16 22:53:57  midas
00014   Changed return values for ss_thread_create to return threadId.
00015   Added ss_thread_kill for killing the passed threadId. (DBM - Triumf)
00016 
00017   Revision 1.30  2003/05/01 18:10:50  midas
00018   Made rpc_client_check() EXPRT
00019 
00020   Revision 1.29  2003/04/25 11:47:17  midas
00021   Added ss_force_single_thread()
00022 
00023   Revision 1.28  2003/04/22 12:00:56  midas
00024   Added rpc_client_check
00025 
00026   Revision 1.27  2003/04/15 08:17:08  midas
00027   Added verbose flag to db_show_mem
00028 
00029   Revision 1.26  2003/04/14 12:59:51  midas
00030   Added 'compression' in channel settings
00031 
00032   Revision 1.25  2003/04/07 23:55:55  olchansk
00033   add c++ wrappers
00034 
00035   Revision 1.24  2002/06/03 06:07:14  midas
00036   Added extra parameter to ss_daemon_init to keep stdout
00037 
00038   Revision 1.23  2002/05/16 18:01:13  midas
00039   Added subdir creation in logger and improved program restart scheme
00040 
00041   Revision 1.22  2002/05/15 23:45:46  midas
00042   Increased number of RPC connections
00043 
00044   Revision 1.21  2001/06/15 09:50:29  midas
00045   Made recv_string EXPRT (for bl_psi.ch)
00046 
00047   Revision 1.20  2000/10/20 19:03:17  pierre
00048   - Added ss_exec(...) for pid return
00049   - Added ss_existpid(...) for pid check
00050 
00051   Revision 1.19  2000/08/21 07:05:47  midas
00052   Added cm_msg_log1(...,facility) to be compatible with older programs
00053 
00054   Revision 1.18  2000/08/11 11:43:50  midas
00055   Added cm_msg1 to produce messages which go to a differnt logging file
00056 
00057   Revision 1.17  1999/12/08 00:34:24  pierre
00058   - EXPRT db_un/lock_database.
00059   - mod dm_buffer_create arg list.
00060 
00061   Revision 1.16  1999/11/09 13:17:00  midas
00062   Changed shared memory function names to ss_shm_xxx instead ss_xxx_shm
00063 
00064   Revision 1.15  1999/10/11 14:16:04  midas
00065   Added ss_daemon_init and ss_system
00066 
00067   Revision 1.14  1999/10/07 13:17:34  midas
00068   Put a few EXPRT im msystem.h to make NT happy, updated NT makefile
00069 
00070   Revision 1.13  1999/10/04 10:37:51  midas
00071   Removed reduced MAX_EVENT_SIZE for VxWorks
00072 
00073   Revision 1.12  1999/06/23 09:59:00  midas
00074   Added dm_task and dm_buffer_time_get
00075 
00076   Revision 1.11  1999/04/30 13:19:53  midas
00077   Changed inter-process communication (ss_resume, bm_notify_clients, etc)
00078   to strings so that server process can receive it's own watchdog produced
00079   messages (pass buffer name insteas buffer handle)
00080 
00081   Revision 1.10  1999/04/30 10:58:20  midas
00082   Added mode to rpc_set_debug
00083 
00084   Revision 1.9  1999/04/29 12:14:49  midas
00085   Made db_notify_clients EXPRT
00086 
00087   Revision 1.8  1999/02/11 13:19:44  midas
00088   Added DR_ASCII
00089 
00090   Revision 1.7  1999/02/09 14:38:54  midas
00091   Added debug logging facility
00092 
00093   Revision 1.6  1999/01/21 23:01:13  pierre
00094   - Change ss_create_thread to ss_thread_create.
00095   - Include VX_TASK_SPAWN struct for ss_thread_create.
00096   - Adjust dm_async_area_read arg for ss_thread_create.
00097 
00098   Revision 1.5  1999/01/20 08:55:43  midas
00099   - Renames ss_xxx_mutex to ss_mutex_xxx
00100   - Added timout flag to ss_mutex_wait_for
00101 
00102   Revision 1.4  1999/01/18 17:28:47  pierre
00103   - Added prototypes for dm_()
00104 
00105   Revision 1.3  1998/10/27 10:54:03  midas
00106   Added ss_shell()
00107 
00108   Revision 1.2  1998/10/12 12:19:01  midas
00109   Added Log tag in header
00110 
00111 
00112 \********************************************************************/
00113 
00114 /* MIDAS library version number. This value is returned by 
00115    cm_get_version and will be incremented whenever changes are done
00116    to the MIDAS library. First digit is major release, second
00117    digit is minor release, third digit is patch level */
00118 
00119 /**dox***************************************************************/
00120 /** @file system.h
00121 The Midas System include file
00122 */
00123 
00124 /** @defgroup msystemincludecode The msystem.h & system.c
00125  */
00126 /** @defgroup msdefineh System #define
00127  */
00128 /** @defgroup msmacroh System Macros
00129  */
00130 /** @defgroup mssectionh System Structure Declaration
00131  */
00132 
00133 /**dox***************************************************************/
00134 /** @addtogroup msystemincludecode
00135  *  
00136  *  @{  */
00137 
00138 /**dox***************************************************************/
00139 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00140 
00141 #include "midasinc.h"
00142 
00143 /**dox***************************************************************/
00144 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00145 
00146 /**dox***************************************************************/
00147 /** @addtogroup msdefineh
00148  *  
00149  *  @{  */
00150 
00151 /**
00152 data representations
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 /**dox***************************************************************/
00164 /** @} */ // end of msdefineh
00165 
00166 /**dox***************************************************************/
00167 /** @addtogroup msmacroh
00168  *  
00169  *  @{  */
00170 
00171 /* Byte and Word swapping big endian <-> little endian */
00172 /**
00173 SWAP WORD macro */
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 SWAP DWORD macro */
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 SWAP QWORD macro */
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 /**dox***************************************************************/
00206 /** @} */ // end of msmacroh
00207 
00208 /**dox***************************************************************/
00209 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00210 
00211 /**
00212 Definition of implementation specific constants */
00213 #define MESSAGE_BUFFER_SIZE    100000   /**< buffer used for messages */
00214 #define MESSAGE_BUFFER_NAME    "SYSMSG" /**< buffer name for messages */
00215 #define MAX_RPC_CONNECTION     25       /**< server/client connections   */
00216 #define MAX_STRING_LENGTH      256      /**< max string length for odb */
00217 #define NET_BUFFER_SIZE        (ALIGN(MAX_EVENT_SIZE)+sizeof(EVENT_HEADER)+\
00218 4*8 + sizeof(NET_COMMAND_HEADER))
00219 
00220 /*------------------------------------------------------------------*/
00221 /* flag for conditional compilation of debug messages */
00222 #undef  DEBUG_MSG
00223 
00224 /* flag for local routines (not for pure network clients) */
00225 #if !defined ( OS_MSDOS ) && !defined ( OS_VXWORKS )
00226 #define LOCAL_ROUTINES
00227 #endif
00228 
00229 /* YBOS support not in MSDOS */
00230 #if !defined ( OS_MSDOS )
00231 #define YBOS_SUPPORT
00232 #endif
00233 
00234 /*------------------------------------------------------------------*/
00235 
00236 /* Mapping of function names for socket operations */
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 /* OS_MSDOS */
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 /* FD_SET */
00267 
00268 #endif /* OS_VMS */
00269 
00270 /* Missing #defines in VMS */
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 /* and for UNIX */
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 /* and VXWORKS */
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 /* missing O_BINARY for non-PC */
00310 #ifndef O_BINARY
00311 #define O_BINARY 0
00312 #define O_TEXT   0
00313 #endif
00314 
00315 /* min/max/abs macros */
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 /* missing tell() for some operating systems */
00329 #define TELL(fh) lseek(fh, 0, SEEK_CUR)
00330 
00331 /* reduced shared memory size */
00332 #ifdef OS_SOLARIS
00333 #define MAX_SHM_SIZE      0x20000 /* 128k */
00334 #endif
00335 
00336 /*------------------------------------------------------------------*/
00337 
00338 /* Network structures */
00339 
00340 typedef struct {
00341   DWORD              routine_id;    /* routine ID like ID_BM_xxx    */
00342   DWORD              param_size;    /* size in Bytes of parameter   */
00343 } NET_COMMAND_HEADER;
00344 
00345 typedef struct {
00346   NET_COMMAND_HEADER header;
00347   char               param[32];     /* parameter array              */
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 /* RPC structures */
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];  /*  server name        */
00382   INT  port;                    /*  ip port                 */
00383   char exp_name[NAME_LENGTH];   /*  experiment to connect   */
00384   int  send_sock;               /*  tcp send socket         */
00385   INT  remote_hw_type;          /*  remote hardware type    */
00386   char client_name[NAME_LENGTH];/* name of remote client    */
00387   INT  transport;               /*  RPC_TCP/RPC_FTCP        */
00388   INT  rpc_timeout;             /*  in milliseconds         */
00389 
00390 } RPC_CLIENT_CONNECTION;
00391 
00392 typedef struct {                
00393   char host_name[HOST_NAME_LENGTH];  /*  server name        */
00394   INT  port;                    /*  ip port                 */
00395   char exp_name[NAME_LENGTH];   /*  experiment to connect   */
00396   int  send_sock;               /*  tcp send socket         */
00397   int  recv_sock;               /*  tcp receive socket      */
00398   int  event_sock;              /*  event socket            */
00399   INT  remote_hw_type;          /*  remote hardware type    */
00400   INT  transport;               /*  RPC_TCP/RPC_FTCP        */
00401   INT  rpc_timeout;             /*  in milliseconds         */
00402 
00403 } RPC_SERVER_CONNECTION;
00404 
00405 typedef struct {
00406   INT  tid;                     /*  thread id               */
00407   char prog_name[NAME_LENGTH];  /*  client program name     */
00408   char host_name[HOST_NAME_LENGTH];  /*  client name        */
00409   int  send_sock;               /*  tcp send socket         */
00410   int  recv_sock;               /*  tcp receive socket      */
00411   int  event_sock;              /*  tcp event socket        */
00412   INT  remote_hw_type;          /*  hardware type           */
00413   INT  transport;               /*  RPC_TCP/RPC_FTCP        */
00414   INT  watchdog_timeout;        /*  in milliseconds         */
00415   DWORD last_activity;          /*  time of last recv       */
00416   INT  convert_flags;           /*  convertion flags        */
00417   char *net_buffer;             /*  TCP cache buffer        */
00418   char *ev_net_buffer;
00419   INT  net_buffer_size;         /*  size of TCP cache       */
00420   INT  write_ptr, read_ptr, misalign; /* pointers for cache */
00421   INT  ev_write_ptr, ev_read_ptr, ev_misalign;
00422   HNDLE odb_handle;             /*  handle to online datab. */
00423   HNDLE client_handle;          /*  client key handle .     */
00424 
00425 } RPC_SERVER_ACCEPTION;
00426 
00427 /**dox***************************************************************/
00428 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00429 
00430 /**dox***************************************************************/
00431 /** @addtogroup mssectionh
00432  *  
00433  *  @{  */
00434 
00435 typedef struct {
00436   INT           size;                 /**< size in bytes              */
00437   INT           next_free;            /**< Address of next free block */
00438 } FREE_DESCRIP;
00439 
00440 typedef struct {
00441   INT           handle;               /**< Handle of record base key  */
00442   WORD          access_mode;          /**< R/W flags                  */
00443   WORD          flags;                /**< Data format, ...           */
00444 
00445 } OPEN_RECORD;
00446 
00447 typedef struct {
00448   char          name[NAME_LENGTH];    /* name of client             */
00449   INT           pid;                  /* process ID                 */
00450   INT           tid;                  /* thread ID                  */
00451   INT           thandle;              /* thread handle              */
00452   INT           port;                 /* UDP port for wake up       */
00453   INT           num_open_records;     /* number of open records     */
00454   DWORD         last_activity;        /* time of last activity      */
00455   DWORD         watchdog_timeout;     /* timeout in ms              */
00456   INT           max_index;            /* index of last opren record */
00457 
00458   OPEN_RECORD   open_record[MAX_OPEN_RECORDS];
00459 
00460 } DATABASE_CLIENT;
00461 
00462 typedef struct {
00463   char          name[NAME_LENGTH];    /* name of database           */
00464   INT           num_clients;          /* no of active clients       */
00465   INT           max_client_index;     /* index of last client       */
00466   INT           key_size;             /* size of key area in bytes  */
00467   INT           data_size;            /* size of data area in bytes */
00468   INT           root_key;             /* root key offset            */
00469   INT           first_free_key;       /* first free key memory      */
00470   INT           first_free_data;      /* first free data memory     */
00471 
00472   DATABASE_CLIENT client[MAX_CLIENTS];/* entries for clients        */
00473 
00474 } DATABASE_HEADER;
00475 
00476 /* Per-process buffer access structure (descriptor) */
00477 
00478 typedef struct {
00479   char          name[NAME_LENGTH];  /* Name of database             */
00480   BOOL          attached;           /* TRUE if database is attached */
00481   INT           client_index;       /* index to CLIENT str. in buf. */
00482   DATABASE_HEADER *database_header; /* pointer to database header   */
00483   void          *database_data;     /* pointer to database data     */
00484   HNDLE         mutex;              /* mutex/semaphore handle       */
00485   INT           lock_cnt;           /* flag to avoid multiple locks */
00486   HNDLE         shm_handle;         /* handle (id) to shared memory */
00487   INT           index;              /* connection index / tid       */
00488   BOOL          protect;            /* read/write protection        */
00489 
00490 } DATABASE;
00491 
00492 /* Open record descriptor */
00493 
00494 typedef struct {
00495   HNDLE         handle;               /* Handle of record base key  */
00496   HNDLE         hDB;                  /* Handle of record's database*/
00497   WORD          access_mode;          /* R/W flags                  */
00498   void          *data;                /* Pointer to local data      */
00499   void          *copy;                /* Pointer of copy to data    */
00500   INT           buf_size;             /* Record size in bytes       */
00501   void          (*dispatcher)(INT,INT,void*);  /* Pointer to dispatcher func.*/
00502   void          *info;                /* addtl. info for dispatcher */
00503 
00504 } RECORD_LIST;
00505 
00506 /* Event request descriptor */
00507 
00508 typedef struct {
00509   INT           buffer_handle;                      /* Buffer handle */
00510   short int     event_id;                 /* same as in EVENT_HEADER */
00511   short int     trigger_mask;
00512   void          (*dispatcher)(HNDLE,HNDLE,EVENT_HEADER*,void*); /* Dispatcher func.*/
00513 
00514 } REQUEST_LIST;
00515 
00516 /**dox***************************************************************/
00517 /** @} */ // end of mssectionh
00518 
00519 /**dox***************************************************************/
00520 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00521 
00522 /*---- Logging channel information ---------------------------------*/
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 /*---- VxWorks specific taskSpawn arguments ----------------------*/
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 /*---- Channels for ss_suspend_set_dispatch() ----------------------*/
00607 
00608 #define CH_IPC        1
00609 #define CH_CLIENT     2
00610 #define CH_SERVER     3
00611 #define CH_LISTEN     4
00612 
00613 /*---- Function declarations ---------------------------------------*/
00614 
00615 /* make functions callable from a C++ program */
00616 #ifdef __cplusplus
00617 extern "C" {
00618 #endif
00619 
00620 /*---- common function ----*/
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 /*---- buffer manager ----*/
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 /*---- online database ----*/
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 /*---- rpc functions -----*/
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 /*---- system services ----*/
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 /*---- socket routines ----*/
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 /*---- system logging ----*/
00712 INT EXPRT ss_syslog(const char *message);
00713 
00714 /*---- event buffer routines ----*/
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 /*---- dual memory event buffer routines ----*/
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 /*---- Include RPC identifiers -------------------------------------*/
00736 
00737 #include "mrpc.h"
00738 
00739 #ifdef __cplusplus
00740 }
00741 #endif
00742 
00743 /**dox***************************************************************/
00744 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00745 
00746 /**dox***************************************************************/
00747 /** @} */ // 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 - Konstantin Olchanski - Renee Poutissou - Andreas Suter - Piotr Adam Zolnierczuk