Passer des appels sortants
Si une application tente d’effectuer un appel sortant, elle doit d’abord ouvrir une ligne. Une ligne est ouverte à la suite d’une application appelant la fonction TAPI lineOpen . Pour passer un appel téléphonique sur la ligne précédemment ouverte, l’application appelle la fonction TAPI lineMakeCall et passe un pointeur vers l’adresse de destination spécifique. Si des paramètres d’installation d’appel par défaut sont demandés, l’application passe également un pointeur vers une structure LINECALLPARAMS. Si l’application utilise des paramètres de configuration d’appel par défaut, lineMakeCall fournit ces paramètres dans une structure LINECALLPARAMS. Les membres de cette structure spécifient la façon dont l’appel téléphonique doit être configuré.
Ces appels de fonction TAPI amènent le pilote NDPROXY à créer d’abord une connexion virtuelle (VC) avec le pilote miniport CoNDIS WAN, puis à encapsuler les paramètres TAPI dans les structures NDIS afin d’effectuer l’appel sortant. Le pilote miniport utilise ces paramètres TAPI pour configurer l’appel sortant. L’exemple suivant décrit la façon dont l’appel sortant est connecté, configuré et effectué :
NDPROXY appelle NdisCoCreateVc pour lancer la création du vc avec le pilote miniport. Après que NDPROXY a appelé NdisCoCreateVc, NDIS appelle, en tant qu’opération synchrone, la fonction ProtocolCoCreateVc du gestionnaire d’appels intégré au pilote miniport. NDIS passe à ProtocolCoCreateVc un handle qui représente le vc. Si l’appel à NdisCoCreateVc réussit, NDIS remplit et retourne le handle VC. ProtocolCoCreateVc effectue toutes les allocations nécessaires de ressources et de structures dynamiques dont le pilote mcm (miniport call manager) a besoin pour effectuer les opérations suivantes sur le vc qui sera activé ultérieurement. Ces ressources incluent, sans s’y limiter, les mémoires tampons, les structures de données, les événements et d’autres ressources similaires.
NDPROXY spécifie les paramètres TAPI pour un appel sortant dans une structure CO_AF_TAPI_MAKE_CALL_PARAMETERS . NDPROXY remplit les membres de cette structure avec les informations suivantes qui ont été passées dans la fonction TAPI lineMakeCall :
- Adresse de destination dans le membre DestAddress
- Identificateur de ligne ouverte dans le membre ulLineID
- Structure LINECALLPARAMS dans le membre LineCallParams
NDPROXY superpose la structure CO_AF_TAPI_MAKE_CALL_PARAMETERS sur le membre Parameters d’une structure CO_SPECIFIC_PARAMETERS et définit le membre Length de CO_SPECIFIC_PARAMETERS sur la taille de CO_AF_TAPI_MAKE_CALL_PARAMETERS.
NDPROXY définit la structure CO_SPECIFIC_PARAMETERS sur le membre MediaSpecific d’une structure CO_MEDIA_PARAMETERS .
NDPROXY définit un pointeur vers la structure CO_MEDIA_PARAMETERS vers le membre MediaParameters d’une structure CO_CALL_PARAMETERS .
Une fois que NDPROXY encapsule les paramètres TAPI, NDPROXY appelle la fonction NdisClMakeCall pour lancer l’appel sortant. Dans cet appel de fonction, NDPROXY passe un pointeur vers la structure CO_CALL_PARAMETERS remplie. NDIS appelle à son tour la fonction ProtocolCmMakeCall du gestionnaire d’appels du pilote du miniport wan CoNDIS. Le pilote miniport doit examiner uniquement la structure CO_AF_TAPI_MAKE_CALL_PARAMETERS incorporée dans CO_CALL_PARAMETERS. Aucun autre paramètre d’appel n’est significatif dans ce cas. Si le pilote miniport active par la suite le vc pour l’appel sortant, le pilote miniport appelle la fonction NdisMCmActivateVc et passe un pointeur vers le CO_CALL_PARAMETERS rempli.
Une fois que le pilote miniport a négocié avec le réseau pour établir les paramètres d’appel de téléphonie pour le vc et configurer une carte réseau pour ces paramètres d’appel, le pilote miniport appelle la fonction NdisMCmMakeCallComplete pour indiquer qu’elle est prête à effectuer des transferts de données sur le vc. Dans cet appel, le pilote miniport doit passer le handle au vc et les modifications apportées aux paramètres d’appel de téléphonie.
Le pilote miniport doit modifier le membre CallMgrParameters de la structure CO_CALL_PARAMETERS pour spécifier la qualité de service (QoS) du transfert des paquets, comme la bande passante. Pour définir ce membre CallMgrParameters , le pilote miniport remplit les membres d’une structure CO_CALL_MANAGER_PARAMETERS et pointe cette structure vers CallMgrParameters. Par exemple, pour identifier les vitesses de transmission et de réception en octets par seconde pour le vc, le pilote miniport doit définir les membres PeakBandwidth des membres transmission et réception de CO_CALL_MANAGER_PARAMETERS. Les membres Transmission et Réception sont des structures FLOWSPEC. Pour plus d’informations sur la structure FLOWSPEC, consultez la Microsoft Windows SDK.
Si le pilote miniport a modifié les paramètres d’appel de téléphonie, il doit définir le membre Flags dans la structure CO_CALL_PARAMETERS avec CALL_PARAMETERS_CHANGED. À la suite de l’appel NdisMCmMakeCallComplete effectué par le pilote miniport, NDIS appelle la fonction ProtocolClMakeCallComplete de NDPROXY pour effectuer les opérations asynchrones qui ont été lancées avec NdisClMakeCall.
Une fois que le pilote miniport a réussi l’appel sortant, NDPROXY avertit une application TAPI que l’appel est connecté. Cette application TAPI appelle ensuite la fonction TAPI lineGetID pour informer NDPROXY de localiser le client CoNDIS approprié. Dans cet appel lineGetID , l’application TAPI fournit une chaîne pour une classe d’appareil TAPI particulière pour laquelle l’application nécessite un handle. NDPROXY utilise cette chaîne pour localiser le client CoNDIS qui a précédemment inscrit un SAP pour la classe d’appareil TAPI particulière. Si le client CoNDIS est NDISWAN, la chaîne est NDIS. Si NDPROXY localise un SAP avec une chaîne qui correspond à la chaîne transmise par l’application TAPI, NDPROXY appelle NdisMCmCreateVc pour configurer un point de terminaison de connexion avec NDISWAN sur lequel il peut envoyer une notification de l’appel sortant qui a été effectué. NDIS appelle à son tour la fonction ProtocolCoCreateVc de NDISWAN et transmet un handle qui représente le vc.
Une fois que NDPROXY a configuré le point de terminaison de connexion avec NDISWAN, il appelle la fonction NdisCmDispatchIncomingCall pour informer NDISWAN de l’appel sortant. Dans cet appel, NDPROXY transmet la structure CO_AF_TAPI_MAKE_CALL_PARAMETERS encapsulée qui contient les paramètres d’appel sortant. NDIS appelle à son tour la fonction ProtocolClIncomingCall de NDISWAN, au sein de laquelle NDISWAN accepte ou rejette la connexion demandée. Si NDISWAN modifie les paramètres d’appel qui lui sont passés, il doit définir le membre Indicateurs dans la structure CO_CALL_PARAMETERS avec CALL_PARAMETERS_CHANGED.
Après avoir décidé d’accepter la connexion et après avoir éventuellement modifié les paramètres d’appel, NDISWAN appelle la fonction NdisClIncomingCallComplete . NDIS appelle à son tour la fonction ProtocolCmIncomingCallComplete du pilote miniport. Selon que NDISWAN a accepté l’appel sortant et que le pilote miniport accepte ou rejette les modifications proposées par NDISWAN aux paramètres d’appel, le pilote miniport appelle les fonctions NdisCmDispatchCallConnected ou NdisCmDispatchIncomingCloseCall . NdisCmDispatchCallConnected informe NDISWAN que les transferts de données peuvent commencer sur le vc créé par NDPROXY pour l’appel sortant. NdisCmDispatchIncomingCloseCall informe NDISWAN et NDPROXY de supprimer l’appel sortant proposé.
Une fois que NDISWAN a accepté l’appel sortant, NDPROXY appelle la fonction NdisCoGetTapiCallId pour récupérer une chaîne qui identifie le contexte de NDISWAN pour le vc. NDPROXY transmet cette chaîne à l’application TAPI. L’application TAPI utilise cette chaîne de contexte VC pour terminer son appel à lineGetID.