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_Conversation 或 Accept_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 状态
如果程序以 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。 已清除发送但尚未收到的数据。
虽然处于SEND_PENDING状态且错误方向设置为CM_RECEIVE_ERROR,但合作伙伴计划已 发出Send_Error。 未清除数据。
CM_RESOURCE_FAILURE_NO_RETRY
主要返回代码;发生以下事件之一:由于永久性条件,会话过早终止。 在更正错误之前不要重试。
合作伙伴计划在正常终止之前未解除分配对话。
CM_RESOURCE_FAILURE_RETRY
主要返回代码;由于临时情况(如调制解调器故障)而提前终止了会话。 重试对话。CM_DEALLOCATED_ABEND
主要返回代码;由于以下原因之一,已解除分配会话:远程程序向 CM_DEALLOCATE_ABEND 发出 了“解除分配 ”类型参数集,或者远程 LU 由于远程程序异常结束条件而发出了取消分配。 如果在发出呼叫时远程程序的会话处于 RECEIVE 状态,则本地程序发送且尚未由远程程序接收的信息将被清除。
远程 TP 已正常终止,但在终止之前未解除分配会话。 远程 LU 上的节点服务代表远程 TP 解除分配了会话。
CM_DEALLOCATED_ABEND_SVC
主要返回代码;由于以下原因之一,已解除分配会话:合作伙伴计划发布了 Deallocate ,类型参数设置为ABEND_SVC。
合作伙伴计划在终止之前未解除分配对话。
如果此呼叫由本地计划发出时,合作伙伴计划的会话处于 RECEIVE 状态,则由本地计划发送且尚未由合作伙伴计划接收的数据被清除。
CM_DEALLOCATED_ABEND_TIMER
主要返回代码;会话已解除分配,因为合作伙伴计划已颁发 了“解除分配 ”,类型参数设置为ABEND_TIMER。 如果此呼叫由本地计划发出时,合作伙伴计划的会话处于 RECEIVE 状态,则由本地计划发送且尚未由合作伙伴计划接收的数据被清除。CM_SVC_ERROR_PURGING
主要返回代码;处于 SEND 状态时,合作伙伴计划或合作伙伴 LU 发布了 Send_Error 类型参数设置为 SVC。 发送到合作伙伴计划的数据可能已被清除。RECEIVE 状态
如果调用以 RECEIVE 状态发出,则有可能使用以下返回代码:
CM_OK
主要返回代码;由于在 RECEIVE 状态下发出 Send_Error 调用时清除传入信息,因此生成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
主要返回代码;由于在 RECEIVE 状态下发出 Send_Error 时清除传入信息,因此会生成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 State
如果调用以 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 | 发送 |
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_RESOURCE_FAILURE_RETRY | 重置 |
CM_RESOURCE_FAILURE_NO_RETRY | 重置 |
CM_DEALLOCATED_ABEND | 重置 |
CM_DEALLOCATED_ABEND_PROG | 重置 |
CM_DEALLOCATED_ABEND_SVC | 重置 |
CM_DEALLOCATED_ABEND_TIMER | 重置 |
CM_DEALLOCATED_NORMAL | 重置 |
CM_PROGRAM_ERROR_PURGING | 收到 |
CM_SVC_ERROR_PURGING | 收到 |
所有其他 | 无更改 |
成功执行此调用后,会话处于本地程序的 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