RUI_READ

RUI_READ谓词将响应、SNA 命令和数据接收到 Microsoft® Windows® 逻辑单元应用程序 (LUA) 应用程序缓冲区中。

以下结构描述了 RUI_READ 使用的谓词控制块 (VCB) LUA_COMMON成员。

语法

  
struct LUA_COMMON {  
    unsigned short lua_verb;  
    unsigned short lua_verb_length;  
    unsigned short lua_prim_rc;  
    unsigned long  lua_sec_rc;  
    unsigned short lua_opcode;  
    unsigned long  lua_correlator;  
    unsigned char  lua_luname[8];  
    unsigned short lua_extension_list_offset;  
    unsigned short lua_cobol_offset;  
    unsigned long  lua_sid;  
    unsigned short lua_max_length;  
    unsigned short lua_data_length;  
    char FAR *     lua_data_ptr;  
    unsigned long  lua_post_handle;  
    struct LUA_TH  lua_th;  
    struct LUA_RH  lua_rh;  
    struct LUA_FLAG1 lua_flag1;  
    unsigned char  lua_message_type;  
    struct LUA_FLAG2 lua_flag2;   
    unsigned char  lua_resv56[7];  
    unsigned char  lua_encr_decr_option;  
};  

成员

lua_verb
提供的参数。 包含谓词代码、请求单元接口 (RUI) 谓词的LUA_VERB_RUI。

lua_verb_length
提供的参数。 指定 LUA VCB 的长度(以字节为单位)。 它必须包含要发出的谓词记录的长度。

lua_prim_rc
由 LUA 在谓词完成时设置的主要返回代码。 有效的返回代码因发出的 LUA 谓词而异。

lua_sec_rc
由 LUA 在谓词完成时设置的辅助返回代码。 有效的返回代码因发出的 LUA 谓词而异。

lua_opcode
提供的参数。 包含 LUA 命令代码 (要发出谓词的谓词操作代码) ,LUA_OPCODE_RUI_READ。

lua_correlator
提供的参数。 包含用户提供的值,该值将谓词与其他用户提供的信息链接在一起。 LUA 不使用或更改此信息。 此参数是可选的。

lua_luname
提供的参数。 指定 Windows LUA 会话使用的本地 LU 的 ASCII 名称。

仅当lua_sid 为零时 ,RUI_READ 才需要此参数。

此参数长度为 8 个字节,如果名称短于 8 个字符,则用空格 (0x20) 在右侧填充。

lua_extension_list_offset
HOST Integration Server 中的 RUI 未使用,应设置为零。

lua_cobol_offset
MICROSOFT® Host Integration Server 中的 LUA 未使用,应为零。

lua_sid
提供并返回的参数。 指定会话标识符,由 SLI_OPENRUI_INIT 返回。 其他谓词使用此参数来标识用于命令的会话。 如果其他谓词使用 lua_luname 参数来标识会话,请将 lua_sid 参数设置为零。

lua_max_length
指定RUI_READSLI_RECEIVE的接收缓冲区的长度。 其他 RUI 和 SLI 谓词不使用,应设置为零。

lua_data_length
返回的参数。 指定RUI_BID谓词lua_peek_data 中返回的数据长度。

lua_data_ptr
指向应用程序提供的缓冲区的指针,该缓冲区用于从 RUI_READ 谓词接收数据。 SNA 命令和数据都放置在此缓冲区中,它们可以采用 EBCDIC 格式。

发出 RUI_READ 时,此参数指向从主机接收数据的位置。

lua_post_handle
提供的参数。 如果异步通知要由事件完成,则用于 Microsoft Windows Server 下。 此变量包含要发出信号的事件的句柄或窗口句柄。

lua_th
返回的参数。 包含发送或接收的消息的 SNA 传输标头 (TH) 。 为写入函数设置各种子参数,并为读取和出价函数返回。 其子参数如下所示:

lua_th.flags_fid

