#ifdef RCSID
static char *RCSid =
   "$Header: oaos.h,v 2.5 97/03/04 15:20:21 nakumar: Stab $ ";
#endif /* RCSID */

/*----------------------------------------------------------------------------\
|  Copyright (c) 1991 by ORACLE Corporation.  All Rights Reserved.            |
\----------------------------------------------------------------------------*/


/*
NAME
  oaos.h	-- Oracle Office Start/Stop header file
PURPOSE
  Facility to start and stop Oracle Office configured processes.
PUBLIC FUNCTIONS:
  oaos		-- Oracle Office Start/Stop routine
  oaospa	-- parse command line arguments
  oaospr	-- prompt user for password
  oaosset	-- generate arguments for spawning child process
  oaoscmp	-- Oracle Office Start/Stop CoMPare argument
  oaosimh	-- Oracle Office Start/Stop Init Message Handler
  oaosdin	-- Daemon INitialize
  oaosdgl	-- get daemon list param (from ds_proc_params table)
  oaosdgp	-- get daemon param (from oo_proc_params table)
  oaosdap	-- check for daemon Active or Passive
  oaoscnt       -- count active agents for current class
  oaosdts	-- daemon TimeStamp
  oaosdps	-- daemon process status
  oaosgns	-- get node state
NOTES

MODIFIED
    nakumar    03/04/97 -  Change OAOS_STRING_SIZE from 60 to 256 
    ewinner    10/09/96 -  core3 upgrade 
    pruel      11/16/94 -  Adding `verbose' and `remote' to command line. 
    mcheng     10/24/94 -  Add prototype for oaosdgl 
    yliu       07/31/94 -  add oacm.h 
    nakumar    05/25/93 -  Remove include of hstdef.h 
    mklein     01/26/93 -  add oaoscnt() function 
    bhaghigh   11/30/92 -  Simplified oaos() interface. 
    bhaghigh   09/23/92 -  Change dat_t to ldx_t. 
    bhaghigh   09/18/92 -  Added oaosdps(). 
    bhaghigh   92/04/13 -  Converted lcx to oaxm.
			   Renamed members of oaoscx structure for olint.
    bhaghigh   92/03/17 -  Changed state_oaoscx from sb4 to ub4.
			   Removed node state defines.
  bhaghigh	03/11/92 - added oaosgns to get broadcast msg for UIs.
  bhaghigh	02/26/92 - reworked oaos() interface to allow broadcast.
  bhaghigh	02/07/92 - added include hstdef.h.
  bhaghigh	12/20/91 - added oaoscx, oaosdin, oaosdgp, oaosdap, oaosdts.
  bhaghigh	12/05/91 - added oaoscmp, oaosimh.
			   changed oaos and oaosa for integration with admin.
  bhaghigh	12/03/91 - changed ooss prefix to oaos.
  bhaghigh	10/30/91 - created
*/




#ifndef OAOS
#define OAOS

#ifndef S
#include <s.h>
#endif

#ifndef OAXM
#include <oaxm.h>
#endif 

#ifndef LDX
#include <ldx.h>
#endif 

#ifndef OAMH
#include <oamh.h>
#endif 

#ifndef OACM
#include <oacm.h>
#endif



#define OAOS_STRING_SIZE	256		/* size of string parameters */


struct oaosa		            /* attribute structure for parse routine */
{
    ub4		imask_oaosa;	    /* flags indicating allowable attributes,
				       set by caller */
    ub4		omask_oaosa;	    /* flags indicating specified attributes,
				       set by parse routine */
#define OAOSA_SPAWNED	(ub4)0X0001
#define OAOSA_CLASS	(ub4)0x0002
#define OAOSA_INSTANCE	(ub4)0x0004
#define OAOSA_PASSWORD	(ub4)0x0008
#define OAOSA_CONNECT	(ub4)0x0010
#define OAOSA_ACTION	(ub4)0x0020
#define OAOSA_MODE	(ub4)0x0040
#define OAOSA_FACILITY	(ub4)0x0080
#define OAOSA_FLAGS	(ub4)0x0100
#define OAOSA_REMOTE	(ub4)0x0200
#define OAOSA_VERBOSE	(ub4)0x0400
    ub4		ign_oaosa; /* bit array set for unparsed parms in argv[0-31] */
    ub1		erridx_oaosa;	 /* first argv index where parse failed or 0 */
    ub1		pwdidx_oaosa;	      /* 1-relative index of password arg,
					 to be used as argument to siutli()  */
    ub1		spawned_oaosa;				   /* spawned=yes|no */
    ub1		verbose_oaosa;				   /* verbose=yes|no */
    sword	class_oaosa;				     /* class=number */
    sword	instance_oaosa;				  /* instance=number */
    text	password_oaosa[OAOS_STRING_SIZE];	  /* password=string */
    text	connect_oaosa[OAOS_STRING_SIZE];	   /* connect=string */
    text	action_oaosa[OAOS_STRING_SIZE];		    /* action=string */
    text	mode_oaosa[OAOS_STRING_SIZE];		      /* mode=string */
    text	facility_oaosa[OAOS_STRING_SIZE];	  /* facility=string */
    text	flags_oaosa[OAOS_STRING_SIZE];		     /* flags=string */
    text	remote_oaosa[OAOS_STRING_SIZE];		    /* remote=string */
};
typedef struct oaosa oaosa;


