Freigeben über


Tätigen ausgehender Anrufe

Wenn eine Anwendung versucht, einen ausgehenden Aufruf zu tätigen, muss sie zuerst eine Zeile öffnen. Eine Zeile wird als Ergebnis einer Anwendung geöffnet, die die TAPI lineOpen-Funktion aufruft . Um einen Telefonieanruf an der zuvor geöffneten Zeile zu platzieren, ruft die Anwendung die TAPI lineMakeCall-Funktion auf und übergibt einen Zeiger an die bestimmte Zieladresse. Wenn nichts anderes als Standardmäßige Aufrufsetupparameter angefordert werden, übergibt die Anwendung auch einen Zeiger auf eine LINECALLPARAMS-Struktur. Wenn die Anwendung Standardmäßige Aufrufsetupparameter verwendet, stellt lineMakeCall diese Parameter in einer LINECALLPARAMS-Struktur bereit. Mitglieder dieser Struktur geben an, wie der Telefonieanruf eingerichtet werden soll.

Diese TAPI-Funktionsaufrufe führen dazu, dass der NDPROXY-Treiber zuerst eine virtuelle Verbindung (VC) mit dem CoNDIS WAN-Miniporttreiber erstellt und dann TAPI-Parameter in NDIS-Strukturen kapselt, um den ausgehenden Aufruf auszuführen. Der Miniporttreiber verwendet diese TAPI-Parameter, um den ausgehenden Aufruf einzurichten. Im Folgenden wird beschrieben, wie der ausgehende Anruf verbunden, eingerichtet und ausgeführt wird:

  • NDPROXY ruft NdisCoCreateVc auf, um die Erstellung der VC mit dem Miniporttreiber zu initiieren. Nachdem NDPROXY NdisCoCreateVc aufgerufen hat, ruft NDIS als synchronen Vorgang die ProtocolCoCreateVc-Funktion des Aufruf-Managers auf, die in den Miniporttreiber integriert ist. NDIS übergibt an ProtocolCoCreateVc ein Handle, das die VC darstellt. Wenn der Aufruf von NdisCoCreateVc erfolgreich ist, füllt NDIS das VC-Handle aus und gibt es zurück. ProtocolCoCreateVc führt alle erforderlichen Zuordnungen dynamischer Ressourcen und Strukturen aus, die der MCM-Treiber (Miniport Call Manager) benötigt, um nachfolgende Vorgänge auf der VC auszuführen, die später aktiviert werden. Zu diesen Ressourcen gehören speicherpuffer, Datenstrukturen, Ereignisse und andere ähnliche Ressourcen.

  • NDPROXY gibt die TAPI-Parameter für einen ausgehenden Aufruf in einer CO_AF_TAPI_MAKE_CALL_PARAMETERS-Struktur an. NDPROXY füllt die Member dieser Struktur mit den folgenden Informationen aus, die in der TAPI lineMakeCall-Funktion übergeben wurden:

    • Die Zieladresse im DestAddress-Member
    • Der Open-Line-Bezeichner im ulLineID-Member
    • Die LINECALLPARAMS-Struktur im LineCallParams-Element
  • NDPROXY überlagert die CO_AF_TAPI_MAKE_CALL_PARAMETERS-Struktur auf dem Parameter-Member einer CO_SPECIFIC_PARAMETERS-Struktur und legt das Length-Element von CO_SPECIFIC_PARAMETERS auf die Größe CO_AF_TAPI_MAKE_CALL_PARAMETERS fest.

  • NDPROXY legt die CO_SPECIFIC_PARAMETERS-Struktur auf das MediaSpecific-Element einer CO_MEDIA_PARAMETERS-Struktur fest.

  • NDPROXY legt einen Zeiger auf die CO_MEDIA_PARAMETERS-Struktur auf das MediaParameters-Element einer CO_CALL_PARAMETERS-Struktur fest.

  • Sobald NDPROXY TAPI-Parameter gekapselt hat, ruft NDPROXY die NdisClMakeCall-Funktion auf, um den ausgehenden Aufruf zu initiieren. In diesem Funktionsaufruf übergibt NDPROXY einen Zeiger an die ausgefüllte CO_CALL_PARAMETERS-Struktur. NDIS ruft wiederum die ProtocolCmMakeCall-Funktion des Anruf-Managers des CoNDIS WAN-Miniporttreibers auf. Der Miniporttreiber sollte nur die CO_AF_TAPI_MAKE_CALL_PARAMETERS Struktur untersuchen, die in CO_CALL_PARAMETERS eingebettet ist. In diesem Fall sind keine anderen Aufrufparameter sinnvoll. Wenn der Miniporttreiber anschließend die VC für den ausgehenden Aufruf aktiviert, ruft der Miniporttreiber die NdisMCmActivateVc-Funktion auf und übergibt einen Zeiger an die ausgefüllte CO_CALL_PARAMETERS.

  • Nachdem der Miniporttreiber mit dem Netzwerk ausgehandelt hat, um die Telefonie-Anrufparameter für die VC festzulegen und eine NIC für diese Anrufparameter eingerichtet hat, ruft der Miniporttreiber die NdisMCmMakeCallComplete-Funktion auf, um anzugeben, dass er bereit ist, Datenübertragungen auf der VC durchzuführen. In diesem Aufruf muss der Miniporttreiber das Handle an die VC übergeben und Änderungen an Telefonie-Anrufparametern vornehmen.

  • Der Miniporttreiber muss das CallMgrParameters-Element der CO_CALL_PARAMETERS-Struktur ändern, um die Dienstqualität (Quality of Service, QoS) der Übertragung von Paketen anzugeben, z. B. die Bandbreite. Um dieses CallMgrParameters-Member festzulegen, füllt der Miniporttreiber Member einer CO_CALL_MANAGER_PARAMETERS-Struktur aus und verweist diese Struktur auf CallMgrParameters. Um beispielsweise die Übertragungs- und Empfangsgeschwindigkeiten in Bytes pro Sekunde für die VC zu identifizieren, muss der Miniporttreiber die PeakBandwidth-Member der Elemente Senden und Empfangen von CO_CALL_MANAGER_PARAMETERS festlegen. Die Übertragungs- und Empfangsmember sind FLOWSPEC-Strukturen. Weitere Informationen zur FLOWSPEC-Struktur finden Sie im Microsoft Windows SDK.

  • Wenn der Miniporttreiber die Telefonie-Anrufparameter geändert hat, muss er das Flags-Element in der CO_CALL_PARAMETERS-Struktur mit CALL_PARAMETERS_CHANGED festlegen. Als Ergebnis des NdisMCmMakeCallComplete-Aufrufs vom Miniporttreiber ruft NDIS die ProtocolClMakeCallComplete-Funktion von NDPROXY auf, um die asynchronen Vorgänge abzuschließen, die mit NdisClMakeCall initiiert wurden.

  • Nachdem der Miniporttreiber den ausgehenden Aufruf erfolgreich abgeschlossen hat, benachrichtigt NDPROXY eine TAPI-Anwendung, dass der Aufruf verbunden ist. Diese TAPI-Anwendung ruft dann die TAPI lineGetID-Funktion auf, um NDPROXY zu informieren, den entsprechenden CoNDIS-Client zu suchen. In diesem lineGetID-Aufruf stellt die TAPI-Anwendung eine Zeichenfolge für eine bestimmte TAPI-Geräteklasse bereit, für die die Anwendung ein Handle benötigt. NDPROXY verwendet diese Zeichenfolge, um den CoNDIS-Client zu suchen, der zuvor einen SAP für die jeweilige TAPI-Geräteklasse registriert hat. Wenn der CoNDIS-Client NDISWAN ist, lautet die Zeichenfolge NDIS. Wenn NDPROXY eine SAP mit einer Zeichenfolge findet, die der von der TAPI-Anwendung übergebenen Zeichenfolge entspricht, ruft NDPROXY NdisMCmCreateVc auf, um einen Verbindungsendpunkt mit NDISWAN einzurichten, für den Benachrichtigungen über den ausgehenden Aufruf gesendet werden können. NDIS ruft wiederum die ProtocolCoCreateVc-Funktion von NDISWAN auf und übergibt ein Handle, das die VC darstellt.

  • Nachdem NDPROXY den Verbindungsendpunkt mit NDISWAN eingerichtet hat, ruft es die NdisCmDispatchIncomingCall-Funktion auf, um NDISWAN über den ausgehenden Anruf zu benachrichtigen. In diesem Aufruf übergibt NDPROXY die gekapselte CO_AF_TAPI_MAKE_CALL_PARAMETERS-Struktur, die die Ausgehenden Aufrufparameter enthält. NDIS ruft wiederum die ProtocolClIncomingCall-Funktion von NDISWAN auf, in der NDISWAN die angeforderte Verbindung entweder akzeptiert oder ablehnt. Wenn NDISWAN die an ihn übergebenen Aufrufparameter ändert, muss das Flags-Element in der CO_CALL_PARAMETERS-Struktur mit CALL_PARAMETERS_CHANGED festgelegt werden.

  • Nachdem Sie entschieden haben, ob die Verbindung akzeptiert werden soll, und nachdem Sie möglicherweise die Aufrufparameter geändert haben, ruft NDISWAN die Funktion NdisClIncomingCallComplete auf. NDIS ruft wiederum die ProtocolCmIncomingCallComplete-Funktion des Miniporttreibers auf. Je nachdem, ob NDISWAN den ausgehenden Anruf akzeptiert hat und ob der Miniporttreiber die von NDISWAN vorgeschlagenen Änderungen an den Aufrufparametern akzeptiert oder ablehnt, ruft der Miniporttreiber entweder die Funktionen NdisCmDispatchCallConnected oder NdisCmDispatchIncomingCloseCall auf. NdisCmDispatchCallConnected benachrichtigt NDISWAN, dass Datenübertragungen auf der VC beginnen können, die NDPROXY für den ausgehenden Anruf erstellt hat. NdisCmDispatchIncomingCloseCall informiert NDISWAN und NDPROXY, den vorgeschlagenen ausgehenden Anruf abreißen zu lassen.

  • Nachdem NDISWAN den ausgehenden Aufruf akzeptiert hat, ruft NDPROXY die NdisCoGetTapiCallId-Funktion auf, um eine Zeichenfolge abzurufen, die den NDISWAN-Kontext für die VC identifiziert. NDPROXY übergibt diese Zeichenfolge zurück an die TAPI-Anwendung. Die TAPI-Anwendung verwendet diese VC-Kontextzeichenfolge, um den Aufruf von lineGetID abzuschließen.