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

📄 cms_wtpstatedecl.h

📁 wap 协议栈 包括1.2 和2.0 由c开发 基于brew平台
💻 H
字号:
/******************************************************************************

 C   H E A D E R   F I L E

 (c) Copyright MobileSoft Technology (NanJing) Co.,LTD. 2001-2002
 ALL RIGHTS RESERVED

*******************************************************************************

 Project Name: WAP STACK Ver 1.20
 
 File Name   : Cms_WTPStateDecl.h

 Description : To Implement Browser application

 Last Modify : 06/22/2002
 
 Written By  : Mobilesoft Technology

******************************************************************************/

/* 状态转换的宏定义 */

STATE_NAME(WTP_NULL)
STATE_NAME(WTP_RESULT_WAIT)
STATE_NAME(WTP_SEG_SEND_ACK_WAIT)  //self-define state
STATE_NAME(WTP_RESULT_RESP_WAIT)
STATE_NAME(WTP_WAIT_TIMEOUT)

/*********************************************************/

ROW(WTP_NULL,
	TRInvokeRequire,
	(event->user_data->len <= WTP_PACKET_SIZE && !event->big_data&& (event->TRInvokeRequire.tcl == 2 || event->TRInvokeRequire.tcl == 1)),
	{
		null_trir_allsend_rw(machine,event);
	},
	WTP_RESULT_WAIT)


/*Because of the CECW message mechanism ,I self-define new state WTP_SEG_SEND_ACK_WAIT
  When send segment PDU,we wait the ack pdu to send the next segment PDU.*/

ROW(WTP_NULL,
	TRInvokeRequire,
	(event->big_data && (event->TRInvokeRequire.tcl == 2 || event->TRInvokeRequire.tcl == 1)),
	{
		null_trir_segsend_rw(machine,event);
	},
	WTP_SEG_SEND_ACK_WAIT)


ROW(WTP_SEG_SEND_ACK_WAIT,
	TRAbort,
	1,
	{
		wssaw_abort_1_null(machine,event);
	},
	WTP_NULL)

ROW(WTP_SEG_SEND_ACK_WAIT,
	RcvErrorPDU,
	1,
	{
		wssaw_rcverrpdu_1_null(machine,event);
	},
	WTP_NULL)

ROW(WTP_SEG_SEND_ACK_WAIT,
	RcvAbort,
	1,
	{
		wssaw_rcvabort_1_null(machine,event);
	},
	WTP_NULL)

ROW(WTP_SEG_SEND_ACK_WAIT,
	RcvAck,
	(machine->InvokeEvent->RcvInvoke.packet_count != 1   && event->RcvAck.psn == WTPGlobalMachine->psn),
	{
		wssaw_ra_21_wssaw(machine,machine->InvokeEvent);
	},
	WTP_SEG_SEND_ACK_WAIT)

ROW(WTP_SEG_SEND_ACK_WAIT,
	TimerTO_R,
	(WTPRCR < MAX_RCR) && (machine->InvokeEvent->RcvInvoke.packet_count != 0),
	{
		wssaw_tim_rcrltmax_wssaw(machine,event);
	},
	WTP_SEG_SEND_ACK_WAIT)

ROW(WTP_SEG_SEND_ACK_WAIT,
	TimerTO_R,
	(WTPRCR == MAX_RCR) && (machine->InvokeEvent->RcvInvoke.packet_count != 0),
	{
		wssaw_tim_rcreqmax_null(machine,event);
	},
	WTP_NULL)

ROW(WTP_SEG_SEND_ACK_WAIT,
	RcvAck,
	((machine->InvokeEvent->RcvInvoke.packet_count == 1) && (event->RcvAck.psn == WTPGlobalMachine->psn)),
	{
	   wssaw_ra_lastpacket_wssaw(machine,machine->InvokeEvent);
	},
	WTP_RESULT_WAIT)


ROW(WTP_RESULT_WAIT,
	TRAbort,
	(machine->tcl == 2 ),
	{
		rw_tra_2_null(machine,event);
	},
	WTP_NULL)
	
ROW(WTP_RESULT_WAIT,
	RcvErrorPDU,
	(machine->tcl == 2 ),
	{
		rw_rcverrpdu_2_null(machine,event);
	},
	WTP_NULL)

ROW(WTP_RESULT_WAIT,         
	RcvAbort,
	1 &&(machine->tid==(event->RcvAbort.tid & 0x7fff)),
	{
		rw_ra_1_null(machine,event);
	},
	WTP_NULL)

ROW(WTP_RESULT_WAIT,
	RcvAck,
	(machine->tcl == 2 )&&(machine->tid==(event->RcvAck.tid & 0x7fff))&&HoldOn == 0,
	{
		rw_ra_2_rw(machine,event);
	},
	WTP_RESULT_WAIT)

ROW(WTP_RESULT_WAIT,
	RcvAck,
	(machine->tcl == 2 )&&(machine->tid==(event->RcvAck.tid & 0x7fff)) && event->RcvAck.tid_ve && (WTPRCR < MAX_RCR),
	{
		rw_ra_tve_rw(machine,event);
	},
	WTP_RESULT_WAIT)

