Send_Data (CPI-C)
Send_Data调用 (函数名称 cmsend) 将数据放入本地逻辑单元 (LU) 的发送缓冲区中,以便传输到合作伙伴程序。
语法
CM_ENTRY Send_Data(
unsigned char FAR *conversation_ID,
unsigned char FAR *buffer,
CM_INT32 FAR *send_length,
CM_INT32 FAR *request_to_send_received,
CM_INT32 FAR *return_code
);
参数
conversation_ID
提供的参数。 指定会话的标识符。 此参数的值由 Initialize_Conversation 或 Accept_Conversation 返回。
buffer
提供的参数。 指定包含要放入本地 LU 发送缓冲区中的数据的缓冲区的地址。
send_length
提供的参数。 指定要放入本地 LU 发送缓冲区的数据字节数。 范围为 0 到 32767。
对于映射对话,如果 send_length 设置为零,则会向合作伙伴计划发送空数据记录。
对于基本对话,如果 send_length 设置为零,则不发送任何数据。 缓冲区参数不相关。 但是,会处理其他参数。
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 ,则应用程序应等待 Microsoft® Windows® 消息的通知,而不是 调用Wait_For_Conversation。
CM_PROGRAM_PARAMETER_CHECK
主返回代码;发生了以下情况之一:
conversation_ID指定的值无效。
send_length 指定的值超出范围 (大于 32767) 。
这是一个基本会话, 缓冲区 的前两个字节包含无效的逻辑记录长度 (0x0000、0x0001、0x8000或0x8001) 。
CM_PROGRAM_STATE_CHECK
主返回代码;发生了以下情况之一:会话状态不是 SEND 或 SEND_PENDING。
基本会话处于 SEND 状态, send_type 设置为 CM_SEND_AND_CONFIRM、CM_SEND_AND_DEALLOCATE 或 CM_SEND_AND_PREP_TO_RECEIVE。 但是,数据不会在逻辑记录边界上结束。 仅当 deallocate_type 设置为 CM_DEALLOCATE_ABEND 并且 send_type 设置为 CM_SEND_AND_DEALLOCATE 时,才允许此条件。
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设置为CM_OK 时可能发生的状态更改。
send_type | 旧状态 | 新状态 |
---|---|---|
CM_BUFFER_DATA | SEND | 没有变化 |
CM_BUFFER_DATA | SEND_PENDING | SEND |
CM_SEND_AND_FLUSH | SEND | 没有变化 |
CM_SEND_AND_FLUSH | SEND_PENDING | SEND |
CM_SEND_AND_CONFIRM | SEND | 没有变化 |
CM_SEND_AND_CONFIRM | SEND_PENDING | SEND |
CM_SEND_AND_PREP_TO_ RECEIVE | 不可用 | RECEIVE |
CM_SEND_AND_DEALLOCATE | 不可用 | RESET |
对于 CM_PROGRAM_ERROR_PURGING 或 CM_SVC_ERROR_PURGING 的return_code值,会话将更改为 RECEIVE 状态。 对于其他非CM_OK值,会话将更改为 RESET 状态。
注解
发生以下情况之一时,本地 LU 发送缓冲区中收集的数据将传输到合作伙伴 LU 和合作伙伴计划:
发送缓冲区将填满。
本地程序发出 刷新、 确认或 解除分配 调用或其他刷新 LU 发送缓冲区的调用。 (Set_Send_Type 设置的某些发送类型包括 flush 功能。)
要发送的数据可以是:
映射对话上的完整数据记录。 完整数据记录是由 send_length 参数指定的长度的字符串。
基本对话的完整逻辑记录或部分。 完整的逻辑记录由 LL 值确定。 (一条逻辑记录可以结束,新记录从要发送的数据字符串的中间开始。)
LU 不会自动对要发送的数据字符串执行 ASCII 和 EBCDIC 之间的任何转换。 如有必要,程序可以使用通用服务谓词 (CSV) CONVERT 将字符串从一个字符集转换为另一个字符集。