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

📄 nat_tcp_state.c

📁 vxworks下ppp的实现源码
💻 C
字号:
/* nat_configure.c *//* Copyright 2000-2003 Wind River Systems, Inc. *//* @format.tab-size 4, @format.use-tabs true, @format.new-line lf *//*modification history--------------------01a,23apr03,zhu  updated copyrightDate	Init	Comment080701	tk		Add code to make an event callback to the external agent upon				TCP session termination.*/#include "nat.h"/************************************************************************/void tcp_state_transistion_global_rx (BYTE_ENUM (NAT_TCP_STATE_INPUT) state_input,	TCP_TRANSLATION_ENTRY *sptr_tcp_translation_entry){	BYTE_ENUM (NAT_TCP_PORT_STATE) current_state;	nat_printf (NAT_PRINTF_TRACE, "TCP state transition (inbound packet)\n");	if (state_input == NAT_ACK)		{		current_state = sptr_tcp_translation_entry->local_state;			sptr_tcp_translation_entry->local_state = 			nat.tcp_state_table[current_state].transistion_table[state_input].next_state;		if (nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value != NULL)			{			sptr_tcp_translation_entry->local_connection_timer = 				*nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value;			}		nat_printf (NAT_PRINTF_TRACE, "local state = %d, next state = %d\n",			current_state, sptr_tcp_translation_entry->local_state);		}	else		{		current_state = sptr_tcp_translation_entry->global_state;		sptr_tcp_translation_entry->global_state = 			nat.tcp_state_table[current_state].transistion_table[state_input].next_state;		if (nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value != NULL)			{			sptr_tcp_translation_entry->global_connection_timer = 				*nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value;			}		if (nat.tcp_state_table[current_state].transistion_table[state_input].fptr_transistion_function != NULL)			{			(*nat.tcp_state_table[current_state].transistion_table[state_input].fptr_transistion_function)				(state_input, current_state, GLOBAL_RX_PACKET, sptr_tcp_translation_entry);			}		nat_printf (NAT_PRINTF_TRACE, "global state = %d, next state = %d\n",				current_state, sptr_tcp_translation_entry->global_state);		}}/************************************************************************/void tcp_state_transistion_local_rx (BYTE_ENUM (NAT_TCP_STATE_INPUT) state_input,	TCP_TRANSLATION_ENTRY *sptr_tcp_translation_entry){	BYTE_ENUM (NAT_TCP_PORT_STATE) current_state;	NAT_EVENT_INFO	event_info;	nat_printf (NAT_PRINTF_TRACE, "TCP state transition (outbound packet)\n");	if (state_input == NAT_ACK)		{		current_state = sptr_tcp_translation_entry->global_state;			sptr_tcp_translation_entry->global_state = 			nat.tcp_state_table[current_state].transistion_table[state_input].next_state;		if (nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value != NULL)			{			sptr_tcp_translation_entry->global_connection_timer = 				*nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value;			}		nat_printf (NAT_PRINTF_TRACE, "global state = %d, next state = %d\n",			current_state, sptr_tcp_translation_entry->global_state);		}	else		{		current_state = sptr_tcp_translation_entry->local_state;		sptr_tcp_translation_entry->local_state = 			nat.tcp_state_table[current_state].transistion_table[state_input].next_state;		if (nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value != NULL)			{			sptr_tcp_translation_entry->local_connection_timer = 				*nat.tcp_state_table[current_state].transistion_table[state_input].new_connection_timer_value;			}		if (nat.tcp_state_table[current_state].transistion_table[state_input].fptr_transistion_function != NULL)			{			(*nat.tcp_state_table[current_state].transistion_table[state_input].fptr_transistion_function)				(state_input, current_state, LOCAL_RX_PACKET, sptr_tcp_translation_entry);			}		nat_printf (NAT_PRINTF_TRACE, "local state = %d, next state = %d\n",			current_state, sptr_tcp_translation_entry->local_state);		}	/* if TCP flag is set to FIN, and the packet is going to an external agent,	   make an event callback to the agent to notify the session termination.	*/	if (state_input == NAT_FIN)		{		if (nat.agent_info != NULL)			{			event_info.bind_info = (NAT_BIND_INFO *) sptr_tcp_translation_entry->bind_id;			if (nat.agent_info->event_callback == NULL)				{				return;				}			nat.agent_info->event_callback((u_long)&nat, 					nat.agent_info->id, NAT_BIND_TERMINATION, &event_info);			}		}}/************************************************************************/void tcp_reset_state_handler (BYTE_ENUM (NAT_TCP_STATE_INPUT) state_input,		BYTE_ENUM (NAT_TCP_PORT_STATE) current_state, BYTE_ENUM (NAT_PACKET_DIRECTION) packet_direction,		TCP_TRANSLATION_ENTRY *sptr_tcp_translation_entry){	PARAMETER_NOT_USED (current_state);	PARAMETER_NOT_USED (state_input);								if (packet_direction == LOCAL_RX_PACKET)		{		tcp_state_transistion_global_rx (NAT_FORCED_RESET, sptr_tcp_translation_entry);		}	else		{		tcp_state_transistion_local_rx (NAT_FORCED_RESET, sptr_tcp_translation_entry);		}}/************************************************************************/void tcp_syn_state_handler (BYTE_ENUM (NAT_TCP_STATE_INPUT) state_input,		BYTE_ENUM (NAT_TCP_PORT_STATE) current_state, BYTE_ENUM (NAT_PACKET_DIRECTION) packet_direction,		TCP_TRANSLATION_ENTRY *sptr_tcp_translation_entry){	PARAMETER_NOT_USED (current_state);	PARAMETER_NOT_USED (state_input);			if (packet_direction == LOCAL_RX_PACKET)		{		delete_sequence_entry_list (&sptr_tcp_translation_entry->local_sequence_delta_list);		}	else		{		delete_sequence_entry_list (&sptr_tcp_translation_entry->global_sequence_delta_list);		}}

⌨️ 快捷键说明

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