Indicazione di una chiamata in ingresso
Un gestore chiamate o un driver MCM viene avvisato di una chiamata in ingresso segnalando messaggi dalla rete. Da questi messaggi di segnalazione, il gestore chiamate o il driver MCM estrae i parametri di chiamata per la chiamata, incluso il sap a cui viene indirizzata la chiamata in ingresso.
La figura seguente mostra un driver MCM che indica una chiamata in ingresso.
Nella figura seguente viene illustrato un gestore chiamate che indica una chiamata in ingresso.
Se i parametri delle chiamate in ingresso non sono accettabili per il gestore chiamate o il driver MCM, può tentare di negoziare una modifica in questi parametri con la parte remota se tale negoziazione è consentita dal protocollo di segnalazione. In alternativa, il client a cui viene indirizzata la chiamata in ingresso potrebbe tentare di negoziare i parametri di chiamata dopo aver ricevuto l'indicazione della chiamata dal gestore chiamate o dal driver MCM (vedere Richiesta avviata dal client per modificare i parametri di chiamata). Se il gestore chiamate o il driver MCM non possono negoziare parametri di chiamata accettabili per la chiamata con la parte remota, potrebbe rifiutare la chiamata. Il protocollo di segnalazione determina ciò che è possibile in tali casi.
Prima di indicare una chiamata in ingresso a un client, il chiamante o il driver MCM devono identificare sap a cui viene indirizzata la chiamata. Sap deve essere stato registrato in precedenza da un client. Il gestore chiamate o il driver MCM devono anche avviare la creazione di un VC e avviare l'attivazione di questo VC.
Il gestore chiamate o il driver MCM indica quindi la chiamata in ingresso al client in cui è stata registrata la chiamata SAP a cui viene indirizzata la chiamata in ingresso. Un gestore chiamate indica una chiamata in ingresso con NdisCmDispatchIncomingCall. Un driver MCM indica una chiamata in ingresso con NdisMCmDispatchIncomingCall.
Nella chiamata a Ndis(M)CmDispatchIncomingCall, il chiamante o il driver MCM passa quanto segue:
NdisSapHandle che identifica sap a cui viene indirizzata la chiamata in ingresso.
NdisVcHandle che identifica il circuito virtuale per la chiamata in ingresso.
Puntatore a una struttura di tipo CO_CALL_PARAMETERS, che contiene i parametri di chiamata per la chiamata.
La chiamata a Ndis(M)CmDispatchIncomingCall causa la chiamata di NDIS alla funzione ProtocolClIncomingCall del client, all'interno della quale il client accetta o rifiuta la connessione richiesta. ProtocolClIncomingCall deve convalidare i parametri SAP, VC e call.
ProtocolClIncomingCall può completare in modo sincrono o può restituire NDIS_STATUS_PENDING e completare in modo asincrono NdisClIncomingCallComplete. Una chiamata a NdisClIncomingCallComplete causa la chiamata di NDIS alla funzione ProtocolCmIncomingCallComplete del gestore chiamate o del driver MCM.
Il codice NDIS_STATUS restituito da un completamento sincrono di ProtocolClIncomingCall o fornito a NdisClIncomingCallComplete indica l'accettazione o il rifiuto del client della chiamata in ingresso. Il client restituisce anche i parametri di chiamata per la chiamata in una struttura di CO_CALL_PARAMETERS memorizzata nel buffer. Se il client rileva i parametri di chiamata inaccettabili, può, se consentito dal protocollo di segnalazione, richiedere una modifica nei parametri di chiamata impostando il membro Flags nella struttura CO_CALL_PARAMETERS con CALL_PARAMETERS_CHANGED e fornendo i parametri di chiamata modificati in una struttura di CO_CALL_PARAMETERS memorizzata nel buffer.
Se il client accetta la chiamata in ingresso, il gestore chiamate o il driver MCM devono inviare messaggi di segnalazione per indicare all'entità chiamante che la chiamata è stata accettata. In caso contrario, il gestore chiamate o il driver MCM devono inviare messaggi di segnalazione per indicare che la chiamata è stata rifiutata. Se il client richiede una modifica nei parametri di chiamata, il gestore chiamate o il driver MCM invia messaggi di segnalazione per richiedere una modifica nei parametri di chiamata.
Se il client ha accettato la chiamata o se il client ha richiesto la modifica nei parametri di chiamata è stato accettato dalla parte remota, un gestore chiamate NdisCmDispatchCallConnected e un driver MCM chiama NdisMCmDispatchCallConnected. La chiamata a Ndis(M)CmDispatchCallConnected causa la chiamata di NDIS alla funzione ProtocolClCallConnected del client.
Se il client ha rifiutato la chiamata e il driver MCM o gestione chiamate ha già attivato un VC per la chiamata in ingresso, il chiamante o il driver MCM chiama Ndis(M)CmDeactivateVc per disattivare il VC se il VC è attivato. Il gestore chiamate o il driver MCM possono quindi avviare l'eliminazione del VC chiamando NdisCoDeleteVc nel caso del gestore chiamate o NdisMCmDeleteVc nel caso del driver MCM.
Se il client ha accettato la chiamata ma la connessione end-to-end non è stata stabilita correttamente (perché, ad esempio, la parte remota tore verso il basso la chiamata), il gestore chiamate o il driver MCM non chiamerà Ndis(M)CmDispatchCallConnected. Chiama invece Ndis(M)CmDispatchIncomingCloseCall, che causa la chiamata alla funzione ProtocolClIncomingCloseCall del client. Il client deve quindi chiamare NdisClCloseCall per completare il teardown della chiamata. Il gestore chiamate o il driver MCM chiama quindi Ndis(M)CmDeactivateVC per disattivare il VC creato per la chiamata in ingresso. Il gestore chiamate o il driver MCM possono quindi avviare l'eliminazione del VC chiamando NdisCoDeleteVc nel caso del gestore chiamate o NdisMCmDeleteVc nel caso del driver MCM.