Confirm (CPI-C)

确认调用 (函数名称 cmcfm) 将本地逻辑单元的发送缓冲区的内容 (LU) 和确认请求发送到合作伙伴计划,并等待确认。 对于 Microsoft Windows,为所有 CPI-C 通信运行后台线程,并仅保留用户界面的前景线程。

语法

  
CM_ENTRY Confirm(   
  unsigned char FAR *conversation_ID,    
    CM_INT32 FAR *request_to_send_received,    
  CM_INT32 FAR *return_code              
);  

参数

conversation_ID
提供的参数。 指定会话的标识符。 此参数的值由 Initialize_ConversationAccept_Conversation 返回。

request_to_send_received
返回的参数。 提供请求到发送-接收的指示器。 可能的值为:

CM_REQ_TO_SEND_RECEIVED
合作伙伴计划发出 Request_To_Send,请求本地计划将会话更改为 RECEIVE 状态。

CM_REQ_TO_SEND_NOT_RECEIVED
合作伙伴计划未发出 Request_To_Send。 如果 return_code设置为CM_PROGRAM_PARAMETER_CHECK 或CM_PROGRAM_STATE_CHECK,则此值不相关。

return_code
此调用返回的代码。 本主题稍后将列出有效的返回代码。

返回代码

CM_OK
主返回代码;已成功执行的调用。 合作伙伴计划发出 了“已确认” 呼叫。

CM_OPERATION_NOT_ACCEPTED
主返回代码;以前对此对话的操作不完整。

CM_OPERATION_INCOMPLETE
主返回代码;操作尚未完成, (处理模式仅) 处于非阻止状态,并且仍在进行中。 程序可以发出 Wait_For_Conversation 等待操作完成,或 Cancel_Conversation 取消操作和对话。 如果已调用 Specify_Windows_Handle ,应用程序应等待 Windows 消息通知,而不是 调用Wait_For_Conversation

