/****************************************************************************
                fimngd 의 서비스별 network 통계 정보 수신 관련 protocol 정의
                -----------------------------------------

    begin      : 2015/08/27
    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_FIMNGD_H__
#define __PROTOCOL_FIMNGD_H__

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


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

// Packet Header type 구분코드
#define HEADER_TYPE_REQUEST				0x00
#define HEADER_TYPE_RESPONSE			0x01   // 응답 전송시 (#27106)


// Packet Header command 구분 코드.
// 현재는 0th 미사용, 1th 항목만 사용.
#define COMMAND_SERVICE_NETWORK_STAT    0x02      // fimngd 의 서비스별 network 통계 전송 (0x00 0x02 0x00 0x00)


// Packet Header result 구분 코드.
// - type이 Reponse 인 경우에만 세팅됨.( 첫번째 Byte 만 사용시 )
#define HEADER_RESULT_SUCCESS			0x00
#define HEADER_RESULT_ERROR				0x01


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


// fimngd 와 통신시 사용할 packet header
// - 계산상 크기는 16Byte 이지만...
// - 통신상 sizeof() : 20Byte ( 64Bit OS )
struct PacketHeaderFimngd {

	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 사용)

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

};


////////////////////////////////////////////
// Service network stat 통계 수신 처리 관련 Data 항목 및 구조체.


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

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


// FHS fimngd 와 service network 통계 처리 통신 관련 protocol version 중 처리 가능한 최대 version 정보 
// - 최초 버전: 0x00 으로 설정.
// - CHG 2016-05-25 huibong  #27106 에 의해 fimngd 에 통계 수신 응답 전송을 위해 Protocol version 항목에 0x01 추가됨.
#define PARSE_MAX_PROTOCOL_VERSION_SERVICE_NETWORK   0x01


// FHS fimngd 에서 수신할 service network stat 관련 data 구조체
// 수신 packet 구조는 다음과 같다.
// PacketDataServiceNetworkStatHeader + N개의 PacketDataServiceNetworkStat_V00
struct PacketDataServiceNetworkStatHeader {

	char   rcid[FIMNGD_RC_ID_MAX_LENGTH + 1];             // RCID 정보, 최대 31 자까지만 허용.
	char   hostname[FIMNGD_HOST_NAME_MAX_LENGTH + 1];     // hostname, 최대 63자까지만 허용.
	int    service_count;                                 // 아래 정의된 service network 구조체의 갯수, Network byte order
};


// CHG 2016-05-25 huibong  (#27106)
// #27106 에 의해 fimngd 에 통계 수신 응답 전송을 위해 Protocol version 항목에 0x01 추가 상황 발생.
// 하지만 Data 구조는  0x00, 0x01 버전이 동일함. 
struct PacketDataServiceNetworkStat_V00 {
		
	int         svc_seq;            // service sequence
	int         user_seq;           // user sequence

	uint32_t	timestamp;          // timestamp

	uint64_t    down_content_size;  // download content size
	uint64_t    up_content_size;    // upload content size

	uint64_t    down_traffic;       // download packet size
	uint64_t    up_traffic;         // upload packet size
	
};

#endif /* __PROTOCOL_FIMNGD_H__ */

