RECEIVE_ALLOCATE_EX
El verbo RECEIVE_ALLOCATE_EX acepta una nueva estructura VCB para permitir el registro de un administrador adjunto.
Sintaxis
typedef struct receive_allocate_ex {
unsigned short opcode;
unsigned char opext;
unsigned char format;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char tp_name[64];
unsigned char tp_id[8];
unsigned long conv_id;
unsigned char sync_level;
unsigned char conv_type;
unsigned char user_id[10];
unsigned char lu_alias[8];
unsigned char plu_alias[8];
unsigned char mode_name[8];
unsigned char reserv3[2];
unsigned long conv_group_id;
unsigned char fqplu_name[17];
unsigned char pip_incoming;
unsigned long timeout;
unsigned char password[10];
unsigned char reserv5[2];
unsigned char attach_id[8];
}
Members
opcode
Parámetro proporcionado: RECEIVE_ALLOCATE_EX
opext
Parámetro proporcionado. Especifica la extensión de la operación de verbo, AP_BASIC_CONVERSATION.
format
Parámetro reservado.
primary_rc
Parámetro devuelto. Especifica el código de retorno principal que establece APPC al finalizar el verbo. Los códigos de retorno válidos varían en función del verbo APPC que se emita.
secondary_rc
Parámetro devuelto. Especifica el código de retorno secundario que establece APPC al finalizar el verbo. Los códigos de retorno válidos varían en función del verbo APPC que se emita.
tp_name
Parámetro proporcionado. El tp_name es solo un parámetro devuelto. Sin embargo, la aplicación debe asignar suficiente espacio de búfer para contener el tp_name (es decir, 64 caracteres) e inicializar el nombre en espacios EBCDIC (hexadecimal X'40')
El verbo devuelto contendrá el nombre de TP real enviado por el sistema remoto.
tp_id
Parámetro devuelto. Identifica el TP local.
conv_id
Parámetro devuelto. Proporciona el identificador de conversación. Identifica la conversación que APPC ha establecido entre los dos CSP de asociados.
sync_level
Parámetro devuelto. Especifica el nivel de sincronización de la conversación. Determina si los TP pueden solicitar confirmación de recepción de datos y confirmar la recepción de datos.
AP_NONE especifica que el procesamiento de confirmación no se usará en esta conversación.
AP_CONFIRM_SYNC_LEVEL especifica que los TP pueden usar el procesamiento de confirmación en esta conversación.
AP_SYNCPT especifica que los CSP pueden usar el procesamiento de confirmación de punto de sincronización 2 en esta conversación.
conv_type
Parámetro devuelto. Especifica el tipo de conversación elegida por el TP del asociado mediante MC_ALLOCATE o ALLOCATE. Estos son los valores posibles:AP_BASIC_CONVERSATION
AP_MAPPED_CONVERSATION
user_id
Este es el user_id EBCDIC enviado por el sistema remotolu_alias
Parámetro proporcionado. Alias de LU local. Debe proporcionarse para registrar un administrador adjunto. Solo se puede registrar un administrador de asociación para un alias de LU local determinado dentro del subdominio host Integration Server. Si ya hay otro proceso de administrador de asociación registrado para este lu_alias, se devolverá el siguiente error:primary_rc = AP_STATE_CHECK (0x0002) secondary_rc = AP_LU_ALREADY_REGISTERED (0x0000050A)
Esto indica que Host Integration Server no pudo registrar este administrador de asociación.
plu_alias
Parámetro devuelto. Proporciona el alias por el que se conoce la LU del asociado (que inició la asignación entrante) al TP local. Es una cadena de caracteres ASCII.mode_name
Parámetro devuelto. Proporciona el nombre de modo especificado por MC_ALLOCATE o ALLOCATE en el TP del asociado. Es el nombre de un conjunto de características de red definidas durante la configuración. El mode_name es un tipo cadena de caracteres EBCDIC.reserv3
Parámetro reservado.conv_group_id
Identificador de grupo de conversación.fqplu_name
Este parámetro devuelto proporciona el nombre completo de LU.pip_incoming
Parámetro proporcionado. Si este administrador de conexión aceptará los conectores FMH-5 entrantes que incluyen datos PIP, establézcalo en AP_YES. De lo contrario, establézcalo en AP_NO.Parámetro devuelto: si los datos de PIP están presentes en la conexión entrante, se establece en AP_YES. Si no hay datos pip, se establecerá en AP_NO.
timeout
Tiempo de espera, en segundos. Se puede usar un valor de 0xFFFFFFFF para esperar para siempre.password
Parámetro devuelto: se trata de la contraseña EBCDIC enviada por el sistema remoto. Si el sistema remoto admite "Sustitución de contraseñas" (cifrado de contraseña), la contraseña cifrada se recibirá en RECEIVE_ALLOCATE_EX. No hay ninguna utilidad para descifrar esta contraseña, por lo que la aplicación no podrá comprobar las credenciales de usuario.reserv5
Parámetro reservado.attach_id
Parámetro devuelto. Siempre se establece en 0. Este campo se define para la compatibilidad de origen con productos SNA que no son de Microsoft.
Comentarios
Host Integration Server admite RECEIVE_ALLOCATE_EX APPC y RECEIVE_ALLOCATE_EX_END para simplificar el diseño y la implementación de algunos programas de transacciones invocables. Esta función permite que una aplicación APPC reciba todas las solicitudes de conexión FMH-5 entrantes recibidas por Host Integration Server a través de una LU appC local específica, lo que permite que una aplicación actúe como un "administrador de asociación". Un administrador de asociación es un programa que controla una solicitud de conexión FMH-5 entrante para iniciar una conversación LU6.2. Cuando una aplicación APPC llama a RECEIVE_ALLOCATE (en lugar de RECEIVE_ALLOCATE_EX), Host Integration Server controla la funcionalidad del administrador de asociación. Para implementar la funcionalidad del administrador de asociación dentro de una aplicación APPC, se produce lo siguiente:
La aplicación proporciona un alias de LU de APPC local a la función RECEIVE_ALLOCATE_EX , con un tp_name de espacios EBCDIC (X'40 hexadecimal).
Cuando Host Integration Server recibe una solicitud de conexión FMH-5 entrante a través de una sesión LU6.2 mediante esa LU de APPC local, Host Integration Server enrutará la solicitud a la aplicación.
Cuando se completa el RECEIVE_ALLOCATE_EX , la aplicación es responsable de lo siguiente:
Aceptación o rechazo de la conexión FMH-5
Comprobación de cualquier seguridad de nivel de conversación y
Si acepta la solicitud de asociación, controle completamente la solicitud dentro de su contexto de proceso de Win32.
Para dejar de escuchar nuevas solicitudes de asociación entrantes, la aplicación llama a RECEIVE_ALLOCATE_EX_END.
Después de que un proceso emite RECEIVE_ALLOCATE_EX, el proceso no debe llamar a RECEIVE_ALLOCATE con un nombre de TP específico. Del mismo modo, si un proceso llama a RECEIVE_ALLOCATE, ese proceso no debería llamar más adelante a RECEIVE_ALLOCATE_EX. En otras palabras, durante un proceso que admita un TP invocable, el proceso debe llamar exclusivamente a RECEIVE_ALLOCATE, o RECEIVE_ALLOCATE_EX, pero no ambos.
No es posible que la aplicación envíe la solicitud de asociación entrante a otro proceso, ya que el identificador de conversación solo es válido dentro de su propio contexto de aplicación.
Nota
: Host Integration Server no admite el inicio automático de una aplicación de administrador de asociación. En otras palabras, si una aplicación llama a RECEIVE_ALLOCATE_EX, la aplicación debe iniciarse antes de que lleguen las solicitudes attach entrantes a través de la LU local.
La especificación actual no devuelve el indicador de seguridad (byte 4 de la conexión FMH-5). Por lo tanto, la aplicación tendrá que dar cabida a las solicitudes de asociación entrantes que contienen lo siguiente:
Ni una user_id ni una contraseña (cuando no se envía ninguna seguridad en la asociación),
Un user_id solo (por ejemplo, para los asociados "ya comprobados"), o
Tanto una user_id como una contraseña (si se requiere autorización de usuario).
En la solicitud BIND lu6.2, Host Integration Server indica compatibilidad con las solicitudes entrantes fmH-5 Attach que contienen seguridad de usuario, ya comprobadas y sustitución de contraseñas. Host Integration Server no admite las conexiones entrantes que solicitan la comprobación persistente.
La función RECEIVE_ALLOCATE_EX permite que una aplicación se registre como administrador de asociación si el tp_name está establecido en todos los espacios EBCDIC (X'40') y se proporciona un alias de LU local en el campo lu_alias. Cuando se registra como administrador de asociación para un lu_alias determinado, Host Integration Server enrutará todas las conexiones entrantes recibidas a través del lu_alias a la aplicación. Consulte a continuación para obtener más información sobre cómo Host Integration Server enruta las solicitudes entrantes de FMH-5.
La aplicación puede llamar a RECEIVE_ALLOCATE_EX más de una vez para registrarse como administrador de asociación para una o varias LU locales. Sin embargo, solo se puede registrar un administrador de conexión en un lu_alias determinado dentro del subdominio SNA (es decir, en todos los servidores de integración de host y clientes de Host Integration Server conectados). La aplicación no puede proporcionar un tp_name en blanco y un lu_alias en blanco. Es decir, una aplicación no puede registrarse como administrador de asociación predeterminado para recibir todas las solicitudes de asociación entrantes de un subdominio SNA.
Cuando se completa RECEIVE_ALLOCATE_EX , la aplicación es responsable de lo siguiente:
Decidir si se aceptará o no la asociación. Host Integration Server no proporciona ningún mecanismo para configurar programas de transacción (CSP). La aplicación debe tener sus propios medios para definir qué nombres tp admitirá.
Si se acepta, la aplicación debe comprobar los atributos de seguridad de conversación (user_id, contraseña) y para controlar el procesamiento de la nueva conversación.
Los tp_id y conv_id no se pueden pasar a un proceso independiente para su control. La aplicación debe proporcionar todo el procesamiento de TP.
Si la aplicación decide rechazar la solicitud de asociación, se debe llamar a [MC_]DEALLOCATE , especificando el conv_id recibido en el RECEIVE_ALLOCATE_EX completado, junto con un código de motivo adecuado en el parámetro dealloc_type, usando estos nuevos códigos extendidos:
#define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_EXPIRED 0x10
#define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_INVALID 0x11
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_REVOKED 0x12
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_INVALID 0x13
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_MISSING 0x14
#define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_MISSING 0x15
#define AP_DEALLOC_SECURITY_NOT_VALID_GROUP_INVALID 0x16
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_REVOKED_IN_GROUP 0x17
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_NOT_DEFD_TO_GROUP 0x18
#define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_AT_REMOTE_LU 0x19
#define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_FROM_LOCAL_LU 0x1A
#define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_TO_TRANSACTION_PROGRAM 0x1B
#define AP_DEALLOC_SECURITY_NOT_VALID_INSTALLATION_EXIT_FAILED 0x1C
#define AP_DEALLOC_SECURITY_NOT_VALID_PROCESSING_FAILURE 0x1D
#define AP_DEALLOC_SECURITY_NOT_VALID_PROTOCOL_VIOLATION 0x1E
Cuando la aplicación establece el dealloc_type anterior, Host Integration Server envía el código de sentido correspondiente dentro del error FMH-7 enviado al sistema remoto al rechazar la solicitud de asociación de FMH-5:
#define AP_SECURITY_NOT_VALID_PASSWORD_EXPIRED APPC_FLIPL(x080fff00)
#define AP_SECURITY_NOT_VALID_PASSWORD_INVALID APPC_FLIPL(x080fff01)
#define AP_SECURITY_NOT_VALID_USERID_REVOKED APPC_FLIPL(x080fff02)
#define AP_SECURITY_NOT_VALID_USERID_INVALID APPC_FLIPL(x080fff03)
#define AP_SECURITY_NOT_VALID_USERID_MISSING APPC_FLIPL(x080fff04)
#define AP_SECURITY_NOT_VALID_PASSWORD_MISSING APPC_FLIPL(x080fff05)
#define AP_SECURITY_NOT_VALID_GROUP_INVALID APPC_FLIPL(x080fff06)
#define AP_SECURITY_NOT_VALID_USERID_REVOKED_IN_GROUP APPC_FLIPL(x080fff07)
#define AP_SECURITY_NOT_VALID_USERID_NOT_DEFD_TO_GROUP APPC_FLIPL(x080fff08)
#define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_AT_REMOTE_LU APPC_FLIPL(x080fff09)
#define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_FROM_LOCAL_LU APPC_FLIPL(x080fff0A)
#define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_TO_TRANSACTION_PROGRAM APPC_FLIPL(x080fff0B)
#define AP_SECURITY_NOT_VALID_INSTALLATION_EXIT_FAILED APPC_FLIPL(x080fff0C)
#define AP_SECURITY_NOT_VALID_PROCESSING_FAILURE APPC_FLIPL(x080fff0D)
#define AP_SECURITY_NOT_VALID_PROTOCOL_VIOLATION APPC_FLIPL(x080fff0E)
Antes de llamar a RECEIVE_ALLOCATE_EX, es posible que la aplicación quiera comprobar los valores de configuración de la LU appC local para determinar si la LU admite el nivel de sincronización 2 o es miembro del grupo de LU predeterminado. Para ello, use la API de GET_LU_STATUS mejorada.
Para anular el registro como administrador de asociación para una LU appC local determinada, la aplicación debe llamar a RECEIVE_ALLOCATE_EX_END, que se documenta a continuación. Si una aplicación se ha registrado como administrador de asociación para más de un lu_alias, se debe llamar a RECEIVE_ALLOCATE_EX_END para cada lu_alias.
La aplicación debe intentar tener una RECEIVE_ALLOCATE_EX pendiente en todo momento, con el fin de controlar las solicitudes de asociación entrantes de forma oportuna. Si la aplicación no puede publicar nuevos RECEIVE_ALLOCATE_EX, Host Integration Server pone en cola hasta 2048 conexiones entrantes en la aplicación, si la aplicación se ejecuta en Host Integration Server o 256 si se ejecuta en un cliente HIS. Si se supera el límite, Host Integration Server rechaza la solicitud de asociación con el código de detección X'084B6031' o AP_TRANS_PGM_NOT_AVAIL_RETRY.