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

📄 udp.c

📁 包括EPA协议栈
💻 C
字号:
#include "tcpip.h"
#include "router.h"

#if EPA_MODULE_EN > 0
#include "epa.h"
#endif	// EPA_MODULE_EN

#if PTP_MODULE_EN > 0
#include "ptp_module.h"
#endif	// PTP_MODULE_EN

uint8 UDPInput(PSock psock) {
	uint16 dst_port, length, chksum;

	n2h16(psock->payload, &psock->src_port);
	n2h16(psock->payload + 2, &dst_port);
	n2h16(psock->payload + 4, &length);
	n2h16(psock->payload + 6, &chksum);
	
#if UDP_VALIDCHK_EN > 0
	if(length != psock->length) {
		PutSock(psock);
		return (1);
	}
	h2n32(psock->srcip, psock->payload - 12);
	h2n32(psock->pni->ip, psock->payload - 8);
	*(psock->payload - 4) = 0;
	*(psock->payload - 3) = UDP_PROTOCOL;
	h2n16(psock->length, psock->payload - 2);
	if(ChkSum(psock->payload - 12, length + 12)) {
		PutSock(psock);
		return (1);
	}
#endif	// UDP_VALIDCHK_EN

	ShiftSock(psock, PROTOCOL_UDP_OR_ICMP, PROTOCOL_UDP_DATA);
	switch(dst_port) {
	
#if EPA_MODULE_EN > 0
		case EPA_PORT:
			OSQPost(gpEPAMsgQ, psock);
			break;
#endif	// EPA_MODULE_EN


#if RIP_MODULE_EN >0
        case RIP_PORT:
			RIPInput(psock);
			break;
#endif  //RIP_MODULE_EN

#if PTP_MODULE_EN > 0
		case PTP_EVENT_PORT:
		case PTP_GERNERAL_PORT:
			OSQPost(gpPTProcMsgQ, psock);
			break;
#endif	// PTP_MODULE_EN
		default:
			PutSock(psock);
	}
	return (0);
}

uint8 UDPOutput(PSock psock) {
#if UDP_VALIDCHK_EN > 0
	uint16 chksum;
#endif	// UDP_VALIDCHK_EN
	
	ShiftSock(psock, PROTOCOL_UDP_DATA, PROTOCOL_UDP_OR_ICMP);
	h2n16(psock->src_port, psock->payload);
	h2n16(psock->dst_port, psock->payload + 2);
	h2n16(psock->length, psock->payload + 4);
	psock->payload[6] = 0;
	psock->payload[7] = 0;
	
#if UDP_VALIDCHK_EN
	h2n32(psock->pni->ip, psock->payload - 12);
	h2n32(psock->dstip, psock->payload - 8);
	*(psock->payload - 4) = 0;
	*(psock->payload - 3) = UDP_PROTOCOL;
	h2n16(psock->length, psock->payload - 2);
	chksum = ChkSum(psock->payload - 12, 8 + psock->length);
	h2n16(chksum, psock->payload + 6);
#endif	// UDP_VALIDCHK_EN

	IPOutput(psock, UDP_PROTOCOL);
	return (0);
}

⌨️ 快捷键说明

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