当前位置:首页 > 轻量级STEP会话层接口规范1.00
Version1.00
轻量级STEP会话层接口规范 2015-08-28
附 录 F (计算校验和) 计算校验和
以下为计算校验和的代码段:
char *GenerateCheckSum( char *buf, long bufLen ) {
static char tmpBuf[ 4 ];
}
for( idx = 0L, cks = 0; idx < bufLen; cks += (unsigned int)buf[ idx++ ] ); sprintf( tmpBuf, “d”, (unsigned int)( cks % 256 ) ); return( tmpBuf ); long idx; unsigned int cks;
第32页共38页
Version1.00
轻量级STEP会话层接口规范 2015-08-28
附 录 G (状态转换参考图) LFIXT会话协议状态转换参考图
初始状态CONNECTED计数超标-------------断开连接TCP连接建立------------------------初始化序号。如果是客户端,额外发送LOGON。启动一次性LOGON超时等待时钟计数未超标-------------需要发送 APP_MSG ------------------------发送 APP_MSG,重置心跳发送时钟收到 Heart_Beat ------------------重置心跳接收时钟,接收超时计数归0收到 APP_MSG ------------------------重置心跳接收时钟和计数,把消息投递给应用层WAIT_FOR_LOGONLOGON 等待超时-----------------断开连接心跳接收时钟超时 -----------------------增加接收超时计数收到 LOGON-------------HAS_LOGONLOGON认证失败-----------------发送 LOGOUT, 断开连接LOGON 认证成功-----------------------如果是服务端,额外发送 LOGON。启动心跳发送时钟,启动心跳接收时钟收到 LOGOUT ---------------------发送 LOGOUT ,断开连接收到 TEST_REQUEST ------------------------发送HEART_BEAT, 重置心跳发送时钟,重置心跳接收时钟和计数心跳发送时钟超时 ----------------------发送 HEART_BEAT,重收到 RESEND_REQUEST 置心跳发送时钟------------------------发送SEQRESET_RESET,重置心跳接收时钟和计数,重置心跳发送时钟收到 SEQRESET_RESET ------------------------调整序号,重置心跳接收时钟和计数WITHOUT_LOGOUT接到应用层指示需主动发起LOGOUT---------------------------发送 LOGOUT, 启动L一次性OGOUT超时等待时钟,重置心跳发送时钟网络IO异常,报文解析异常--------------断开连接收到 SEQRESET_GAPFILL ------------------------调整序号,重置心跳接收时钟和计数收到 REJECT ------------------------记录日志,调整序号,重置心跳接收时钟和计数心跳接收超时, 收到不可忽略且非预期的管理报文-------------------------------------------发送LOGOUT, 断开连接WAIT_FOR_LOGOUT收到 LOGOUT、LOGOUT等待超时 ---------------------------断开连接需要主动重置会话-----------------------发送 LOGON(RESET)。启动一次性LOGON超时等待时钟报文解析成功但格式不对------------------------发送REJECT, 记录日志LOGON(RESET) 等待超时-----------------断开连接WAIT_FOR_RESET收到 LOGON(RESET)------------------------收到其他消息-------------简单忽略收到 LOGON(RESET)-------------LOGON(RESET) 认证成功-----------------------如果出发状态不是WAIT_FOR_RESET:发送LOGON(RESET)。重置序号和时钟LOGON(RESET)认证失败-----------------发送 LOGOUT, 断开连接
此图可以作为LFIX引擎实现的参考,但不能替代真实LFIX引擎开发的设计文档。若和正文有不一致,一律以协议正文为准。
第33页共38页
Version1.00
轻量级STEP会话层接口规范 2015-08-28
附 录 H (实现参考) LFIXT会话协议实现参考
本参考若和协议正文不一致,一律以协议正文为准。
本参考按所收到的不同消息分别说明所需进行的最基本校验,以及在通过完整校验后的最基本处理。所谓“最基本校验”和“最基本处理”,并不意味着仅仅实现这些内容就足以构成一个正确的LFIXT引擎,而是说任何正确的LFIXT引擎都必须覆盖这些校验和处理。因此它们是正确的LFIXT引擎的必要但不充分条件。
根据标准FIX协议正文,有些管理消息的PossDupFlag不可以是Y,但同时也规定了接收方要能够容忍对方错误地发出此种消息,但收到此种消息时只将其用于序号处理,而不管消息本身的类型和内容。本参考中,对于标注了“PossDupFlag不能是Y”的入向消息,如果真的收到了PossDupFlag被设置为Y的此类消息,约定先在内部将其转换为一条PossDupFlag是Y的SeqReset-GapFill入向消息后,再按SeqReset-GapFill消息进行处理。
除了已知的若干种特别情形以外,一律不允许入向消息的MsgSeqNum出现跳空缺口,而是必须连续递增。
1. Logon消息
收到消息类型:Logon LFIX引擎可以发出:是 消息的最基本校验:
PossDupFlag不能是Y
如果是带RESET的LOGON消息—— ResetSeqNumFlag =Y 不需要校验MsgSeqNum是否出现逆转 否则
如果该消息是LOGON的发起消息,必须MsgSeqNum = 1, NextExpectedMsgSeqNum = 1
如果该消息是LOGON的响应消息,必须MsgSeqNum = 1, NextExpectedMsgSeqNum = 2
第34页共38页
Version1.00 轻量级STEP会话层接口规范 2015-08-28
也不需要校验MsgSeqNum是否出现逆转,因为作为TCP建立后收到的第接收方的NxtIn = 1, NxtOut = 1, 因此MsgSeqNum 一个消息, 消息的最基本处理: 如果是带RESET的LOGON消息,处理方式见正文。 对于其他LOGON消息,令NxtOut = NextExpectedMsgSeqNum, NxtIn = MsgSeqNum + 1 2. Heartbeat消息 收到消息类型:Heartbeat LFIX引擎可以发出:是 消息的最基本校验: PossDupFlag不能是Y MsgSeqNum <> NxtIn 意味着严重错误 NxtIn = MsgSeqNum + 1 清接收超时计时器和计数 3. TestRequest消息 消息的最基本处理: 收到消息类型:TestRequest LFIX引擎可以发出:否 消息的最基本校验: PossDupFlag不能是Y MsgSeqNum <> NxtIn 意味着严重错误 消息的最基本处理: NxtIn = MsgSeqNum + 1 回送Heartbeat消息,清发送超时计时器和计数,清发送超时计时器, 4. ResendRequest消息 收到消息类型:ResendRequest LFIX引擎可以发出:否 第35页共38页
共分享92篇相关文档