/**----------------------------------------------------------------------
** Copyright	: Video Surveillance(China) Co. Ltd 2006-20007
** File Name	: vs_conf.h
** Description  : 
**				common config lib
** Created On   : 06/13/07
** Created by   : 
**				  Double Yang
** Modification : 
** 
**---------------------------------------------------------------------*/
#ifndef __VS_SYSTEM_FTP_USER_CONFIG__
#define __VS_SYSTEM_FTP_USER_CONFIG__

/*-----------------------Included Files-------------------------*/
#include <string>
#include <list>
#include <map>
#include "modules.h"
#include "ssi.h"
using namespace std;

#define FTP_EVENT_CREATE_USER 0x1001

#define VS_FTP_USERNAME_LEN 128
#define VS_FTP_USERPWD_LEN 128
#define VS_FILE_FTPPATH_LEN	128
class VsFtpUserInfo
{
public:
	S8 szUsrName[VS_FTP_USERNAME_LEN];
	S8 szPwd[VS_FTP_USERPWD_LEN];
	S8 szFilePath[VS_FILE_FTPPATH_LEN];
	U32 nCreateTime;
	U32	bStatic;//静态/动态,动态用户名需要定期清除

	VsFtpUserInfo();
	~VsFtpUserInfo();
	VsFtpUserInfo(const VsFtpUserInfo &info);
	void operator = (const VsFtpUserInfo &info);
	int operator<(const VsFtpUserInfo &info) const;
	int operator==(const VsFtpUserInfo &info) const;
};

class CVsFtpUser
{
private:
	map<std::string, VsFtpUserInfo>	m_mapFtpUser;
	WS_TASK_ID m_nTaskId;
	WS_MUTEX_ID m_nMutex;
	
public:
	CVsFtpUser();	
	virtual ~CVsFtpUser();

//创建通用的FTP用户,指定用户名/密码/路径
	BOOL CreateComFtpUser(BOOL bStatic, const string &szFtpUserId, const string &szFtpPwd, const string &szPath);
//为指定IPC创建FTP用户. bStatic=TRUE表示该用户一直存在,bStatic=FALSE表示该用户一段时间后将被删除。指定DevId，输出用户名/密码
	BOOL CreateIpcFtpUser(const string &szDevId, BOOL bStatic, string &szFtpUserId, string &szFtpPwd);

//创建公共的固件配置上传路径
	BOOL CreatePublicFirmwareUploadUser(string &szFtpUserId, string &szFtpPwd);

	//删除指定的FTP用户
	BOOL DelFtpUserFromOS(const string &szFtpUserId);
	//删除过期的FTP用户
	void DelExpiredFtpUser();
	//删除所有创建的动态FTP用户
	void DelAllDynFtpUser();

	void printAllFtpUser();

	WS_STATUS GetFtpUser(const string &szUserName, string &szUserPwd, string &szLoginPath);
	WS_STATUS DelFtpUser(const string &szFtpUserId);
	
	int InitTask();	
};

extern CVsFtpUser *g_pFtpUserInst;

#ifdef LINUX
#define WS_SNPRINTF snprintf
#define WS_STRCMPI  strcasecmp
#else
#define WS_SNPRINTF _snprintf
#define WS_STRCMPI  _strcmpi
#endif

#endif

