Send_Data (CPI-C)

La llamada Send_Data (nombre de función cmsend) coloca los datos en el búfer de envío de la unidad lógica local (LU) para la transmisión al programa asociado.

Sintaxis

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

Parámetros

conversation_ID
Parámetro proporcionado. Especifica el identificador de la conversación. El valor de este parámetro lo devolvió Initialize_Conversation o Accept_Conversation.

buffer
Parámetro proporcionado. Especifica la dirección del búfer que contiene los datos que se van a colocar en el búfer de envío de LU local.

send_length
Parámetro proporcionado. Especifica el número de bytes de datos que se van a colocar en el búfer de envío de las LU locales. El intervalo va de 0 a 32767.

En el caso de una conversación asignada, si send_length se establece en cero, se envía un registro de datos NULL al programa de asociados.

Para una conversación básica, si send_length se establece en cero, no se envía ningún dato. El parámetro de búfer no es relevante. Sin embargo, se procesan los demás parámetros.

request_to_send_received
Parámetro devuelto. Es el indicador de solicitud a envío recibido. Los valores posibles son:

CM_REQ_TO_SEND_RECEIVED
El programa asociado emitió la llamada Request_To_Send , que solicita al programa local que cambie la conversación al estado RECEIVE.

CM_REQ_TO_SEND_NOT_RECEIVED
El programa asociado no emitió la llamada Request_To_Send . Este valor no es relevante si return_code está establecido en CM_PROGRAM_PARAMETER_CHECK o CM_PROGRAM_STATE_CHECK.

return_code
Código devuelto de esta llamada. Los códigos de retorno válidos se enumeran más adelante en este tema.

Códigos de retorno

CM_OK
Código de retorno principal; la llamada se ejecutó correctamente.

CM_OPERATION_NOT_ACCEPTED
Código de retorno principal; Una operación anterior en esta conversación está incompleta.

CM_OPERATION_INCOMPLETE
Código de retorno principal; la operación no se ha completado (el modo de procesamiento es solo de bloqueo) y todavía está en curso. El programa puede emitir Wait_For_Conversation para esperar la finalización de la operación, o Cancel_Conversation para cancelar la operación y la conversación. Si se ha llamado a Specify_Windows_Handle , la aplicación debe esperar la notificación por un mensaje de Microsoft® Windows® y no llamar a Wait_For_Conversation.