CM_PROGRAM_PARAMETER_CHECK
主返回代码;发生了以下情况之一:

  • conversation_ID指定的值无效。

  • 本地程序尝试在同步级别为CM_NONE的对话中使用 确认 。 同步级别必须CM_CONFIRM。

    CM_PROGRAM_STATE_CHECK
    主返回代码;发生了以下情况之一:

  • 会话未处于 SEND 或SEND_PENDING状态。

  • 本地程序的基本会话处于 SEND 状态,本地程序未完成发送逻辑记录。

    CM_PRODUCT_SPECIFIC_ERROR
    主返回代码;发生特定于产品的错误,并且已记录在产品错误日志中。

    CM_CONVERSATION_TYPE_MISMATCH
    主返回代码;合作伙伴 LU 或程序不支持在分配请求中指定的对话类型 (基本或映射) 。

    CM_PIP_NOT_SPECIFIED_CORRECTLY
    主返回代码;分配请求被非 CPI-C LU 6.2 事务程序拒绝 (TP) 。 合作伙伴计划需要一个或多个 PIP 数据变量,CPI-C 不支持这些变量。

    CM_SECURITY_NOT_VALID
    主返回代码;合作伙伴 LU 不接受分配请求中指定的用户标识符或密码。

    CM_SYNC LEVEL_NOT_SUPPORTED_PGM
    主返回代码;合作伙伴计划不支持分配请求中指定的同步级别。

    CM_TPN_NOT_RECOGNIZED
    主返回代码;合作伙伴 LU 无法识别分配请求中指定的程序名称。

    CM_TP_NOT_AVAILABLE_NO_RETRY
    主返回代码;由于永久性条件,合作伙伴 LU 无法启动分配请求中指定的程序。 出错原因可能已记录在远程节点上。 请仅在更正错误之后才重试分配。

    CM_TP_NOT_AVAILABLE_RETRY
    主返回代码;由于临时条件,合作伙伴 LU 无法启动分配请求中指定的程序。 出错原因可能已记录在远程节点上。 重试分配。

    CM_PROGRAM_ERROR_PURGING
    主返回代码;发生了以下情况之一:

  • 处于 RECEIVE 或 CONFIRM 状态时,合作伙伴计划已发出 Send_Error。 已发送但尚未接收的数据将被清除。

  • 当处于错误方向设置为CM_RECEIVE_ERROR的SEND_PENDING状态时,合作伙伴 计划Send_Error颁发。 未清除数据。

    CM_RESOURCE_FAILURE_NO_RETRY
    主返回代码;发生了以下情况之一:

  • 由于永久性条件,会话提前终止。 在更正错误之前不要重试。

  • 合作伙伴计划在正常终止之前未解除分配对话。

    CM_RESOURCE_FAILURE_RETRY
    主返回代码;由于临时情况(例如调制解调器故障),会话提前终止。 重试对话。

    CM_DEALLOCATED_ABEND
    主返回代码;由于以下原因之一,已解除分配会话:

  • 远程程序发出 Deallocate ,并将类型参数设置为 CM_DEALLOCATE_ABEND。 如果在发出呼叫时远程程序的会话处于 RECEIVE 状态,则会清除本地程序发送但远程程序尚未接收的信息。

  • 合作伙伴计划正常终止,但在终止前未解除分配对话。

    CM_DEALLOCATED_ABEND_SVC
    主返回代码;由于以下原因之一,已解除分配会话:

  • 合作伙伴计划发布了 Deallocate ,类型参数设置为 ABEND_SVC。

  • 合作伙伴计划在终止之前未解除分配对话。

    如果本地程序发出此呼叫时,合作伙伴计划的会话处于 RECEIVE 状态,则会清除本地程序发送但尚未由合作伙伴计划接收的数据。

    CM_DEALLOCATED_ABEND_TIMER
    主返回代码;会话已被解除分配,因为合作伙伴计划发布了 Deallocate ,类型参数设置为 ABEND_TIMER。 如果本地程序发出此呼叫时,合作伙伴计划的会话处于 RECEIVE 状态,则会清除本地程序发送但尚未由合作伙伴计划接收的数据。

    CM_SVC_ERROR_PURGING
    主返回代码;当处于 SEND 状态时,合作伙伴计划或合作伙伴 LU 颁发 Send_Error 类型参数设置为 SVC。 发送到合作伙伴计划的数据可能已被清除。

    状态更改

    发出 确认 时,会话可以处于 SEND 或SEND_PENDING状态。

    下表中汇总的状态更改基于 return_code 参数的值。

return_code 新状态
CM_OK 没有变化
呼叫以 SEND 状态发出 没有变化
呼叫以SEND_PENDING状态发出 SEND
CM_PROGRAM_ERROR_PURGING RECEIVE
CM_SVC_ERROR_PURGING RECEIVE
CM_CONVERSATION_TYPE_MISMATCH RESET
CM_PIP_NOT_SPECIFIED_CORRECTLY RESET
CM_SECURITY_NOT_VALID RESET
CM_SYNC_LEVEL_NOT_SUPPORTED_PGM RESET
CM_TPN_NOT_RECOGNIZED RESET
CM_TP_NOT_AVAILABLE_NO_RETRY RESET
CM_TP_NOT_AVAILABLE_RETRY RESET
CM_RESOURCE_FAILURE_NO_RETRY RESET
CM_RESOURCE_FAILURE_RETRY RESET
CM_DEALLOCATED_ABEND RESET
CM_DEALLOCATED_ABEND_SVC RESET
CM_DEALLOCATED_ABEND_TIMER RESET
所有其他 没有变化

注解

在响应 “确认”时,合作伙伴计划通常会发出 “确认 ”,以确认它已收到数据且未出错。 (如果合作伙伴计划遇到错误,它会 发出Send_Error 或使用 Deallocate 异常解除分配对话。)

仅当会话同步级别为CM_CONFIRM时,程序才能发出 “确认 ”。

确认 等待合作伙伴计划的响应。 响应由合作伙伴计划中以下 CPI-C 调用之一生成:

  • 已确认

  • Send_Error

  • 5将对话解除分配类型设置为 CM_DEALLOCATE_ABEND