/****************************************************************************/
/* Copyright (c) 2007,许继集团有限公司                                      */
/* All rights reserved.                                                     */
/*                                                                          */
/*  模块描述：                                                              */
/** 文件服务模块
 *  @file  ac_file.h                                                       */
/*                                                                          */
/* 日期         作者    注释                                                */
/* 2007/10/09   ljg     创建文件                                            */
/****************************************************************************/
#ifndef IEC61850_AC_FILE_H
#define IEC61850_AC_FILE_H


#include "glbtypes.h"
#include "gen_list.h"
#include "ac_reqm.h"



#ifdef __cplusplus
extern "C" {
#endif

/**  读文件服务请求所需信息结构定义*/
typedef struct 
{
	ST_CHAR  *src_fname;		/**< 读取的远方服务器中的文件名，可带路径 */
	ST_CHAR  *dest_fname;		/**< 存到本地时用的名字 */
	U_AC_REQ_DONE u_getf_done;	/**< 用户回调 */
}AC_GETF_REQ_INFO;

/**  写文件服务请求所需信息结构定义*/
typedef struct 
{
	ST_CHAR  *src_fname;		/**< 本地文件系统中要写到服务器的文件，可带路径 */
	ST_CHAR  *dest_fname;		/**< 存到服务器文件系统中用的名字 */
	U_AC_REQ_DONE u_setf_done;	/**< 用户回调 */
}AC_SETF_REQ_INFO;

/**  获得文件列表服务请求所需信息结构定义*/
typedef struct 
{
	ST_CHAR  *file_name;		/**< 请求的文件名或目录名 */
	U_AC_REQ_DONE u_getf_done;	/**< 用户回调 */
}AC_GETFAV_REQ_INFO;

/**  删除文件服务请求所需信息结构定义*/
typedef struct 
{
	ST_CHAR  *file_name;		/**< 要删除的服务器的文件，可带路径 */
	U_AC_REQ_DONE u_getf_done;	/**< 用户回调 */
}AC_DELF_REQ_INFO;


/**
 * 从服务器读取一个文件存到本地
 * @param  srv_id	  服务器id
 * @param  src_fname  读取的文件名，可带路径
 * @param  dest_fname 存到本地时用的名字
 * @param  time_out   请求超时时间，如果time_out时间内文件没有传完则认为请求失败
 * @param  req_ctrl_out 传出的请求控制结构
 */
ST_RET  ac_get_file(ST_INT srv_id, AC_GETF_REQ_INFO *getf_info,
					ST_INT time_out, AC_REQ_CTRL **req_ctrl_out);

/**
 * 发送读文件服务接口，请求已从链表中取出
 * @param   req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_getfile_req(AC_REQ_CTRL * req_ctrl );

/**
 * 将本地的一个文件写到服务器中
 * @param  srv_id      服务器id
 * @param  setf_info   写文件请求信息
 * @param  time_out    请求超时时间，如果time_out时间内文件没有传完则认为请求失败
 * @param  req_ctrl_out  传出的请求控制结构
 */
ST_RET  ac_set_file(ST_INT srv_id, AC_SETF_REQ_INFO *setf_info,
					ST_INT time_out, AC_REQ_CTRL **req_ctrl_out);
/**
 * 发送写文件服务接口，请求已从链表中取出
 * @param   req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_setfile_req(AC_REQ_CTRL * req_ctrl );
/**
 * 读取某个文件的属性或目录下的所有文件的属性
 * @param  srv_id      服务器id
 * @param  getfav_info 读文件属性请求信息
 * @param  time_out    请求超时时间
 * @param  req_ctrl_out  传出的请求控制结构
 */
ST_RET  ac_get_file_attr(ST_INT srv_id, AC_GETFAV_REQ_INFO *getfav_info, 
					ST_INT time_out, AC_REQ_CTRL **req_ctrl_out);
/**
 * 发送读文件属性服务接口，请求已从链表中取出
 * @param   req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_getfav_req(AC_REQ_CTRL * req_ctrl );
/**
 * 释放AC_GETFAV_REQ_CTRL结构成员所占资源
 * obj_vals、results成员资源
 * @param  reqCtrl   请求结构指针
 * @return ST_VOID
*/
ST_VOID ac_cleanup_getFavReqCtrl(AC_GETFAV_REQ_CTRL *reqCtrl);
/**
 * 删除文件请求
 * @param  srv_id      服务器id
 * @param  delf_info   删除文件请求信息
 * @param  time_out    请求超时时间
 * @param  req_ctrl_out  传出的请求控制结构
 */
ST_RET  ac_delete_file(ST_INT srv_id, AC_DELF_REQ_INFO *delf_info, 
					ST_INT time_out, AC_REQ_CTRL **req_ctrl_out);

/**
 * 发送删除文件服务接口，请求已从链表中取出
 * @param   req_ctrl		  请求结构
 * @retval  SD_SUCCESS        发送成功
 * @retval  SD_FAILURE        发送失败
 */
ST_RET ac_send_delfile_req(AC_REQ_CTRL * req_ctrl );

#ifdef __cplusplus
}
#endif
#endif /** IEC61850_AC_file_H */
