⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 variable.c

📁 包括EPA协议栈
💻 C
字号:
#include "tcpip.h"
#include "epa.h"
#include <string.h>
#define VARIABLE_GLOBALS
#include "variable.h"
#undef VARIABLE_GLOBALS
#include "mib.h"
#include "nsmib.h"
#include "security.h"
#include "acctrl.h"
#include <string.h>

void Read_Output(uint16 src_app, uint16 dst_app, uint16 dst_obj, uint16 sub_idx, uint32 dst_ip) {
	PSock psock;
	  
	psock = GetSock(PROTOCOL_EPA_FB, LEN_READ, EPA_PORT, dst_ip, NISelect(dst_ip));

	h2n16(src_app, psock->payload);
	h2n16(dst_app, psock->payload + 2);
	h2n16(dst_obj, psock->payload + 4);
	h2n16(sub_idx, psock->payload + 6);
	

	EPAOutput(psock, EVS_READ, EPA_COM_TYPE, EPA_MSG_ID);
}
 
void Read_Pos_Output(uint16 src_app, OctetString data, uint16 len, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;
	uint8 com_type;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_DISTRIBUTE(len), dst_port, dst_ip, gDefNI);
	h2n16(src_app, psock->payload); 
	psock->payload[2] = EPA_RESERVED_VALUE;
	psock->payload[3] = EPA_RESERVED_VALUE;
	memcpy(psock->payload + 4, data, len);

	EPAOutput(psock, EVS_READ_POS, com_type, msg_id);
}
 
void Read_Neg_Output(uint16 src_app, uint8 err_class, uint8 err_code, uint8 add_code, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_READ_NEG, dst_port, dst_ip, NISelect(dst_ip));
 
	h2n16(src_app, psock->payload); 
	psock->payload[2] = EPA_RESERVED_VALUE;
	psock->payload[3] = EPA_RESERVED_VALUE;
 	psock->payload[4] = err_class;
	psock->payload[5] = err_code;
	psock->payload[6] = add_code;
	psock->payload[7] = EPA_RESERVED_VALUE;
	memcpy(psock->payload + 8, gErr_Des[err_class][err_code], VISUAL_STRING_LEN);

	EPAOutput(psock, EVS_READ_NEG, EPA_COM_TYPE, msg_id);
}

void Read_Input(PSock psock, uint8 com_type, uint16 msg_id) {
#if 0
	PEPAMsg pmsg;
	
	pmsg = GetEPAMsg();
	
	n2h16(psock->payload, &pmsg->src_app);
	n2h16(psock->payload + 2, &pmsg->dst_app);
	n2h16(psock->payload + 4, &pmsg->dst_obj);
	n2h16(psock->payload + 6, &pmsg->sub_idx);
	
	pmsg->src_port = psock->src_port;
	pmsg->src_ip = psock->src_ip;
	
	PutSock(psock);

	switch(pmsg->dst_app) {
		case EPA_MIB_APP_ID:
			MIBRead(pmsg->dst_obj, pmsg->sub_idx, msg_id, pmsg->src_app, pmsg->src_port, pmsg->src_ip);
			FreeEPAMsg(pmsg);
			break;
		default:
			FreeEPAMsg(pmsg);
	}	
#else
	uint16 src_app, dst_app, dst_obj, sub_idx, src_port;
	uint32 src_ip;
	
#if NS_MODULE_EN > 0
	if((com_type & NS_COM_TYPE) && NSVerify(psock)) {
		PutSock(psock);
		return;
	}
#endif	// NS_MODULE_EN

	n2h16(psock->payload, &src_app);
	n2h16(psock->payload + 2, &dst_app);
	n2h16(psock->payload + 4, &dst_obj);
	n2h16(psock->payload + 6, &sub_idx);
	src_port = psock->src_port;
	src_ip = psock->src_ip;
	PutSock(psock);
#if NS_MODULE_EN > 0
	if((com_type & NS_COM_TYPE) && NS_ACCtrl_Chk(dst_app, dst_obj, src_app, 0, EVS_READ)) {
		Read_Neg_Output(src_app, 1, 0, 0, msg_id, src_port, src_ip);
		return;
	}
#endif	// NS_MODULE_EN
	
	switch(dst_app) {
		case EPA_MIB_APP_ID:
			MIBRead(dst_obj, sub_idx, msg_id, src_app, src_port, src_ip);
			break;
	}
#endif	
}

