入站的数据
本部分介绍从应用程序到本地节点的入站数据流。 所述协议的总体结构适用于系统服务控制点 (SSCP) 和主逻辑单元 (PLU) 连接,但更多复杂功能(例如使用延迟请求模式)仅适用于 PLU 连接。
应用程序可以在任何连接上发送入站数据,如下所示:
用于主机 SSCP 的功能管理数据网络服务 (FMD NS)(会话服务)和功能管理数据 (FMD) 字符编码数据应发送到 SSCP 连接上的本地节点。
用于主机 PLU 的 FMD 数据应发送到 PLU 连接上的本地节点。
应用程序不能使用 Data 消息向主机发送数据流控制 (DFC) 或会话控制请求消息。 它必须使用 Status-Control 消息。 (有关详细信息,请参阅 Status-Control 消息。)
对于所有连接,应用程序必须填写 Data 消息头中的某些关键字段。 特别是,它必须进行以下设置:
将消息类型设置为 DATAFMI。
为此连接上的入站 Data 消息分配新的消息键。
根据需要设置 ACKRQD 字段。
设置应用程序标志。 (有关详细信息,请参阅应用程序标志。)
消息头中的 nxtqptr、hdreptr 和 numelts 字段以及消息元素中的 elteptr 和 startd 字段由 Host Integration Server 缓冲区管理历程进行设置 。 (有关详细信息,请参阅 DL-BASE/DMOD 接口。)应用程序负责设置 endd 字段。
如果应用程序无法访问这些例程(例如,如果操作环境不支持任务间过程调用和共享内存),则必须由应用程序设置消息头中的所有字段。
传输头 (TH) 和响应头 (RH) 指示符对于入站 Data 消息上的应用程序不可用。 应用程序应在消息头中设置相应的应用程序标志,以控制链接、方向等。 有关入站数据的可用应用程序标志的说明以及本节后面主题中有关如何使用标志控制入站数据流的说明,请参阅应用程序标志。
对于入站数据,标准功能管理接口的第一个字节为 RU[0]。
本地节点使用应用程序在入站 Data 消息头中提供的消息键来指示出站 Status-Acknowledge 在此连接上所引用的 Data 消息。 应用程序应维护与本地节点的每个连接上的入站数据流的唯一消息键序列,以便应用程序可以使用消息键来关联连接上的入站 Data 消息和出站 Status-Acknowledge 消息。 请注意,应用程序还必须在 Status-Control Request 消息上提供消息键,以区分多个 RQE LUSTAT 消息。
入站数据确认协议反映了会话上使用的辅助链响应协议和请求模式,如下所示:
消息头中设置了 ACKRQD 的入站 Data 消息生成 RQD 请求。
消息头中未设置 ACKRQD 的入站 Data 消息根据链响应协议生成 RQE 或 RQN 请求。
应用程序在设置了结束链指示符 (ECI) 应用程序标志的 Data 消息上只应设置 ACKRQD。
如果会话指定辅助进程使用即时请求模式,则在发送设置了 ACKRQD 的数据后,应用程序仍可继续发送 Data 消息,即使其尚未接收到该 Data 消息的 Status-Acknowledge 消息 。 消息在本地节点内排队,并在收到响应后逐步发送。
如果会话指定辅助进程使用延迟请求模式,则在发送设置了 ACKRQD 的 Data 消息后,应用程序可以继续发送 Data 消息。
如果应用程序在 Data 消息的消息头中设置了 ACKRQD 字段,则表示需要对此 Data 消息进行确认。 本地节点通过在同一连接上向应用程序发送 Status-Acknowledge 消息并使用与 Data 消息相同的消息键来确认入站 Data 消息。 (有关说明,请参阅本主题末尾的第一个图。)
本地节点通过其内部状态计算机处理来自应用程序的入站 Data 消息,为该流分配正确的 SNA 序列号或标识符,并将请求中的数据发送给主机。 请求的链响应类型取决于是否在 Data 消息中设置了 ACKRQD 以及会话参数 。
本地节点将主机的肯定响应映射到应用程序的 Status-Acknowledge(Ack)。 应用程序可以使用 Status-Acknowledge 中的消息键将确认与原始 Data 消息相关联。 因此,收到特定 Data 消息的 Status-Acknowledge(Ack) 表示本地节点已从主机接收到对入站 SNA 请求的肯定 SNA 响应。 (有关说明,请参阅本主题末尾的第二个图。)
请注意,响应在 SSCP-PU 会话中进行。
请注意,出站 Status-Acknowledge(Ack) 消息包含应用程序标志和序列号。 应用程序标志反映了响应中的 RH 指示符。 序列号是响应中的 SNA 序列号,为使用传输服务配置文件(TS 配置文件)4 的应用程序提供了跟踪与工作单元对应的 SNA 辅助序列号的机制。
本地节点将主机的肯定响应映射到应用程序的 Status-Acknowledge(Nack-1) 消息。 应用程序可以使用 Status-Acknowledge 中的消息键将否定确认与原始 Data 消息相关联。 出站 Status-Acknowledge(Nack-1) 消息包含来自否定响应的 SNA 检测代码和序列号。 (有关说明,请参阅本主题末尾的第三个和第四个图。)
如果本地节点在 Data 消息的格式中检测到错误,或 Data 消息不适合当前会话状态,则向应用程序发送包含错误代码的 Status-Acknowledge(Nack-2)。 (有关错误代码的列表,请参阅错误和检测代码。)本地节点不会向与出错的 Data 消息对应的主机发送请求,也不会发送会话的 SNA 序列号。 应用程序可以在下一个入站 Data 消息中使用任何消息键(前提是该错误不会导致严重故障)。
本主题末尾的最后一个图显示了一个严重的链接错误示例:应用程序发送 Data 消息,其中设置了 ACKRQD,但应用程序标志中没有 ECI。 请注意,在检测到该特定错误后,本地节点将应用程序的连接标记为严重故障,关闭连接,并向 SSCP 发送 TERM-SELF 请求以引发 UNBIND 。 (有关详细信息,请参阅恢复。)
导致生成加急流请求的入站 Status-Control 消息可以随时发送,并且不会影响向入站 Data 消息发送肯定或否定确认 。 有关哪些 Status-Control 消息对应于 SNA 加急流请求的详细信息,请参阅 Status-Control 消息。
以下五个图举例说明了针对不同链响应类型和辅助会话请求模式的入站数据确认协议(以及基础 SNA 协议)。
这些图形展示了以下内容:
Data 消息中的 ACKRQD 字段。
Data 消息上的消息键。
Data 消息上的任何相关应用程序标志。
Data 消息上的错误代码(显示为“ERROR=...”)。
SNA 请求/响应上的相关 RH 标志。
SNA 请求/响应上的序列号。
SNA 请求/响应上的检测代码(显示为“SENSE=....”)。
为简单起见,我们假定所有消息都在同一 PLU 会话上传输。
在下图中,应用程序成功发送 Data 消息。
应用程序成功发送 Data 消息在下图中,应用程序成功发送 Data 消息链。
应用程序成功发送 Data 消息链在下图中,主机拒绝 Data 消息链。
主机拒绝 Data 消息链在下图中,主机拒绝第一个确切响应链,并拒绝延迟请求会话上的第三个异常响应链。 请注意,对第三个链的负面响应意味着对第二个链的正面响应。
主机拒绝第一个确切响应链在下图中,本地节点检测到应用程序在 Data 消息上没有设置 ECI 应用程序标志的情况下无效使用 ACKRQD 。 请注意,不会向主机发送任何数据。 但是,由于属于严重错误,本地节点将向 SSCP 发送 TERM-SELF 消息。
本地节点检测到应用程序在 Data 消息上没有设置 ECI 应用程序标志的情况下无效使用 ACKRDQ