MC_SEND_CONVERSATION

MC_SEND_CONVERSATION谓词在本地逻辑单元(LU)和伙伴 LU 之间分配会话,在会话上发送数据,然后解除分配会话。

以下结构描述了 MC_SEND_CONVERSATION 谓词使用的谓词控制块(VCB)。

语法

  
struct mc_send_conversation {  
    unsigned short      opcode;  
    unsigned char       opext;  
    unsigned char       reserv2;  
    unsigned short      primary_rc;  
    unsigned long       secondary_rc;  
    unsigned char       tp_id[8];  
    unsigned long       conv_id;  
    unsigned char       reserv3[8];  
    unsigned char       rtn_ctl;  
    unsigned char       reserv4;  
    unsigned long       conv_group_id;  
    unsigned long       sense_data;  
    unsigned char       plu_alias[8];  
    unsigned char       mode_name[8];  
    unsigned char       tp_name[64];  
    unsigned char       security;  
    unsigned char       reserv6[11];  
    unsigned char       pwd[10];  
    unsigned char       user_id[10];  
    unsigned short      pip_dlen;  
    unsigned char FAR * pip_dptr;  
    unsigned char       reserv6;  
    unsigned char       fqplu_name[17];  
    unsigned char       reserv7[8];  
    unsigned short      dlen;  
    unsigned char FAR * dptr;  
};   

成员

opcode
提供的参数。 指定谓词作代码,AP_M_SEND_CONVERSATION。

opext
提供的参数。 指定谓词作扩展,AP_MAPPED_CONVERSATION。

reserv2
保留字段。

primary_rc
返回的参数。 指定 APPC 在谓词完成时设置的主要返回代码。 有效的返回代码因发布的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅返回代码。

secondary_rc
返回的参数。 指定 APPC 在谓词完成时设置的辅助返回代码。 有效的返回代码因发布的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅返回代码。

tp_id
提供的参数。 标识本地事务程序(TP)。 此参数的值由 TP_STARTED返回。

conv_id
提供的参数。 提供会话标识符。

此参数的值由调用 TP 中的 MC_ALLOCATE 或调用的 TP 中的 RECEIVE_ALLOCATE 返回。

