OpenSolaris_b135/cmd/mms/mm/common/mm_util.h

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_MM_UTIL_H
#define	_MM_UTIL_H


/*
 * Parser command xml text file line callback structure
 */
typedef struct mm_cb_file mm_cb_file_t;
struct mm_cb_file {		/* parser file callback */
	FILE		 *mm_cbf_fp;
	char		 *mm_cbf_buf;
	int		  mm_cbf_len;
	int		  mm_cbf_index;
	int		  mm_cbf_size;
	mms_par_node_t	**mm_cbf_node;
};

/*
 * Enumerated response string
 */
typedef enum mm_response_type mm_response_type_t;
enum mm_response_type {
	MM_RESPONSE_SUCCESS,
	MM_RESPONSE_ACCEPTED,
	MM_RESPONSE_UNACCEPTABLE,
	MM_RESPONSE_CANCELLED,
	MM_RESPONSE_ERROR
};

/*
 * Response parse tree pointers
 */
typedef struct mm_response mm_response_t;
struct mm_response {
	char			*response_string;
	mm_response_type_t	 response_type;
	char			*error_class;
	char			*error_code;
};


typedef struct mm_char_list mm_char_list_t;
struct mm_char_list {
	mms_list_node_t		mm_char_list_next;
	char			*text;
	int			number;
};

/*
 * MM, MMP, DMP, LMP routines
 */
extern void	 mm_get_uuid(uuid_text_t uuid);
extern int	 mm_is_fd_valid(int fd);
extern int	 mm_set_fd_limit(int fd_limit);
extern void	 mm_input(char *buf, int *result, int max, void *callback);
extern void	 mm_input_file(char *buf, int *result, void *callback);
extern char	*mm_parse_error(mms_list_t *err_list);
extern mms_par_node_t *mm_text_to_par_node(char *buf, parser_func_t parse_func);
extern void	 mm_send_text(mms_t *conn, char *buf);
extern void	 mm_send_text_si(mms_t *conn, char *buf);
extern void	 mm_send_response(mms_t *conn, mm_command_t *cmd);
extern int	 mm_parse_response(mms_par_node_t *cmd,
    mm_response_t *response);
extern int	 mm_connect_info(int fd, cci_t *conn);
/* get host from data type as represented internally by mm */
extern char	*mm_data_host_ident(mm_data_t *data);
extern char	*mm_wka_host_ident(mm_wka_t *wka);
extern char	*mm_cmd_host_ident(mm_command_t *cmd);
extern char	*mm_cci_host_ident(cci_t *conn);
extern char	*mm_host_ident(char *host_str);
extern mms_trace_sev_t	mm_read_trace_level(void);
extern void	mm_write_trace_level(mms_trace_sev_t sev);
extern void	mm_reconcile_trace_level(mm_db_t *db);
extern int	mm_get_fd_limit(mm_db_t *db);
extern int	mm_add_char(char *str, mms_list_t *list);
extern int	mm_add_int(int number, mms_list_t *list);
extern void	mm_print_char_list(mms_list_t *list);
extern int	mm_in_char_list(mms_list_t *list, char *str);
extern char	*mm_return_char(mms_list_t *list, int index);
extern void	mm_free_list(mms_list_t *list);
extern char	*mm_ret_response_msg(mm_command_t *cmd);
extern void	mm_free_err_list(mm_command_t *cmd);
extern mm_cmd_err_t *mm_alloc_err();
extern void mm_print_err_list(mm_command_t *cmd);
extern void mm_print_err(mm_cmd_err_t *err);
extern void mm_set_retry_drive(mm_command_t *cmd, char *drive);
extern void mm_set_retry_lib(mm_command_t *cmd, char *lib);
extern void mm_set_retry_cart(mm_command_t *cmd, char *cart);
extern void mm_set_least_severe(mm_command_t *cmd);
extern int mm_same_err(mm_cmd_err_t *err1, mm_cmd_err_t *err2);
extern void mm_clear_cur_err(mm_command_t *cmd);
extern void mm_rm_err(mm_command_t *cmd, mm_cmd_err_t *err);
extern char *mm_return_err_text(mm_cmd_err_t *err);
#endif /* _MM_UTIL_H */