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傳回。
緩衝區
提供的參數。 指定要放入本機 LU 傳送緩衝區之資料的緩衝區位址。
send_length
提供的參數。 指定要放入本機 LU 傳送緩衝區的資料位元組數目。 範圍是從 0 到 32767。
針對對應的交談,如果 send_length 設為零,則會將 Null 資料記錄傳送給合作夥伴計畫。
對於基本交談,如果 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。 已清除已傳送但尚未接收的資料。
處於SEND_PENDING狀態,錯誤方向設定為CM_RECEIVE_ERROR時,合作夥伴計畫會 發出Send_Error。 未清除資料。
CM_RESOURCE_FAILURE_NO_RETRY
主要傳回碼;發生下列其中一項:交談因為永久條件而提前終止。 在更正錯誤之前,請勿重試。
合作夥伴計畫未在正常終止之前解除配置交談。
CM_RESOURCE_FAILURE_RETRY
主要傳回碼;交談因為暫時性狀況而提前終止,例如數據機失敗。 重試交談。CM_DEALLOCATED_ABEND
主要傳回碼;交談因下列其中一個原因而解除配置:遠端程式發出 Deallocate ,並將 type 參數設定為 CM_DEALLOCATE_ABEND,或遠端 LU 因為遠端程式異常結束狀況而發出。 如果在發出呼叫時,遠端程式的交談處於 RECEIVE 狀態,則會清除本機程式所傳送且尚未由遠端程式接收的資訊。
遠端 TP 正常終止,但在終止之前未解除配置交談。 遠端 LU 上的節點服務會代表遠端 TP 解除配置交談。
CM_DEALLOCATED_ABEND_SVC
主要傳回碼;交談因下列其中一個原因而解除配置:合作夥伴計畫發出 解除配置 ,並將 type 參數設定為 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 和合作夥伴計畫:
傳送緩衝區會填滿。
本機程式會發出 Flush、 Confirm或 Deallocate 呼叫,或其他排清 LU 傳送緩衝區的呼叫。 (某些傳送類型,由 Set_Send_Type設定,包括 flush 功能。)
要傳送的資料可以是:
對應交談上的完整資料記錄。 完整資料記錄是 send_length 參數所指定的長度字串。
基本交談上的完整邏輯記錄或部分。 完整的邏輯記錄是由 LL 值決定。 (一個邏輯記錄可以結束,而新的記錄會在要傳送的資料字串中間開始。)
LU 不會在要傳送的資料字串上自動執行 ASCII 與 EBCDIC 之間的任何轉換。 如有必要,程式可以使用 Common Service Verb (CSV) CONVERT ,將字串從一個字元集轉譯到另一個字元。