RUI_WRITE谓词通过 LU 会话或系统服务控制点(SSCP)会话将 SNA 请求或响应单元从逻辑单元应用程序(LUA)应用程序发送到主机,并将响应、SNA 命令和数据从 Microsoft® Windows® LUA 应用程序发送到主机 LU。
以下结构描述了RUI_WRITE使用的谓词控制块(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_WRITE。
lua_correlator
提供的参数。 包含一个用户提供的值,该值将谓词与其他用户提供的信息链接在一起。 LUA 不使用或更改此信息。 此参数是可选的。
lua_luname
提供的参数。 指定 Windows LUA 会话使用的本地 LU 的 ASCII 名称。
RUI_WRITE 仅当 lua_sid 为零时才需要此参数。
如果名称短于 8 个字符,则此参数长度为 8 字节,用空格(0x20)在右侧填充。
lua_extension_list_offset
Microsoft Host Integration Server 中® RUI 未使用,应设置为零。
lua_cobol_offset
主机集成服务器中 LUA 未使用,应为零。
lua_sid
提供并返回的参数。 指定会话标识符,并由 SLI_OPEN 和 RUI_INIT返回。 其他谓词使用此参数标识用于命令的会话。 如果其他谓词使用 lua_luname 参数标识会话,请将 lua_sid 参数设置为零。
lua_max_length
RUI_WRITE 不使用,应 设置为零。
lua_data_length
返回的参数。 指定RUI_BID谓词lua_peek_data中返回的数据长度。
lua_data_ptr
指向包含要通过 RUI_WRITE发送到主机的数据的缓冲区。
SNA 命令和数据都放置在此缓冲区中,并且它们可以采用 EBCDIC 格式。
lua_post_handle
提供的参数。 如果在Microsoft Windows 下使用异步通知,则由事件完成。 此变量包含要发出信号的事件句柄或窗口句柄。
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)。 对于 RUI_WRITE 的 RH,使用队列响应指示器(lua_rh.qri)和节奏指示器(lua_rh.pi)以外的所有字段。 它的子参数如下所示:
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 正常流,一位。
将以下标志之一设置为 1 以指示要发送数据的消息流:
lua_flag1.sscp_exp
lua_flag1.sscp_norm
lua_flag1.lu_exp
lua_flag1.lu_norm
lua_message_type
RUI_WRITE 不使用,应 设置为零。
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_CANCELED
主要返回代码;该谓词未成功完成,因为它已被另一个谓词取消。
LUA_TERMINATED
辅助返回代码;由于为此会话发出 了RUI_TERM ,因此取消了谓词。
LUA_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。
LUA_BAD_DATA_PTR
辅助返回代码; lua_data_ptr 参数包含无效值。
LUA_BAD_SESSION_ID
辅助返回代码;VCB 中指定了 lua_sid 的无效值。
LUA_DUPLICATE_WRITE_FLOW
辅助返回代码; 对于 此谓词指定的会话流,RUI_WRITE已未完成(会话流是通过将 lua_flag1 流标志之一设置为 1 来指定的)。 每个会话流一次只能有一个 RUI_WRITE 未完成。
LUA_INVALID_FLOW
辅助返回代码;设置了 lua_flag1.sscp_exp 流标志,指示应在 SSCP 加速流上发送消息。 LUA 不允许应用程序在此流上发送数据。
LUA_INVALID_POST_HANDLE
辅助返回代码;对于使用事件作为异步发布方法的 Windows作系统,Windows LUA VCB 不包含有效的事件句柄。
LUA_MULTIPLE_WRITE_FLOWS
辅助返回代码;多个 lua_flag1 流标志设置为 1。 其中一个标志和其中一个标志必须设置为 1,以指示要发送数据的会话流。
LUA_REQUIRED_FIELD_MISSING
辅助返回代码;指示以下情况之一:
未设置 lua_flag1 流标志。 其中一个标志和其中一个标志必须设置为 1。
RUI_WRITE 用于发送响应,响应所需的数据多于提供的数据。
LUA_RESERVED_FIELD_NOT_ZERO
辅助返回代码;谓词记录中的保留字段或该谓词未使用的参数设置为非零值。
LUA_VERB_LENGTH_INVALID
辅助返回代码;LUA 谓词的值为 LUA 意外 lua_verb_length 发出。
LUA_STATE_CHECK
主要返回代码;该谓词未执行,因为它以无效状态发出。LUA_MODE_INCONSISTENCY
辅助返回代码; RUI_WRITE上 发送的 SNA 消息目前无效。 这是因为在绑定会话之前尝试在 LU 会话上发送数据。 检查发送的 SNA 消息序列。
LUA_NO_RUI_SESSION
辅助返回代码; RUI_INIT 尚未成功完成此谓词中指定的 LU 名称。
LUA_UNSUCCESSFUL
主要返回代码;提供的谓词记录有效,但谓词未成功完成。LUA_FUNCTION_NOT_SUPPORTED
辅助返回代码;指示以下情况之一:
lua_rh.fi 位(格式指示器)设置为 1,但提供的 RU 的第一个字节不是识别的请求代码。
lua_rh.ruc 参数(RU 类别)指定了网络控制(NC)类别;LUA 不允许应用程序在此类别中发送请求。
LUA_INVALID_PROCESS
辅助返回代码;发出此谓词的 OS/2 进程与为此会话发出 RUI_INIT 的过程不同。 只有启动会话的进程才能在该会话上发出谓词。
LUA_INVALID_SESSION_PARAMETERS
辅助返回代码;应用程序使用 RUI_WRITE 向从主机收到的 BIND 消息发送正响应。 但是,Host Integration Server 无法接受指定的 BIND 参数,并且已向主机发送了负响应。 有关 Host Integration Server 接受的 BIND 配置文件的详细信息,请参阅 使用 LUA 的 SNA 注意事项。
LUA_RSP_CORRELATION_ERROR
辅助返回代码;使用 RUI_WRITE 发送响应时, lua_th.snf (指示正在响应的已接收消息的序列号)不包含有效值。
LUA_RU_LENGTH_ERROR
辅助返回代码; lua_data_length 参数包含无效值。 在 LU 正常流上发送数据时,最大长度是在从主机接收的 BIND 中指定的;对于所有其他流,最大长度为 256 字节。
注释
任何其他辅助返回代码都是 SNA 感知代码,指示提供的 SNA 数据无效或无法发送。 有关解释可返回的 SNA 感知代码的信息,请参阅 使用 LUA 的 SNA 注意事项。
LUA_COMM_SUBSYSTEM_ABENDED
主要返回代码;指示以下条件之一:
此会话使用的节点遇到 ABEND。
事务程序(TP)与物理单元(PU)2.1 节点之间的连接已断开(LAN 错误)。
TP 计算机上的 SnaBase 遇到 ABEND。
LUA_SESSION_FAILURE
主要返回代码;所需的 Host Integration Server 组件已终止。LUA_LU_COMPONENT_DISCONNECTED
辅助返回代码;指示由于链接服务或主机 LU 出现问题,LUA 会话失败。
LUA_RUI_LOGIC_ERROR
辅助返回代码;LUA 中检测到内部错误。 在正常作期间不应发生此错误。
LUA_INVALID_VERB
主要返回代码;谓词代码或作代码或两者都无效。 谓词未执行。LUA_STACK_TOO_SMALL
主要返回代码;应用程序的堆栈大小太小,无法执行谓词。 增加应用程序的堆栈大小。LUA_COMM_SUBSYSTEM_NOT_LOADED
主要返回代码;无法在处理谓词时加载或终止所需的组件。 因此,无法进行通信。 请联系系统管理员以采取纠正措施。LUA_UNEXPECTED_DOS_ERROR
主要返回代码;发出作系统调用后,收到意外的作系统返回代码,并在辅助返回代码中指定。
注解
在发出此谓词之前,必须成功发出RUI_INIT。
发送 SNA 请求时,必须设置 lua_rh 中的所有适用值。 链接和括号是应用程序的责任。
发送响应时,响应类型确定所需的 RUI_WRITE 信息。 对于所有响应,必须:
将所选 的 lua_rh.rri 标志设置为 1。
为要响应的请求提供 lua_th.snf 中的序列号。
对于多链消息响应,必须使用最后一个接收链元素的序列号。 对于以 CANCEL 命令结尾的多链消息的响应,将使用 CANCEL 命令序列号。
对于只需要请求代码的正响应,请将 lua_rh.ri 设置为零(表示响应为正), 并将lua_data_length 设置为零(表示未提供任何数据)。 请求代码由 RUI 使用提供的序列号填充。
对于负响应,请将 lua_rh.ri 设置为 1、 lua_data_ptr SNA 感知代码地址,并将 lua_data_length 设置为 SNA 感知代码长度(4 个字节)。 RUI 使用序列号填充请求代码。
对于需要响应中数据的 BIND 和 STSN 命令的正响应,请将 lua_data_ptr 设置为指向响应,并将 lua_data_length 设置为 lua_data_ptr中提供的数据的长度。
当现有 RUI_WRITE 处于挂起状态时 ,仅当 它指定与挂起RUI_WRITE不同的会话流时,才能发出第二个 RUI_WRITE。 对于同一会话流,不能有多个 RUI_WRITE 未完成。
成功 RUI_INIT后,可以随时在 SSCP 正常流上发出 RUI_WRITE。 仅在收到 BIND 后,才允许 LU 加速流或 LU 正常流上的谓词,并且必须遵守 BIND 上指定的协议。 RUI_WRITE
成功完成RUI_WRITE表示消息已成功排队到数据链接。 它不一定指示消息已成功发送,也不一定指示主机已接受它。
可以在辅助到主要半会话(在 BIND 上指定)上使用 Pacing,以防止 LUA 应用程序发送的数据多于本地或远程 LU 可以处理的数据。 如果是这种情况,则 LUA 可能会延迟 LU 正常流的 RUI_WRITE ,可能需要一些时间才能完成。
另请参阅
RUI_INIT
RUI_READ
RUI_TERM
SLI_OPEN
SLI_PURGE
SLI_RECEIVE
SLI_SEND