Indica una llamada entrante
Un administrador de llamadas o un controlador MCM se alerta a una llamada entrante mediante la señalización de mensajes de la red. A partir de estos mensajes de señalización, el administrador de llamadas o el controlador MCM extrae los parámetros de llamada de la llamada, incluido el SAP al que se dirige la llamada entrante.
En la ilustración siguiente se muestra un controlador MCM que indica una llamada entrante.
En la ilustración siguiente se muestra un administrador de llamadas que indica una llamada entrante.
Si los parámetros de llamada entrantes son inaceptables para el administrador de llamadas o el controlador MCM, puede intentar negociar un cambio en estos parámetros con la parte remota si el protocolo de señalización permite dicha negociación. Como alternativa, el cliente al que se dirige la llamada entrante podría intentar negociar los parámetros de llamada después de recibir la indicación de llamada del administrador de llamadas o del controlador MCM (consulte Solicitud iniciada por el cliente para cambiar los parámetros de llamada). Si el administrador de llamadas o el controlador MCM no pueden negociar parámetros de llamada aceptables para la llamada con la parte remota, podría rechazar la llamada. El protocolo de señalización determina lo que es posible en tales casos.
Antes de indicar una llamada entrante a un cliente, el administrador de llamadas o el controlador MCM deben identificar el SAP al que se dirige la llamada. Un cliente debe haber registrado previamente sap. El administrador de llamadas o el controlador MCM también deben iniciar la creación de una credencial verificable e iniciar la activación de esta credencial verificable.
A continuación, el administrador de llamadas o el controlador MCM indican la llamada entrante al cliente que registró el SAP al que se dirige la llamada entrante. Un administrador de llamadas indica una llamada entrante con NdisCmDispatchIncomingCall. Un controlador MCM indica una llamada entrante con NdisMCmDispatchIncomingCall.
En la llamada a Ndis(M)CmDispatchIncomingCall, el administrador de llamadas o el controlador MCM pasa lo siguiente:
NdisSapHandle que identifica el SAP al que se dirige la llamada entrante.
NdisVcHandle que identifica el circuito virtual de la llamada entrante.
Puntero a una estructura de tipo CO_CALL_PARAMETERS, que contiene los parámetros de llamada de la llamada.
La llamada a Ndis(M)CmDispatchIncomingCall hace que NDIS llame a la función ProtocolClIncomingCall del cliente, dentro de la cual el cliente acepta o rechaza la conexión solicitada. ProtocolClIncomingCall debe validar los parámetros sap, VC y call.
ProtocolClIncomingCall puede completarse sincrónicamente o puede devolver NDIS_STATUS_PENDING y completarse de forma asincrónica con NdisClIncomingCallComplete. Una llamada a NdisClIncomingCallComplete hace que NDIS llame a la función ProtocolCmIncomingCallComplete del administrador de llamadas o del controlador MCM.
El código NDIS_STATUS devuelto por una finalización sincrónica de ProtocolClIncomingCall o proporcionado a NdisClIncomingCallComplete indica la aceptación o rechazo del cliente de la llamada entrante. El cliente también devuelve los parámetros de llamada de la llamada en una estructura de CO_CALL_PARAMETERS almacenada en búfer. Si el cliente encuentra los parámetros de llamada inaceptables, puede, si lo permite el protocolo de señalización, solicitar un cambio en los parámetros de llamada estableciendo el miembro Flags en la estructura CO_CALL_PARAMETERS con CALL_PARAMETERS_CHANGED y proporcionando los parámetros de llamada revisados en una estructura de CO_CALL_PARAMETERS almacenada en búfer.
Si el cliente acepta la llamada entrante, el administrador de llamadas o el controlador MCM deben enviar mensajes de señalización para indicar a la entidad de llamada que se ha aceptado la llamada. De lo contrario, el administrador de llamadas o el controlador MCM deben enviar mensajes de señalización para indicar que se ha rechazado la llamada. Si el cliente solicita un cambio en los parámetros de llamada, el administrador de llamadas o el controlador MCM envía mensajes de señalización para solicitar un cambio en los parámetros de llamada.
Si el cliente aceptó la llamada o si el usuario remoto aceptó el cambio solicitado por el cliente en los parámetros de llamada, un administrador de llamadas llama a NdisCmDispatchCallConnected y un controlador MCM llama a NdisMCmDispatchCallConnected. La llamada a Ndis(M)CmDispatchCallConnected hace que NDIS llame a la función ProtocolClCallConnected del cliente.
Si el cliente rechazó la llamada y el administrador de llamadas o el controlador MCM ya han activado una credencial verificable para la llamada entrante, el administrador de llamadas o el controlador MCM llama a Ndis(M)CmDeactivateVc para desactivar la credencial verificable si se activa la credencial verificable. Después, el administrador de llamadas o el controlador MCM pueden iniciar la eliminación del VC llamando a NdisCoDeleteVc en el caso del administrador de llamadas o NdisMCmDeleteVc en el caso del controlador MCM.
Si el cliente aceptó la llamada, pero la conexión de un extremo a otro no se estableció correctamente (porque, por ejemplo, la parte remota desencadenó la llamada), el administrador de llamadas o el controlador MCM no llamarán a Ndis(M)CmDispatchCallConnected. En su lugar, llamará a Ndis(M)CmDispatchIncomingCloseCall, lo que hace que NDIS llame a la función ProtocolClIncomingCloseCall del cliente. A continuación, el cliente debe llamar a NdisClCloseCall para completar la anulación de la llamada. A continuación, el administrador de llamadas o el controlador MCM llama a Ndis(M)CmDeactivateVC para desactivar la credencial verificable que creó para la llamada entrante. Después, el administrador de llamadas o el controlador MCM pueden iniciar la eliminación del VC llamando a NdisCoDeleteVc en el caso del administrador de llamadas o NdisMCmDeleteVc en el caso del controlador MCM.