#define OP_SEQ_REQ                      0x1000
#define OP_SEQ_RSP                      0x1001
#define MAX_SIZE_OF_URI                 1024
#define MAX_SIZE_OF_TARGET              128
#define RSP_CODE_DIST_SUCCESS           1000
#define RSP_CODE_AUTH_SUCCESS           1001
#define RSP_CODE_SVR_BUSY               4200
#define RSP_CODE_INTERNAL_ERROR         4001
#define RSP_CODE_UNKNOWN_ERROR          4002
#define RSP_CODE_OP_FAILED              4003
#define RSP_CODE_AUTH_FAILED            4004

#define RSP_CODE_INVALID_PROTO          4051
#define RSP_CODE_INVALID_OP_CODE        4052
#define RSP_CODE_INVALID_ATTR_VALUE     4053
#define MAX_SIZE_OF_UA                  128
#define MAX_SIZE_OF_UP                  256
#define MAX_SIZE_OF_SP_ID				64
#define MAX_SIZE_OF_SP_PASSWD			256
#define MAX_SIZE_OF_OP_DESC				128
#define MAX_SIZE_OF_SP_ID				64
#define MAX_SIZE_OF_SP_PASSWD			256
#define OP_NUM_AUTH					    10
#define OP_NUM_DN					    201
#define OP_NUM_DDI					    202
#define OP_NUM_DNC					    203
#define OP_NUM_DA					    204
#define OP_DN_MODE_REQ					0x00a0
#define RCTS_NOTICE_PORT				13110
#define MAX_SIZE_OF_TID                 64
#define MAX_SIZE_OF_SP_TID				33
#define MAX_SIZE_OF_PHONE               16
#define MAX_SIZE_OF_MAIL	            64
#define MAX_SIZE_OF_NAME	            64
#define MAX_SIZE_FILE_NAME				1024

typedef struct _s_rc_auth_md5_req_body {
	char sp_id_str[MAX_SIZE_OF_SP_ID];
	char sp_passwd_str[MAX_SIZE_OF_SP_PASSWD];
} rc_auth_md5_req_body_t;

//Request Header
typedef struct _s_tsvc_req_header {
	unsigned short op_num_w; 
	unsigned short op_seq_w;
} tsvc_req_header_t;

//Request auth Body
typedef struct _s_tsvc_auth_info {
	char ua_str[MAX_SIZE_OF_SP_ID];
	char up_str[MAX_SIZE_OF_SP_PASSWD];
} tsvc_auth_info_t;

//Request Directory Dist Info body
typedef struct _s_tsvc_ddi_req_body {

//	unsigned short op_mode_w;
	char uri_str[MAX_SIZE_OF_URI];

} tsvc_ddi_req_body_t;

typedef struct _s_tsvc_dn_req_body {
	unsigned short op_mode_w;
	char tid_str[MAX_SIZE_OF_TID];
	char sp_tid_str[MAX_SIZE_OF_SP_TID];
	char uri_str[MAX_SIZE_OF_URI];
	char source_url[MAX_SIZE_OF_TARGET];
	char target_url[MAX_SIZE_OF_TARGET];
	char target_str[MAX_SIZE_OF_TARGET];
	long long file_size;
	long long offset;
} tsvc_dn_req_body_t;

//Response Header
typedef struct _s_tsvc_rsp_header {
	unsigned short op_num_w;
	unsigned short op_seq_w;
	unsigned short rsp_cnt_w;
	unsigned int   op_result_code_w;
	char op_result_desc_str[MAX_SIZE_OF_OP_DESC];
} tsvc_rsp_header_t;

//Response Directory Dist Info Body
typedef struct _s_tsvc_ddi_rsp_body {

	int file_cnt;
	int dist_complete;
	int dist_now;
	int dist_fail;

} tsvc_ddi_rsp_body_t;

