Freigeben über


Annehmen eingehender Anrufe

Bevor eine Anwendung einen eingehenden Anruf annehmen kann, muss zuerst eine Zeile geöffnet sein. Eine Zeile wird als Ergebnis einer Anwendung geöffnet, die die TAPI lineOpen-Funktion aufruft . Dieser TAPI-Funktionsaufruf bewirkt, dass zugrunde liegende Treiber TAPI-Parameter in NDIS-Strukturen kapseln, um den Empfang eines eingehenden Anrufs vorzubereiten. Nachdem der CoNDIS WAN-Miniporttreiber einen eingehenden Anruf empfangen hat, muss der Miniporttreiber zunächst eine virtuelle Verbindung (VC) mit dem NDPROXY-Treiber erstellen und dann NDPROXY über den eingehenden Anruf benachrichtigen. NDPROXY wiederum benachrichtigt die Anwendung über TAPI. In der folgenden Liste wird beschrieben, wie der eingehende Anruf eingerichtet, verbunden und getätigt wird:

  • NDPROXY gibt die TAPI-Parameter für eine eingehende Verbindung in einer CO_AF_TAPI_SAP-Struktur an. NDPROXY füllt die Member dieser Struktur mit den folgenden Informationen aus, die in der TAPI lineOpen-Funktion übergeben wurden:

    • Open-Line-Bezeichner im ulLineID-Member
    • Adresse der eingehenden Verbindung im ulAddressID-Member
    • Medienmodus des Informationsstreams der eingehenden Verbindung im ulMediaModes-Element
  • NDPROXY überlagert die CO_AF_TAPI_SAP-Struktur auf dem Sap-Member einer CO_SAP-Struktur und legt das SapLength-Element von CO_SAP auf die Größe CO_AF_TAPI_SAP fest. NDPROXY muss auch das SapType-Element von CO_SAP auf AF_TAPI_SAP_TYPE festlegen.

  • Sobald NDPROXY TAPI-Parameter gekapselt hat, ruft NDPROXY die NdisClRegisterSap-Funktion auf, um sich für den Empfang eingehender Aufrufe bereit zu machen. In diesem Funktionsaufruf übergibt NDPROXY einen Zeiger an die ausgefüllte CO_SAP-Struktur, die den Service Access Point (SAP) angibt, auf dem NDPROXY eingehende Anrufe empfangen kann. NDIS leitet die CO_SAP-Struktur an die ProtocolCmRegisterSap-Funktion des McM-Treibers (CoNDIS WAN Miniport Call Manager) weiter. ProtocolCmRegisterSap kommuniziert bei Bedarf mit Netzwerksteuerungsgeräten oder anderen medienspezifischen Agents, um sap im Netzwerk für NDPROXY zu registrieren. Nachdem der Miniporttreiber die SAP registriert hat, kann er ein angebot für eingehende Anrufe annehmen, das an diese SAP gerichtet ist.

  • Ein CoNDIS WAN-Miniporttreiber wird durch Signalmeldungen aus dem Netzwerk zu einem eingehenden Anruf gewarnt. Aus diesen Signalmeldungen extrahiert der Miniporttreiber die Anrufparameter für den Anruf, einschließlich des SAP, an den der eingehende Anruf adressiert wird.

  • Bevor er einen eingehenden Aufruf von NDPROXY angibt, ruft der Miniporttreiber die NdisMCmCreateVc-Funktion auf, um die Erstellung einer VC mit NDPROXY zu initiieren. NDPROXY weist Ressourcen zu, die für die VC erforderlich sind, und initialisiert sie und speichert das Handle in der VC.

  • Der CoNDIS WAN-Miniporttreiber legt die TAPI-Parameter für einen eingehenden Anruf in einer CO_AF_TAPI_INCOMING_CALL_PARAMETERS-Struktur fest. Der Miniporttreiber füllt die Member dieser Struktur mit den folgenden Informationen aus, die aus Signalmeldungen extrahiert wurden:

    • Zeilenbezeichner im ulLineID-Element
    • Adresse des eingehenden Anrufs im ulAddressID-Member
    • CO_TAPI_FLAG_INCOMING_CALL Bit im ulFlags-Element . Alle anderen ulFlags-Bits sind reserviert und müssen auf 0 festgelegt werden.
    • LINECALLPARAMS-Struktur im LineCallInfo-Element . Mitglieder von LINECALLPARAMS geben TAPI-Aufrufparameter für einen eingehenden Anruf an.
  • Der Miniporttreiber überlagert CO_AF_TAPI_INCOMING_CALL_PARAMETERS auf dem Parameterelement einer CO_SPECIFIC_PARAMETERS-Struktur und legt das Length-Element von CO_SPECIFIC_PARAMETERS auf die Größe CO_AF_TAPI_INCOMING_CALL_PARAMETERS fest.

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

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

  • Der Miniporttreiber muss auch den CallMgrParameters-Member der CO_CALL_PARAMETERS-Struktur festlegen, 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.

  • Nachdem der Miniporttreiber TAPI-Parameter gekapselt und den CallMgrParameters-Member von CO_CALL_MANAGER_PARAMETERS ausgefüllt hat, ruft er die NdisMCmDispatchIncomingCall-Funktion auf, um den eingehenden Aufruf von NDPROXY anzugeben. In diesem Aufruf übergibt der Miniporttreiber Folgendes:

    • Ein Handle, das die SAP identifiziert, an die der eingehende Anruf adressiert wird.
    • Ein Handle, das die VC für den eingehenden Anruf identifiziert
    • Ein Zeiger auf die ausgefüllte CO_CALL_PARAMETERS-Struktur
  • NDPROXY gibt NDIS_STATUS_PENDING an den Miniporttreiber zurück, damit NDPROXY NdisMCmDispatchIncomingCall asynchron abschließen kann.

  • Nachdem die TAPI-Anwendung den eingehenden Aufruf mit der funktion lineAnswer beantwortet hat, ruft NDPROXY die Funktion NdisClIncomingCallComplete auf. NDIS ruft wiederum die ProtocolCmIncomingCallComplete-Funktion des Miniporttreibers auf. Wenn NDPROXY einen NDIS_STATUS_SUCCESS Code zurückgibt, gibt dies die Annahme der Aufrufparameter an. Wenn NDPROXY die Aufrufparameter für inakzeptabel hält, kann es eine Änderung der Aufrufparameter anfordern, indem der Flags-Member in der CO_CALL_PARAMETERS-Struktur auf CALL_PARAMETERS_CHANGED festgelegt und überarbeitete Aufrufparameter bereitgestellt wird. Wenn NDPROXY den eingehenden Anruf akzeptiert, sollte der Miniporttreiber Signalmeldungen senden, um der aufrufenden Entität mitzuteilen, dass der Anruf angenommen wurde. Andernfalls sollte der Miniporttreiber Signalmeldungen senden, um anzugeben, dass der Anruf abgelehnt wurde. Wenn NDPROXY eine Änderung der Aufrufparameter anfordert, sendet der Miniporttreiber Signalmeldungen, um eine Änderung der Aufrufparameter anzufordern.

  • Der Miniporttreiber aktiviert die VC, die der Miniporttreiber mit NDPROXY erstellt hat, und muss auch die NdisMCmActivateVc-Funktion aufrufen, um NDPROXY darüber zu informieren, dass der Miniporttreiber bereit ist, Pakete auf der VC zu übertragen.

  • Wenn NDPROXY den Aufruf ablehnt, ruft der Miniporttreiber die NdisMCmDeactivateVc-Funktion auf, um die VC zu deaktivieren, die der Miniporttreiber für den eingehenden Aufruf erstellt hat. Nachdem die VC deaktiviert wurde, ruft der Miniporttreiber die NdisMCmDeleteVc-Funktion auf, um die VC zu löschen.

  • Je nachdem, ob NDPROXY den eingehenden Anruf akzeptiert hat und ob die End-to-End-Verbindung erfolgreich hergestellt wurde, ruft der Miniporttreiber entweder die Funktionen NdisMCmDispatchCallConnected oder NdisMCmDispatchIncomingCloseCall auf. Beachten Sie, dass die remote aufrufende Entität, wenn sie den Aufruf herunterreutet, Signalmeldungen sendet, um anzugeben, dass die End-to-End-Verbindung nicht erfolgreich hergestellt wurde. NdisMCmDispatchCallConnected benachrichtigt NDPROXY, dass Datenübertragungen auf der VC beginnen können, die der Miniporttreiber erstellt und für den eingehenden Anruf aktiviert hat. NdisMCmDispatchIncomingCloseCall informiert NDPROXY, den eingehenden Anruf abreißen zu lassen.

  • Wenn NDPROXY angewiesen wird, den eingehenden Aufruf abreißen zu lassen, ruft er die NdisClCloseCall-Funktion auf, um zu bestätigen, dass es weder versucht zu senden noch zu erwarten, Dass daten auf der VC empfangen werden. NDIS ruft wiederum die ProtocolCmCloseCall-Funktion des Miniporttreibers auf. Der Miniporttreiber ruft dann die NdisMCmDeactivateVc-Funktion auf, um die VC zu deaktivieren. Nachdem die VC deaktiviert wurde, ruft der Miniporttreiber die NdisMCmDeleteVc-Funktion auf, um die VC zu löschen.

  • Nachdem die TAPI-Anwendung den eingehenden Aufruf akzeptiert hat und NDPROXY die Anwendung benachrichtigt, dass der Aufruf verbunden ist, ruft die Anwendung 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 einen SAP mit einer Zeichenfolge sucht, die der von der TAPI-Anwendung übergebenen Zeichenfolge entspricht, ruft NDPROXY NdisMCmCreateVc auf, um einen Verbindungsendpunkt mit NDISWAN einzurichten, für den es Benachrichtigungen über den eingehenden Anruf senden kann. 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 eingehenden Anruf zu benachrichtigen. In diesem Aufruf übergibt NDPROXY die gekapselte CO_AF_TAPI_INCOMING_CALL_PARAMETERS-Struktur, die die eingehenden Aufrufparameter enthält. NDIS ruft wiederum die ProtocolClIncomingCall-Funktion von NDISWAN auf, in der NDISWAN die angeforderte Verbindung entweder akzeptiert oder ablehnt.

  • 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 eingehenden Anruf akzeptiert hat und ob der Miniporttreiber die von NDISWAN vorgeschlagenen Änderungen an den Anrufparametern 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 der Miniporttreiber für den eingehenden Anruf erstellt hat. NdisCmDispatchIncomingCloseCall informiert NDISWAN und NDPROXY, den eingehenden Anruf abreißen zu lassen.

  • Nachdem NDISWAN den eingehenden Aufruf angenommen 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.