/***************************************************************************
                Cache 생성 요청 Data 정보 저장 Class
                -----------------------------------------
    begin      : 2014/07/08
    copyright  : (C) 2005 Solbox Inc.
    author     : Storage Dev Team
    email      : storage.sd@solbox.com
    version    : 3.3

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

#ifndef __CACHE_REQUEST_DATA_H__ 
#define __CACHE_REQUEST_DATA_H__

#include <string>

// fimngd 로 부터 수신된 Hot Content 정보 수신 관련 packet body 구조체.
// sizeof() : 1252 Byte (64Bit OS)
struct stCacheRequestBody {

	char  szRCID[32];            // RC ID 정보
	char  szFileNameHash[1024];  // FHS 에 저장된 filename_hash 정보
	char  szHostname[128];       // cache 발생 요청 장비의 Host Name
	char  szServiceID[32];       // service sequence ( 구 tran_id )
	char  szContentLength[32];   // content length ( 실제 물리 File size )
	char  szFDCount[4];          // 해당 content 의 참조 count.
};


// CCacheRequestData
// FHS 로 부터 수신된 Hot Content 정보 와 
// Cache 생성을 위한 관련 정보를 저장하기 위한 data class.
class CCacheRequestData
{
    public:

		// 생성자
		CCacheRequestData();

		// 소멸자
		~CCacheRequestData(){};

		// Set 함수
		void Set( struct stCacheRequestBody * pRequestBody );

		// 본 객체의 재사용을 위한 멤버 변수 초기화 함수
		void Init( void );

		// Key 값 생성 지원을 위해 수신된 filename_hash 정보 중
		// 경로 정보를 제외한 hash name 만을 반환 처리한다.
		// @param [OUT] value 추출된 hash name 정보 ( 경로정보 제외 )
		// @return false hash name 정보가 유효화지 않은 경우.
		//         true  정상.
		bool GetOnlyHashFileName( std::string & value );

		// Debug 목적 함수.
		void Print( void );


	public:

		// RC ID 정보 ( FHS 수신 정보 )
		std::string m_strRcid;

		// filename_hash 정보( FHS 수신 정보 )
		std::string m_strFileNameHash;

		// Cache 생성을 요청한 Host 정보 ( FHS 수신 정보 )
		std::string m_strRequestHost;

		// Service sequece (구 tran_id) 정보 ( FHS 수신 정보 )
		std::string m_strServiceSeq;

		// Content length 정보 ( FHS 수신 정보 )
		unsigned long long m_uContentLength;

		// 동접 fd 갯수 ( FHS 수신 정보 )
		unsigned int m_uConcurrentFd;



	private:

		// URI 항목 Trim 처리를 위한 함수
		void Trim( std::string & str );
						
};

#endif // __CACHE_REQUEST_DATA_H__