struct oaoscx			      /* context for daemon management calls */
{
    sword	class_oaoscx;		/* daemon class id */
    sword	instance_oaoscx;	/* daemon instance id */
    ub4		state_oaoscx;		/* om_cur_node.state (see below) */
    sb4		runindex_oaoscx;	/* om_cur_node.run_index */
    sb4		debug_oaoscx;		/* om_cur_node.debug */
    sword	starttime_oaoscx;	/* oo_proc_time.start_time (0..23)*/
    sword	duration_oaoscx;	/* oo_proc_time.duration (hours) */
    sword	remaintime_oaoscx;	/* minutes till start of next period */
    text	runflag_oaoscx;		/* oo_proc_time.run_flag */
    sb4		sleeptime_oaoscx;	/* oo_proc_time.sleep_time (mins) */
    text	infoflag_oaoscx[241];	/* oo_proc_time.info_flag */
};
typedef struct oaoscx oaoscx;


/*--------------------------------- oaos ------------------------------------*/
/*
  NAME
    oaos	-- Oracle Office Start/Stop
  FUNCTION
    Start/Stop Oracle Office configured processes.
    Pass the empty string "" for unspecified values (not null pointers).
  ARGUMENTS
    ctx		-- oaxm context pointer
    hst		-- hstdef pointer
    password	-- daemon password
    connect	-- connect string
    flags	-- string, TBD
  RETURNS
    OA_SUCC	-- success
    > 0		-- SQL errors
    < 0 	-- see below
*/

/* local errors returned */
#define OAOS_ENOMEM		-4			    /* malloc failed */
#define OAOS_EIMH		-5	    /* failed to access message file */
#define OAOS_ESPAWN		-6		  /* error spawning guardian */
#define OAOS_ETIMEOUT		-7			 /* guardian timeout */

sword oaos(/*_ oaxmctx *ctx, struct hstdef *hst, text *password, text *connect,
	       text *flags _*/);

/*--------------------------------- oaos2 -----------------------------------*/
/*
  NAME
    oaos2	-- Oracle Office Start/Stop for 2.1 release
*/
sword oaos2(/*_ oaxmctx *ctx, struct hstdef *hst, text *password, 
                text *connect, text *flags _*/);

/*--------------------------------- oaospa ----------------------------------*/
/*
  NAME
    oaospa	-- Oracle Office Start/Stop Parse Arguments
  FUNCTION
    Parse arguments for Oracle Office daemon processes using oapapa.
    Set imask_oaosa to indicate which arguments you're interested in.
    Upon return, omask_oaosa will indicate which ones were specified,
		 ign_oaosa is a bit array that indicates argv's that
			   were unrecognized or ignored,
		 erridx_oaosa is index of first argv that bombed,
		 pwdidx_oaosa is to be passed to siutli for hiding password,
		 all others either contain valid data or zero.
  ARGUMENTS
    ctx		-- oaxm context pointer
    attr	-- attribute structure where parsed arguments are returned
    argc	-- count of process arguments to be parsed
    argv	-- process arguments to be parsed
  RETURNS
    OA_SUCC	-- all arguments parsed successfuly
    OA_WARN	-- some arguments did not parse
    other	-- oapapa or other error code
*/
sword oaospa(/*_ oaxmctx *ctx, oaosa *attr, eword argc, text **argv _*/);