rtn_ctl
提供的参数。 指定 APPC 应如何选择要为会话分配的会话,以及本地 LU 何时应将控制权返回到本地 TP。 允许的值为:

  • AP_IMMEDIATE指定 LU 分配争用胜者会话(如果立即可用),并将控制权返回到 TP。

  • AP_WHEN_SESSION_ALLOCATED指定 LU 在分配会话或遇到本主题中返回代码中所述的错误之一之前,LU 不会将控制权返回到 TP。 如果会话限制为零,LU 将立即返回控件。 请注意,如果会话不可用,TP 将等待一个会话。

  • AP_WHEN_SESSION_FREE指定 LU 分配争用胜者或争用失败者会话(如果可用或能够激活会话),并将控制权返回到 TP。 如果发生错误(如本主题中的“返回代码”中所述),调用将立即返回primary_rc和secondary_rc字段中的错误。

  • AP_WHEN_CONWINNER_ALLOC指定 LU 在分配争用胜者会话或遇到本主题中返回代码中所述的错误之一之前不会返回控件。 如果会话限制为零,LU 将立即返回控件。 请注意,如果会话不可用,TP 将等待一个会话。

  • AP_WHEN_CONV_GROUP_ALLOC指定 LU 在分配 由conv_group_id 指定的会话或遇到本主题中返回代码中所述的错误之一之前,LU 不会返回对 TP 的控制。 如果会话不可用,TP 将等待它变为免费状态。

    conv_group_id
    提供/返回的参数。 当 rtn_ctl WHEN_CONV_GROUP_ALLOC指定会话应从中分配会话的会话组的标识时用作提供的参数。 当rtn_ctl指定不同的值,并且primary_rc AP_OK时,这是返回的值。 此参数的目的是为 TP 提供保证将重新分配同一会话,因此通过会话进行的会话将按发起的相同顺序发生。

    sense_data
    返回的参数。 如果主要和辅助返回代码指示分配错误(重试或无重试),则返回 SNA 定义的感知代码。

    plu_alias
    提供的参数。 指定本地 TP 已知合作伙伴 LU 的别名。 此参数必须与在配置过程中建立的合作伙伴 LU 的名称匹配。 该参数是一个 8 字节的 G ASCII 字符集,其中包括:

  • 大写字母

  • 数字 0 到 9

  • 空格

  • 特殊字符 $、#、%和@

    如果此参数的值小于 8 个字节,请用 ASCII 空格(0x20)将其放在右侧。

    mode_name
    提供的参数。 指定配置期间定义的一组网络特征的名称。 此参数必须与配置过程中与合作伙伴 LU 关联的模式的名称匹配。

    该参数是一个 8 字节 EBCDIC 字符串。 它可以包含类型 A EBCDIC 字符集中的字符,包括所有 EBCDIC 空格。 这些字符包括:

  • 大写字母

  • 数字 0 到 9

  • 特殊字符 $、#和@

    字符串中的第一个字符必须是大写字母或特殊字符。

    在映射的对话中,该名称不能是 SNASVCMG(APPC 内部使用的保留模式名称)。

    tp_name
    提供的参数。 指定已调用的 TP 的名称。 调用 TP 中MC_ALLOCATE指定的tp_name值必须与调用的 TP 中由RECEIVE_ALLOCATE指定的tp_name的值匹配。

    该参数是一个 64 字节、区分大小写的 EBCDIC 字符串。 此参数可以包含 AE EBCDIC 字符集中的字符。 这些字符包括:

  • 大写和小写字母

  • 数字 0 到 9

  • 特殊字符 $、#、@和 period (.)

    如果 TP 名称少于 64 个字节,请使用 EBCDIC 空格(0x40)将其填充在右侧。

    SNA 约定是服务 TP 名称最多可以有四个字符。 第一个字符是0x00和0x3F之间的十六进制字节。 其他字符来自 EBCDIC AE 字符集。

    安全
    提供的参数。 指定合作伙伴 LU 需要的信息,以便验证对已调用的 TP 的访问权限。

  • AP_NONE指定调用的 TP 不使用会话安全性。

  • AP_PGM指定调用的 TP 使用会话安全性,并且需要用户标识符和密码。 使用 user_idpwd 提供此信息。

  • AP_SAME指定调用的 TP(使用有效的用户标识符和密码调用)反过来又调用另一个 TP。

    例如,假设 TP A 调用具有有效用户标识符和密码的 TP B,而 TP B 又调用 TP C。如果 TP B 指定值AP_SAME,APPC 将从 TP A 和已验证的指示器发送 TP C 的用户标识符的 LU。 此指示器指示 TP C 不需要密码(如果 TP C 配置为接受已验证的指示器)。

    pwd
    提供的参数。 指定与 user_id关联的密码。 仅当安全参数设置为AP_PGM并且必须与配置期间建立 user_id 的密码匹配时,才需要此参数。

    此参数是一个 10 字节、区分大小写的 EBCDIC 字符串。 它可以包含 AE EBCDIC 字符集中的字符。 这些字符包括:

  • 大写和小写字母

  • 数字 0 到 9

  • 特殊字符 $、#、@和 period (.)

    如果密码少于 10 个字节,请使用 EBCDIC 空格(0x40)将其填充在右侧。

    user_id
    提供的参数。 指定访问合作伙伴 TP 所需的用户标识符。 仅当安全参数设置为AP_PGM并且必须与为合作伙伴 TP 配置的用户标识符之一匹配时,才需要此参数。

    该参数可以包含 AE EBCDIC 字符集中的字符。 这些字符包括:

  • 大写和小写字母

  • 数字 0 到 9

  • 特殊字符 $、#、@和 period (.)

    如果用户标识符少于 10 个字节,请使用 EBCDIC 空格(0x40)将其放在右侧。

    pip_dlen
    提供的参数。 指定要传递给合作伙伴 TP 的 PIP 的长度。 此参数的范围从 0 到 32767。

    pip_dptr
    提供的参数。 指定包含 PIP 数据的缓冲区的地址。 仅当 pip_dlen 大于零时,才使用此参数。

    PIP 数据可以包含合作伙伴 TP 或远程作系统所需的初始化参数或环境设置信息。 PIP 数据必须遵循 GDS 格式。 有关详细信息,请参阅 IBM SNA 手册(s)。

    对于 Microsoft Windows作系统,数据缓冲区可以驻留在静态数据区域或全局分配的区域。

    fqplu_name
    提供的参数。 指定本地 LU 的完全限定名称。 此参数必须与远程节点中定义的本地 LU 的完全限定名称匹配。 该参数由两种类型的 A EBCDIC 字符串(最多八个字符组成),即网络名称(NETID)和伙伴 LU 的 LU 名称。 名称由 EBCDIC 句点(.)分隔。 可以省略 NETID,如果是这样,还应省略句点。

    如果未提供 plu_alias ,则必须提供此名称。

    键入 EBCDIC 字符包含:

  • 大写字母

  • 数字 0 到 9

  • 特殊字符 $、#和@

    如果此参数的值小于 17 个字节,请使用 EBCDIC 空格(0x40)将其放在右侧。

    dlen
    提供的参数。 指定要放入本地 LU 发送缓冲区的数据字节数。 此参数的范围从 0 到 65535。

    dptr
    提供的参数。 指定要放入本地 LU 发送缓冲区中的数据的缓冲区的地址。

    对于 Windows作系统,数据缓冲区可以驻留在静态数据区域或全局分配的区域。 数据缓冲区必须完全适合此区域。

