Realizar una llamada
En la ilustración siguiente se muestra un cliente que realiza una llamada saliente a través de un administrador de llamadas.
En la ilustración siguiente se muestra un cliente que realiza una llamada saliente a través de un controlador MCM.
Antes de realizar una llamada saliente, un cliente orientado a la conexión debe:
Inicialice los parámetros de llamada en una estructura de tipo CO_CALL_PARAMETERS. El administrador de llamadas o el controlador MCM suelen usar los parámetros de llamada que el cliente especifica para configurar la llamada y derivar parámetros multimedia para que los use el controlador de miniport.
Inicie la creación de una credencial verificable con NdisCoCreateVc.
En la devolución correcta de NdisCoCreateVc, el cliente llama a NdisClMakeCall para iniciar la llamada (consulte las dos figuras de esta sección).
En su llamada a NdisClMakeCall, el cliente pasa un puntero a la estructura CO_CALL_PARAMETERS inicializada anteriormente. El cliente también pasa un NdisVcHandle (devuelto por NdisCoCreateVc) que identifica el VC en el que el cliente transmitirá (y quizá recibir) los datos de la llamada. Si el cliente realiza una llamada de varios puntos (una llamada a más de una parte remota), también pasa un ProtocolPartyContext que especifica un identificador para un área de contexto residente asignada por el cliente en la que el cliente mantendrá el estado por parte para la entidad inicial en la credencial verificable de varios puntos.
La llamada a NdisClMakeCall hace que NDIS reenvíe esta solicitud a la función ProtocolCmMakeCall del administrador de llamadas o del controlador MCM con el que el cliente comparte el NdisVcHandle dado. ProtocolCmMakeCall debe validar los parámetros de llamada de entrada configurados por el cliente.
ProtocolCmMakeCall se comunica (intercambia mensajes de señalización) con dispositivos de control de red para establecer una conexión. Un administrador de llamadas llama a NdisCoSendNetBufferLists para iniciar este intercambio (consulte Envío de estructuras NET_BUFFER desde controladores CoNDIS). Un controlador MCM nunca llama a NdisCoSendNetBufferLists. En su lugar, transmite los datos directamente a través de la red.
El administrador de llamadas o el controlador MCM pueden modificar los parámetros de llamada proporcionados por el cliente mientras negocian con componentes de red pertinentes y pueden devolver parámetros de tráfico diferentes a los que el cliente proporcionó originalmente a NdisClMakeCall (consulte Solicitud entrante para cambiar parámetros de llamada).
Un NdisPartyHandle explícito pasado a ProtocolCmMakeCall indica que el VC creado por el cliente se usará para una llamada de varios puntos. El administrador de llamadas o el controlador MCM deben asignar e inicializar los recursos necesarios para mantener la información del estado por parte y controlar la llamada de varios puntos.
Después de que un administrador de llamadas haya realizado toda la comunicación necesaria con su hardware de red según lo requiera su medio, debe llamar a NdisCmActivateVc para iniciar la activación de la vc en la que se enviarán los datos de llamada y tal vez se reciban. Un controlador MCM debe llamar a NdisMCmActivateVc.
Cuando el controlador de miniporte subyacente está listo para realizar transferencias de datos en el VC (es decir, después de activar la credencial verificable), un administrador de llamadas llama a NdisCmMakeCallComplete y un controlador MCM llama a NdisMCmMakeCallComplete. En este momento, el administrador de llamadas o el controlador MCM deben haber negociado con la red para establecer parámetros de llamada para el VC, y el controlador de miniporte subyacente debe haber completado la activación del VC.
En la llamada a Ndis(M)CmMakeCallComplete, el administrador de llamadas o el controlador MCM pasa los parámetros de llamada para el VC como puntero a una estructura de tipo CO_CALL_PARAMETERS. Si el administrador de llamadas ha modificado los parámetros de llamada según lo especificado originalmente por el cliente, puede notificar al cliente estableciendo la marca de CALL_PARAMETERS_CHANGED en la estructura de CO_CALL_PARAMETERS.
Una llamada a Ndis(M)CmMakeCallComplete hace que NDIS llame a la función ProtocolClMakeCallComplete del cliente que originó la llamada saliente. Una llamada a ProtocolClMakeCallComplete indica que el administrador de llamadas ha completado el procesamiento de la solicitud del cliente para establecer una conexión virtual con NdisClMakeCall.
Si el intento del cliente de establecer una llamada saliente se realizó correctamente, ProtocolClMakeCallComplete debe comprobar la marca de CALL_PARAMETERS_CHANGED para determinar si los parámetros de llamada especificados originalmente por el cliente se modificaron. Si se establece la marca , que indica que se cambiaron los parámetros de llamada, ProtocolClMakeCallComplete debe examinar los parámetros de llamada devueltos para determinar si son aceptables para esta conexión.
Si los parámetros de llamada son aceptables, ProtocolClMakeCallComplete simplemente devuelve el control . Si los parámetros de llamada no son aceptables y si el protocolo de señalización permite la renegociación en este momento, el cliente puede llamar a NdisClModifyCallQoS para solicitar un cambio en los parámetros de llamada (consulte Solicitud iniciada por el cliente para cerrar una llamada). Si el protocolo de señalización no permite la renegociación de parámetros de llamada inaceptables, ProtocolClMakeCallComplete debe anular la llamada con NdisClCloseCall(consulte Client-Initiated Solicitud para cerrar una llamada).