Condividi tramite


Effettuare una chiamata

Nella figura seguente viene illustrato un client che effettua una chiamata in uscita tramite un gestore chiamate.

Diagramma che mostra un client che effettua una chiamata in uscita tramite un gestore chiamate.

La figura seguente illustra un client che effettua una chiamata in uscita tramite un driver MCM.

Diagramma che illustra un client che effettua una chiamata in uscita usando un driver MCM.

Prima di effettuare una chiamata in uscita, un client orientato alla connessione deve:

  • Inizializzare i parametri di chiamata in una struttura di tipo CO_CALL_PARAMETERS. Il gestore chiamate o il driver MCM utilizza in genere i parametri di chiamata specificati dal client per configurare la chiamata e per derivare i parametri multimediali da usare dal driver miniport.

  • Avviare la creazione di un oggetto VC con NdisCoCreateVc.

Al termine della restituzione di NdisCoCreateVc, il client chiama NdisClMakeCall per avviare la chiamata (vedere le due figure in questa sezione).

Nella chiamata a NdisClMakeCall il client passa un puntatore alla struttura CO_CALL_PARAMETERS inizializzata in precedenza. Il client passa anche un oggetto NdisVcHandle (restituito da NdisCoCreateVc) che identifica il vc in cui il client trasmetterà (e forse riceverà) i dati per la chiamata. Se il client effettua una chiamata multipunto (una chiamata a più parti remote), passa anche un oggetto ProtocolPartyContext che specifica un handle a un'area di contesto residente allocata dal client in cui il client manterrà lo stato per parte per la parte iniziale nel vc multipoint.

La chiamata a NdisClMakeCall fa sì che NDIS inoltra questa richiesta alla funzione ProtocolCmMakeCall del gestore chiamate o del driver MCM con cui il client condivide l'oggetto NdisVcHandle specificato. ProtocolCmMakeCall deve convalidare i parametri di chiamata di input configurati dal client.

ProtocolCmMakeCall comunica (scambia messaggi di segnalazione) con i dispositivi di controllo di rete per stabilire una connessione. Un gestore chiamate chiama NdisCoSendNetBufferLists per avviare tale scambio (vedere Invio di strutture NET_BUFFER da driver CoNDIS). Un driver MCM non chiama mai NdisCoSendNetBufferLists. Trasmette invece i dati direttamente attraverso la rete.

Il gestore chiamate o il driver MCM può modificare i parametri di chiamata forniti dal client durante la negoziazione con i componenti di rete pertinenti e può restituire parametri di traffico diversi rispetto al client originariamente assegnato a NdisClMakeCall(vedere Richiesta in ingresso per modificare i parametri di chiamata).

Un NdisPartyHandle esplicito passato a ProtocolCmMakeCall indica che il vc creato dal client verrà usato per una chiamata multipoint. Il gestore chiamate o il driver MCM devono allocare e inizializzare le risorse necessarie per mantenere le informazioni sullo stato per parte e controllare la chiamata multipoint.

Dopo che un gestore chiamate ha eseguito tutte le comunicazioni necessarie con l'hardware di rete richiesto dal supporto, deve chiamare NdisCmActivateVc per avviare l'attivazione del vc su cui verranno inviati i dati delle chiamate e forse ricevuti. Un driver MCM deve chiamare NdisMCmActivateVc.

Quando il driver miniport sottostante è pronto per effettuare trasferimenti di dati nel vc (ovvero dopo l'attivazione del vc), un gestore chiamate chiama NdisCmMakeCallComplete e un driver MCM chiama NdisMCmMakeCallComplete. A questo punto, il gestore chiamate o il driver MCM deve aver negoziato con la rete per stabilire i parametri di chiamata per il vc e il driver miniport sottostante deve aver completato l'attivazione del vc.

Nella chiamata a Ndis(M)CmMakeCallComplete, il gestore chiamate o il driver MCM passa i parametri di chiamata per vc come puntatore a una struttura di tipo CO_CALL_PARAMETERS. Se il gestore chiamate ha modificato i parametri di chiamata come specificato originariamente dal client, può notificare al client impostando il flag CALL_PARAMETERS_CHANGED nella struttura CO_CALL_PARAMETERS.

Una chiamata a Ndis(M)CmMakeCallComplete fa sì che NDIS chiami la funzione ProtocolClMakeCallComplete del client che ha originato la chiamata in uscita. Una chiamata a ProtocolClMakeCallComplete indica che il gestore chiamate ha completato l'elaborazione della richiesta del client per stabilire una connessione virtuale con NdisClMakeCall.

Se il tentativo del client di stabilire una chiamata in uscita ha avuto esito positivo, ProtocolClMakeCallComplete deve controllare il flag CALL_PARAMETERS_CHANGED per determinare se i parametri di chiamata originariamente specificati dal client sono stati modificati. Se il flag è impostato, a indicare che i parametri di chiamata sono stati modificati, ProtocolClMakeCallComplete deve esaminare i parametri di chiamata restituiti per determinare se sono accettabili per questa connessione.

Se i parametri di chiamata sono accettabili, ProtocolClMakeCallComplete restituisce semplicemente il controllo . Se i parametri di chiamata non sono accettabili e se il protocollo di segnalazione consente la rinegoziazione a questo punto, il client può chiamare NdisClModifyCallQoS per richiedere una modifica nei parametri di chiamata (vedere Richiesta avviata dal client per chiudere una chiamata). Se il protocollo di segnalazione non consente la rinegoziazione di parametri di chiamata inaccettabili, ProtocolClMakeCallComplete deve rimuovere la chiamata con NdisClCloseCall(vedere Client-Initiated Request to Close a Call).