Prepare_To_Receive (CPI-C)
Prepare_To_Receive调用 (函数名称 cmptr) 将本地程序的会话状态从 SEND 更改为 RECEIVE。
语法
CM_ENTRY Prepare_To_Receive(
unsigned char FAR *conversation_ID,
CM_INT32 FAR *return_code
);
参数
conversation_ID
提供的参数。 指定会话的标识符。 此参数的值由 Initialize_Conversation 或 Accept_Conversation 返回。
return_code
从此调用返回的代码。 本主题后面列出了有效的返回代码。
返回代码
CM_OK
主返回代码;调用已成功执行。
CM_OPERATION_NOT_ACCEPTED
主返回代码;对此会话的上一个操作不完整。
CM_OPERATION_INCOMPLETE
主返回代码;操作尚未完成, (处理模式是非阻止,仅) 且仍在进行中。 程序可以发出 Wait_For_Conversation 以等待操作完成,或 Cancel_Conversation 取消操作和会话。 如果已调用 Specify_Windows_Handle ,则应用程序应等待 Microsoft® Windows® 消息的通知,而不是 调用 Wait_For_Conversation。
CM_PROGRAM_PARAMETER_CHECK
主返回代码; 由 conversation_ID 指定的值无效。
CM_PROGRAM_STATE_CHECK
主返回代码;发生以下情况之一:
会话状态不是 SEND 或 SEND_PENDING。
对于基本会话,会话处于 SEND 状态。 但是,程序未完成发送逻辑记录。
如果会话准备接收类型设置为CM_PREP_TO_RECEIVE_CONFIRM或准备接收类型设置为CM_PREP_TO_RECEIVE_SYNC_LEVEL并且会话同步级别设置为CM_CONFIRM,则可能会出现这些返回代码。
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,或者远程 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。 发送到合作伙伴计划的数据可能已被清除。状态更改
会话可以处于 SEND 或 SEND_PENDING 状态。
下表中汇总的状态更改基于 return_code 参数的值。
return_code | 新状态 |
---|---|
CM_OK | RECEIVE |
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_DEALLOCATED_ABEND | RESET |
CM_RESOURCE_FAILURE_NO_RETRY | RESET |
CM_RESOURCE_FAILURE_RETRY | RESET |
CM_DEALLOCATED_ABEND_SVC | RESET |
CM_DEALLOCATED_ABEND_TIMER | RESET |
所有其他 | 没有变化 |
在更改聊天状态之前,此调用将执行等效于下列操作之一:
如果满足以下任一条件,则 Flush 调用会将本地 LU 的内容发送到伙伴 LU 和程序:
会话准备接收类型设置为CM_PREP_TO_RECEIVE_FLUSH。
会话准备接收类型设置为CM_PREP_TO_RECEIVE_SYNC_LEVEL会话同步级别设置为CM_NONE。
确认 调用, 如果满足以下任一条件,则向合作伙伴计划发送本地 LU 的内容发送缓冲区和确认请求:
会话准备接收类型设置为CM_PREP_TO_RECEIVE_CONFIRM。
会话准备接收类型设置为CM_PREP_TO_RECEIVE_SYNC_LEVEL会话同步级别设置为CM_CONFIRM。
准备接收类型由 Set_Prepare_To_Receive_Type设置;同步级别由 Set_Sync_Level设置。
在合作伙伴计划通过 Receive 调用的 status_received 参数收到以下值之一之前,对话无法更改为合作伙伴计划的 SEND 或 SEND_PENDING:
CM_SEND_RECEIVED
使用 “已确认 ”或“ Send_Error ”呼叫CM_CONFIRM_SEND_RECEIVED和答复
注解
成功执行此调用后,本地程序可以接收数据。