ROW(WTP_RESULT_WAIT,
	TimerTO_R,
	WTPRCR < MAX_RCR,
	{
		wrw_tim_rcrltmax_wrw(machine,event);
	},
	WTP_RESULT_WAIT)

ROW(WTP_RESULT_WAIT,
	TimerTO_R,
	WTPRCR < MAX_RCR && machine->ack_sended == 1,
	{
		wrw_tim_rcrltmaxtidok_wrw(machine,event);
	},
	WTP_RESULT_WAIT)

ROW(WTP_RESULT_WAIT,
	TimerTO_R,
	(WTPRCR == MAX_RCR),
	{
		wrw_tim_rcreqmax_wrw(machine,event);
	},
	WTP_NULL)

ROW(WTP_RESULT_WAIT,
	RcvSegResult,
	1,
	{
		RcvSegResult_Action(machine,event);	
	},
	WTP_RESULT_WAIT)

/* 一个分组中最后一个包到达 */
ROW(WTP_RESULT_WAIT,
	RcvResult,
	(event->RcvResult.gtr_ttr == 0x02) && (machine->tcl == 2) && (machine->tid==(event->RcvResult.tid & 0x7fff))/*&& HoldOn == 1*/,
	{		
		rw_rr_gt2_rrw(machine,event);
	},
	WTP_RESULT_WAIT)

/* 一个分组中的一个包到达 */
ROW(WTP_RESULT_WAIT,
	RcvResult,
	(event->RcvResult.gtr_ttr == 0x00) && (machine->tcl == 2) && (machine->tid==(event->RcvResult.tid & 0x7fff))/*&& HoldOn == 1*/,
	{		
		rw_rr_gt0_rrw(machine,event);
	},
	WTP_RESULT_WAIT)

/* 最后一个包到达 */
ROW(WTP_RESULT_WAIT,
	RcvResult,
	(event->RcvResult.gtr_ttr == 0x01) && (machine->tcl == 2) && (machine->tid==(event->RcvResult.tid & 0x7fff))/*&& HoldOn == 1*/,
	{		
		rw_rr_gt1_rrw(machine,event);
	},
	WTP_RESULT_RESP_WAIT)


ROW(WTP_RESULT_WAIT,
	TimerTO_N,
	(WTPNACK < MAX_NACK),
	{
		WTPNACK++;
		//wrw_tim_rcreqmax_wrw(machine,event);
		wrw_timn_wrw(machine,event);
	},
	WTP_RESULT_WAIT)

/* todo 因为不知道在哪里清零比较合适所以用了取模的偷懒方法,以后可能要改cfa 2005-12-9 */	
ROW(WTP_RESULT_WAIT,
	TimerTO_N,
	((WTPNACK+1) % MAX_NACK == 0 ),
	{
       wrw_timn_wrw_max(machine,event);
	},
	WTP_NULL)
	
ROW(WTP_RESULT_RESP_WAIT,
	TRResultResponse,
	1,
	{
		rrw_trrr_1_null(machine,event);
	},
	WTP_NULL)
	
ROW(WTP_RESULT_RESP_WAIT,
	RcvAbort,
	1,
	{
		wrrw_ra_1_null(machine,event);
	},
	WTP_NULL)  

ROW(WTP_RESULT_RESP_WAIT,
	TRAbort,
	1,
	{
		wrrw_tra_1_null(machine,event);
	},
	WTP_NULL)  


ROW(WTP_RESULT_RESP_WAIT,
	TimerTO_A,
	WTPAEC < MAX_AEC,
	{
	WTPAEC++;
    wtp_timer_start(&WTPGlobalTimer[0],L_A_WITHOUT_USER_ACK); 
	},
	WTP_RESULT_RESP_WAIT)

ROW(WTP_RESULT_RESP_WAIT,
	TimerTO_A,
	WTPAEC == MAX_AEC,
	{
		wrrw_timeout_aeceqmax_null(machine,event);
	},
	WTP_NULL)

/*
ROW(WTP_RESULT_RESP_WAIT,
	TimerTO_A,
	WTPUserAck,
	{
    wtp_timer_start(WTPGlobalTimer[2],L_W_WINDOW); 

	},
	WTP_WAIT_TIMEOUT)
*/

ROW(WTP_WAIT_TIMEOUT,
	RcvResult,
	1,
	{
		wt_rr_1_wt(machine,event);
	},
	WTP_WAIT_TIMEOUT)

ROW(WTP_WAIT_TIMEOUT,
	TimerTO_W,
	1,
	{
		wwt_tim_1_null(machine,event);
	},
	WTP_NULL)


ROW(WTP_WAIT_TIMEOUT,
	TRInvokeRequire,
	1,
	{ 
		WTPWorking = 0;
		wtp_handle_event(machine,event);
	},
	WTP_WAIT_TIMEOUT)

#undef ROW
#undef STATE_NAME




	

⌨️ 快捷键说明

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