SEND_DATA
Le verbe SEND_DATA place les données dans la mémoire tampon d’envoi de l’unité logique locale (LU) pour les transmettre au programme de transaction partenaire (TP).
La structure suivante décrit le bloc de contrôle de verbe (VCB) utilisé par le verbe SEND_DATA .
Syntaxe
struct send_data {
unsigned short opcode;
unsigned char opext;
unsigned char reserv2;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char tp_id[8];
unsigned long conv_id;
unsigned char rts_rcvd;
unsigned char data_type;
unsigned short int dlen;
unsigned char FAR * dptr ;
unsigned char type;
unsigned char reserv4;
};
Membres
opcode
Paramètre fourni. Spécifie le code d’opération de verbe, AP_B_SEND_DATA.
opext
Paramètre fourni. Spécifie l’extension d’opération de verbe, AP_BASIC_CONVERSATION.
reserv2
Champ réservé.
primary_rc
Paramètre retourné. Spécifie le code de retour principal défini par APPC à l’achèvement du verbe. Les codes de retour valides dépendent du verbe APPC émis. Pour connaître les codes d’erreur valides de ce verbe, consultez Codes de retour.
secondary_rc
Paramètre retourné. Spécifie le code de retour secondaire défini par APPC à l’achèvement du verbe. Les codes de retour valides dépendent du verbe APPC émis. Pour connaître les codes d’erreur valides de ce verbe, consultez Codes de retour.
tp_id
Paramètre fourni. Identifie le TP local.
La valeur de ce paramètre est retournée par TP_STARTED dans le TP appelant ou par RECEIVE_ALLOCATE dans le TP appelé.
conv_id
Paramètre fourni. Fournit l’identificateur de conversation.
La valeur de ce paramètre est retournée par ALLOCATE dans le TP appelant ou par RECEIVE_ALLOCATE dans le TP appelé.
rts_rcvd
Paramètre retourné. Fournit l’indicateur de requête à envoyer reçu.
AP_YES indique que le TP partenaire a émis REQUEST_TO_SEND, qui demande au TP local de modifier la conversation en état RECEIVE. Pour passer à l’état RECEIVE, le TP local peut utiliser PREPARE_TO_RECEIVE, RECEIVE_AND_WAIT ou RECEIVE_AND_POST.
AP_NO indique que le tp partenaire n’a pas émis de REQUEST_TO_SEND.
data_type
Paramètre fourni. Spécifie le type de données à envoyer si le point de synchronisation est pris en charge. Les paramètres valides sont les suivants :AP_APPLICATION
AP_USER_CONTROL_DATA
AP_PS_HEADER
dlen
Paramètre fourni. Spécifie le nombre d’octets de données à placer dans la mémoire tampon d’envoi de la lu locale. La plage est comprise entre 0 et 65535.Dpt
Paramètre fourni. Spécifie l’adresse de la mémoire tampon contenant les données à placer dans la mémoire tampon d’envoi de la lu locale.Pour le système d’exploitation Microsoft Windows, la mémoire tampon de données peut résider dans une zone de données statique ou dans une zone allouée globalement. La mémoire tampon de données doit s’adapter entièrement à cette zone.
type
Paramètre fourni. Permet à un TP d’envoyer des données et d’effectuer d’autres fonctions au sein d’un appel d’API. Par exemple, vous pouvez combiner SEND_DATA avec le type défini sur CONFIRM pour atteindre le même objectif que l’émission de SEND_DATA suivie de CONFIRM.AP_SEND_DATA_CONFIRM correspond à SEND_DATA suivi de CONFIRM.
AP_SEND_DATA_FLUSH correspond à SEND_DATA suivi deFLUSH.
AP_SEND_DATA_DEALLOC_ABEND correspond à SEND_DATA suivi deDEALLOCATE avec une dealloc_type de AP_ABEND_PROG.
AP_SEND_DATA_DEALLOC_FLUSH correspond à SEND_DATA suivi de DEALLOCATE avec une dealloc_type de AP_FLUSH.
AP_SEND_DATA_DEALLOC_SYNC_LEVEL correspond à SEND_DATA suivi de DEALLOCATE avec une dealloc_type de AP_SYNC_LEVEL.
AP_SEND_DATA_P_TO_R_FLUSH correspond à SEND_DATA suivi de PREPARE_TO_RECEIVE avec une ptr_type de AP_FLUSH.
AP_SEND_DATA_P_TO_R_SYNC_LEVEL correspond à SEND_DATA suivi de PREPARE_TO_RECEIVE avec une ptr_type de AP_SYNC_LEVEL et des verrous définis sur AP_SHORT.
reserv4
Un champ réservé.
Codes de retour
AP_OK
Code de retour principal ; indique que le verbe s’est exécuté correctement.
AP_PARAMETER_CHECK
Code de retour principal ; le verbe n’a pas été exécuté en raison d’une erreur de paramètre.
AP_BAD_CONV_ID
Code de retour secondaire ; la valeur de conv_id ne correspondait pas à un identificateur de conversation attribué par APPC.
AP_BAD_LL
Code de retour secondaire ; le champ de longueur d’enregistrement logique d’un enregistrement logique contenait une valeur non valide : 0x0000, 0x0001, 0x8000 ou 0x8001. Pour plus d’informations sur les enregistrements logiques, consultez À propos des programmes transactionnels.
AP_BAD_TP_ID
Code de retour secondaire ; la valeur de tp_id ne correspondait pas à un identificateur TP attribué par APPC.
AP_INVALID_DATA_SEGMENT
Code de retour secondaire ; la longueur spécifiée pour la mémoire tampon de données était plus longue que le segment alloué pour contenir la mémoire tampon.
AP_SEND_DATA_INVALID_TYPE
Code de retour secondaire ; le type spécifié n’a pas été reconnu par APPC.
AP_SEND_DATA_CONFIRM_SYNC_NONE
Code de retour secondaire ; le type CONFIRM n’est pas autorisé pour une conversation qui a été allouée avec un sync_level de NONE.
AP_STATE_CHECK
Code de retour principal ; le verbe n’a pas été exécuté, car il a été émis dans un état non valide.
AP_SEND_DATA_NOT_SEND_STATE
Code de retour secondaire ; le TP local a émis SEND_DATA, mais la conversation n’était pas dans l’état SEND.
AP_SEND_DATA_NOT_LL_BDY
Code de retour secondaire ; le TP a démarré mais n’a pas terminé l’envoi d’un enregistrement logique. Cela se produit uniquement lorsque le paramètre de type est l’un des éléments suivants :
AP_SEND_DATA_CONFIRM
AP_SEND_DATA_DEALLOC_FLUSH
AP_SEND_DATA_DEALLOC_SYNC_LEVEL
AP_SEND_DATA_P_TO_R_FLUSH
AP_SEND_DATA_P_TO_R_SYNC_LEVEL
AP_ALLOCATION_ERROR
Code de retour principal ; APPC n’a pas pu allouer une conversation. L’état de la conversation est défini sur RESET.
Ce code peut être retourné par le biais d’un verbe émis après ALLOCATE.
AP_ALLOCATION_FAILURE_NO_RETRY
Code de retour secondaire ; la conversation ne peut pas être allouée en raison d’une condition permanente, telle qu’une erreur de configuration ou une erreur de protocole de session. Pour déterminer l’erreur, l’administrateur système doit examiner le fichier journal des erreurs. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.
AP_ALLOCATION_FAILURE_RETRY
Code de retour secondaire ; La conversation n’a pas pu être allouée en raison d’une condition temporaire, telle qu’un échec de liaison. La raison de l’échec est consignée dans le journal des erreurs système. Réessayez l’allocation.
AP_CONVERSATION_TYPE_MISMATCH
Code de retour secondaire ; la lu ou tp partenaire ne prend pas en charge le type de conversation (de base ou mappé) spécifié dans la demande d’allocation.
AP_PIP_NOT_ALLOWED
Code de retour secondaire ; les données PIP spécifiées par la demande d’allocation, mais soit le TP partenaire n’a pas besoin de ces données, soit l’unité logique du partenaire ne les prend pas en charge.
AP_PIP_NOT_SPECIFIED_CORRECTLY
Code de retour secondaire ; le TP partenaire nécessite des données PIP, mais la demande d’allocation n’a spécifié aucune donnée PIP ou un nombre incorrect de paramètres.
AP_SECURITY_NOT_VALID
Code de retour secondaire ; l’identificateur utilisateur ou le mot de passe spécifiés dans la demande d’allocation n’a pas été accepté par l’unité logique partenaire.
AP_SYNC_LEVEL_NOT_SUPPORTED
Code de retour secondaire ; le TP partenaire ne prend pas en charge la sync_level (AP_NONE ou AP_CONFIRM_SYNC_LEVEL) spécifiée dans la demande d’allocation, ou le sync_level n’a pas été reconnu.
AP_TP_NAME_NOT_RECOGNIZED
Code de retour secondaire ; la lu partenaire ne reconnaît pas le nom TP spécifié dans la demande d’allocation.
AP_TRANS_PGM_NOT_AVAIL_NO_RETRY
Code de retour secondaire ; la lu distante a rejeté la demande d’allocation, car elle n’a pas pu démarrer le TP partenaire demandé. La condition est permanente. La raison de l’erreur peut être consignée sur le nœud distant. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.
AP_TRANS_PGM_NOT_AVAIL_RETRY
Code de retour secondaire ; la lu distante a rejeté la demande d’allocation, car elle n’a pas pu démarrer le TP partenaire demandé. La situation peut être temporaire, par exemple un délai d’attente. La raison de l’erreur peut être consignée sur le nœud distant. Réessayez l’allocation.
AP_COMM_SUBSYSTEM_ABENDED
Code de retour principal ; indique l’une des situations suivantes :
Le nœud utilisé par cette conversation a rencontré un abandon (ABEND).
La connexion a été interrompue entre le programme transactionnel et le nœud PU 2.1 (erreur LAN).
Le processus SnaBase qui se déroule sur l’ordinateur du programme transactionnel a rencontré un abandon (ABEND).
L’administrateur système doit examiner le journal des erreurs pour déterminer la raison de l’abandon.
AP_COMM_SUBSYSTEM_NOT_LOADED
Code de retour principal ; Un composant requis n’a pas pu être chargé ou s’est terminé lors du traitement du verbe. Par conséquent, la communication n’a pas pu être établie. Contactez l’administrateur système pour mettre en place une action corrective.Lorsque ce code de retour est utilisé avec ALLOCATE, il peut indiquer qu’aucun système de communication n’a pu être trouvé pour prendre en charge la lu locale. (Par exemple, l’alias de lu local spécifié avec TP_STARTED est incorrect ou n’a pas été configuré.) Notez que si lu_alias ou mode_name contient moins de huit caractères, vous devez vous assurer que ces champs sont remplis d’espaces à droite. Cette erreur est retournée si ces paramètres ne sont pas remplis d’espaces, car aucun nœud disponible ne peut satisfaire la requête ALLOCATE .
Lorsque ALLOCATE produit ce code de retour pour un système client Host Integration Server configuré avec plusieurs nœuds, il existe deux codes de retour secondaires comme suit :
0xF0000001
Code de retour secondaire ; aucun nœud n’a été démarré.
0xF0000002
Code de retour secondaire ; au moins un nœud a été démarré, mais l’unité logique locale (lorsque TP_STARTED est émis) n’est pas configurée sur les nœuds actifs. Le problème peut être l’un des suivants :
Le nœud avec l’unité logique locale n’est pas démarré.
La lu locale n’est pas configurée.
AP_CONV_FAILURE_NO_RETRY
Code de retour principal ; la conversation a été arrêtée en raison d’une condition permanente, telle qu’une erreur de protocole de session. L’administrateur système doit examiner le journal des erreurs système pour déterminer la cause de l’erreur. Ne réessayez pas la conversation tant que l’erreur n’a pas été corrigée.AP_CONV_FAILURE_RETRY
Code de retour principal ; la conversation a été arrêtée en raison d’une erreur temporaire. Redémarrez le tp pour voir si le problème se produit à nouveau. Si c’est le cas, l’administrateur système doit examiner le journal des erreurs pour déterminer la cause de l’erreur.AP_CONVERSATION_TYPE_MIXED
Code de retour principal ; le TP a émis des verbes de conversation de base et mappés. Un seul type peut être émis dans une même conversation.AP_INVALID_VERB_SEGMENT
Code de retour principal ; indique que le bloc de contrôle de verbe s’étend au-delà de la fin du segment de données.AP_PROG_ERROR_PURGING
Code de retour principal ; alors qu’à l’état RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND ou CONFIRM_DEALLOCATE, le partenaire TP a émis SEND_ERROR avec err_type défini sur AP_PROG. Les données envoyées mais pas encore reçues sont vidées.AP_STACK_TOO_SMALL
Code de retour principal ; indique que la taille de la pile de l’application est trop petite pour exécuter le verbe. Augmentez la taille de pile de votre application.AP_CONV_BUSY
Code de retour principal ; il ne peut y avoir qu’un seul verbe de conversation en suspens à la fois sur n’importe quelle conversation. Cela peut se produire si le tp local a plusieurs threads et que plusieurs threads émettent des appels APPC à l’aide du même conv_id.AP_THREAD_BLOCKING
Code de retour principal ; indique que le thread appelant se trouve déjà dans un appel de blocage.AP_UNEXPECTED_DOS_ERROR
Code de retour principal ; indique que le système d’exploitation a retourné une erreur à APPC lors du traitement d’un appel APPC à partir du programme transactionnel local. Le code de retour du système d’exploitation a été retourné via secondary_rc. Il apparaît dans l’ordre Intel avec permutation d’octets. Si le problème persiste, consultez l’administrateur système.AP_DEALLOC_ABEND_PROG
Code de retour principal ; la conversation a été libérée pour l’une des raisons suivantes :Le tp partenaire a émis DEALLOCATE avec dealloc_type défini sur AP_ABEND_PROG.
Le TP partenaire a rencontré un ABEND, ce qui a entraîné l’envoi d’une requête DEALLOCATE par l’unité logique du partenaire.
AP_DEALLOC_ABEND_SVC
Code de retour principal ; la conversation a été libérée, car le tp partenaire a émis DEALLOCATE avec dealloc_type défini sur AP_ABEND_SVC.AP_DEALLOC_ABEND_TIMER
Code de retour principal ; la conversation a été libérée, car le tp partenaire a émis DEALLOCATE avec dealloc_type défini sur AP_ABEND_TIMER.AP_SVC_ERROR_PURGING
Code de retour principal ; le TP partenaire (ou LU partenaire) a émis un verbe SEND_ERROR avec err_type défini sur AP_SVC dans l’état RECEIVE, PENDING_POST, CONFIRM, CONFIRM_SEND ou CONFIRM_DEALLOCATE. Les données envoyées au programme transactionnel de partenaire ont peut-être été vidées.
Remarques
La conversation doit être à l’état SEND lorsque le TP émet ce verbe. Les modifications d’état, basées sur primary_rc, sont résumées dans le tableau suivant.
primary_rc | Nouvel état |
---|---|
AP_OK | Aucun changement |
AP_ALLOCATION_ERROR | RESET |
AP_CONV_FAILURE_RETRY | RESET |
AP_CONV_FAILURE_NO_RETRY | RESET |
AP_DEALLOC_ABEND | RESET |
AP_DEALLOC_ABEND_PROG | RESET |
AP_DEALLOC_ABEND_SVC | RESET |
AP_DEALLOC_ABEND_TIMER | RESET |
AP_PROG_ERROR_PURGING | RECEIVE |
AP_SVC_ERROR_PURGING | RECEIVE |
SEND_DATA peut attendre indéfiniment, car le tp partenaire n’a pas émis de verbe de réception. Si cela se produit, la mémoire tampon d’envoi peut se remplir.
Les données collectées dans la mémoire tampon d’envoi de la lu locale sont transmises à l’unité lu partenaire (et au tp partenaire) lorsque l’un des événements suivants se produit :
La mémoire tampon d’envoi se remplit.
Le TP local émet flush, CONFIRM ou DEALLOCATE (ou un autre verbe qui vide la mémoire tampon d’envoi de l’unité lu).