Anzeigen eines eingehenden Anrufs
Ein Anrufmanager oder MCM-Treiber wird zu einem eingehenden Anruf durch Signalisieren von Nachrichten aus dem Netzwerk benachrichtigt. Aus diesen Signalmeldungen extrahiert der Anruf-Manager oder MCM-Treiber die Anrufparameter für den Anruf, einschließlich des SAP, an den der eingehende Anruf adressiert ist.
Die folgende Abbildung zeigt einen MCM-Treiber, der einen eingehenden Anruf angibt.
Die folgende Abbildung zeigt einen Anrufmanager, der einen eingehenden Anruf angibt.
Wenn die Parameter für eingehende Anrufe für den Anruf-Manager oder MCM-Treiber inakzeptabel sind, kann er versuchen, eine Änderung dieser Parameter mit der Remotepartei auszuhandeln, wenn eine solche Aushandlung durch das Signalisierungsprotokoll zulässig ist. Alternativ kann der Client, an den der eingehende Anruf weitergeleitet wird, versuchen, die Anrufparameter auszuhandeln, nachdem er die Anrufanzeige vom Anruf-Manager oder MCM-Treiber empfangen hat (siehe clientinitiierte Anforderung zum Ändern von Anrufparametern). Wenn der Anruf-Manager oder MCM-Treiber keine akzeptablen Anrufparameter für den Anruf mit der Remotepartei aushandeln kann, wird der Anruf möglicherweise abgelehnt. Das Signalisierungsprotokoll bestimmt, was in solchen Fällen möglich ist.
Bevor ein eingehender Anruf an einen Client angegeben wird, muss der Anruf-Manager oder MCM-Treiber den SAP identifizieren, an den der Anruf gerichtet wird. Sap muss zuvor von einem Client registriert worden sein. Der Anruf-Manager oder MCM-Treiber muss auch die Erstellung eines Nachweises initiieren und die Aktivierung dieses Nachweises initiieren.
Der Anruf-Manager oder MCM-Treiber gibt dann den eingehenden Anruf an den Client an, der den SAP registriert hat, an den der eingehende Anruf weitergeleitet wird. Ein Anrufmanager gibt einen eingehenden Anruf mit NdisCmDispatchIncomingCall an. Ein MCM-Treiber gibt einen eingehenden Anruf mit NdisMCmDispatchIncomingCall an.
Beim Aufruf von Ndis(M)CmDispatchIncomingCall übergibt der Anrufmanager oder MCM-Treiber Folgendes:
Ein NdisSapHandle , das den SAP identifiziert, an den der eingehende Anruf adressiert ist.
Ein NdisVcHandle , der die virtuelle Verbindung für den eingehenden Anruf identifiziert.
Ein Zeiger auf eine Struktur vom Typ CO_CALL_PARAMETERS, die die Aufrufparameter für den Aufruf enthält.
Der Aufruf von Ndis(M)CmDispatchIncomingCall bewirkt, dass NDIS die ProtocolClIncomingCall-Funktion des Clients aufruft, in der der Client die angeforderte Verbindung entweder akzeptiert oder ablehnt. ProtocolClIncomingCall sollte die SAP-, VC- und Aufrufparameter überprüfen.
ProtocolClIncomingCall kann synchron oder mit NdisClIncomingCallComplete NDIS_STATUS_PENDING und asynchron abgeschlossen werden. Ein Aufruf von NdisClIncomingCallComplete bewirkt, dass NDIS die ProtocolCmIncomingCallComplete-Funktion des Anruf-Managers oder MCM-Treibers aufruft.
Der NDIS_STATUS Code, der durch eine synchrone Vervollständigung von ProtocolClIncomingCall zurückgegeben oder an NdisClIncomingCallComplete bereitgestellt wird, gibt die Annahme oder Ablehnung des eingehenden Anrufs durch den Client an. Der Client gibt auch die Aufrufparameter für den Aufruf in einer gepufferten CO_CALL_PARAMETERS-Struktur zurück. Wenn der Client die Aufrufparameter für inakzeptabel findet, kann er eine Änderung der Aufrufparameter anfordern, indem er den Flags-Member in der CO_CALL_PARAMETERS-Struktur mit CALL_PARAMETERS_CHANGED und die überarbeiteten Aufrufparameter in einer gepufferten CO_CALL_PARAMETERS-Struktur angibt.
Wenn der Client den eingehenden Anruf akzeptiert, sollte der Anruf-Manager oder MCM-Treiber Signalnachrichten senden, um der aufrufenden Entität mitzuteilen, dass der Anruf akzeptiert wurde. Andernfalls sollte der Anruf-Manager oder MCM-Treiber Signalmeldungen senden, um anzugeben, dass der Anruf abgelehnt wurde. Wenn der Client eine Änderung der Aufrufparameter anfordert, sendet der Anruf-Manager oder MCM-Treiber Signalmeldungen, um eine Änderung der Aufrufparameter anzufordern.
Wenn der Client den Anruf akzeptiert hat oder die vom Client angeforderte Änderung der Anrufparameter von der Remotepartei akzeptiert wurde, ruft ein Anrufmanager NdisCmDispatchCallConnected auf, und ein MCM-Treiber ruft NdisMCmDispatchCallConnected auf. Der Aufruf von Ndis(M)CmDispatchCallConnected bewirkt, dass NDIS die ProtocolClCallConnected-Funktion des Clients aufruft .
Wenn der Client den Anruf abgelehnt hat und der Anrufmanager oder MCM-Treiber bereits eine Vc für den eingehenden Anruf aktiviert hat, ruft der Anruf-Manager oder MCM-Treiber Ndis(M)CmDeactivateVc auf, um den Nachweis zu deaktivieren, wenn die Vc aktiviert ist. Der Anruf-Manager oder MCM-Treiber kann dann das Löschen des Nachweises initiieren, indem er NdisCoDeleteVc im Fall des Anrufmanagers oder NdisMCmDeleteVc im Fall des MCM-Treibers aufruft.
Wenn der Client den Anruf akzeptiert hat, aber die End-to-End-Verbindung nicht erfolgreich hergestellt wurde (weil z. B. die Remotepartei den Anruf abgebrochen hat), ruft der Anruf-Manager oder MCM-Treiber Ndis(M)CmDispatchCallConnected nicht auf. Stattdessen wird Ndis(M)CmDispatchIncomingCloseCall aufgerufen, wodurch NDIS die ProtocolClIncomingCloseCall-Funktion des Clients aufruft. Der Client muss dann NdisClCloseCall aufrufen, um den Abbruch des Anrufs abzuschließen. Der Anruf-Manager oder MCM-Treiber ruft dann Ndis(M)CmDeactivateVC auf, um die für den eingehenden Anruf erstellte Vc zu deaktivieren. Der Anruf-Manager oder MCM-Treiber kann dann das Löschen des Nachweises initiieren, indem er NdisCoDeleteVc im Fall des Anrufmanagers oder NdisMCmDeleteVc im Fall des MCM-Treibers aufruft.