Cambio de los estados de conversación
Un cambio en el estado de la conversación puede deberse a:
Verbo emitido por el TP local.
Verbo emitido por el TP del asociado.
Una condición de error.
En el ejemplo siguiente se muestra cómo los verbos APPC pueden cambiar el estado de la conversación de SEND a RECEIVE y de RECEIVE a SEND.
Nota
Cualquier TP puede enviar o recibir datos, independientemente de si es el TP invocado (el TP que inició la conversación) o el TP invocable (el TP que respondió a una solicitud para iniciar una conversación).
En este ejemplo se muestra cómo los verbos appC pueden cambiar el estado de la conversación. En esta tabla, cada estado de conversación aparece en negrita y precede a los verbos appC que se usan mientras están en ese estado.
Emitido por el TP de invocación | Emitido por el TP invocable |
---|---|
TP_STARTED | |
Estado de conversación: RESET | |
MC_ALLOCATE | |
(synclevel=AP_CONFIRM_SYNC_LEVL) | |
Estado de conversación: SEND | |
MC_SEND_DATA | |
MC_PREPARE_TO_RECEIVE | |
(ptr_type=AP_SYNC_LEVEL) | |
Estado de conversación: RESET | |
RECEIVE_ALLOCATE | |
Estado de conversación: RECEIVE | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_DATA_COMPLETE) | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_CONFIRM_SEND) | |
Estado de la conversación: CONFIRM_SEND | |
MC_CONFIRMED | |
Estado de conversación: SEND | |
MC_SEND_DATA | |
MC_CONFIRM | |
Estado de conversación: RECEIVE | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_DATA_COMPLETE) | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_CONFIRM_WHAT_RECEIVED) | |
Estado de la conversación: CONFIRM | |
MC_REQUEST_TO_SEND | |
MC_CONFIRMED | |
(rts_rcvd=AP_YES) | |
MC_PREPARE_TO_RECEIVE | |
(ptr_type=AP_SYNC_LEVEL) | |
Estado de conversación: RECEIVE | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_CONFIRM_SEND) | |
Estado de la conversación: CONFIRM_SEND | |
MC_CONFIRMED | |
Estado de conversación: SEND | |
MC_SEND_DATA | |
MC_DEALLOCATE | |
(dealloc_type=AP_SYNC_LEVEL) | |
Estado de conversación: RECEIVE | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_DATA_COMPLETE) | |
MC_RECEIVE_AND_WAIT | |
(primary_rc=AP_OK) | |
(what_rcvd=AP_CONFIRM_DEALLOCATE) | |
Estado de la conversación: CONFIRM_DEALLOCATE | |
MC_CONFIRMED | |
Estado de conversación: RESET | Estado de conversación: RESET |
TP_ENDED | TP_ENDED |
Estados iniciales
Antes de asignar la conversación, el estado es RESET para ambos IP.
En el ejemplo, después de asignar la conversación, el estado inicial es SEND para la invocación de TP y RECEIVE para el TP invocable.
Cambiar al estado RECEIVE
MC_PREPARE_TO_RECEIVE permite que un TP cambie la conversación del estado SEND a RECEIVE. Este verbo:
Vacía el búfer de envío de la LU local.
Envía el indicador de AP_CONFIRM_SEND al TP del asociado a través del parámetro what_rcvd de un verbo receive. Este indicador indica al tp del asociado que se espera una respuesta MC_CONFIRMED antes de que el TP del asociado pueda empezar a enviar datos.
El procesamiento de confirmación se realiza cuando se cumplen las condiciones siguientes:
El parámetro ptr_type se establece en AP_SYNC_LEVEL.
El nivel de sincronización de la conversación se establece en AP_CONFIRM_SYNC_LEVEL.
Para obtener más información sobre el procesamiento de confirmación, vea Procesamiento de confirmación.
Nota
Emitir MC_RECEIVE_AND_WAIT mientras la conversación está en estado SEND vacía el búfer de envío de la LU y cambia el estado de conversación a RECEIVE. Cambiar el estado de la conversación de esta manera no admite el procesamiento de confirmación.
Cambiar a estado SEND
MC_REQUEST_TO_SEND informa al TP del asociado (para el que la conversación está en estado SEND) de que el TP local (para el que la conversación está en estado RECEIVE) quiere enviar datos. Esta solicitud se comunica al TP del asociado a través del parámetro rts_rcvd de MC_CONFIRM. (El parámetro rts_rcvd también se devuelve a MC_SEND_DATA y a otros verbos).
Cuando el TP del asociado emite MC_PREPARE_TO_RECEIVE, el estado de la conversación cambia a RECEIVE para el TP del asociado, lo que permite que el TP local envíe datos.
Nota
La emisión de MC_REQUEST_TO_SEND no cambia el estado de la conversación. Al recibir una solicitud para enviar, el TP del asociado no es necesario para cambiar el estado de la conversación; puede pasar por alto la solicitud.