void Read_Pos_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	PutSock(psock);
}

void Read_Neg_Input(PSock psock, uint8 com_type, uint16 msg_id) {
	PutSock(psock);
}

void Write_Output(uint16 src_app, uint16 dst_app, uint16 dst_obj, uint16 sub_idx, OctetString data, uint32 len, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_WRITE(len), EPA_PORT, dst_ip, NISelect(dst_ip));
 
	h2n16(src_app, psock->payload);
	h2n16(dst_app, psock->payload + 2);
	h2n16(dst_obj, psock->payload + 4);
	h2n16(sub_idx, psock->payload + 6);
    
	EPAOutput(psock, EVS_WRITE, EPA_COM_TYPE, EPA_MSG_ID);
}

void Write_Pos_Output(uint16 src_app, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_WRITE_POS, dst_port, dst_ip, NISelect(dst_ip));

	h2n16(src_app,psock->payload);
	 
	EPAOutput(psock, EVS_WRITE_POS, EPA_COM_TYPE, msg_id);
}

void Write_Neg_Output(uint16 src_app, uint8 err_class, uint8 err_code, uint8 add_code, uint16 msg_id, uint16 dst_port, uint32 dst_ip) {
	PSock psock;

	psock = GetSock(PROTOCOL_EPA_FB, LEN_WRITE_NEG, dst_port, dst_ip, NISelect(dst_ip));

	h2n16(src_app, psock->payload);
	psock->payload[2] = EPA_RESERVED_VALUE;
	psock->payload[3] = EPA_RESERVED_VALUE;
 	psock->payload[4] = err_class;
	psock->payload[5] = err_code;
	psock->payload[6] = add_code;
	psock->payload[7] = EPA_RESERVED_VALUE;
	memcpy(psock->payload + 8, gErr_Des[err_class][err_code], VISUAL_STRING_LEN);

	EPAOutput(psock, EVS_WRITE_NEG, EPA_COM_TYPE, msg_id);
}	

void Write_Input(PSock psock, uint8 com_type, uint16 msg_id) {   
	uint16 src_app, dst_app, dst_obj, sub_idx;

	n2h16(psock->payload, &src_app);
	n2h16(psock->payload + 2, &dst_app);
	n2h16(psock->payload + 4, &dst_obj);
	n2h16(psock->payload + 6, &sub_idx);

	switch(dst_app) {
		case EPA_MIB_APP_ID:
			MIBWrite(dst_obj, sub_idx, psock->payload + 8, msg_id, src_app, psock->src_port, psock->src_ip);
			break;
	}	
	PutSock(psock);
}

void Write_Pos_Input(PSock psock, uint8 com_type, uint16 msg_id) {

	PutSock(psock);
}

void Write_Neg_Input(PSock psock, uint8 com_type, uint16 msg_id) {

	PutSock(psock);
} 

void Distribute_Output(uint16 src_app, uint16 src_obj, OctetString data, uint16 len) {
	PSock psock;
	uint8 com_type, protocol;

	com_type = EPA_COM_TYPE;
	protocol = PROTOCOL_EPA_FB;

#if NS_MODULE_EN > 0
    uint8  sec_type;
	sec_type = GetSecMode();
	if(sec_type) {
		com_type |= NS_COM_TYPE;
		protocol += EPA_NS_HEAD_LEN;
	}
#endif	// NS_MODULE_EN

	psock = GetSock(protocol, LEN_DISTRIBUTE(len), EPA_PORT, BCInetAddr(gDefNI), gDefNI);
	h2n16(src_app, psock->payload);
	h2n16(src_obj, psock->payload + 2);
	memcpy(psock->payload + 4, data, len);

#if NS_MODULE_EN > 0
	if(com_type & NS_COM_TYPE) {
		ShiftSock(psock, PROTOCOL_EPA_NSFB, PROTOCOL_EPA_FB);
		psock->payload[0] = sec_type;
		psock->payload[1] = 0;
		SECencrypt(psock);
		SECoutmd(psock);
	}
#endif	// NS_MODULE_EN
     
	EPAOutput(psock, EVS_DISTRIBUTE, com_type, EPA_MSG_ID);
}

void Distribute_Input(PSock psock, uint8 com_type, uint16 msg_id) {

	PutSock(psock);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -