// sgip.h
#ifndef _SGIP_H
#define _SGIP_H
typedef unsigned char 	UINT_1;
typedef unsigned short 	UINT_2;
typedef unsigned int 	UINT_4;
typedef int INT_4;

//Deliver包结构
typedef struct deliverstr
{
	UINT_4  sequencenumber1;
    UINT_4  sequencenumber2;
    UINT_4  sequencenumber3;
	char 	usernumber[22];
	char	    spnumber[22];
	UINT_1    tp_pid;
	UINT_1    tp_udhi;
	UINT_1    messagecoding;
	UINT_4  messagelength;
	char    messagecontent[160];
}DeliverStr;

//Report包结构
typedef struct reportstr
{
	UINT_4  sequencenumber1;
	UINT_4  sequencenumber2;
	UINT_4  sequencenumber3;
	char    usernumber[22];
	UINT_1    state;
	UINT_1    errcode;
}ReportStr;

//MT Response结构
typedef struct mtrespstr
{
	UINT_4  sequencenumber1;
	UINT_4  sequencenumber2;
	UINT_4  sequencenumber3;
	UINT_1  result;
}MTRespStr;

//Submit错误结构,当Submit发送不成功时,在Deliver处理中返回该结构
typedef struct mterrorstr
{
	UINT_4  sequencenumber1                 ;
	UINT_4  sequencenumber2                 ;
	UINT_4  sequencenumber3                 ;
	INT_4   errortype                       ;  //1:因为连接不上SMG网关系统,导致包超时 2:发送前发现该包超时 3:包发送失败且超过重发次数
	INT_4   result                          ;//如果失败是因为对方回了错误的Response,则result中保留错误的Response Result值,否则是内部的错误码:负值。
}MTErrorStr;



int WINAPI Startup(char* cLocalIp,short iLocalPort,
					   char* cSmgIp,short iSmgPort,
					   char* cLoginName,char* cPassword,
					   int lSocketTimeOut,int lMTTimeOut,
					   unsigned int iSrcNode,int lMTThread,
					   int lMaxListNode,int lMTMaxRetryTime,int lMOThread,
					   void (* fProcessDeliver)(DeliverStr deliver),
					   void (* fProcessReport)(ReportStr report),
					   void (* fProcessResponse)(MTRespStr response),
					   void (*fProcessMTError)(MTErrorStr mterror));


//int WINAPI Cleanup();
int WINAPI   Cleanup();


int WINAPI Submit(char* spnumber,
					  char* chargenumber,
					  int user_count,
					  char* usernumber,
					  char* corpid,
					  char* service_type,
					  UINT_1 fee_type,
					  char* fee_value,
					  char* given_value,
					  UINT_1 agent_flag,
					  UINT_1 mo_flag,
					  UINT_1 priority,
					  char* expire_time,
					  char* schedule_time,
					  UINT_1 report_flag,
					  UINT_1 tp_pid,
					  UINT_1 tp_udhi,
					  UINT_1 message_coding,
					  UINT_1 message_type,
					  UINT_4 message_length,
					  char* message_content,
					  char* reserve,
					  UINT_4 *sequencenumber1,
					  UINT_4 *sequencenumber2,
					  UINT_4 *sequencenumber3);

int WINAPI Deliver(int *type,
			 DeliverStr* DeliverStruct,
			 ReportStr* ReportStruct,
			 MTRespStr* RespStruct,
			 MTErrorStr* MTErrorStruct);


#endif