RUI_READ谓词接收Microsoft Windows® 逻辑单元应用程序(LUA)应用程序缓冲区中的响应、SNA 命令和数据®。
以下结构描述了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
提供的参数。 包含谓词代码,LUA_VERB_RUI请求单元接口(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
主机集成服务器中的 RUI 未使用,应设置为零。
lua_cobol_offset
MICROSOFT Host Integration Server 中® LUA 不使用,应为零。
lua_sid
提供并返回的参数。 指定会话标识符,并由 SLI_OPEN 和 RUI_INIT返回。 其他谓词使用此参数标识用于命令的会话。 如果其他谓词使用 lua_luname 参数标识会话,请将 lua_sid 参数设置为零。
lua_max_length
指定 接收 RUI_READ和 SLI_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 指示器,一位。
lua_rh.dr2i
明确响应 2 指示器,一位。
lua_rh.ri
异常响应指示器(对于请求),或响应类型指示器(对于响应),一位。
lua_rh.qri
排队响应指示器,一位。
lua_rh.pi
Pacing 指示器,一位。
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
指示 SSCP 加速流(如果设置为 1)。
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_READ 挂起时发出 RUI_TERM 。
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 意外 lua_verb_length 发出。
LUA_STATE_CHECK
主要返回代码;该谓词未执行,因为它以无效状态发出。
LUA_NO_RUI_SESSION
辅助返回代码; RUI_INIT 尚未成功完成 RUI_READ中指定的 LU 名称。
LUA_NEGATIVE_RSP
主要返回代码;指示以下两种情况之一,可通过辅助返回代码进行区分:
LUA 检测到从主机接收的数据中出现错误。 LUA 放弃消息(如果消息位于链中),而是将收到的消息传递到 RUI_READ应用程序,而是向主机发送负面响应。 LUA 会通知应用程序后续 RUI_READ 或 RUI_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。
事务程序(TP)与物理单元(PU)2.1 节点之间的连接已断开(LAN 错误)。
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 正常、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。
仅当以下内容为 true 时,才能使用 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 。
如果没有数据可供接收时, RUI_READlua_flag1.nowait 颁发,LUA_NO_DATA将是 Windows LUA 接口设置的辅助返回代码。
如果收到的数据超过 lua_max_length,则会截断数据。 仅返回 lua_max_length 字节的数据。 还会返回主要返回代码LUA_UNSUCCESSFUL和辅助返回代码LUA_DATA_TRUNCATED。 RUI 库向应用程序的数据缓冲区返回尽可能多的数据,但 RUI 中的剩余数据将被丢弃,并且无法在后续 RUI_READ 请求中提取。 这会强制 RUI 应用程序分配足够大的 RUI_READ 数据缓冲区来处理完整的 RU 大小。
通过将 lua_resv56[3] 的值设置为在会话建立期间调用 RUI_INIT 时谓词控制块中的非零值,可以更改此默认行为。 在这种情况下,如果收到的数据超过 lua_max_length, 则RUI_READ 请求将返回LUA_OK的主要返回代码和LUA_DATA_INCOMPLETE的辅助返回代码。 然后,RUI 应用程序可以发出新的 RUI_READ 调用并接收其余数据。
此增强功能尚未作为Microsoft Windows 开放服务体系结构 (WOSA) LUA API 标准的一部分采用,与 IBM 实施 RUI 不同。
使用RUI_READ读取消息后 , 将从传入消息队列中删除该消息,并且无法再次访问。 (RUI_BID 可用作非破坏性读取。应用程序可以使用它检查可用的数据类型,但数据保留在传入队列中,无需立即使用。
可以在主会话到辅助半会话(在主机配置中指定的)上使用 Pacing 来保护 LUA 应用程序免受消息的淹没。 如果 LUA 应用程序读取消息速度较慢,则 Host Integration Server 会延迟向主机发送节奏响应以减慢其速度。
另请参阅
RUI_BID
RUI_INIT
RUI_TERM
RUI_WRITE
SLI_OPEN
SLI_PURGE
SLI_RECEIVE
SLI_SEND