Condividi tramite


Send_Data (CPI-C)

La chiamata Send_Data (nome funzione cmsend) inserisce i dati nel buffer di invio dell'unità logica locale (LU) per la trasmissione al programma partner.

Sintassi

  
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              
);  

Parametri

conversation_ID
Parametro fornito. Specifica l'identificatore per la conversazione. Il valore di questo parametro è stato restituito da Initialize_Conversation o Accept_Conversation.

Buffer
Parametro fornito. Specifica l'indirizzo del buffer che contiene i dati da inserire nel buffer di invio delle UNITÀ locali.

send_length
Parametro fornito. Specifica il numero di byte di dati da inserire nel buffer di invio delle UNITÀ locali. L'intervallo è compreso tra 0 e 32767.

Per una conversazione mappata, se send_length è impostato su zero, viene inviato un record di dati Null al programma partner.

Per una conversazione di base, se send_length è impostato su zero, non vengono inviati dati. Il parametro del buffer non è pertinente. Tuttavia, gli altri parametri vengono elaborati.

request_to_send_received
Parametro restituito. È l'indicatore request-to-send-received. I valori possibili sono:

CM_REQ_TO_SEND_RECEIVED
Il programma partner ha rilasciato la chiamata Request_To_Send , che richiede al programma locale di modificare lo stato della conversazione in RICEZIONE.

CM_REQ_TO_SEND_NOT_RECEIVED
Il programma partner non ha eseguito la chiamata Request_To_Send . Questo valore non è rilevante se return_code è impostato su CM_PROGRAM_PARAMETER_CHECK o CM_PROGRAM_STATE_CHECK.

return_code
Codice restituito da questa chiamata. I codici restituiti validi sono elencati più avanti in questo argomento.

Codici restituiti

CM_OK
Codice restituito primario; la chiamata eseguita correttamente.

CM_OPERATION_NOT_ACCEPTED
Codice restituito primario; un'operazione precedente in questa conversazione è incompleta.

CM_OPERATION_INCOMPLETE
Codice restituito primario; l'operazione non è stata completata (la modalità di elaborazione non è bloccata solo) ed è ancora in corso. Il programma può eseguire Wait_For_Conversation per attendere il completamento dell'operazione o Cancel_Conversation per annullare l'operazione e la conversazione. Se Specify_Windows_Handle è stato chiamato, l'applicazione deve attendere la notifica da un messaggio di Microsoft® Windows® e non chiamare Wait_For_Conversation.

