/****************************************************************************
                SendInfo Worker 프로세스의 통신 관련 protocol 정의
                -----------------------------------------

    begin      : 2015/07/16
    copyright  : (C) 2005 Solbox Inc.
    author     : Dev Storage Team
    email      : huibong@solbox.com
    version    : 3.5

    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 __PROTOCOL_SEND_INFO_H__
#define __PROTOCOL_SEND_INFO_H__

#include <unistd.h>
#include <sys/types.h>
#include <stdint.h>


// Packet Header stx 코드
#define HEADER_STX_CODE_SEND_INFO  		0x05

// Packet Header type 구분코드
#define HEADER_TYPE_REQUEST				0x00
#define HEADER_TYPE_RESPONSE			0x01

// Packet Header command 구분 코드.
// 현재는 0th 미사용, 1th 항목만 사용.
#define COMMAND_ALIVE_FHS               0x01      // fimngd 의 Alive FHS 목록 요청 (0x00 0x01 0x00 0x00)


// Packet Header result 구분 코드.
// - fimngd 와 통신시 0th, 1th, 2th 미사용, 3th 만 사용.
#define RESULT_ALIVE_FHS_OK             0x00      // Alive FHS 목록 요청에 대해 정상 결과 전송시 (0x00 0x00 0x00 0x00)
#define RESULT_ALIVE_FHS_ERROR          0x01      // Alive FHS 목록 요청에 대해 오류 결과 전송시 (0x00 0x00 0x00 0x01)
#define RESULT_ALIVE_FHS_SKIP           0x02      // Alive FHS 목록 요청에 관련 목록이 아직 유효하지 않은 경우.. 대기 의미로 SKIP 결과 전달. (0x00 0x00 0x00 0x02)

// 기타 정보
#define LENGTH_FIELD_SIZE				4		// 가변데이터 형식 사용시 Length 필드의 메모리 크기 (unsigned int)


// SendInfo Worker 에서 통신시 사용할 통신 Header
// - 계산상 크기는 16Byte 이지만...
// - 통신상 sizeof() : 20Byte ( 64Bit OS )
struct PacketHeaderSendInfo {

	char stx;					// Packet 유효성 관리 코드
	char type;					// Request or Response 여부 ( 0x00: Request, 0x01: Response )
	char command[4];			// Command Code ( 4 Byte) : 0th 미사용, 1th fimngd-rc_mond 에서 사용)
	char result[4];				// Result Code  ( 4 Byte )
	unsigned int data_length;   // Packet Data 부분의 길이값 ( Network Byte Order 사용)
	
	// 2015-05-15 huibong
	// Protocol version 정보 추가로 인해... extend_code 2Byte 중 1Byte 사용.
	//char extend_code[2];		// 확장 및 Padding bits ( 2 Byte )

	char protocol_version;      // Packet Data 의 Protocol Version 정보. (1 Byte)
	char extend_code;		    // 확장 및 Padding bits ( 1 Byte )

};


////////////////////////////////////////////
// Alive FHS 요청 및 결과 전송 관련 Data 항목 및 구조체.


// RC ID 최대 길이.
#define FIMNGD_RC_ID_MAX_LENGTH         31

// hostname 최대 길이.
#define FIMNGD_HOST_NAME_MAX_LENGTH     63


// FHS fimngd 와 통신 관련 Alive FHS 요청, 응답 처리 protocol version 중 처리 가능한 최대 Version 정보.
// - 최초 버전이므로 0x00 으로 설정.
#define PARSE_MAX_PROTOCOL_VERSION_ALIVE_FHS   0x00

// FHS fimngd 에서 수신할 Alive FHS 목록 요청 관련 data 구조체
struct PacketDataRequestAliveFhs_V00 {

	char   rcid[FIMNGD_RC_ID_MAX_LENGTH + 1];             // RCID 정보, 최대 31 자까지만 허용.
	char   hostname[FIMNGD_HOST_NAME_MAX_LENGTH + 1];     // hostname, 최대 63자까지만 허용.
};

// FHS fimngd 에 전송할 Alive FHS 목록 관련 개별 항목 구조체.
struct PacketDataResponseAliveFhs_V00 {
		
	char   hostname[FIMNGD_HOST_NAME_MAX_LENGTH + 1];   // hostname, 최대 63자까지만 허용.
	int    service_stat;                                // Service 상태 code. ( 정상 or Read only 장비만.)
};

#endif /* __PROTOCOL_SEND_INFO_H__ */
