Realización de llamadas salientes
Si una aplicación intenta realizar una llamada saliente, primero debe abrir una línea. Se abre una línea como resultado de una aplicación que llama a la función lineOpen de TAPI. Para realizar una llamada de telefonía en la línea abierta anteriormente, la aplicación llama a la función lineMakeCall de TAPI y pasa un puntero a la dirección de destino específica. Si se solicitan parámetros de configuración de llamadas predeterminados, la aplicación también pasa un puntero a una estructura LINECALLPARAMS. Si la aplicación usa parámetros predeterminados de configuración de llamadas, lineMakeCall proporciona esos parámetros en una estructura LINECALLPARAMS. Los miembros de esta estructura especifican cómo se debe configurar la llamada de telefonía.
Estas llamadas de función TAPI hacen que el controlador NDPROXY cree primero una conexión virtual (VC) con el controlador de miniporte CoNDIS WAN y, a continuación, encapsular parámetros TAPI en estructuras NDIS para realizar la llamada saliente. El controlador de minipuerto usará estos parámetros TAPI para configurar la llamada saliente. A continuación se describe cómo se conecta, configura y realiza la llamada saliente:
NDPROXY llama a NdisCoCreateVc para iniciar la creación de la credencial verificable con el controlador de minipuerto. Después de que NDPROXY llama a NdisCoCreateVc, las llamadas NDIS, como una operación sincrónica, la función ProtocolCoCreateVc del administrador de llamadas integrado en el controlador de miniport. NDIS pasa a ProtocolCoCreateVc un identificador que representa la credencial verificable. Si la llamada a NdisCoCreateVc se realiza correctamente, NDIS rellena y devuelve el identificador vc. ProtocolCoCreateVc realiza las asignaciones necesarias de recursos dinámicos y estructuras que el controlador del administrador de llamadas de miniporte (MCM) requiere para realizar operaciones posteriores en la credencial verificable que se activarán más adelante. Estos recursos incluyen, entre otros, búferes de memoria, estructuras de datos, eventos y otros recursos similares.
NDPROXY especifica los parámetros TAPI para una llamada saliente en una estructura de CO_AF_TAPI_MAKE_CALL_PARAMETERS . NDPROXY rellena los miembros de esta estructura con la siguiente información que se pasó en la función lineMakeCall de TAPI:
- Dirección de destino del miembro DestAddress
- Identificador de línea abierta en el miembro ulLineID
- Estructura LINECALLPARAMS en el miembro LineCallParams
NDPROXY superpone la estructura CO_AF_TAPI_MAKE_CALL_PARAMETERS en el miembro Parameters de una estructura de CO_SPECIFIC_PARAMETERS y establece el miembro Length de CO_SPECIFIC_PARAMETERS en el tamaño de CO_AF_TAPI_MAKE_CALL_PARAMETERS.
NDPROXY establece la estructura CO_SPECIFIC_PARAMETERS en el miembro MediaSpecific de una estructura de CO_MEDIA_PARAMETERS .
NDPROXY establece un puntero a la estructura CO_MEDIA_PARAMETERS en el miembro MediaParameters de una estructura CO_CALL_PARAMETERS .
Una vez que NDPROXY encapsula los parámetros TAPI, NDPROXY llama a la función NdisClMakeCall para iniciar la llamada saliente. En esta llamada de función, NDPROXY pasa un puntero a la estructura de CO_CALL_PARAMETERS rellenada. A su vez, NDIS llama a la función ProtocolCmMakeCall del administrador de llamadas del controlador de minipuerto de CoNDIS WAN. El controlador de minipuerto debe examinar solo la estructura de CO_AF_TAPI_MAKE_CALL_PARAMETERS incrustada en CO_CALL_PARAMETERS. Ningún otro parámetro de llamada es significativo en este caso. Si el controlador de minipuerto activa posteriormente la credencial verificable para la llamada saliente, el controlador de minipuerto llama a la función NdisMCmActivateVc y pasa un puntero al CO_CALL_PARAMETERS rellenado.
Después de que el controlador de minipuerto haya negociado con la red para establecer los parámetros de llamada de telefonía para la vc y configurar una NIC para esos parámetros de llamada, el controlador de minipuerto llama a la función NdisMCmMakeCallComplete para indicar que está listo para realizar transferencias de datos en el VC. En esta llamada, el controlador de minipuerto debe pasar el identificador a la credencial verificable y las modificaciones realizadas a los parámetros de llamada de telefonía.
El controlador de minipuerto debe modificar el miembro CallMgrParameters de la estructura CO_CALL_PARAMETERS para especificar la calidad del servicio (QoS) de la transferencia de paquetes, como el ancho de banda. Para establecer este miembro CallMgrParameters , el controlador de miniporta rellena los miembros de una estructura de CO_CALL_MANAGER_PARAMETERS y apunta esta estructura a CallMgrParameters. Por ejemplo, para identificar las velocidades de transmisión y recepción en bytes por segundo para la vc, el controlador de minipuerto debe establecer los miembros PeakBandwidth de los miembros Transmit y Receive de CO_CALL_MANAGER_PARAMETERS. Los miembros Transmit y Receive son estructuras FLOWSPEC. Para obtener más información sobre la estructura FLOWSPEC, consulte el Microsoft Windows SDK.
Si el controlador de minipuerto ha modificado los parámetros de llamada de telefonía, debe establecer el miembro Flags en la estructura CO_CALL_PARAMETERS con CALL_PARAMETERS_CHANGED. Como resultado de la llamada NdisMCmMakeCallComplete realizada por el controlador de miniport, NDIS llama a la función ProtocolClMakeCallComplete de NDPROXY para completar las operaciones asincrónicas que se iniciaron con NdisClMakeCall.
Una vez que el controlador de minipuerto complete correctamente la llamada saliente, NDPROXY notifica a una aplicación TAPI que la llamada está conectada. A continuación, esta aplicación TAPI llama a la función lineGetID de TAPI para informar a NDPROXY para localizar el cliente coNDIS adecuado. En esta llamada lineGetID , la aplicación TAPI proporciona una cadena para una clase de dispositivo TAPI determinada a la que la aplicación requiere un identificador. NDPROXY usa esta cadena para localizar el cliente de CoNDIS que registró previamente una SAP para la clase de dispositivo TAPI determinada. Si el cliente de CoNDIS es NDISWAN, la cadena es NDIS. Si NDPROXY localiza un SAP con una cadena que coincide con la cadena pasada por la aplicación TAPI, NDPROXY llama a NdisMCmCreateVc para configurar un punto de conexión con NDISWAN en el que puede enviar la notificación de la llamada saliente que se realizó. A su vez, NDIS llama a la función ProtocolCoCreateVc de NDISWAN y pasa un identificador que representa la credencial verificable.
Después de que NDPROXY configure el punto de conexión con NDISWAN, llama a la función NdisCmDispatchIncomingCall para notificar a NDISWAN la llamada saliente. En esta llamada, NDPROXY pasa la estructura encapsulada CO_AF_TAPI_MAKE_CALL_PARAMETERS que contiene los parámetros de llamada salientes. A su vez, NDIS llama a la función ProtocolClIncomingCall de NDISWAN, dentro de la cual NDISWAN acepta o rechaza la conexión solicitada. Si NDISWAN cambia los parámetros de llamada que se le han pasado, debe establecer el miembro Flags en la estructura de CO_CALL_PARAMETERS con CALL_PARAMETERS_CHANGED.
Después de decidir si aceptar la conexión y después de cambiar posiblemente los parámetros de llamada, NDISWAN llama a la función NdisClIncomingCallComplete . A su vez, NDIS llama a la función ProtocolCmIncomingCallComplete del controlador de miniporte. Dependiendo de si NDISWAN aceptó la llamada saliente y si el controlador de miniporte acepta o rechaza los cambios propuestos de NDISWAN en los parámetros de llamada, el controlador de miniporta llama a las funciones NdisCmDispatchCallConnected o NdisCmDispatchIncomingCloseCall . NdisCmDispatchCallConnected notifica a NDISWAN que las transferencias de datos pueden comenzar en el VC que NDPROXY creó para la llamada saliente. NdisCmDispatchIncomingCloseCall informa a NDISWAN y NDPROXY para anular la llamada saliente propuesta.
Después de que NDISWAN acepte la llamada saliente, NDPROXY llama a la función NdisCoGetTapiCallId para recuperar una cadena que identifica el contexto de NDISWAN para la credencial verificable. NDPROXY devuelve esta cadena a la aplicación TAPI. La aplicación TAPI usa esta cadena de contexto vc para completar su llamada a lineGetID.