CM_PROGRAM_PARAMETER_CHECK
Codice restituito primario; si è verificato uno dei seguenti:

  • Il valore specificato da conversation_ID non è valido.

  • Il valore specificato da send_length non è compreso nell'intervallo (maggiore di 32767).

  • Si tratta di una conversazione di base e i primi due byte del buffer contengono una lunghezza di record logico non valida (0x0000, 0x0001, 0x8000 o 0x8001).

    CM_PROGRAM_STATE_CHECK
    Codice restituito primario; si è verificato uno dei seguenti:

  • Lo stato della conversazione non è SEND o SEND_PENDING.

  • La conversazione di base è in stato SEND e send_type è impostata su CM_SEND_AND_CONFIRM, CM_SEND_AND_DEALLOCATE o CM_SEND_AND_PREP_TO_RECEIVE. Tuttavia, i dati non terminano su un limite di record logico. Questa condizione è consentita solo quando deallocate_type è impostata su CM_DEALLOCATE_ABEND e il send_type è impostato su CM_SEND_AND_DEALLOCATE.

    CM_PRODUCT_SPECIFIC_ERROR
    Codice restituito primario; si è verificato un errore specifico del prodotto ed è stato registrato nel log degli errori dei prodotti.

    CM_CONVERSATION_TYPE_MISMATCH
    Codice restituito primario; l'lu o il programma partner non supporta il tipo di conversazione (basic o mappato) specificato nella richiesta di allocazione.

    CM_PIP_NOT_SPECIFIED_CORRECTLY
    Codice restituito primario; la richiesta di allocazione è stata rifiutata da un programma di transazione NON CPI-C LU 6.2 (TP). Il programma partner richiede una o più variabili di dati PIP, che non sono supportate da CPI-C.

    CM_SECURITY_NOT_VALID
    Codice restituito primario; l'identificatore utente o la password specificati nella richiesta di allocazione non sono stati accettati dall'LU partner.

    CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
    Codice restituito primario; il programma partner non supporta il livello di sincronizzazione specificato nella richiesta di allocazione.

    CM_TPN_NOT_RECOGNIZED
    Codice restituito primario; l'lu partner non riconosce il nome del programma specificato nella richiesta di allocazione.

    CM_TP_NOT_AVAILABLE_NO_RETRY
    Codice restituito primario; il lu partner non può avviare il programma specificato nella richiesta di allocazione a causa di una condizione permanente. Il motivo dell'errore può essere connesso al nodo remoto. Non ripetere l'allocazione finché l'errore non è stato corretto.

    CM_TP_NOT_AVAILABLE_RETRY
    Codice restituito primario; il lu partner non può avviare il programma specificato nella richiesta di allocazione a causa di una condizione temporanea. Il motivo dell'errore può essere connesso al nodo remoto. Riprovare l'allocazione.

    CM_PROGRAM_ERROR_PURGING
    Codice restituito primario; si è verificato uno dei seguenti:

  • Durante lo stato RECEIVE o CONFIRM, il programma partner ha rilasciato Send_Error. I dati inviati ma non ancora ricevuti vengono eliminati.

  • Mentre in SEND_PENDING stato con la direzione degli errori impostata su CM_RECEIVE_ERROR, il programma partner ha rilasciato Send_Error. I dati non sono stati eliminati.

    CM_RESOURCE_FAILURE_NO_RETRY
    Codice restituito primario; si è verificato uno dei seguenti:

  • La conversazione è stata terminata prematuramente a causa di una condizione permanente. Non riprovare finché l'errore non è stato corretto.

  • Il programma partner non ha deallocato la conversazione prima di terminare normalmente.

    CM_RESOURCE_FAILURE_RETRY
    Codice restituito primario; la conversazione è stata terminata prematuramente a causa di una condizione temporanea, ad esempio l'errore del modem. Riprovare la conversazione.

    CM_DEALLOCATED_ABEND
    Codice restituito primario; la conversazione è stata deallocata per uno dei motivi seguenti:

  • Il programma remoto ha rilasciato Deallocate con il parametro di tipo impostato su CM_DEALLOCATE_ABEND o l'lu remoto ha eseguito questa operazione a causa di una condizione di terminazione anomalo del programma remoto. Se la conversazione per il programma remoto era in stato RECEIVE quando la chiamata è stata rilasciata, le informazioni inviate dal programma locale e non ancora ricevute dal programma remoto vengono rimosse.

  • Il TP remoto termina normalmente, ma non dealloca la conversazione prima di terminare. I servizi del nodo presso l'lu remoto deallocato la conversazione per conto del TP remoto.

    CM_DEALLOCATED_ABEND_SVC
    Codice restituito primario; la conversazione è stata deallocata per uno dei motivi seguenti:

  • Il programma partner ha rilasciato Deallocate con il parametro di tipo impostato su ABEND_SVC.

  • Il programma partner non ha deallocato la conversazione prima di terminare.

    Se la conversazione è in stato RECEIVE per il programma partner quando questa chiamata viene rilasciata dal programma locale, i dati inviati dal programma locale e non ancora ricevuti dal programma partner vengono eliminati.

    CM_DEALLOCATED_ABEND_TIMER
    Codice restituito primario; la conversazione è stata deallocata perché il programma partner ha emesso Deallocate con il parametro di tipo impostato su ABEND_TIMER. Se la conversazione è in stato RECEIVE per il programma partner quando questa chiamata viene eseguita dal programma locale, i dati inviati dal programma locale e non ancora ricevuti dal programma partner vengono eliminati.

    CM_SVC_ERROR_PURGING
    Codice restituito primario; durante lo stato SEND, il programma partner o l'lu partner ha emesso Send_Error con il parametro di tipo impostato su SVC. I dati inviati al programma partner potrebbero essere stati eliminati.

    Modifiche dello stato

    La conversazione deve essere in stato SEND o SEND_PENDING quando il programma genera questa chiamata.

    Nella tabella seguente vengono riepilogate le modifiche dello stato possibili quando return_code è impostato su CM_OK.

send_type Stato precedente Nuovo stato
CM_BUFFER_DATA SEND Nessuna modifica
CM_BUFFER_DATA SEND_PENDING SEND
CM_SEND_AND_FLUSH SEND Nessuna modifica
CM_SEND_AND_FLUSH SEND_PENDING SEND
CM_SEND_AND_CONFIRM SEND Nessuna modifica
CM_SEND_AND_CONFIRM SEND_PENDING SEND
CM_SEND_AND_PREP_TO_ RECEIVE Non disponibile RECEIVE
CM_SEND_AND_DEALLOCATE Non disponibile RESET

Per un valore return_code di CM_PROGRAM_ERROR_PURGING o CM_SVC_ERROR_PURGING, la conversazione cambia in stato RECEIVE. Per altri valori non CM_OK, la conversazione passa allo stato RESET.

Commenti

I dati raccolti nel buffer di invio delle UNITÀ locali vengono trasmessi al partner LU e al programma partner quando si verifica una delle operazioni seguenti:

  • Il buffer di invio viene riempito.

  • Il programma locale genera una chiamata Flush, Confirm o Deallocate o un'altra chiamata che scarica il buffer di invio delle unità di archiviazione. Alcuni tipi di invio, impostati da Set_Send_Type, includono funzionalità di scaricamento.

    I dati da inviare possono essere:

  • Record di dati completo in una conversazione mappata. Un record di dati completo è una stringa della lunghezza specificata dal parametro send_length .

  • Record logico completo o parte di esso in una conversazione di base. Un record logico completo è determinato dal valore LL. Un record logico può terminare e uno nuovo inizia al centro della stringa di dati da inviare.

    L'unità lu non esegue automaticamente alcuna conversione tra ASCII ed EBCDIC sulla stringa di dati da inviare. Se necessario, il programma può usare Common Service Verb (CSV) CONVERT per convertire una stringa da un set di caratteri all'altro.