Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’appel Send_Data (nom de fonction cmsend) place les données dans la mémoire tampon d’envoi de l’unité logique locale (LU) pour la transmission au programme partenaire.
Syntaxe
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
);
Paramètres
conversation_ID
Paramètre fourni. Spécifie l’identificateur de la conversation. La valeur de ce paramètre a été retournée par Initialize_Conversation ou Accept_Conversation.
mémoire tampon
Paramètre fourni. Spécifie l’adresse de la mémoire tampon contenant les données à placer dans la mémoire tampon d’envoi locale des unités logiques.
send_length
Paramètre fourni. Spécifie le nombre d’octets de données à placer dans la mémoire tampon d’envoi locale des unités logiques. La plage est comprise entre 0 et 32767.
Pour une conversation mappée, si send_length a la valeur zéro, un enregistrement de données Null est envoyé au programme partenaire.
Pour une conversation de base, si send_length a la valeur zéro, aucune donnée n’est envoyée. Le paramètre de mémoire tampon n’est pas pertinent. Toutefois, les autres paramètres sont traités.
request_to_send_received
Paramètre retourné. Il s’agit de l’indicateur request-to-send-received. Les valeurs possibles sont les suivantes :
CM_REQ_TO_SEND_RECEIVED
Le programme partenaire a émis l’appel Request_To_Send , qui demande au programme local de modifier l’état RECEIVE de la conversation.
CM_REQ_TO_SEND_NOT_RECEIVED
Le programme partenaire n’a pas lancé l’appel Request_To_Send . Cette valeur n’est pas pertinente si return_code a la valeur CM_PROGRAM_PARAMETER_CHECK ou CM_PROGRAM_STATE_CHECK.
return_code
Code retourné à partir de cet appel. Les codes de retour valides sont répertoriés plus loin dans cette rubrique.
Codes de retour
CM_OK
Code de retour principal ; l’appel a été exécuté avec succès.
CM_OPERATION_NOT_ACCEPTED
Code de retour principal ; une opération précédente sur cette conversation est incomplète.
CM_OPERATION_INCOMPLETE
Code de retour principal ; l’opération n’est pas terminée (le mode de traitement n’est pas bloquant uniquement) et est toujours en cours. Le programme peut émettre des Wait_For_Conversation pour attendre l’achèvement de l’opération, ou Cancel_Conversation pour annuler l’opération et la conversation. Si Specify_Windows_Handle a été appelée, l’application doit attendre la notification par un message Microsoft® Windows® et ne pas appeler Wait_For_Conversation.
CM_PROGRAM_PARAMETER_CHECK
Code de retour principal ; l’une des opérations suivantes s’est produite :
La valeur spécifiée par conversation_ID n’est pas valide.
La valeur spécifiée par send_length est hors plage (supérieure à 32767).
Il s’agit d’une conversation de base et les deux premiers octets de la mémoire tampon contiennent une longueur d’enregistrement logique non valide (0x0000, 0x0001, 0x8000 ou 0x8001).
CM_PROGRAM_STATE_CHECK
Code de retour principal ; l’une des opérations suivantes s’est produite :L’état de la conversation n’est pas SEND ou SEND_PENDING.
La conversation de base est dans l’état SEND et send_type est définie sur CM_SEND_AND_CONFIRM, CM_SEND_AND_DEALLOCATE ou CM_SEND_AND_PREP_TO_RECEIVE. Toutefois, les données ne se terminent pas sur une limite d’enregistrement logique. Cette condition n’est autorisée que lorsque deallocate_type est définie sur CM_DEALLOCATE_ABEND et que la send_type est définie sur CM_SEND_AND_DEALLOCATE.
CM_PRODUCT_SPECIFIC_ERROR
Code de retour principal ; une erreur spécifique au produit s’est produite et a été enregistrée dans le journal des erreurs des produits.CM_CONVERSATION_TYPE_MISMATCH
Code de retour principal ; l’unité logique partenaire ou le programme ne prend pas en charge le type de conversation (de base ou mappé) spécifié dans la demande d’allocation.CM_PIP_NOT_SPECIFIED_CORRECTLY
Code de retour principal ; la demande d’allocation a été rejetée par un programme de transaction lu 6.2 (TP) nonCPI-C. Le programme partenaire nécessite une ou plusieurs variables de données PIP, qui ne sont pas prises en charge par CPI-C.CM_SECURITY_NOT_VALID
Code de retour principal ; l’identificateur de l’utilisateur ou le mot de passe spécifié dans la demande d’allocation n’a pas été accepté par l’unité logique partenaire.CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
Code de retour principal ; le programme partenaire ne prend pas en charge le niveau de synchronisation spécifié dans la demande d’allocation.CM_TPN_NOT_RECOGNIZED
Code de retour principal ; l’unité logique partenaire ne reconnaît pas le nom du programme spécifié dans la demande d’allocation.CM_TP_NOT_AVAILABLE_NO_RETRY
Code de retour principal ; l’unité logique partenaire ne peut pas démarrer le programme spécifié dans la demande d’allocation en raison d’une condition permanente. La raison de l’erreur peut être journalisée sur le nœud distant. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.CM_TP_NOT_AVAILABLE_RETRY
Code de retour principal ; l’unité logique partenaire ne peut pas démarrer le programme spécifié dans la demande d’allocation en raison d’une condition temporaire. La raison de l’erreur peut être journalisée sur le nœud distant. Réessayez l’allocation.CM_PROGRAM_ERROR_PURGING
Code de retour principal ; l’une des opérations suivantes s’est produite :Dans l’état RECEIVE ou CONFIRM, le programme partenaire a émis Send_Error. Les données envoyées, mais qui ne sont pas encore reçues, sont vidées.
Dans SEND_PENDING état avec la direction d’erreur définie sur CM_RECEIVE_ERROR, le programme partenaire a émis Send_Error. Les données n’ont pas été purgées.
CM_RESOURCE_FAILURE_NO_RETRY
Code de retour principal ; l’une des opérations suivantes s’est produite :La conversation a été interrompue prématurément en raison d’une condition permanente. Ne réessayez pas tant que l’erreur n’a pas été corrigée.
Le programme partenaire n’a pas désalloué la conversation avant de se terminer normalement.
CM_RESOURCE_FAILURE_RETRY
Code de retour principal ; la conversation a été interrompue prématurément en raison d’une condition temporaire, telle que l’échec du modem. Réessayez la conversation.CM_DEALLOCATED_ABEND
Code de retour principal ; la conversation a été libérée pour l’une des raisons suivantes :Le programme distant a émis la libération avec le paramètre de type défini sur CM_DEALLOCATE_ABEND, ou l’unité logique distante l’a fait en raison d’une condition de fin anormale du programme distant. Si la conversation du programme distant était dans l’état RECEIVE lors de l’émission de l’appel, les informations envoyées par le programme local et non encore reçues par le programme distant sont vidées.
Le TP distant s’est terminé normalement, mais n’a pas désalloué la conversation avant de terminer. Les services de nœud au niveau de l’unité logique distante ont désalloué la conversation pour le compte du TP distant.
CM_DEALLOCATED_ABEND_SVC
Code de retour principal ; la conversation a été libérée pour l’une des raisons suivantes :Le programme partenaire a émis La libération avec le paramètre de type défini sur ABEND_SVC.
Le programme partenaire n’a pas désalloué la conversation avant de terminer.
Si la conversation est en état RECEIVE pour le programme partenaire lorsque cet appel est émis par le programme local, les données envoyées par le programme local et non encore reçues par le programme partenaire sont vidées.
CM_DEALLOCATED_ABEND_TIMER
Code de retour principal ; la conversation a été libérée, car le programme partenaire a émis La libération avec le paramètre de type défini sur ABEND_TIMER. Si la conversation est en état RECEIVE pour le programme partenaire lorsque cet appel est émis par le programme local, les données envoyées par le programme local et non encore reçues par le programme partenaire sont vidées.CM_SVC_ERROR_PURGING
Code de retour principal ; dans l’état SEND, le programme partenaire ou l’unité logique partenaire a émis Send_Error avec le paramètre de type défini sur SVC. Les données envoyées au programme partenaire ont peut-être été vidées.modifications d’état
La conversation doit être à l’état SEND ou SEND_PENDING lorsque le programme émet cet appel.
Le tableau suivant récapitule les modifications d’état qui sont possibles lorsque return_code est défini sur CM_OK.
| send_type | Ancien état | Nouvel état |
|---|---|---|
| CM_BUFFER_DATA | ENVOYER | Aucune modification |
| CM_BUFFER_DATA | SEND_PENDING | ENVOYER |
| CM_SEND_AND_FLUSH | ENVOYER | Aucune modification |
| CM_SEND_AND_FLUSH | SEND_PENDING | ENVOYER |
| CM_SEND_AND_CONFIRM | ENVOYER | Aucune modification |
| CM_SEND_AND_CONFIRM | SEND_PENDING | ENVOYER |
| CM_SEND_AND_PREP_TO_ RECEIVE | Non disponible | RECEVOIR |
| CM_SEND_AND_DEALLOCATE | Non disponible | RÉINITIALISER |
Pour une valeur return_code de CM_PROGRAM_ERROR_PURGING ou de CM_SVC_ERROR_PURGING, la conversation passe à l’état RECEIVE. Pour d’autres valeurs non CM_OK, la conversation passe à l’état RESET.
Remarques
Les données collectées dans la mémoire tampon d’envoi locale sont transmises à l’unité logique partenaire et au programme partenaire lorsqu’une des opérations suivantes se produit :
La mémoire tampon d’envoi se remplit.
Le programme local émet un appel vider, confirmer ou libérer un appel ou un autre appel qui vide la mémoire tampon d’envoi des unités logiques. (Certains types d’envoi, définis par Set_Send_Type, incluent la fonctionnalité de vidage.)
Les données à envoyer peuvent être les suivantes :
Enregistrement de données complet sur une conversation mappée. Un enregistrement de données complet est une chaîne de la longueur spécifiée par le paramètre send_length .
Enregistrement logique complet ou partie de celui-ci sur une conversation de base. Un enregistrement logique complet est déterminé par la valeur LL. (Un enregistrement logique peut se terminer et un nouvel enregistrement commence au milieu de la chaîne de données à envoyer.)
L’unité logique n’effectue pas automatiquement de conversion entre ASCII et EBCDIC sur la chaîne de données à envoyer. Si nécessaire, le programme peut utiliser le common service verb (CSV) CONVERT pour traduire une chaîne d’un jeu de caractères vers l’autre.