Herunterfahren von CoNDIS TAPI
Eine TAPI-Sitzung beginnt, nachdem ein CoNDIS WAN-Miniporttreiber die TAPI-Funktionen einer Anwendung aufgezählt hat. Innerhalb einer Sitzung können eine oder mehrere Zeilen geöffnet und ein oder mehrere Aufrufe eingerichtet werden. Während der Zeit, in der eine Leitung geöffnet ist, können viele Anrufe eingerichtet und dann geschlossen oder gelöscht werden. Während einer Sitzung kann eine oder mehrere Zeilen mehrmals Übergänge von offen zu geschlossen durchlaufen. Wie ein Miniporttreiber solche Übergänge verarbeitet, wird in diesem Abschnitt beschrieben.
Schließen eines Anrufs
Ein prozessinterner Aufruf kann entweder vom lokalen Knoten oder vom Remoteknoten geschlossen werden. Der Aufruf kann auf dem lokalen Knoten geschlossen werden, entweder weil die letzte Anwendung mit einem Handle für den Aufruf den Handle geschlossen hat, oder vielleicht, weil miniportHaltEx oder MiniportResetEx des Miniporttreibers aufgerufen wurde. Wenn der Remoteknoten einen prozessinternen Aufruf aufhängt, muss der Miniporttreiber die oberen Ebenen informieren, um den Aufruf abreißen zu können.
Wenn eine Anwendung auf dem lokalen Knoten den Aufruf schließt, muss der Aufruf getrennt werden. Ein Aufruf wird getrennt, weil eine Anwendung die TAPI lineDrop-Funktion aufruft . Dieser TAPI-Funktionsaufruf bewirkt, dass der NDPROXY-Treiber die NdisClCloseCall-Funktion aufruft und ein Handle übergibt, das die VC für den Aufruf darstellt. NDIS ruft wiederum die ProtocolCmCloseCall-Funktion des CoNDIS WAN-Miniporttreibers auf. Der Miniporttreiber sollte NDIS_STATUS_PENDING zu NDPROXY zurückgeben, damit der Miniporttreiber NdisClCloseCall asynchron abschließen kann.
Der ProtocolCmCloseCall des Miniporttreibers muss mit Netzwerksteuerungsgeräten kommunizieren, um eine Verbindung zwischen dem lokalen Knoten und einem Remoteknoten zu beenden. Der Miniporttreiber muss dann die NdisMCmDeactivateVc-Funktion aufrufen, um die Deaktivierung der für den Aufruf verwendeten VC zu initiieren.
Nachdem der Miniporttreiber die Verbindung beendet hat, kann sein ProtocolCmCloseCall die NdisMCmCloseCallComplete-Funktion aufrufen, um den Aufrufabschluss abzuschließen.
Wenn der Remoteknoten einen prozessinternen Aufruf aufhängt, ruft der Miniporttreiber die Funktion NdisCmDispatchIncomingCloseCall auf, um NDISWAN und NDPROXY zu informieren, den eingehenden Anruf abreißen zu können.
Schließen einer Zeile
Eine Zeile wird geschlossen, wenn die letzte Anwendung mit einem geöffneten Handle für die Zeile den Handle geschlossen hat. Eine Zeile wird geschlossen, weil eine Anwendung die TAPI lineClose-Funktion aufruft. Dieser TAPI-Funktionsaufruf bewirkt, dass der NDPROXY-Treiber das Schließen aller Aufrufe für diese Zeile initiiert, wie im vorherigen Abschnitt beschrieben. Der Miniporttreiber sollte diese Anrufe löschen und ihren Zustand sauber.
Beenden einer Sitzung
Die Sitzungsbeendigung kann entweder von den oberen Ebenen oder einem CoNDIS WAN-Miniporttreiber initiiert werden. Nachdem sich der letzte Clientprozess vom übergeordneten Telefoniemodul getrennt hat, wird der NDPROXY-Treiber darüber informiert, dass er seine Sitzung mit jedem registrierten Adapter beenden muss. Dazu ruft der NDPROXY-Treiber die NdisClCloseAddressFamily-Funktion auf und übergibt das Handle an die TAPI-Adressfamilie. NDIS ruft wiederum die ProtocolCmCloseAf-Funktion des Miniporttreibers auf. Der Miniporttreiber sollte alle zugehörigen Aktivitäten beenden, die auf dem angegebenen Adapter ausgeführt werden, und alle relevanten Ressourcen freigeben. Nach dem Aufruf von NdisClCloseAddressFamily sollte der Client das Handle für die TAPI-Adressfamilie als ungültig betrachten.
Die vom Treiber initiierte Sitzungsabbruch kann auftreten, wenn der Miniporttreiber in seiner MiniportHaltEx-Funktion entladen wird. In der Regel erledigt der Miniporttreiber alle ausstehenden NDPROXY-Anforderungen und benachrichtigt NDISWAN, dass alle Aufrufe geschlossen werden. Wenn der Miniporttreiber später erneut geladen würde, würde er den gleichen Initialisierungsprozess durchlaufen, der zuvor beschrieben wurde.
Der CoNDIS WAN-Miniporttreiber kann auch das Beenden der Sitzung initiieren, wenn er einer dynamischen Neukonfiguration unterzogen wurde, die eine vollständige Neuinitialisierung aller Clients und Treiber erforderte. Beispielsweise, wenn die Line-Device-Modellierung eines Adapters (z. B. die Anzahl der unterstützten Zeilengeräte) im Betrieb geändert wurde.