/*--------------------------------- oaospr ----------------------------------*/
/*
  NAME
    oaospr	-- Oracle Office Start/Stop Prompt user
  FUNCTION
    Prompt user for arguments (currently for password only).
    Turns off echo for password.
  ARGUMENTS
    ctx		-- oaxm context pointer
    attr	-- attribute structure arguments are returned
  RETURNS
    OA_SUCC
*/
sword oaospr(/*_ oaxmctx *ctx, oaosa *attr _*/);


/*--------------------------------- oaosset ---------------------------------*/
/*
  NAME
    oaosset	-- Oracle Office Start/Stop Set arguments
  FUNCTION
    Generate argc/argv for spawning child processes based on attr.
    Used by start/stop and guardian.
  ARGUMENTS
    ctx		-- oaxm context pointer
    argc	-- input/output parameter counting arguments passed
    argv	-- input/output parameter holding passed arguments
    class       -- daemon class
    instance    -- deamon instance
    password    -- deamon password
    connect     -- connect string
    flags       -- string
  RETURNS

*/
sword oaosset(/*_ oaxmctx *ctx, eword *argc, text **argv, sword class,
	   sword instance, text *password, text *connect, text *flags _*/);


/*--------------------------------- oaoscmp ---------------------------------*/
/*
  NAME
    oaoscmp	-- Oracle Office Start/Stop CoMPare argument
  FUNCTION
    Check a string against a range of messages for a match.
    As a side effect, str is converted to uppercase!
  ARGUMENTS
    ctx		-- oaxm context pointer
    str		-- string to be compared
    minmsg	-- range start
    maxmsg	-- range end
    def	        -- returned when str is empty
  RETURNS
    OA_FAIL	-- no match
    match	-- otherwise
*/
sword oaoscmp(/*_ oaxmctx *ctx, text *str, sword minmsg, sword maxmsg,
		  sword def _*/);


/*------------------------------ oaosimh ------------------------------------*/
/*
  NAME
    oaosimh	-- Oracle Office Start/Stop Init Message Handler
  FUNCTION
    Initialize oamh and add OA product if necessary.
  ARGUMENTS
    ctx		-- oaxm context pointer
  RETURNS
    (oamh *)	-- success
    NULLP(oamh) -- In case of oamh errors.
*/

oamh *oaosimh(/*_ oaxmctx *ctx _*/);


/*------------------------------ oaosdin ------------------------------------*/
/*
  NAME
    oaosdin	-- Daemon INitialize
  FUNCTION
    Initializes context and checks node state to determine if daemon should
    run or exit.  The following fields in the context are updated:
	class_oaoscx
	instance_oaoscx
	state_oaoscx
	run_index_oaoscx
	debug_oaoscx
  ARGUMENTS
    hst		-- hostdef structure
    ctx		-- pointer to context structure allocated by caller
    class	-- daemon class id
    instance	-- daemon instance id
  RETURNS
    OA_SUCC	-- success, state=running
    OA_WARN	-- warning, state=shutdown, shuting down, or single user mode
    otherwise	-- SQL error code
*/

sword oaosdin(/*_ struct hstdef *hst, oaoscx *ctx, sword class, 
			sword instance _*/);


/*------------------------------ oaosdgp ------------------------------------*/
/*
  NAME
    oaosdgp	-- get daemon param (from oo_proc_params table)
  FUNCTION
    Get the value for the specified token from database tables.
    Date types returned in Oracle SQLT_DAT Date format.
    Zero is returned for a null number.
  ARGUMENTS
    hst		-- hostdef structure
    ctx		-- oaoscx context
    token_id	-- token id of desired parameter
    token_type	-- type of desired parameter
    ptr		-- ptr to caller buffer area of appropriate type:
		   sb4 for number, text[256] for char, ldx_t[LDXSIZ] for date
  RETURNS
    OA_SUCC	-- success
    otherwise	-- SQL error code
*/

#define OAOS_NUMBER_TYPE	1
#define OAOS_CHAR_TYPE		2
#define OAOS_DATE_TYPE		3

sword oaosdgp(/*_ struct hstdef *hst, oaoscx *ctx,
		  eword token_id, eword token_type, dvoid *ptr _*/);


/*------------------------------ oaosdgl ------------------------------------*/
/*
  NAME
    oaosdgl	-- get daemon list param (from ds_proc_params table)
  FUNCTION
    Get the values for the specified token from database tables.
    Date types returned in Oracle SQLT_DAT Date format.  
    Zero is returned for a null number.
    Space will be allocated for all the values and should be freed by the 
    caller.
  ARGUMENTS
    hst		-- hostdef structure
    ctx		-- oaoscx context
    token_id	-- token id of desired parameter
    token_type	-- type of desired parameter
    ptr		-- ptr to caller buffer area of appropriate type returned by
                   routine.  (sb4 for number, text[256] for char, 
		   dat_t[ODTSIZ] for date)
    nelm	-- number of elements in buffer area
  RETURNS
    OA_SUCC	-- success
    otherwise	-- SQL error code
*/