格式标识类型 2,4 位。

lua_th.flags_mpf

分段映射字段,两位。 定义数据段的类型。 以下为有效值:

0x00 中间段0x04 最后一段0x08 第一段0x0C 仅限段

lua_th.flags_odai

源地址字段 - 目标地址字段 (OAF–DAF) 分配器指示器,一位。

lua_th.flags_efi

加速流指示器,一位。

lua_th.daf

目标地址字段 (DAF) ,无符号字符。

lua_th.oaf

源地址字段 (OAF) ,一个无符号字符。

lua_th.snf

序列号字段,无符号字符[2]。

lua_rh
返回的参数。 包含发送或接收的消息的 SNA 请求/响应标头 (RH) 。 它为写入函数设置,并由读取和出价函数返回。 其子参数如下所示:

lua_rh.rri

请求-响应指示器,一位。

lua_rh.ruc

RU 类别,两位。 以下为有效值:

LUA_RH_FMD (0x00) FM 数据段LUA_RH_NC (0x20) 网络控制LUA_RH_DFC (0x40) 数据流 控制LUA_RH_SC (0x60) 会话控制

lua_rh.fi

格式指示器,一位。

lua_rh.sdi

感知数据包括指示器,一位。

lua_rh.bci

开始链指示器,一位。

lua_rh.eci

端链指示器,一位。

lua_rh.dr1i

确定响应 1 指示器,1 位。

lua_rh.dr2i

确定响应 2 指示器,一位。

lua_rh.ri

