Tätigen eines Anrufs
Die folgende Abbildung zeigt einen Client, der einen ausgehenden Anruf über einen Anruf-Manager abnimmt.
Die folgende Abbildung zeigt einen Client, der einen ausgehenden Anruf über einen MCM-Treiber abnimmt.
Vor dem Tätigen eines ausgehenden Anrufs muss ein verbindungsorientierter Client Folgendes ausführen:
Initialisieren Sie Aufrufparameter in einer Struktur vom Typ CO_CALL_PARAMETERS. Der Anruf-Manager oder MCM-Treiber verwendet in der Regel die vom Client angegebenen Aufrufparameter, um den Aufruf einzurichten und Medienparameter für die Verwendung durch den Miniporttreiber abzuleiten.
Initiieren Sie die Erstellung einer VC mit NdisCoCreateVc.
Bei erfolgreicher Rückgabe von NdisCoCreateVc ruft der Client NdisClMakeCall auf, um den Aufruf zu initiieren (siehe die beiden Abbildungen in diesem Abschnitt).
Beim Aufruf von NdisClMakeCall übergibt der Client einen Zeiger an die zuvor initialisierte CO_CALL_PARAMETERS Struktur. Der Client übergibt auch ein NdisVcHandle (von NdisCoCreateVc zurückgegeben), das die VC identifiziert, auf der der Client Daten für den Anruf übermittelt (und möglicherweise empfängt). Wenn der Client einen Mehrpunktaufruf (ein Aufruf von mehr als einer Remotepartei) ausgibt, übergibt er auch einen ProtocolPartyContext , der ein Handle an einen vom Client zugewiesenen residenten Kontextbereich angibt, in dem der Client den status pro Partei für die erste Partei auf der Multipoint-VC verwaltet.
Durch den Aufruf von NdisClMakeCall leitet NDIS diese Anforderung an die ProtocolCmMakeCall-Funktion des Aufruf-Managers oder MCM-Treibers weiter, mit dem der Client die angegebene NdisVcHandle teilt. ProtocolCmMakeCall muss die Eingabeaufrufparameter überprüfen, die vom Client eingerichtet wurden.
ProtocolCmMakeCall kommuniziert (austauscht Signalnachrichten) mit Netzwerksteuerungsgeräten, um eine Verbindung herzustellen. Ein Anruf-Manager ruft NdisCoSendNetBufferLists auf, um einen solchen Austausch zu initiieren (siehe Senden NET_BUFFER Strukturen von CoNDIS-Treibern). Ein MCM-Treiber ruft nie NdisCoSendNetBufferLists auf. Stattdessen werden die Daten direkt über das Netzwerk übertragen.
Der Anruf-Manager oder MCM-Treiber kann die vom Client bereitgestellten Anrufparameter während der Verhandlungen mit relevanten Netzwerkkomponenten ändern und andere Datenverkehrsparameter zurückgeben, als der Client ursprünglich für NdisClMakeCall angegeben hat (siehe Eingehende Anforderung zum Ändern von Anrufparametern).
Ein explizites NdisPartyHandle , das an ProtocolCmMakeCall übergeben wird, gibt an, dass die vom Client erstellte VC für einen Mehrpunktaufruf verwendet wird. Der Anruf-Manager oder MCM-Treiber muss alle erforderlichen Ressourcen zuordnen und initialisieren, die zum Verwalten von Statusinformationen für einzelne Parteien und zum Steuern des Mehrpunktaufrufs erforderlich sind.
Nachdem ein Anruf-Manager die erforderliche Kommunikation mit seiner Netzwerkhardware durchgeführt hat, muss er NdisCmActivateVc aufrufen, um die Aktivierung der VC zu initiieren, auf der Anrufdaten gesendet und möglicherweise empfangen werden. Ein MCM-Treiber muss NdisMCmActivateVc aufrufen.
Wenn der zugrunde liegende Miniporttreiber bereit ist, Datenübertragungen auf der VC durchzuführen (d. h. nachdem die VC aktiviert wurde), ruft ein Anruf-Manager NdisCmMakeCallComplete auf, und ein MCM-Treiber ruft NdisMCmMakeCallComplete auf. An diesem Punkt sollte der Anruf-Manager oder MCM-Treiber mit dem Netzwerk ausgehandelt haben, um Anrufparameter für die VC festzulegen, und der zugrunde liegende Miniporttreiber sollte die Aktivierung der VC abgeschlossen haben.
Beim Aufruf von Ndis(M)CmMakeCallComplete übergibt der Anruf-Manager oder MCM-Treiber die Aufrufparameter für die VC als Zeiger auf eine Struktur vom Typ CO_CALL_PARAMETERS. Wenn der Anruf-Manager die Aufrufparameter wie ursprünglich vom Client angegeben geändert hat, kann er den Client benachrichtigen, indem er das CALL_PARAMETERS_CHANGED-Flag in der CO_CALL_PARAMETERS-Struktur festlegt.
Ein Aufruf von Ndis(M)CmMakeCallComplete bewirkt, dass NDIS die ProtocolClMakeCallComplete-Funktion des Clients aufruft , der den ausgehenden Aufruf ausgelöst hat. Ein Aufruf von ProtocolClMakeCallComplete gibt an, dass der Anruf-Manager die Verarbeitung der Clientanforderung zum Herstellen einer virtuellen Verbindung mit NdisClMakeCall abgeschlossen hat.
Wenn der Versuch des Clients, einen ausgehenden Aufruf einzurichten, erfolgreich war, sollte ProtocolClMakeCallComplete das flag CALL_PARAMETERS_CHANGED überprüfen, um festzustellen, ob die ursprünglich vom Client angegebenen Aufrufparameter geändert wurden. Wenn das Flag festgelegt ist und angibt, dass die Aufrufparameter geändert wurden, sollte ProtocolClMakeCallComplete die zurückgegebenen Aufrufparameter untersuchen, um zu ermitteln, ob sie für diese Verbindung akzeptabel sind.
Wenn die Aufrufparameter akzeptabel sind, gibt ProtocolClMakeCallComplete einfach die Steuerung zurück. Wenn die Aufrufparameter nicht akzeptabel sind und das Signalisierungsprotokoll an diesem Punkt eine Neuverhandlung zulässt, kann der Client NdisClModifyCallQoS aufrufen, um eine Änderung der Aufrufparameter anzufordern (siehe Clientinitiierte Anforderung zum Schließen eines Anrufs). Wenn das Signalisierungsprotokoll keine Neuverhandlung von inakzeptablen Anrufparametern zulässt, muss ProtocolClMakeCallComplete den Anruf mit NdisClCloseCall abreißen(siehe Client-Initiated Anforderung zum Schließen eines Anrufs).