#ifndef __PROTOCOL_H__
#define __PROTOCOL_H__

#include <stdint.h>


#define RESERVED              5
#define MaxSizeOfCode         3

#define MaxSizeOfTID          52
#define MaxSizeOfIssuer       128
#define MaxSizeOfSID          128
#define MaxSizeOfRCID         32

#define MaxSizeOfRCURL        128
#define MaxSizeOfServiceName  128
#define MaxSizeOfURIPath      1024

#define NumOfServerType             11
#define MaxSizeOfServerName         32
#define MaxSizeOfServerAddr         16
#define MaxSizeOfServerPort         8
#define MaxSizeOfServerType         24

#define MaxSizeOfRCAcctName         32
#define MaxSizeOfRCAcctUser         32
#define MaxSizeOfRCAcctPassword     32
#define MaxSizeOfRCAcctCert         128
#define MaxSizeOfRCAcctAuthkey      128

#define MAX_SRV_NAME				128
#define MAX_DOMAIN_NAME				256

#define MAX_MNG_RCID				128
#define	MAX_MNG_SERVNAME			128
#define CONFIG_SERV                 "SERV"
#define CONFIG_RCACCT               "RCACCT"
#define MAX_ALLOWED_DEAD_COUNT		3
#define ALLOWED_MAX_ERROR_COUNT		5
#define	SENDSMSTERM					5
#define MAXSENDSMSCOUNT				5
#define SERV_ALIVE		1
#define SERV_DEAD		2
#define NO_MONITOR		3
#define	END_OF_SHM		"end of shm!"

//#define MYQUERY			"SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' ORDER BY cast(ETC2 as signed) ASC, ETC1 ASC ,NAME ASC"
#define MYQUERY		"SELECT NAME, IP, PORT, TYPE, MONITOR_YN from (SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' AND rcid != 'TIME' ORDER BY cast(ETC2 as signed) ASC, ETC1 ASC ,NAME ASC) a UNION ALL SELECT NAME, IP, PORT, TYPE, MONITOR_YN FROM t_rms_rc_server_index WHERE DELETED_YN = 'N' AND rcid = 'TIME'"
enum eServType
{
	SERV_WWW         = 0,
	SERV_FHS         = 1,
	SERV_RC          = 2,
	SERV_DB          = 3
};

extern const char	 a_ServType[NumOfServerType][MaxSizeOfServerType];

#define MAX_IP_STRING   17

struct common_message_header {
	char szTransactionID[MaxSizeOfTID];
	//unsigned long ulMode;
	uint32_t ulMode;
	char szIssuer[MaxSizeOfIssuer];
	char szServiceID[MaxSizeOfSID];
	//unsigned long ulResult;
	uint32_t ulResult;
	//unsigned long ulBodyLength;
	uint32_t ulBodyLength;
};
#define MaxSizeOfCMH          (sizeof(struct common_message_header))

struct local_message_header {
	char szTransactionID[MaxSizeOfTID];
	//unsigned long ulMode;
	uint32_t ulMode;
	char szIssuer[MaxSizeOfIssuer];
	char szServiceID[MaxSizeOfSID];
	char szRCID[MaxSizeOfRCID];
	//unsigned long ulResult;
	uint32_t ulResult;
	//unsigned long ulBodyLength;
	uint32_t ulBodyLength;
};

#define MaxSizeOfLMH          (sizeof(struct local_message_header))

#define CODE_ESC              0x1b

#define DOMAIN_SIZE         512
#define HOSTNAME_SIZE       64

struct disk_usage {
	/* Original Message */
	char domain[DOMAIN_SIZE];
	unsigned long long total;
	unsigned long long free;

	/* Additional : 2006.11.08 by Elenoa */
	/* if manually upload enable/disable */
	int manual_disable;
	int upload_level;
	/* disk stat: backlog and use percentage */
	int disk_backlog;
	int disk_percent;
	/* connection stat: established connection and others all */
	int connection_established;
	int connection_total;
	/* traffic stat: in and out traffic info (packet, byte) */
	//unsigned long traffic_ip;
	//unsigned long traffic_ib;
	//unsigned long traffic_op;
	//unsigned long traffic_ob;
	uint32_t traffic_ip;
	uint32_t traffic_ib;
	uint32_t traffic_op;
	uint32_t traffic_ob;
	char hostname[HOSTNAME_SIZE];
};

struct svr_status {
	    time_t stamp;
		struct disk_usage du;
};

#define AuthPrime 137897
typedef struct _s_time_sync_t {
	    long sync_info;
} time_sync_t;

typedef struct _ServInfo_e
{;
	char			m_pszServName[MAX_SRV_NAME];
	char			m_szIpString[MAX_IP_STRING];
	short			m_sPort;
	time_t          m_StatChgTime;
	unsigned int    m_Status;
	unsigned int    m_ServType;
	unsigned int    m_DeadCount;
	char			m_pszDomainName[MAX_DOMAIN_NAME];
	char			m_monitorYN[2];
	struct svr_status ss;

	struct _ServInfo_e *next;
} servinfo_t;

