/*      -*- linux-c -*-
 *
 * (C) Copyright IBM Corp. 2003-2006
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This
 * file and program are licensed under a BSD style license.  See
 * the Copying file included with the OpenHPI distribution for
 * full licensing terms.
 *
 * Authors:
 *     Sean Dague <http://dague.net/sean>
 *     Renier Morales <renier@openhpi.org>
 *     Bryan Sutula <sutula@users.sourceforge.net>
 */

#ifndef __OH_CONFIG_H
#define __OH_CONFIG_H

#include <glib.h>
#include <SaHpi.h>
#include <oh_utils.h>

#ifdef __cplusplus
extern "C" {
#endif

struct oh_parsed_config {
        GSList *handler_configs;
        guint handlers_defined;
        guint handlers_loaded;
};

typedef enum {
        OPENHPI_ON_EP = 1,
        OPENHPI_LOG_ON_SEV,
        OPENHPI_EVT_QUEUE_LIMIT,
        OPENHPI_DEL_SIZE_LIMIT,
        OPENHPI_DEL_SAVE,
        OPENHPI_DAT_SIZE_LIMIT,
        OPENHPI_DAT_USER_LIMIT,
	OPENHPI_DAT_SAVE,
        OPENHPI_PATH,
        OPENHPI_VARPATH,
        OPENHPI_CONF, 
	OPENHPI_UNCONFIGURED,
        OPENHPI_AUTOINSERT_TIMEOUT,
        OPENHPI_AUTOINSERT_TIMEOUT_READONLY
} oh_global_param_type;

typedef union {
        SaHpiEntityPathT on_ep;
        SaHpiSeverityT log_on_sev;
        SaHpiUint32T evt_queue_limit;
        SaHpiUint32T del_size_limit;
        SaHpiBoolT del_save;
        SaHpiUint32T dat_size_limit;
        SaHpiUint32T dat_user_limit;
	SaHpiBoolT dat_save;
        char path[OH_MAX_TEXT_BUFFER_LENGTH];
        char varpath[OH_MAX_TEXT_BUFFER_LENGTH];
        char conf[OH_MAX_TEXT_BUFFER_LENGTH];
	SaHpiBoolT unconfigured;
        SaHpiTimeoutT ai_timeout;
        SaHpiBoolT ai_timeout_readonly;
} oh_global_param_union;

struct oh_global_param {
        oh_global_param_type type;
        oh_global_param_union u;
};

/* Plugin configuration information prototypes */
int oh_load_config(char *filename, struct oh_parsed_config *config);
SaErrorT oh_process_config(struct oh_parsed_config *config);
void oh_clean_config(struct oh_parsed_config *config);

/* For handling global parameters */
int oh_get_global_param(struct oh_global_param *param);
int oh_get_global_param2(oh_global_param_type type, struct oh_global_param *param);
int oh_set_global_param(const struct oh_global_param *param);

#ifdef __cplusplus
}
#endif

#endif/*__OH_CONFIG_H*/
