📄 cms_wtpstatedecl.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 + -