//Trans Complete
typedef struct _s_tsvc_ddc_req_body {

	char sp_tid_str[MAX_SIZE_OF_SP_TID];

	char name_01[MAX_SIZE_OF_NAME];
	char phone_01[MAX_SIZE_OF_PHONE];
	char mail_01[MAX_SIZE_OF_MAIL];
	
	char name_02[MAX_SIZE_OF_NAME];
	char phone_02[MAX_SIZE_OF_PHONE];
	char mail_02[MAX_SIZE_OF_MAIL];

	char name_03[MAX_SIZE_OF_NAME];
	char phone_03[MAX_SIZE_OF_PHONE];
	char mail_03[MAX_SIZE_OF_MAIL];

} tsvc_ddc_req_body_t;


//dist req again
typedef struct _s_tsvc_da_req {

	char sp_tid_str[MAX_SIZE_OF_SP_TID];
	unsigned int file_cnt;
} tsvc_da_req_t;


typedef struct _s_tsvc_da_contents {

	char file_name[MAX_SIZE_FILE_NAME];
	bool bFolder;

} tsvc_da_contents_t;


/*
Sample
int main(int argc, char **argv)
{
	Socket socket_obj;
	tsvc_req_header_t tsvc_req_header;
	rc_auth_md5_req_body_t auth_req_body;
	tsvc_dn_req_body_t dn_req_body;
	tsvc_rsp_header_t *tsvc_rsp_header_ptr;
	char recv_buffer[8196];

	if(argc < 3) {
		::fprintf(stderr, "%s ip_addr port\n", argv[0]);
		::exit(1);
	}

	fprintf(stderr, "argv[1] = %s, argv[2] = %s\n", argv[1], argv[2]);
	Address serv_addr(argv[1], ::atoi(argv[2]));

	try {
		tsvc_req_header.op_num_w = ::htons(10);
		tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
		::snprintf(auth_req_body.sp_id_str, MAX_SIZE_OF_SP_ID, "pooltest@test");
		::snprintf(auth_req_body.sp_passwd_str, MAX_SIZE_OF_SP_PASSWD, "alfkzmf");

		socket_obj.open(Socket::TCP);
		socket_obj.connect(serv_addr);
		socket_obj.send((char *)&tsvc_req_header, sizeof(tsvc_req_header));
		socket_obj.send((char *)&auth_req_body, sizeof(auth_req_body));
		socket_obj.recv(recv_buffer, sizeof(recv_buffer));

		tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
		fprintf(stderr, "============================= LOGIN ==================================\n");
		fprintf(stderr, "op_num_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->op_num_w));
		fprintf(stderr, "op_seq_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->op_seq_w));
		fprintf(stderr, "rsp_cnt_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->rsp_cnt_w));
		fprintf(stderr, "op_result_code_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->op_result_code_w));
		fprintf(stderr, "op_result_desc_str = %s\n", tsvc_rsp_header_ptr->op_result_desc_str);

		tsvc_req_header.op_num_w = ::htons(OP_NUM_DN);
		tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
		socket_obj.send((char *)&tsvc_req_header, sizeof(tsvc_req_header));


		//dn_req_body.op_mode_w = htons(0x1100);
		dn_req_body.op_mode_w = htons(OP_DN_MODE_REQ);
		//::snprintf(dn_req_body.uri_str, PATH_MAX, "%s", "/freezonetest72.cert");
		::snprintf(dn_req_body.uri_str, PATH_MAX, "%s", "/TEST_5G_BY_SDK");
		socket_obj.send((char *)&dn_req_body, sizeof(tsvc_dn_req_body_t));
		socket_obj.recv(recv_buffer, sizeof(recv_buffer));

		fprintf(stderr, "======================= COPY REQ ==================================\n");
		fprintf(stderr, "op_num_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->op_num_w));
		fprintf(stderr, "op_seq_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->op_seq_w));
		fprintf(stderr, "rsp_cnt_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->rsp_cnt_w));
		fprintf(stderr, "op_result_code_w = %d\n", ::ntohs(tsvc_rsp_header_ptr->op_result_code_w));
		fprintf(stderr, "op_result_desc_str = %s\n", tsvc_rsp_header_ptr->op_result_desc_str);
		socket_obj.close();
	} catch (Exception e) {
		fprintf(stderr, "ERROR: %s, %s, %d\n", e.getMethod().c_str(), e.getMessage().c_str(), e.getCode());
	}

	return 1;
}

*/