/***************************************************************************
                ftsd ( File TranSfer Daemon ) Header ( TargetFhsInfo.h )
                -----------------------------------------
	begin      : 2010/03/13
	copyright  : (C) 2005 SolutionBox Inc.
	author     : Service 1 Team
	email      : svc1@solbox.com
	version    : 1.0

	CopyRight(C) 2005 SolutionBox Inc. All Rights reserved.
	Redistribution and use in source and binary forms, with or with out
	modification, are not permitted in outside of SolutionBox Inc.
***************************************************************************/

#ifndef __TARGET_FHS_INFO_H__
#define __TARGET_FHS_INFO_H__

#include <string>

#include "Logger.h"
#include "SocketControl.h"
#include "IPCache.h"

class CTargetFhsInfo
{
	public:

		CTargetFhsInfo( std::string szHostName );
		~CTargetFhsInfo();

		/// @brief 대상 FHS로 접속을 시도한다.
		bool MakeConnection( bool bUseInternalIp, CIPCache * pIpCache );

		/// @brief 대상 FHS 로 접속이 유효한지 여부를 판단하기 위한 함수.
		bool IsAvailable(void);

		/// @brief 대상 FHS 의 접속 정보를 반환.
		std::string GetHostName(void) { return m_szHostName; }

		/// @brief 오류발생시 마지막 오류 문자열을 반환.
		std::string GetErrorMessage(void) { return m_szErrorMessage; }

		/// @brief Log 파일 상에 Connection 관련 정보를 표시.
		void PrintToConnectionInfo(void);

		/// @brief 대상 FHS 로 파일 전송 시작을 위한 패킷 전송.
		bool ReadyToFileTransfer( std::string& szFileFullName, unsigned long long nFileSize, std::string& szTargetTranId, char command );

		/// @brief 파일 전송 완료후 전송 결과에 대한 응답패킷을 수신한다.
		bool GetFileTransferResult(void);

		/// @brief 파일 Data 의 전송을 처리하기 위한 함수
		bool SendBufferToFile(const void * buffer, size_t& size );

		/// @brief 파일 전송 처리에 대한 결과 정보를 반환.
		bool GetResult( std::string& szHostName, std::string& szFileFullName, std::string& szErrorMessage);

		/// @brief 파일 Hash 검사를 요청한다.
		bool SendFileHashCheckRequest( int nHashLevel, unsigned long long nFileSize, std::string& szSourceHash);

		/// @brief 파일 Hash 결과 검사에 대한 결과 정보를 수신한다.
		bool GetFileHashCheckResult(void);


	private:

		CSocketControl m_socketControl;		// Socket 및 Packet 생성 및 처리를 담당하기 위한 Socket Control Class
		
		std::string m_szHostName;			// Target FHS Host Name
		std::string m_szIp;					// Target FHS 접속 정보 - 내부망을 사용하지 않는 경우 m_szHostName 과 동일

		bool m_bTransferSucess;
		std::string m_szErrorMessage;
		std::string m_szTransferResultFileName;
		unsigned long long m_nTransferResultFileSize;

	
};

#endif /* __TARGET_FHS_INFO_H__ */