typedef struct _RCAcct_e
{
	char *           m_pszServiceName;
	char *           m_pszUserName;
	char *           m_pszPassword;
	char *           m_pszAuthkey;
	char *           m_pszCertLocation;
	struct _RCAcct_e *next;
} rcacct_t;

/* Global Shared Memory Address */
typedef struct _g_shm_addr
{
	unsigned int is_dirty;
	unsigned int serv_num;
	unsigned int thread_number[1024];
} g_shm_t;

typedef struct _rcmng_common_header
{
	char			rcmng_rcid[MAX_MNG_RCID];
	char			rcmng_servName[MAX_SRV_NAME];
	unsigned int	rcmng_serviceType;
	//unsigned long	bodylength;
	uint32_t     	bodylength;
} rcmng_cheader_t;

typedef struct _CellInfo
{
	char           m_strCellPhone[24];
} cellinfo_t;

/* Definition of Message Mode */

#define MSG_MODE_VRCD_STATUSD_RTS_STATUS               0x0a01

/* Open Service and Subroot Create */

#define MSG_MODE_SMS_CCSYNC_OPEN_SERVICE               0x0001
#define MSG_MODE_CCSYNC_RCSYNC_DATA_INPUT              0x0002
#define MSG_MODE_RCSYNC_CCSYNC_DATA_INPUT_RESP         0x0003
#define MSG_MODE_RCSYNC_RCTRAN_SUBROOT_CREATE          0x0004
#define MSG_MODE_RCTRAN_VMA_SUBROOT_CREATE             0x0005
#define MSG_MODE_RCTRAN_RCSYNC_SUBROOT_CREATE_RESP     0x0006
#define MSG_MODE_RCSYNC_CCSYNC_DATA_INPUT_FAIL         0x0007
#define MSG_MODE_VMA_RCTRAN_SUBROOT_CREATE_RESP        0x0008

/* SP-Console Process : Receive Server List */

#define MSG_MODE_SPCONS_CCTRAN_SERVER_LIST             0x0010
#define MSG_MODE_CCTRAN_SPCONS_SERVER_LIST_RESP        0x0011

/* SP-Console Process : Receive Volume Size */

#define MSG_MODE_SPCONS_RCTRAN_VOLUME_SIZE             0x0012
#define MSG_MODE_RCTRAN_SPCONS_VOLUME_SIZE_RESP        0x0013

/* SP-Console Process : Set/Unset Anonymous Directory */

#define MSG_MODE_SPCONS_RCTRAN_SET_ANONY               0x0014
#define MSG_MODE_RCTRAN_APACHE_SET_ANONY               0x0015
#define MSG_MODE_RCTRAN_SPCONS_SET_ANONY_RESP          0x0016
#define MSG_MODE_APACHE_RCTRAN_SET_ANONY_RESP          0x0017

#define MSG_MODE_SPCONS_RCTRAN_UNSET_ANONY             0x0018
#define MSG_MODE_RCTRAN_APACHE_UNSET_ANONY             0x0019
#define MSG_MODE_RCTRAN_SPCONS_UNSET_ANONY_RESP        0x001a
#define MSG_MODE_APACHE_RCTRAN_UNSET_ANONY_RESP        0x001b

/* SP-Console Process : Bandwidth Level */

#define MSG_MODE_SPCONS_RCTRAN_SET_BCLEVEL             0x001c
#define MSG_MODE_RCTRAN_APACHE_SET_BCLEVEL             0x001d
#define MSG_MODE_RCTRAN_SPCONS_SET_BCLEVEL_RESP        0x001e
#define MSG_MODE_APACHE_RCTRAN_SET_BCLEVEL_RESP        0x001f

/* Volume Manager Agent Process : Statistcs and Disksize broadcast */

#define MSG_MODE_VMA_APACHE_DISKSIZE                   0x0100
#define MSG_MODE_APACHE_VMA_DISKSIZE_RESP              0x0101
#define MSG_MODE_GVA_VMA_STG_STAT_REQ                  0x0102
#define MSG_MODE_VMA_GVA_STG_STAT_RESP                 0x0103

/* Network Statistics */

#define MSG_MODE_STATCOL_APACHE_NETSTAT_REQ            0x0104
#define MSG_MODE_APACHE_STATCOL_NETSTAT_RESP           0x0105
#define MSG_MODE_STATCOL_STATDEM_NETSTAT               0x0106
#define MSG_MODE_STATDEM_STATCOL_NETSTAT_RESP          0x0107

/* Statistics Service */

#define MSG_MODE_OPENDAV_RCSTAT_NETSTAT                0x0110
#define MSG_MODE_RCSTAT_OPENDAV_NETSTAT_RESP           0x0111
#define MSG_MODE_RCSTAT_CCSTAT_NETSTAT                 0x0112
#define MSG_MODE_CCSTAT_RCSTAT_NETSTAT_RESP            0x0113
#define MSG_MODE_RCSTAT_CCSTAT_STGSTAT                 0x0114
#define MSG_MODE_CCSTAT_RCSTAT_STGSTAT_RESP            0x0115

#endif
