You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

300 lines
11 KiB
C

2 years ago
/************************************************************************************
*
* Copyright (C) 2002-2003 SCADA Control Technology Co., Ltd. All rights reserved.
*
* $Source: /opt/CVS_ROOT_PGC_EX2000/commserver/windows/widgets/tcphost.h,v $
*
* $Author: jehu $
*
* $Date: 2006/07/05 07:31:44 $
*
* $Revision: 1.1.1.1 $
*
* $State: Exp $
*
* $Name: $
*
* $Locker: $
*
* $Log: tcphost.h,v $
* Revision 1.1.1.1 2006/07/05 07:31:44 jehu
* no message
*
* Revision 1.5 2006/05/26 10:38:03 administrator
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>32λģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Revision 1.4 2006/04/22 07:49:26 administrator
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>֧<EFBFBD>ֶ˿<EFBFBD>ͨѶʱ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Revision 1.2 2006/01/17 06:14:53 Administrator
* <EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><EFBFBD>װ<EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>˿ں<EFBFBD>ƫ<EFBFBD><EFBFBD>
*
* Revision 1.1 2005/10/20 06:20:34 Administrator
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Revision 1.1 2005/10/12 06:03:46 Administrator
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
*
**************************************************************************************/
//***************************************************************
//* TcpHost.h *
//* Liangchu Lee 1999.12.20 *
//***************************************************************
#ifndef __TCPHOST_H_ICL__
#define __TCPHOST_H_ICL__
#include "common.h"
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ǰ<EFBFBD>û<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>pc<70><63><EFBFBD><EFBFBD>ds-3116
#define FEND_OTHERDEV_DS3116 1
#define HOST_CLOSE_NET 1
#define OVER_TIME_CLOSE_NET 2
#define FEND_CLOSE_NET 3
#define ERROR_CLOSE_NET 4
#define CHECK_VERSION_FLAG 1
// <20><><EFBFBD>з<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
#define RUN_MODE_STANDBY 0
// <20><><EFBFBD>з<EFBFBD>ʽ<EFBFBD><CABD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>
#define RUN_MODE_ALLHOT 1
//**************** <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ************************
#define iCOMM_DATA 0x10 // RTU<54><55><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
//************ ǰ<>û<EFBFBD> --> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ****************
#define iREQUESTHOSTSTATUS 0x14 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
#define iTIMEINFORM 0x2c // ǰ<>û<EFBFBD><C3BB><EFBFBD>ʱ
#define iAIDATA 0x31 // <20>仯ң<E4BBAF><D2A3>
#define iDIDATA 0x32 // <20>仯ң<E4BBAF><D2A3>
#define iPIDATA 0x33 // <20><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
#define iSOEDATA 0x34 // SOE <20><><EFBFBD><EFBFBD>
#define iACKDATA 0x35 // ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD>У
#define WUXI_ZHUANFA_AI_TO_HOST 0x36
#define WUXI_ZHUANFA_DI_TO_HOST iDIALLDATA
#define WUXI_ZHUANFA_PI_TO_HOST 0x37
#define iODDATA 0x38 // <20><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define iODALLDATA 0x39 // <20><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
#define iWUFANGYKYTREQ 0x3d // <20><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define iAIALLDATA 0x40 // ң<><D2A3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
#define iDIALLDATA 0x41 // ң<><D2A3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
#define iPIALLDATA 0x42 // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
// wen 2006.05.20 32bit<69><74><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PGC3_AI32DATA 0x45 // <20>仯32λң<CEBB><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PGC3_AI32ALLDATA 0x46 // ң<><D2A3>32λȫ<CEBB><C8AB><EFBFBD><EFBFBD>
#define iBYPASSDATA 0x50 // ֱͨ<D6B1><CDA8><EFBFBD><EFBFBD>
#define iODPOINT 0x81 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define iANPOINT 0x82 // <20><>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define iDIPOINT 0x83 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define iLINESTATUS 0x84 // <20>˿<EFBFBD><CBBF><EFBFBD>·״̬
#define iNETTESTMSG 0xf0 // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
#define iNETNAMEPLATE 0xef // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
//************ <20><><EFBFBD><EFBFBD> --> ǰ<>û<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ****************
#define hHOSTSTATUS 0x15 // <20><><EFBFBD><EFBFBD>״̬
#define NET_PROFILE_UPDATE 0x1B // <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ָ<EFBFBD><D6B8>
#define hTIMEINFORM 0x2c // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
#define hYKYTCMD 0x35 // ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define hBYPASSCMD 0x50 // ֱͨ<D6B1><CDA8><EFBFBD><EFBFBD>
#define hMAPANDATA 0x82 // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define hMAPDIDATA 0x83 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define hDATA_OUTPUT_CTRL 0x85 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define hRELOADDATABASE 0x86 // <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
#define hNETTESTMSG 0xf0 // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
#define hMAPALLOP 0xf4 // ģ<><C4A3><EFBFBD><EFBFBD>ȫ<EFBFBD>̲<EFBFBD><CCB2><EFBFBD>
//*********************<2A><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>************************
#define AIMSGNO 0
#define DIMSGNO 1
#define SOEMSGNO 2
#define YKYTACKNO 3
#define ODMSGNO 4
#define PIMSGNO 5
#define RTUCHANGMSGNUM 6
//******************************************************
typedef struct tagTCP_SEND_DATA_BUF
{
int MsgLen __attribute__ ((packed));
BYTE MsgData[MAX_NET_BUF] __attribute__ ((packed));
} TCP_SEND_DATA_BUF;
typedef struct tagTCP_RCV_DATA_BUF
{
int MsgCnt __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
int Front __attribute__ ((packed));// <20><>Ϣȡ<CFA2><C8A1>ָ<EFBFBD><D6B8>
int Rear __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
BYTE MsgData[MAX_NET_BUF] __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
} TCP_RCV_DATA_BUF;
typedef struct tagFEND_DEF
{
char Name[MAX_MACHINE_NAME_LEN] __attribute__ ((packed));
int FendIdx __attribute__ ((packed));
int LinkFlag __attribute__ ((packed));
int EnableLink __attribute__ ((packed));
char SetTcpIpAddr[MAX_FEND*MAX_ADDR][TCPIP_ADDR_LEN] __attribute__ ((packed));
char TcpIpAddr[MAX_ADDR][TCPIP_ADDR_LEN] __attribute__ ((packed));
u_long HostIpAddr[MAX_ADDR] __attribute__ ((packed));
u_long AllIpAddr[MAX_ADDR] __attribute__ ((packed));
u_long BroadCastAddr[MAX_ADDR] __attribute__ ((packed));
int LinkStatus[MAX_FEND] __attribute__ ((packed));
int LinkCnt[MAX_FEND] __attribute__ ((packed));
int FendExistFlag[MAX_FEND] __attribute__ ((packed));
int FendExistCnt[MAX_FEND] __attribute__ ((packed));
int SendTxdDataFlag[MAX_FEND] __attribute__ ((packed));
// wen 2006.01.14 <20><><EFBFBD><EFBFBD>װ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʼ<EFBFBD><CABC>վ<EFBFBD>ŵ<EFBFBD>ƫ<EFBFBD><C6AB>
int iPortOffset __attribute__ ((packed));
int iRunMode __attribute__ ((packed));
// wen 2006.04.22 <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϵĶ˿<C4B6>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>)
int iPortMask __attribute__ ((packed));
// wen 2006.05.20 32bit<69><74><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int iSendAiof32Bit __attribute__ ((packed));
} FEND_DEF;
typedef struct tagTCP_LINK_DEF
{
u_char InitFlag __attribute__ ((packed));// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־
u_char InitOk __attribute__ ((packed));// <20><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>־
long InitLinkCnt __attribute__ ((packed));// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ExistFlag __attribute__ ((packed));// <20><><EFBFBD>ڱ<EFBFBD>־
u_char CommFlag __attribute__ ((packed));// ͨѶ<CDA8><D1B6>־
u_char Status __attribute__ ((packed));// <20><><EFBFBD><EFBFBD>״̬
long StatusCnt __attribute__ ((packed));// ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
SOCKET SocketId __attribute__ ((packed));// <20><><EFBFBD>Ӻ<EFBFBD>
u_char LinkType __attribute__ ((packed));// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char CurLinkIdx __attribute__ ((packed));
u_char TcpIpAddr[MAX_ADDR][TCPIP_ADDR_LEN] __attribute__ ((packed));// Tcp/Ip <20><>ַ
u_char VersionFalgByte __attribute__ ((packed));// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>־
int RevHostStatusMsg __attribute__ ((packed));// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B2A5>Ϣ
char NetNameplateFalg __attribute__ ((packed));
int iNoWriteNum __attribute__ ((packed));
} TCP_LINK_DEF;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>RTUMSG<53>
typedef struct tagORTUMSGHEAD
{
u_char MsgType __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
u_char PortNumber __attribute__ ((packed));// <20><>Ϣ<EFBFBD>˿ں<CBBF>
short MsgLen __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
} ORTUMSGHEAD;
typedef struct tagORTUMSG
{
u_char MsgType __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
u_char PortNumber __attribute__ ((packed));// <20><>Ϣ<EFBFBD>˿ں<CBBF>
short MsgLen __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
} ORTUMSG;
typedef struct tagHOSTMSGHEAD
{
WORD MsgType __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
WORD PortNumber __attribute__ ((packed));// <20><>Ϣ<EFBFBD>˿ں<CBBF>
WORD MsgLen __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
WORD EMsgLen __attribute__ ((packed));// <20><>չ<EFBFBD><D5B9>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
} HOSTMSGHEAD;
typedef struct tagHOSTMSG
{
WORD MsgType __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
WORD PortNumber __attribute__ ((packed));// <20><>Ϣ<EFBFBD>˿ں<CBBF>
WORD MsgLen __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
WORD EMsgLen __attribute__ ((packed));// <20><>չ<EFBFBD><D5B9>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
u_char MsgData[MAX_RTU_MSG_SIZE] __attribute__ ((packed));// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
} HOSTMSG;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BOOL GetConfigName(char *szFileName, int iFileNameLen, int IsPortConfig);
BOOL IsWouldBlock();
BOOL IsWouldBlockEx(int neterrno);
int GetNetErrorNo();
void CloseNetSocket(SOCKET sock);
void ULongToIPString(char *ipstr, u_long ipulong);
void InitSetTcpIpAddr(void);
void SendNetNameplateMsgToHost(int flag);
BOOL InitFendMsg(void);
BOOL InitHostWSAStartup(void);
void FindCurrentFend(void);
void LinkOneHost(int hostid);
void HostConnect(SOCKET socket, WORD error);
void LinkToHost(void);
void CloseHostSocket(SOCKET socket, int flag);
void CloseHost(void);
BOOL ReadHost(int hostid);
int GetHostMsgFormHostRevBuf(HOSTMSG *hostmsg, int hostid);
BOOL ReadDataFormHost(SOCKET socket);
int SendDataToHostSendBuf(int hostid, u_char *buf, int len, BOOL bInsert);
void SendDataToAllHostSendBuf(u_char *buf, int len);
void SendHostSendBufToHost(void);
void ClearSendBuffer(int hostid);
void ClearRecvBuffer(int hostid);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void HostDataProceWithSignalYkYt(HOSTMSG *hmsg);
void HostDataProce(HOSTMSG *hostmsg);
void SendRtuChangeDataToHost(void);
void SendPortStatisticsToHost(void);
void SendPortStatusToHost(int flag);
void SendPortAllDataToHost(void);
void SetSoeData(int commidex, SOE_DEF *pSoeData);
void SetYkYtAckData(int portno, char *buf);
void SelectHostSocketEvent(void);
void SelectHostSocketEventEx(void);
void TcpHostTimer(void);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
void MapAnPointToHost(int iMapOutPort, int iMapSavePort);
void MapDiPointToHost(int iMapOutPort, int iMapSavePort);
void FormHostMapDataProce(int iMapOutPort, int iMapSavePort, HOSTMSG *msg);
// <20><>ȡǰ<C8A1>û<EFBFBD><C3BB><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ʶ
int GetFendTxdFlag(void);
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ǰ<EFBFBD>û<EFBFBD><C3BB><EFBFBD>ַ
int CheckIsFendIpAddr(u_long addr);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ǰ<>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
void WriteChangeData(int commidex, int point, void *pntmsg, BYTE type);
BOOL IsSendDatatoPort(int port);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// <20><>ȡȫ<C8A1>ֱ<EFBFBD><D6B1><EFBFBD>
TCP_LINK_DEF *GetHostLinkPtr();
FEND_DEF *GetFendMsgPtr();
HOSTMSG *GetRtuChangeMsgPtr();
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL AllDataHostToRtuByteSequence(HOSTMSG *hmsg, ORTUMSG *pSendMsg);
BOOL AllDataRtuToHostByteSequence(HOSTMSG *hmsg);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void SendSystemTimeToHost(void);
#endif