/****************************************************************************
 *
 *    Opendisk daemon common protocol header
 *
 *    CopyRight(C) 2005 Netomi Inc. All Rights reserved.
 *    Author : Elenoa Lazyfake (elenoa@netomi.co.kr)
 *
 *    $Id: protocol.h,v 1.2 2006/08/01 04:43:42 sean Exp $
 *
 *    Redistribution and use in source and binary forms, with or with out
 *    modification, are not permitted in outside of Netomi, SolutionBox Inc.
 *
 *****************************************************************************/

#ifndef __PROTOCOL_H__
#define __PROTOCOL_H__


#define MAX_ID_SIZE         32
#define FNAME_HASH_LEN  1024
#define HOSTNAME_LEN    64

#define HOSTNAME_LEN_FOR_RMCD    128

// Packet Header stx 코드
// rmcd와 통신 할 때 사용
#define RC_RMCD_HEADER_STX_CODE					0x02

// RCTS의 rc_mond, rc_sscd 모두 STX_CODE는 0x05이다.
#define RC_MOND_HEADER_STX_CODE					0x05
#define RC_SSCD_HEADER_STX_CODE					0x05

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

// internal cache 요청 -> rc_rmcd로 요청시
#define CONTROL_FILE_CACHE			0x01 

// FHS 상태 정보 요청 -> rc_mond로 요청시
#define ALIVE_FHS_REQUEST			0x01

// FHS 네트워크 상태 정보 전송 -> rc_sscd로 요청시
#define FHS_NETWORK_STAT_SEND		0x02

// Packet Result : type이 Reponse 인 경우에만 세팅됨.( 첫번째 Byte 만 사용시 )
#define HEADER_RESULT_SUCCESS			0x00
#define HEADER_RESULT_ERROR				0x01
#define HEADER_READY_YET				0x02

struct FileTransferPacketHeader{
	char stx;					// Packet 유효성 관리 코드
	char type;					// Request or Response 여부 ( 0x00: Request, 0x01: Response )
	char command[4];			// Command Code ( 4 Byte) : 0th control-ftsd, 1th ftsd-ftsd 사용.
	char result[4];				// Result Code  ( 4 Byte )
	unsigned int  data_length;	// Packet Data 부분의 길이값 ( Network Byte Order 사용)
	char proto_version;			// 프로토콜 버전 ( 1 Byte )
	char extend_code;			// 확장 및 Padding bits ( 1 Byte )
};

struct internal_cache_body {
    char  szRCID[MAX_ID_SIZE];
	char  szFileNameHash[FNAME_HASH_LEN];
	char  szHostname[HOSTNAME_LEN_FOR_RMCD];
    char  szServiceID[MAX_ID_SIZE];
    char  szContentLength[32];
    char  szFDCount[4];
};


struct alive_fhs_request_body {
    char  szRCID[MAX_ID_SIZE];
	char  szHostname[HOSTNAME_LEN];
};

struct network_stat_body_head {
    char  szRCID[MAX_ID_SIZE];
	char  szHostname[HOSTNAME_LEN];
	int   nCount;
};

struct fhs_stat_body
{  
	char    szHostname[HOSTNAME_LEN];
	int     nActionCode;
};

#endif
