/*
 * Copyright 2000, International Business Machines Corporation and others.
 * All Rights Reserved.
 * 
 * This software has been released under the terms of the IBM Public
 * License.  For details, see the LICENSE file in the top-level source
 * directory or online at http://www.openafs.org/dl/license10.html
 */

#ifndef OPENAFS_CFG_INTERNAL_H
#define OPENAFS_CFG_INTERNAL_H

/* Define types, macros, etc., internal to the configuration library */

typedef struct {
    int begin_magic;		/* begin and end magic help validate cfg handle */
    int is_valid;		/* true if cfg handle is valid */
    char *hostName;		/* name of host being configured */
    int is_local;		/* true if hostName specifies the local host */
    void *cellHandle;		/* cell handle establishing working cell */
    const char *cellName;	/* cell name in cell handle */
    pthread_mutex_t mutex;	/* protects bosHandle initialization */
    void *bosHandle;		/* handle for bosserver on host */
    int end_magic;
} cfg_host_t, *cfg_host_p;


/* Declare utility functions internal to the configuration library */

extern int
  cfgutil_HostHandleValidate(const cfg_host_p cfg_host, afs_status_p st);

extern int
  cfgutil_HostHandleBosInit(cfg_host_p cfg_host, afs_status_p st);

extern int
  cfgutil_HostHandleCellNameCompatible(const cfg_host_p cfg_host,
				       const char *cellName);

extern int
  cfgutil_HostNameGetFull(const char *hostName, char *fullHostName,
			  afs_status_p st);

extern int
  cfgutil_HostNameIsAlias(const char *hostName1, const char *hostName2,
			  short *isAlias, afs_status_p st);

extern int
  cfgutil_HostNameIsLocal(const char *hostName, short *isLocal,
			  afs_status_p st);

extern int
  cfgutil_HostNameGetCellServDbAlias(const char *fsDbHost,
				     const char *hostName,
				     char *hostNameAlias, afs_status_p st);

extern int
  cfgutil_HostNameGetAddressString(const char *hostName,
				   const char **hostAddr, afs_status_p st);

extern int
  cfgutil_HostAddressFetchAll(const char *hostName, int *addrCount,
			      afs_int32 ** addrList, afs_status_p st);

extern int
  cfgutil_HostAddressIsValid(const char *hostName, int hostAddr,
			     short *isValid, afs_status_p st);

extern int
  cfgutil_CleanDirectory(const char *dirName, afs_status_p st);

extern int
  cfgutil_HostSetNoAuthFlag(const cfg_host_p cfg_host, short noAuth,
			    afs_status_p st);

extern void
  cfgutil_Sleep(unsigned sec);


#ifdef AFS_NT40_ENV
/* Service control functions */

extern int
  cfgutil_WindowsServiceStart(LPCTSTR svcName, DWORD svcArgc,
			      LPCTSTR * svcArgv, unsigned timeout,
			      short *wasRunning, afs_status_p st);

extern int
  cfgutil_WindowsServiceStop(LPCTSTR svcName, unsigned timeout,
			     short *wasStopped, afs_status_p st);

extern int
  cfgutil_WindowsServiceQuery(LPCTSTR svcName, DWORD * svcState,
			      afs_status_p st);
#endif /* AFS_NT40_ENV */

#endif /* OPENAFS_CFG_INTERNAL_H */
