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

📄 tcp__ext.c

📁 基于vxworks操作系统的电话语音平台系统
💻 C
字号:
#include "pub\pub_incl.h"
#include "pub\pub_defi.h"
#include "pub\modulers.h"
#include "pub\pub__msg.h"
#include "pub\modulers.h"

#include "NODE\node_msg.h"
#include "SYSM\SYS_DEFI.H"
#include "SYSM\SYS_DBMS.H"
#include "SYSM\SYS_DATA.H"
#include "SYSM\SYS__EXT.H"
#include "RTOS\VXWORKS\TCPIP\net_proc.h"

extern UC NetMsgHeadFlag[];
extern VOID ClearOneServerFsm( US port_num );
extern BOOL TcpSendMsuToDstManager(int sFd, UI len, VOID*buffer );
extern BOOL IsThereValidSocket( US port_num );


VOID ClientClose( US port_num )
{
	ClearOneServerFsm( port_num );
}

VOID TcpNetManSendMsgToDPC( US len, VOID * data )
{
	UI src_node;		
	UI dst_node;		
	UI port_num, msg_len;
	STRUCT MSG_STRUCT			* msg, * nmsg;
	STRUCT NET_UNIT_DATA_STRUCT * net_unit;
	NODE_PH_MSU_STRUCT			node_msu;

	msg = (STRUCT MSG_STRUCT *)data;
	net_unit = (STRUCT NET_UNIT_DATA_STRUCT *)(msg->data);

	dst_node = net_unit->dst_node;

	src_node = SysModData->node;

	msg_len = msg->len - NET_MSG_LOCATE_LEN;

	if ((src_node == dst_node) || (dst_node == 0xFFFF))
	{
		port_num = src_node;

		SendLetterToMail(msg->sender, msg->receiver, msg->msg_type,
			port_num, msg_len, net_unit->unit);
	}
	else
	{
		port_num = dst_node;

		nmsg = (STRUCT MSG_STRUCT*)(node_msu.sif);

		nmsg->sender	= msg->sender;
		nmsg->receiver	= msg->receiver;
		nmsg->msg_type	= msg->msg_type;
		nmsg->port_num	= port_num;
		nmsg->len		= GetValidValue(msg_len, MAX_DATA_LEN);

		node_msu.src_node	= src_node;
		node_msu.dst_node	= dst_node;
		node_msu.cic		= CIC_NETMAN_CMD;
		node_msu.sio		= SIO_NETMAN;
		node_msu.len		= (nmsg->len + MSG_HEAD_LEN);

		memcpy( nmsg->data, net_unit->unit, nmsg->len );

		SendLetterToMail(PID_NET_MAN, PID_BMTP, 0xFF, 0xFF,
			(nmsg->len + MSG_HEAD_LEN + NODE_PH_MSU_HEAD_LEN), &node_msu);
	}
}

BOOL TcpSendMsuToLocalManager(int tcpport_num, int sFd,  UI len, VOID * buffer )
{
	STRUCT MSG_STRUCT * msg;
	UC msg_buf[600];
	struct NET_UNIT_STRUCT * net_msg;
	UI src_node;
	UI dst_node;
	UI port_num, msg_len;

	msg = (STRUCT MSG_STRUCT *)buffer;

	memcpy( msg_buf, NetMsgHeadFlag, Flag_Len);

	net_msg = (struct NET_UNIT_STRUCT*)(msg_buf + Flag_Len);

	msg_len = GetValidValue(msg->len, MAX_UNIT_LEN);

	if ( msg->sender == PID_BMTP)
	{
		memcpy( net_msg, msg->data, msg_len );
		return ( send( sFd, msg_buf, (msg_len + Flag_Len), 0 ) != ERROR );
	}

	src_node = SysModData->node;

	dst_node = msg->port_num;

	port_num = src_node;

	if( port_num == msg->port_num || msg->port_num == 0XFFFF )
	{
		net_msg->sender		= msg->sender;
		net_msg->receiver	= msg->receiver;
		net_msg->unit_type	= msg->msg_type;
		net_msg->port_num	= msg->port_num;
		net_msg->len		= msg_len + NET_MSG_LOCATE_LEN;

		net_msg->src_node = src_node;
		net_msg->dst_node = dst_node;

		memcpy( net_msg->unit, msg->data, msg_len );

		return (send( sFd, msg_buf, net_msg->len + NET_MSG_HEAD_LEN + Flag_Len, 0 ) != ERROR );
	}

	return FALSE;
}

BOOL TcpIsThePacketToLocalNetManager(UI len, VOID * buffer)
{
	STRUCT MSG_STRUCT *msg;
	UI src_node;

	msg = (STRUCT MSG_STRUCT *)buffer;

	src_node = GetSysNodeNum();

	return ( (src_node == msg->port_num) || (msg->port_num == 0xFFFF) );
}

BOOL TcpIsThePacketSenderIsDlcc(UI len, VOID* buffer)
{
	STRUCT MSG_STRUCT *msg;

	msg = (STRUCT MSG_STRUCT *)buffer;

	return (PID_DLCC_SYSMAN == msg->sender);
}

BOOL TcpSendMsuToRemoteManager(UI len, VOID * buffer )
{
	STRUCT MSG_STRUCT *msg;
	NODE_PH_MSU_STRUCT node_msu;
	UI src_node;
	UI dst_node;
	UI msg_len;

	msg = (struct MSG_STRUCT *)buffer;

	dst_node = msg->port_num;

	src_node = GetSysNodeNum();

	msg_len = GetValidValue(len, MAX_FRAME_LEN);

	if ((src_node != msg->port_num) && (msg->port_num != 0xFFFF))
	{
		node_msu.src_node	= src_node;
		node_msu.dst_node	= dst_node;
		node_msu.cic		= CIC_NETMAN_RES;
		node_msu.sio		= SIO_NETMAN;
		node_msu.len		= msg_len;

		memcpy(node_msu.sif, buffer, msg_len);

		SendLetterToMail(PID_NET_MAN, PID_BMTP, 0XFF, msg->port_num,
			msg_len + NODE_PH_MSU_HEAD_LEN, &node_msu);

		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

⌨️ 快捷键说明

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