请求) 的异常响应指示符 (,或响应) 的响应类型指示器 ((1 位)。

lua_rh.qri

排队响应指示器,一位。

lua_rh.pi

节奏指示器,一位。

lua_rh.bbi

开始方括号指示器,一位。

lua_rh.ebi

端括号指示器,一位。

lua_rh.cdi

更改方向指示器,一位。

lua_rh.csi

代码选择指示器,一位。

lua_rh.edi

加密数据指示器,一位。

lua_rh.pdi

填充数据指示器,一位。

lua_flag1
提供的参数。 包含包含应用程序提供的消息标志的数据结构。 其子参数如下所示:

lua_flag1.bid_enable

出价启用指示器,一位。

lua_flag1.close_abend

关闭即时指示器,一位。

lua_flag1.nowait

无需等待数据标志,一位。

lua_flag1.sscp_exp

SSCP 加速流,一位。

lua_flag1.sscp_norm

SSCP 正常流,一位。

lua_flag1.lu_exp

LU 加速流,一位。

lua_flag1.lu_norm

LU 正常流,一位。

lua_flag1.nowait 设置为 1 以指示希望 RUI_READ 立即返回数据是否可供读取;如果希望谓词在返回数据之前等待数据,则将其设置为零。

lua_flag1.bid_enable 设置为 1 可重新 启用与) 之前完全相同的参数再次发出 RUI_BID 等效的最新RUI_BID (;如果不想重新启用RUI_BID,则将其设置为

重新启用以前的 RUI_BID 会重复使用最初为其分配的 VCB,因此此 VCB 不得被释放或修改。

将以下一个或多个标志设置为 1 以指示从哪个消息流读取数据:

lua_flag1.sscp_exp

lua_flag1.lu_exp

lua_flag1.sscp_norm

lua_flag1.lu_norm

如果设置了多个标志,则返回可用的最高优先级数据。 优先级 (最高) 顺序为:SSCP 加速、LU 加速、SSCP 正常、LU 正常。 lua_flag2组中的等效标志设置为指示从哪个流读取数据。

lua_message_type
指定入站或出站 SNA 命令和数据的类型。 返回的参数。 指定向 RUI_READ指示的 SNA 消息的类型。 可能的值为:

LUA_MESSAGE_TYPE_LU_DATA

LUA_MESSAGE_TYPE_SSCP_DATA

LUA_MESSAGE_TYPE_RQR

LUA_MESSAGE_TYPE_BID

LUA_MESSAGE_TYPE_BIND

LUA_MESSAGE_TYPE_BIS

LUA_MESSAGE_TYPE_CANCEL

LUA_MESSAGE_TYPE_CHASE

LUA_MESSAGE_TYPE_CLEAR

LUA_MESSAGE_TYPE_CRV

LUA_MESSAGE_TYPE_LUSTAT_LU

LUA_MESSAGE_TYPE_LUSTAT_SSCP

LUA_MESSAGE_TYPE_QC

LUA_MESSAGE_TYPE_QEC

LUA_MESSAGE_TYPE_RELQ

LUA_MESSAGE_TYPE_RTR

LUA_MESSAGE_TYPE_SBI

LUA_MESSAGE_TYPE_SHUTD

LUA_MESSAGE_TYPE_SIGNAL

LUA_MESSAGE_TYPE_SDT

LUA_MESSAGE_TYPE_STSN

LUA_MESSAGE_TYPE_UNBIND

LU_DATA、LUSTAT_LU、LUSTAT_SSCP和SSCP_DATA不是 SNA 命令。

lua_flag2
返回的参数。 包含 LUA 返回的消息的标志。 其子参数如下所示:

lua_flag2.bid_enable

指示如果设置为 1,则成功重新启用 RUI_BID

lua_flag2.async

指示 LUA 接口谓词在设置为 1 时异步完成。

lua_flag2.sscp_exp

如果设置为 1,则指示 SSCP 加速流。

lua_flag2.sscp_norm

如果设置为 1,则指示 SSCP 正常流。

lua_flag2.lu_exp

如果设置为 1,则指示 LU 加速流。

lua_flag2.lu_norm

如果设置为 1,则指示 LU 正常流。

lua_resv56
保留,应设置为零。

lua_encr_decr_option
保留,应设置为零。

返回代码

LUA_OK
主要返回代码;谓词已成功执行。

LUA_DATA_INCOMPLETE

辅助返回代码; RUI_READ 无法返回接收的所有数据,因为应用程序的数据缓冲区 (lua_max_length ) 不够大。 可以发出后续 RUI_READ 请求来检索剩余的 RUI 数据。

这不是RUI_READ的默认行为,仅在会话建立期间调用RUI_INIT时,lua_resv56[3] 设置为谓词控制块中的非零值时才启用。 有关更多详细信息,请参阅“备注”。

LUA_CANCELED
主返回代码;谓词未成功完成,因为它已被另一个谓词或内部错误取消。

LUA_PURGED

辅助返回代码; RUI_PURGE 已取消 RUI_READ

LUA_TERMINATED

辅助返回代码; RUI_TERM 是在 RUI_READ 挂起时发出的。

LUA_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。

LUA_BAD_DATA_PTR

辅助返回代码; lua_data_ptr 参数包含无效值。

LUA_BAD_SESSION_ID

辅助返回代码;在 VCB 中为 lua_sid 指定了无效值。

LUA_BID_ALREADY_ENABLED

辅助返回代码; lua_flag1.bid_enable 设置为重新启用 RUI_BID 但以前的 RUI_BID 仍在进行中。

LUA_DUPLICATE_READ_FLOW

辅助返回代码; lua_flag1 组中的流标志指定了 RUI_READ 已未完成的一个或多个会话流。 每个会话流一次只能有一个 RUI_READ 等待。

LUA_INVALID_FLOW

辅助返回代码;未设置 任何lua_flag1 流标志。 必须至少将其中一个标志设置为 1,以指示从哪个流或流中读取。

LUA_INVALID_POST_HANDLE

辅助返回代码;对于使用事件作为异步过帐方法的 Windows 操作系统,Windows LUA VCB 不包含有效的事件句柄。

LUA_NO_PREVIOUS_BID_ENABLED

辅助返回代码; lua_flag1.bid_enable 设置为重新启用 RUI_BID,但以前没有可以启用 的RUI_BID 。 (有关更多信息,请参阅“备注”。)

LUA_RESERVED_FIELD_NOT_ZERO

辅助返回代码;谓词记录中的保留字段或此谓词不使用的参数设置为非零值。

LUA_VERB_LENGTH_INVALID

辅助返回代码;LUA 谓词的发出值为 lua_verb_length 意外。

LUA_STATE_CHECK
主要返回代码;谓词未执行,因为它是在无效状态下发出的。

LUA_NO_RUI_SESSION

辅助返回代码; RUI_READ上指定的 LU 名称RUI_INIT尚未成功完成。

LUA_NEGATIVE_RSP
主返回代码;指示以下两种情况之一,可通过辅助返回代码区分:

  • LUA 在从主机接收的数据中检测到错误。 LUA 会丢弃消息 (以及链的其余部分(如果它位于链) 中),而是将接收的消息传递给RUI_READ上的应用程序,并向主机发送负面响应。 LUA 在后续 RUI_READRUI_BID 通知应用程序已发送否定响应。

  • LUA 应用程序以前向链中间的消息发送了负面响应。 LUA 已清除此链中的后续消息,现在向应用程序报告已接收并清除该链中的所有消息。

    LUA_SEC_RC

    辅助返回代码;此参数是一个非零辅助返回代码,其中包含在负响应上发送到主机的感知代码。 这表示 LUA 在主机数据中检测到错误,并向主机发送了负面响应。 有关解释可能返回的感知代码值的信息,请参阅 使用 LUA 的 SNA 注意事项

    辅助返回代码为零表示,在之前 RUI_WRITE 对链中间的消息做出负面响应之后,LUA 现在已接收并丢弃了来自此链的所有消息。

    LUA_UNSUCCESSFUL
    主返回代码;提供的谓词记录有效,但谓词未成功完成。

    LUA_DATA_TRUNCATED

    辅助返回代码; lua_data_length 参数小于在消息上收到的数据的实际长度。 仅 谓词返回lua_data_length个字节的数据;剩余数据被丢弃。 如果获取此辅助返回代码,也会返回其他参数。

    LUA_NO_DATA

    辅助返回代码; lua_flag1.nowait 设置为指示在不等待数据的情况下立即返回,并且当前没有数据在指定的会话流或流上可用。

    LUA_INVALID_PROCESS

    辅助返回代码;发出此谓词的 OS/2 进程与为此会话发出 RUI_INIT 的进程不同。 只有启动会话的进程才能在该会话上发出谓词。

    LUA_COMM_SUBSYSTEM_ABENDED
    主要返回代码;指示以下状况之一:

  • 此对话使用的节点遇到了 ABEND。

  • ) LAN 错误 (,事务程序 (TP) 与物理单元 (PU) 2.1 节点之间的连接中断。

  • TP 计算机上的 SnaBase 遇到 ABEND。

    LUA_SESSION_FAILURE
    主返回代码;必需的 Host Integration Server 组件已终止。

    LUA_LU_COMPONENT_DISCONNECTED

    辅助返回代码;指示 LUA 会话由于链接服务或主机 LU 出现问题而失败。

    LUA_RUI_LOGIC_ERROR

    辅助返回代码;在 LUA 中检测到内部错误。 正常操作期间不应发生此错误。

    LUA_INVALID_VERB
    主返回代码;谓词代码或操作代码或两者都无效。 谓词未执行。

    LUA_STACK_TOO_SMALL
    主要返回代码;应用程序的堆栈大小太小,无法执行谓词。 增加应用程序的堆栈大小。

    LUA_COMM_SUBSYSTEM_NOT_LOADED
    主返回代码;处理谓词时,无法加载或终止所需的组件。 因此无法通信。 请联系系统管理员以执行纠正措施。

    LUA_UNEXPECTED_DOS_ERROR
    主返回代码;发出操作系统调用后,收到意外的操作系统返回代码,并在辅助返回代码中指定。

注解

RUI_INIT 必须在发出 RUI_READ 之前成功完成。

当现有 RUI_READ 处于挂起状态时,仅当它指定了不同的会话流或来自挂起 RUI_READ 谓词的流时,才能发出另一 个RUI_READ 。 对于同一会话流,不能有多个 RUI_READ 未完成。

可以指定特定消息流 (LU normal、LU 加速、SSCP 正常或 SSCP 加速) 从中读取数据,也可以指定多个消息流。 可以有多个 未完成RUI_READ 谓词,前提是其中没有两个谓词指定相同的流。

应用程序在四个会话流之一上接收数据。 从最高到最低优先级的四个会话流是:

  • SSCP 加速

  • LU 加速

  • SSCP 正常

  • LU 正常

    RUI_READ要处理的数据流类型在 lua_flag1 参数中指定。 应用程序还可以指定是否要查看多种类型的数据流。 设置多个流位时,首先接收最高优先级。 RUI_READ完成处理后,lua_flag2指示 Windows LUA 应用程序已接收其数据的特定流类型。

    如果在发出RUI_READ之前RUI_BID成功完成,则可以指示 Windows LUA 接口重用最后一个RUI_BID谓词 VCB。 为此,请发出 具有lua_flag1.bid_enable 集的RUI_READ

    仅当以下条件成立时,才能使用 lua_flag1.bid_enable 参数:

  • RUI_BID 已成功发出,并且已完成。

  • RUI_BID 分配的存储尚未释放或修改。

  • 没有其他 RUI_BID 挂起。

    使用 lua_flag1.bid_enable 时,不能释放 RUI_BID 存储,因为使用了最后 RUI_BID 谓词 VCB。 此外,使用 lua_flag1.bid_enable 时,将发布 成功完成RUI_BID

    如果在没有数据可供接收时向 lua_flag1.nowait 发出RUI_READ,LUA_NO_DATA将是 Windows LUA 接口设置的辅助返回代码。

    如果收到的数据长于 lua_max_length,则会将其截断。 仅返回 lua_max_length 个字节的数据。 还会返回主返回代码LUA_UNSUCCESSFUL,辅助返回代码LUA_DATA_TRUNCATED。 RUI 库将尽可能多的数据返回到应用程序的数据缓冲区,但 RUI 中的剩余数据将被丢弃,并且无法在后续 RUI_READ 请求中提取。 这会强制 RUI 应用程序分配一个足够大的 RUI_READ 数据缓冲区来处理完整的 RU 大小。

    在会话建立期间调用RUI_INIT时,可以通过将 lua_resv56[3] 的值设置为谓词控制块中的非零值 来更改此 默认行为。 在这种情况下,如果收到的数据长于 lua_max_length,RUI_READ请求将返回LUA_OK的主要返回代码和LUA_DATA_INCOMPLETE的辅助返回代码。 然后,RUI 应用程序可以发出新的 RUI_READ 调用并接收剩余的数据。

    此增强尚未作为 Microsoft Windows Open Services 体系结构的一部分采用, (WOSA) LUA API 标准,与 IBM 实现 RUI 不同。

    使用 RUI_READ 读取消息后 将从传入消息队列中删除该消息,并且无法再次访问。 (RUI_BID可用作非破坏性读取。应用程序可以使用它来检查可用的数据类型,但数据保留在传入队列中,不需要立即使用。)

    可以在主机配置) 中指定的主到辅助半会话 (上使用节奏,以防止 LUA 应用程序充斥消息。 如果 LUA 应用程序读取消息的速度较慢,主机集成服务器会延迟向主机发送节奏响应以减慢速度。

另请参阅

RUI_BID
RUI_INIT
RUI_TERM
RUI_WRITE
SLI_OPEN
SLI_PURGE
SLI_RECEIVE
SLI_SEND