#define OAOS_NUMLST_TYPE	11
#define OAOS_STRLST_TYPE	12
#define OAOS_DATLST_TYPE	13

sword oaosdgl( /*_ struct hstdef *hst, oaoscx *ctx, uword tkid, uword tktype, 
		   dvoid **ptr, ub4 *nelm _*/ );

/*------------------------------ oaosdap ------------------------------------*/
/*
  NAME
    oaosdap	-- check for daemon Active or Passive
  FUNCTION
    Updates the following fields in the context structure:
	state_oaoscx
	run_index_oaoscx
	debug_oaoscx
	start_time_oaoscx
	duration_oaoscx
	remain_time_oaoscx
	run_flag_oaoscx
	sleep_time_oaoscx
	info_flag_oaoscx
    Checks for a change in system state or run index, in which case
    OA_WARN is returned and daemon should exit.

    Generally, sleeping time used should be sleep_time_oaoscx if active
    (run_flag_oaoscx == 'A'), and remain_time_oaoscx if passive.
  ARGUMENTS
    hst		-- hostdef structure
    ctx		-- oaoscx context
  RETURNS
    OA_SUCC	-- success
    OA_WARN	-- warning, system shutdown or restarted
    otherwise	-- SQL error code
*/

sword oaosdap(/*_ struct hstdef *hst, oaoscx *ctx _*/);

/*------------------------------ oaoscnt ------------------------------------*/
/*
  NAME
    oaoscnt	-- CouNT active agents of a given class
  FUNCTION
    This returns the number of agents (instances) of the class of the current
    agent which are currently in the "active" state.

  ARGUMENTS
    hst		-- hostdef structure
    ctx		-- oaoscx context
    cnt         -- returned agent count
  RETURNS
    OA_SUCC	-- success
    OA_WARN	-- warning, system shutdown or restarted
    otherwise	-- SQL error code
*/

sword oaoscnt(/*_ struct hstdef *hst, oaoscx *ctx, eword *cnt _*/);

/*------------------------------ oaosdts ------------------------------------*/
/*
  NAME
    oaosdts	-- daemon TimeStamp
  FUNCTION
    Update the last_wake_time or last_sleep_time of oo_process record and
    performs a commit.
  ARGUMENTS
    hst		-- hostdef structure
    ctx		-- oaoscx context
    wake	-- TRUE/FALSE
  RETURNS
    OA_SUCC	-- success
    otherwise	-- SQL error code
*/

sword oaosdts(/*_ struct hstdef *hst, oaoscx *ctx, boolean wake _*/);


/*------------------------------ oaosgns ------------------------------------*/
/*
  NAME
    oaosgns	-- get node state
  FUNCTION
    Get the node state, timestamp, and broadcast message.
  ARGUMENTS
    hst		-- hostdef structure
    timestamp	-- buffer for timestamp of broadcast message (size LDXTSIZ)
    broadcast	-- buffer for broadcast message (size 256)
  RETURNS
    OA_FTL	-- node shutdown, display message and exit
    OA_SUCC	-- success
    otherwise	-- SQL error code
*/

sword oaosgns(/*_ struct hstdef *hst, ldx_t *timestamp, text *broadcast _*/);


/*------------------------------ oaosdps ------------------------------------*/
/*
  NAME
    oaosdps	-- daemon process status
  FUNCTION
    Get process status information for configured daemons.
    Date types returned in Oracle SQLT_DAT Date format.
    Zero is returned for a null number.
  ARGUMENTS
    hst		-- hostdef structure
    callp	-- callback function provided by caller
    callc	-- context for callback function
  RETURNS
    OA_SUCC	-- success
    otherwise	-- SQL error code
*/

sword oaosdps(/*_ struct hstdef *hst,
		  void (*callp)(
		      dvoid *callc, text *classname,
		      sword classid, sword instanceid, ub4 processstate,
		      ldx_t *lastwake, ldx_t *lastsleep,
		      text *osprocid, ub4 dbsessid),
		  dvoid *callc _*/);


#endif /* OAOS */
