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 が 0 に設定されている場合、null データ レコードがパートナー プログラムに送信されます。

基本的な会話の場合、 send_length が 0 に設定されている場合、データは送信されません。 バッファー パラメーターは関係ありません。 ただし、他のパラメーターは処理されます。

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 より大きい) です。

  • これは基本的な会話であり、 バッファーの最初 の 2 バイトに無効な論理レコード長 (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) によって拒否されました。 パートナー・プログラムには、CPI-C ではサポートされていない 1 つ以上の PIP データ変数が必要です。

    CM_SECURITY_NOT_VALID
    プライマリ リターン コード。割り当て要求で指定されたユーザー ID またはパスワードが、パートナー 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に設定して 割り振り解除 を発行したか、リモート・プログラムの異常終了状態のためにリモート LU が割り当てを解除しました。 呼び出しの発行時にリモート・プログラムの会話が RECEIVE 状態であった場合、ローカル・プログラムによって送信され、リモート・プログラムによってまだ受信されていない情報は消去されます。

  • リモート TP は正常に終了しましたが、終了する前に会話の割り当てを解除しませんでした。 リモート LU のノード サービスは、リモート TP に代わって会話の割り当てを解除しました。

    CM_DEALLOCATED_ABEND_SVC
    プライマリ リターン コード。次のいずれかの理由で、会話の割り当てが解除されました。

  • 型パラメーターが ABEND_SVC に設定された状態で、パートナー プログラムによって 割り当て解除 が発行されました。

  • パートナー プログラムは、終了する前に会話の割り当てを解除しませんでした。

    この呼び出しがローカル・プログラムによって発行されたときに、パートナー・プログラムのメッセージ交換が RECEIVE 状態の場合、ローカル・プログラムによって送信され、まだパートナー・プログラムによって受信されていないデータは消去されます。

    CM_DEALLOCATED_ABEND_TIMER
    プライマリ リターン コード。パートナー プログラムが型パラメーターを ABEND_TIMER に設定して 割り当て解除 を発行したため、会話の割り当てが解除されました。 この呼び出しがローカル・プログラムによって発行されたときに、パートナー・プログラムのメッセージ交換が RECEIVE 状態の場合、ローカル・プログラムによって送信され、まだパートナー・プログラムによって受信されていないデータは消去されます。

    CM_SVC_ERROR_PURGING
    プライマリ リターン コード。が SEND 状態の場合、タイプ パラメーターが SVC に設定 された状態 でパートナー プログラムまたはパートナー LU がSend_Error発行されます。 パートナー プログラムに送信されたデータが消去されている可能性があります。

    状態の変更

    プログラムがこの呼び出しを発行するときは、メッセージ交換が 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 およびパートナー プログラムに送信されます。

  • 送信バッファーがいっぱいになります。

  • ローカル プログラムは、 FLUSHConfirm、または 割り当て解除 呼び出し、または LU 送信バッファーをフラッシュするその他の呼び出しを発行します。 (一部の送信の種類は、 Set_Send_Typeによって設定され、フラッシュ機能が含まれます)。

    送信するデータは次のいずれかになります。

  • マップされた会話の完全なデータ レコード。 完全なデータ レコードは、 send_length パラメーターで指定された長さの文字列です。

  • 基本的な会話上の完全な論理レコードまたはその一部。 完全な論理レコードは LL 値によって決まります。 (1 つの論理レコードを終了でき、新しいレコードは、送信されるデータの文字列の途中から始まります)。

    LU は、送信されるデータのストリングに対して ASCII と EBCDIC の間の変換を自動的に実行しません。 必要に応じて、プログラムは Common Service Verb (CSV) CONVERT を使用して、文字列を 1 つの文字セットから他方の文字セットに変換できます。