返回代码

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

AP_UNSUCCESSFUL
主要返回代码;提供的参数 rtn_ctl 指定的控件立即返回到 TP(AP_IMMEDIATE),并且本地 LU 没有可用的争用胜者会话。

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

AP_BAD_RETURN_CONTROL

辅助返回代码;为 rtn_ctl 指定的值无效。

AP_BAD_SECURITY

辅助返回代码;为 安全 指定的值无效。

AP_BAD_TP_ID

辅助返回代码; tp_id 的值与 APPC 分配的 TP 标识符不匹配。

AP_PIP_LEN_INCORRECT

辅助返回代码; pip_dlen 的值大于 32767。

AP_UNKNOWN_PARTNER_MODE

辅助返回代码;为 mode_name 指定的值无效。

AP_BAD_PARTNER_LU_ALIAS

辅助返回代码,APPC 无法识别提供的 partner_lu_alias

AP_NO_USE_OF_SNASVCMG

辅助返回代码;SNASVCMG 不是 mode_name的有效值。

AP_INVALID_DATA_SEGMENT

辅助返回代码;PIP 数据或应用程序数据比分配的数据段长,或者数据缓冲区的地址不正确。

AP_ALLOCATION_ERROR
主要返回代码;APPC 未能分配会话。 会话状态设置为 RESET。

此代码可以通过 MC_ALLOCATE后发出的谓词返回。

AP_ALLOCATION_FAILURE_NO_RETRY

辅助返回代码;由于永久条件(例如配置错误或会话协议错误),无法分配会话。 若要确定错误,系统管理员应检查错误日志文件。 在更正错误之前,不要重试分配。

AP_ALLOCATION_FAILURE_RETRY

辅助返回代码;由于临时条件(如链接失败),无法分配会话。 失败的原因记录在系统错误日志中。 重试分配。

AP_COMM_SUBSYSTEM_ABENDED
主要返回代码;指示以下条件之一:

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

  • TP 与 PU 2.1 节点之间的连接已中断(LAN 错误)。

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

    系统管理员应检查错误日志以确定 ABEND 的原因。

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

    当此返回代码与 MC_ALLOCATE一起使用时,它可能指示找不到任何通信系统来支持本地 LU。 (例如,使用 TP_STARTED 指定的本地 LU 别名不正确或尚未配置。请注意,如果 lu_aliasmode_name 少于 8 个字符,则必须确保这些字段填充右侧的空格。 如果这些参数未填充空格,则返回此错误,因为没有节点可以满足 MC_ALLOCATE 请求。

    MC_ALLOCATE为配置了多个节点的 Host Integration Server 客户端系统生成此返回代码时,有两个辅助返回代码,如下所示:

    0xF0000001

    辅助返回代码;尚未启动任何节点。

    0xF0000002

    辅助返回代码;至少有一个节点已启动,但未在任何活动节点上配置本地 LU (TP_STARTED颁发 时)。 问题可能是以下任一问题:

  • 未启动具有本地 LU 的节点。

  • 未配置本地 LU。

    AP_INVALID_VERB_SEGMENT
    主要返回代码;VCB 超出了数据段的末尾。

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

    AP_CONV_BUSY
    主要返回代码;在任何对话中,一次只能有一个未完成的对话谓词。 如果本地 TP 有多个线程,并且多个线程使用相同的 conv_id发出 APPC 调用,则可能会出现这种情况。

    AP_THREAD_BLOCKING
    主要返回代码;调用线程已在阻塞调用中。

    AP_UNEXPECTED_DOS_ERROR
    主要返回代码;作系统在处理来自本地 TP 的 APPC 调用时,已将错误返回到 APPC。 作系统返回代码通过 secondary_rc返回。 它以 Intel 字节交换的顺序显示。 如果问题仍然存在,请咨询系统管理员。

注解

此谓词由调用 TP 发出,用于与远程 TP 进行整个对话。 如果远程 TP 拒绝会话启动或数据,则调用 TP 将不会收到拒绝通知。

当 TP 发出此谓词时,会话状态为 RESET。 没有状态更改。

MC_SEND_CONVERSATION的多个参数是 EBCDIC 或 ASCII 字符串。 TP 可以使用通用服务谓词 (CSV) CONVERT 将字符串从一个字符集转换为另一个字符。

通常, mode_name 的值必须与为调用的 TP 节点配置的模式名称匹配,并在配置期间与合作伙伴 LU 相关联。 如果与调用的 TP 节点上的伙伴 LU 关联的模式之一是隐式模式,则当没有与合作伙伴 LU 关联的模式名称与 mode_name的值匹配时,在两个 LU 之间建立的会话将是隐式模式。