CM_PROGRAM_PARAMETER_CHECK
Código de retorno principal; se produjo una de las siguientes acciones:

  • El valor especificado por conversation_ID no es válido.

  • El valor especificado por send_length está fuera del intervalo (mayor que 32767).

  • Se trata de una conversación básica y los dos primeros bytes del búfer contienen una longitud de registro lógico no válida (0x0000, 0x0001, 0x8000 o 0x8001).

    CM_PROGRAM_STATE_CHECK
    Código de retorno principal; se produjo una de las siguientes acciones:

  • El estado de la conversación no es SEND ni SEND_PENDING.

  • La conversación básica está en estado SEND y send_type se establece en CM_SEND_AND_CONFIRM, CM_SEND_AND_DEALLOCATE o CM_SEND_AND_PREP_TO_RECEIVE. Sin embargo, los datos no terminan en un límite de registro lógico. Esta condición solo se permite cuando deallocate_type se establece en CM_DEALLOCATE_ABEND y el send_type se establece en CM_SEND_AND_DEALLOCATE.

    CM_PRODUCT_SPECIFIC_ERROR
    Código de retorno principal; se produjo un error específico del producto y se ha registrado en el registro de errores de productos.

    CM_CONVERSATION_TYPE_MISMATCH
    Código de retorno principal; La LU o el programa del asociado no admiten el tipo de conversación (básico o asignado) especificado en la solicitud de asignación.

    CM_PIP_NOT_SPECIFIED_CORRECTLY
    Código de retorno principal; la solicitud de asignación fue rechazada por un programa de transacciones (TP) que no sea CPI-C LU 6.2. El programa de partners requiere una o varias variables de datos PIP, que no son compatibles con CPI-C.

    CM_SECURITY_NOT_VALID
    Código de retorno principal; el identificador de usuario o la contraseña especificados en la solicitud de asignación no fue aceptado por la LU del asociado.

    CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
    Código de retorno principal; El programa asociado no admite el nivel de sincronización especificado en la solicitud de asignación.

    CM_TPN_NOT_RECOGNIZED
    Código de retorno principal; la LU del asociado no reconoce el nombre del programa especificado en la solicitud de asignación.

    CM_TP_NOT_AVAILABLE_NO_RETRY
    Código de retorno principal; la LU del asociado no puede iniciar el programa especificado en la solicitud de asignación debido a una condición permanente. El motivo del error se puede registrar en el nodo remoto. No vuelva a intentar la asignación hasta que se haya corregido el error.

    CM_TP_NOT_AVAILABLE_RETRY
    Código de retorno principal; la LU del asociado no puede iniciar el programa especificado en la solicitud de asignación debido a una condición temporal. El motivo del error se puede registrar en el nodo remoto. Vuelva a intentar la asignación.

    CM_PROGRAM_ERROR_PURGING
    Código de retorno principal; se produjo una de las siguientes acciones:

  • Durante el estado RECEIVE o CONFIRM, el programa asociado emitió Send_Error. Los datos enviados pero aún no recibidos se purgan.

  • Mientras está en SEND_PENDING estado con la dirección de error establecida en CM_RECEIVE_ERROR, el programa asociado emitió Send_Error. Los datos no se purgaron.

    CM_RESOURCE_FAILURE_NO_RETRY
    Código de retorno principal; se produjo una de las siguientes acciones:

  • La conversación se terminó prematuramente debido a una condición permanente. No vuelva a intentarlo hasta que se corrija el error.

  • El programa asociado no desasigna la conversación antes de finalizar con normalidad.

    CM_RESOURCE_FAILURE_RETRY
    Código de retorno principal; la conversación se terminó prematuramente debido a una condición temporal, como el error del módem. Vuelva a intentar la conversación.

    CM_DEALLOCATED_ABEND
    Código de retorno principal; la conversación se ha desasignado por uno de los siguientes motivos:

  • El programa remoto emitió Deallocate con el parámetro de tipo establecido en CM_DEALLOCATE_ABEND, o la LU remota lo hizo debido a una condición de finalización anómala del programa remoto. Si la conversación del programa remoto estaba en estado RECEIVE cuando se emitió la llamada, se purga la información enviada por el programa local y aún no recibida por el programa remoto.

  • El TP remoto finalizó normalmente, pero no desasigna la conversación antes de finalizar. Los servicios de node en la LU remota desasignaron la conversación en nombre del TP remoto.

    CM_DEALLOCATED_ABEND_SVC
    Código de retorno principal; la conversación se ha desasignado por uno de los siguientes motivos:

  • El programa asociado emitió Deallocate con el parámetro de tipo establecido en ABEND_SVC.

  • El programa asociado no desasigna la conversación antes de finalizar.

    Si la conversación está en estado RECEIVE para el programa asociado cuando el programa local emite esta llamada, se purgan los datos enviados por el programa local y aún no recibidos por el programa asociado.

    CM_DEALLOCATED_ABEND_TIMER
    Código de retorno principal; la conversación se ha desasignado porque el programa asociado emitió Deallocate con el parámetro de tipo establecido en ABEND_TIMER. Si la conversación está en estado RECEIVE para el programa asociado cuando el programa local emite esta llamada, se purgan los datos enviados por el programa local y aún no recibidos por el programa asociado.

    CM_SVC_ERROR_PURGING
    Código de retorno principal; mientras que en el estado SEND, el programa asociado o la LU del asociado emitieron Send_Error con el parámetro de tipo establecido en SVC. Es posible que se hayan purgado los datos enviados al programa asociado.

    Cambios de estado

    La conversación debe estar en estado SEND o SEND_PENDING cuando el programa emite esta llamada.

    En la tabla siguiente se resumen los cambios de estado que son posibles cuando return_code se establece en CM_OK.

send_type Estado anterior Nuevo estado
CM_BUFFER_DATA ENVIAR Sin cambios
CM_BUFFER_DATA SEND_PENDING ENVIAR
CM_SEND_AND_FLUSH ENVIAR Sin cambios
CM_SEND_AND_FLUSH SEND_PENDING ENVIAR
CM_SEND_AND_CONFIRM ENVIAR Sin cambios
CM_SEND_AND_CONFIRM SEND_PENDING ENVIAR
CM_SEND_AND_PREP_TO_ RECEIVE No disponible RECEIVE
CM_SEND_AND_DEALLOCATE No disponible RESET

Para un valor de return_code de CM_PROGRAM_ERROR_PURGING o CM_SVC_ERROR_PURGING, la conversación cambia al estado RECEIVE. Para otros valores que no son de CM_OK, la conversación cambia al estado RESET.

Comentarios

Los datos recopilados en el búfer de envío de LU local se transmiten a la LU del asociado y al programa de asociados cuando se produce una de las siguientes acciones:

  • El búfer de envío se rellena.

  • El programa local emite una llamada Flush, Confirm o Deallocate u otra llamada que vacía el búfer de envío de las LU. (Algunos tipos de envío, establecidos por Set_Send_Type, incluyen la funcionalidad de vaciado).

    Los datos que se van a enviar pueden ser:

  • Un registro de datos completo en una conversación asignada. Un registro de datos completo es una cadena de la longitud especificada por el parámetro send_length .

  • Un registro lógico completo o parte de la misma en una conversación básica. El valor LL determina un registro lógico completo. (Un registro lógico puede finalizar y otro nuevo comienza en medio de la cadena de datos que se va a enviar).

    La LU no realiza automáticamente ninguna conversión entre ASCII y EBCDIC en la cadena de datos que se va a enviar. Si es necesario, el programa puede usar Common Service Verb (CSV) CONVERT para traducir una cadena de un juego de caracteres al otro.