Client-Initiated demande de fermeture d’un appel
Si un client ferme un appel multipoint auquel plusieurs parties sont toujours connectées, il doit d’abord appeler NdisClDropParty autant de fois que nécessaire pour supprimer toutes les parties sauf la dernière partie de l’appel (voir Suppression d’une partie à partir d’un appel multipoint).
Un client lance la fermeture d’un appel avec NdisClCloseCall. La figure suivante montre un client qui lance la fermeture d’un appel par le biais d’un gestionnaire d’appels.
La figure suivante montre un client qui lance la fermeture d’un appel via un pilote MCM.
Un client orienté connexion appelle généralement NdisClCloseCall dans l’une des circonstances suivantes :
Pour fermer un appel sortant ou entrant établi.
À partir de la fonction ProtocolClIncomingCloseCall pour supprimer un appel établi (voir Requête entrante pour fermer un appel).
À partir de la fonction ProtocolClIncomingCallQoSChange pour supprimer un appel établi si une modification qoS proposée par la partie distante est inacceptable (voir Demande entrante de modification des paramètres d’appel).
À partir de la fonction ProtocolClModifyCallQoSComplete pour supprimer un appel établi si une modification de QoS proposée par le client est inacceptable pour la partie distante (voir Demande lancée par le client pour modifier les paramètres d’appel).
L’appel d’un client à NdisClCloseCall amène NDIS à appeler la fonction ProtocolCmCloseCall du gestionnaire d’appels ou du pilote MCM. ProtocolCmCloseCall doit communiquer avec les périphériques de contrôle réseau pour arrêter une connexion entre le nœud local et un nœud distant.
Si ProtocolCmCloseCall reçoit un CallMgrPartyContext explicite, l’appel en cours d’arrêt est un appel multipoint. Le gestionnaire d’appels ou le pilote MCM doit effectuer toute communication réseau nécessaire avec son matériel réseau, en fonction de son type de média, pour terminer l’appel en tant qu’appel multipoint.
NDIS peut passer ProtocolCmCloseCall un pointeur vers une mémoire tampon contenant les données fournies par le client dans l’appel à NdisClClose. Ces données peuvent être des données de diagnostic qui indiquent pourquoi l’appel a été fermé ou toute autre donnée requise par le protocole de signalisation. ProtocolCmCloseCall doit envoyer ces données sur le réseau avant de terminer l’arrêt de l’appel. Si l’envoi de données en même temps qu’une connexion en cours d’arrêt n’est pas pris en charge, un gestionnaire d’appels ou un pilote MCM doit retourner NDIS_STATUS_INVALID_DATA.
ProtocolCmCloseCall peut se terminer de manière synchrone ou, plus probablement, de manière asynchrone avec NdisCmCloseCallComplete(dans le cas d’un gestionnaire d’appels) ou NdisMCmCloseCallComplete (dans le cas d’un pilote MCM). Un appel à Ndis(M)CmCloseCallComplete amène NDIS à appeler la fonction ProtocolClCloseCallComplete du client.
Le gestionnaire d’appels ou le pilote MCM doit ensuite lancer la désactivation du vc utilisé pour l’appel en appelant respectivement NdisCmDeactivateVc ou NdisMCmDeactivateVc(voir Désactivation d’un vc). Le créateur du vc (client, gestionnaire d’appels ou pilote MCM) peut éventuellement lancer la suppression du vc (voir Suppression d’un vc).