Send_Error (CPI-C)

Send_Error调用 (函数名称 cmserr) 通知合作伙伴程序本地程序遇到应用程序级错误。

语法

  
CM_ENTRY Send_Error(   
  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_STATE_CHECK,则此值不相关。

return_code
从此调用返回的代码。 本主题后面列出了有效的返回代码。

返回代码

return_code 的值因发出呼叫时的聊天状态而异。

发送状态

如果程序在会话处于 SEND 状态时发出调用,则可能返回以下代码:

CM_OK
主返回代码;调用已成功执行。

CM_OPERATION_NOT_ACCEPTED
主返回代码;对此会话的上一个操作不完整。

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

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
    主返回代码;由于以下原因之一,已解除分配会话:

  • 远程程序向CM_DEALLOCATE_ABEND发出了带有类型参数集的 Deallocate ,或者远程 LU 由于远程程序异常结束条件而发出了释放。 如果在发出呼叫时远程程序的会话处于 RECEIVE 状态,则会清除本地程序发送的、远程程序尚未接收的信息。

  • 远程 TP 正常终止,但在终止前未解除分配会话。 远程 LU 上的节点服务代表远程 TP 解除分配了会话。

    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。 发送到合作伙伴计划的数据可能已被清除。

    RECEIVE 状态

    如果调用以 RECEIVE 状态发出,则可能返回以下代码:

    CM_OK
    主返回代码;因为当 发出Send_Error 呼叫时,传入信息处于 RECEIVE 状态时被清除,因此会生成CM_OK而不是以下内容:

  • CM_PROGRAM_ERROR_NO_TRUNC

  • CM_PROGRAM_ERROR_PURGING

  • CM_SVC_ERROR_NO_TRUNC

  • CM_SVC_ERROR_PURGING

  • CM_PROGRAM_ERROR_TRUNC

  • 仅) CM_SVC_ERROR_TRUNC (基本对话

  • CM_PRODUCT_SPECIFIC_ERROR

  • CM_RESOURCE_FAILURE_NO_RETRY

  • CM_RESOURCE_FAILURE_RETRY

    有关这些返回代码的说明,请参阅 CPI-C 通用返回代码

    CM_DEALLOCATED_NORMAL
    主返回代码;因为当 发出Send_Error 处于 RECEIVE 状态时,将清除传入的信息,因此会生成CM_DEALLOCATED_NORMAL而不是以下内容:

  • CM_CONVERSATION_TYPE_MISMATCH

  • CM_PIP_NOT_SPECIFIED_CORRECTLY

  • CM_SECURITY_NOT_VALID

  • CM_SYNC_LEVEL_NOT_SUPPORTED_PGM

  • CM_TPN_NOT_RECOGNIZED

  • CM_TP_NOT_AVAILABLE_NO_RETRY

  • CM_TP_NOT_AVAILABLE_RETRY

  • CM_DEALLOCATED_ABEND

  • CM_DEALLOCATED_ABEND_SVC

  • CM_DEALLOCATED_ABEND_TIMER

    SEND_PENDING状态

    如果调用以SEND_PENDING状态发出,则可能返回以下代码:

  • CM_OK (主返回代码;调用已成功执行。)

  • CM_PRODUCT_SPECIFIC_ERROR

  • CM_PROGRAM_ERROR_PURGING

  • CM_RESOURCE_FAILURE_NO_RETRY

  • CM_RESOURCE_FAILURE_RETRY

  • CM_DEALLOCATED_ABEND

  • CM_DEALLOCATED_ABEND_SVC

  • CM_DEALLOCATED_ABEND_TIMER

  • CM_SVC_ERROR_PURGING

    有关这些返回代码的说明,请参阅 CPI-C 通用返回代码

    CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态

    如果呼叫以 CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态发出,则以下返回代码可能:

  • CM_OK (主返回代码;调用已成功执行。)

  • CM_PRODUCT_SPECIFIC_ERROR

  • CM_RESOURCE_FAILURE_NO_RETRY

  • CM_RESOURCE_FAILURE_RETRY

    有关这些返回代码的说明,请参阅 CPI-C 通用返回代码

    其他国家/州

    对处于 RESET 或 INITIALIZE 状态的会话发出 Send_Error 是非法的。 可以使用以下返回代码:

    CM_PROGRAM_PARAMETER_CHECK
    主返回代码; 由 conversation_ID 指定的值无效。

    CM_PROGRAM_STATE_CHECK
    主返回代码;会话状态不是 SEND、RECEIVE、CONFIRM、CONFIRM_SEND、CONFIRM_DEALLOCATE 或 SEND_PENDING。

    状态更改

    会话可以处于除 INITIALIZE 或 RESET 之外的任何状态。

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

return_code 新状态
CM_OK SEND
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_RETRY RESET
CM_RESOURCE_FAILURE_NO_RETRY RESET
CM_DEALLOCATED_ABEND RESET
CM_DEALLOCATED_ABEND_PROG RESET
CM_DEALLOCATED_ABEND_SVC RESET
CM_DEALLOCATED_ABEND_TIMER RESET
CM_DEALLOCATED_NORMAL RESET
CM_PROGRAM_ERROR_PURGING RECEIVE
CM_SVC_ERROR_PURGING RECEIVE
所有其他 没有变化

成功执行此调用后,本地程序的会话将处于 SEND 状态,合作伙伴计划的会话处于 RECEIVE 状态。

在基本会话中,本地程序可以使用 Set_Log_Data 指定将错误日志数据发送到伙伴 LU 并添加到本地错误日志。 如果会话日志数据长度特征大于零,LU 将格式化数据并将其存储在发送缓冲区中。

完成 Send_Error 后,日志数据长度设置为零,日志数据设置为 null。

如果在程序发出 Send_Error时会话处于 RECEIVE 状态,则 CPI-C 会清除传入数据。 此数据包括:

  • Send_Data发送的数据。

  • 确认请求。

  • 如果会话解除分配类型设置为CM_DEALLOCATE_CONFIRM或CM_DEALLOCATE_SYNC_LEVEL同步级别设置为 CM_CONFIRM,则释放请求。

    CPI-C 不使用传入请求发送指示器。

    如果会话处于SEND_PENDING状态,则本地程序可以发出 Set_Error_Direction ,以指定报告的错误是由接收的数据引起的,还是在成功接收数据后由本地程序处理引起的。

注解

本地程序可以使用 Send_Error 来通知合作伙伴程序收到的数据中遇到的错误、拒绝确认请求或截断正在发送的不完整逻辑记录。

Send_Error 刷新本地 LU 发送缓冲区,并向合作伙伴程序发送发送缓冲区的内容,后跟错误通知。

错误通知将作为以下 return_code 值之一发送给合作伙伴:

  • CM_PROGRAM_ERROR_TRUNC

  • CM_PROGRAM_ERROR_NO_TRUNC

  • CM_PROGRAM_ERROR_PURGING