Condividi tramite


Esecuzione di chiamate in uscita

Se un'applicazione tenta di effettuare una chiamata in uscita, deve prima aprire una riga. Una riga viene aperta come risultato di un'applicazione che chiama la funzione lineOpen TAPI. Per inserire una chiamata telefonica sulla riga aperta in precedenza, l'applicazione chiama la funzione TAPI lineMakeCall e passa un puntatore all'indirizzo di destinazione specifico. Se vengono richiesti parametri di configurazione di chiamata predefiniti, l'applicazione passa anche un puntatore a una struttura LINECALLPARAMS. Se l'applicazione usa i parametri predefiniti di configurazione delle chiamate, lineMakeCall fornisce tali parametri in una struttura LINECALLPARAMS. I membri di questa struttura specificano la modalità di configurazione della chiamata di telefonia.

Queste chiamate di funzione TAPI consentono al driver NDPROXY di creare prima una connessione virtuale con il driver miniport WAN CoNDIS e quindi di incapsulare i parametri TAPI nelle strutture NDIS per effettuare la chiamata in uscita. Il driver miniport userà questi parametri TAPI per configurare la chiamata in uscita. Di seguito viene descritto come la chiamata in uscita è connessa, configurata e effettuata:

  • NDPROXY chiama NdisCoCreateVc per avviare la creazione del vc con il driver miniport. Dopo che NDPROXY chiama NdisCoCreateVc, NDIS chiama, come operazione sincrona, la funzione ProtocolCoCreateVc del gestore chiamate integrata nel driver miniport. NDIS passa a ProtocolCoCreateVc un handle che rappresenta il VC. Se la chiamata a NdisCoCreateVc ha esito positivo, NDIS riempie e restituisce l'handle VC. ProtocolCoCreateVc esegue tutte le allocazioni necessarie di risorse dinamiche e strutture che il driver MCM (Miniport Call Manager) richiede di eseguire operazioni successive nel VC che verrà attivato in un secondo momento. Tali risorse includono, ma non sono limitati a, buffer di memoria, strutture di dati, eventi e altre risorse simili.

  • NDPROXY specifica i parametri TAPI per una chiamata in uscita in una struttura CO_AF_TAPI_MAKE_CALL_PARAMETERS . NDPROXY riempie i membri di questa struttura con le informazioni seguenti passate nella funzione TAPI lineMakeCall :

    • Indirizzo di destinazione nel membro DestAddress
    • Identificatore della riga aperta nel membro ulLineID
    • Struttura LINECALLPARAMS nel membro LineCallParams
  • NDPROXY sovrappone la struttura CO_AF_TAPI_MAKE_CALL_PARAMETERS nel membro Parameters di una struttura CO_SPECIFIC_PARAMETERS e imposta il membro Length di CO_SPECIFIC_PARAMETERS alle dimensioni di CO_AF_TAPI_MAKE_CALL_PARAMETERS.

  • NDPROXY imposta la struttura CO_SPECIFIC_PARAMETERS sul membro MediaSpecific di una struttura CO_MEDIA_PARAMETERS .

  • NDPROXY imposta un puntatore alla struttura CO_MEDIA_PARAMETERS al membro MediaParameters di una struttura CO_CALL_PARAMETERS .

  • Una volta che NDPROXY incapsula i parametri TAPI, NDPROXY chiama la funzione NdisClMakeCall per avviare la chiamata in uscita. In questa chiamata di funzione, NDPROXY passa un puntatore alla struttura di CO_CALL_PARAMETERS riempita. NDIS chiama a sua volta la funzione ProtocolCmMakeCall del gestore chiamate della rete WAN CoNDIS. Il driver miniport deve esaminare solo la struttura CO_AF_TAPI_MAKE_CALL_PARAMETERS incorporata in CO_CALL_PARAMETERS. Nessun altro parametro di chiamata è significativo in questo caso. Se il driver miniport attiva successivamente il vc per la chiamata in uscita, il driver miniport chiama la funzione NdisMCmActivateVc e passa un puntatore alla CO_CALL_PARAMETERS riempita.

  • Dopo che il driver miniport ha negoziato con la rete per stabilire i parametri di chiamata telefonica per il VC e configurare una scheda di interfaccia di rete per tali parametri di chiamata, il driver miniport chiama la funzione NdisMCmMakeCallComplete per indicare che è pronto per effettuare trasferimenti di dati nel VC. In questa chiamata, il driver miniport deve passare l'handle al VC e le modifiche apportate ai parametri di chiamata telefonica.

  • Il driver miniport deve modificare il membro CallMgrParameters della struttura CO_CALL_PARAMETERS per specificare la qualità del servizio (QoS) dei pacchetti di trasferimento, ad esempio la larghezza di banda. Per impostare questo membro CallMgrParameters , il driver miniport riempie i membri di una struttura CO_CALL_MANAGER_PARAMETERS e punta questa struttura a CallMgrParameters. Ad esempio, per identificare la trasmissione e ricevere velocità in byte al secondo per VC, il driver miniport deve impostare i membri PeakBandwidth dei membri di trasmissione e ricezione di CO_CALL_MANAGER_PARAMETERS. I membri Di trasmissione e ricezione sono strutture FLOWPEC. Per altre informazioni sulla struttura FLOWPEC, vedere la Microsoft Windows SDK.

  • Se il driver miniport ha modificato parametri di chiamata telefonica, deve impostare il membro Flag nella struttura CO_CALL_PARAMETERS con CALL_PARAMETERS_CHANGED. Come risultato della chiamata NdisMCmMakeCallComplete effettuata dal driver miniport, NDIS chiama la funzione ProtocolClMakeCallComplete di NDPROXY per completare le operazioni asincrone avviate con NdisClMakeCall.

  • Dopo che il driver miniport completa correttamente la chiamata in uscita, NDPROXY notifica a un'applicazione TAPI che la chiamata è connessa. Questa applicazione TAPI chiama quindi la funzione LINEGetID TAPI per informare NDPROXY per individuare il client CoNDIS appropriato. In questa chiamata lineGetID l'applicazione TAPI fornisce una stringa per una determinata classe di dispositivo TAPI a cui l'applicazione richiede un handle. NDPROXY usa questa stringa per individuare il client CoNDIS che in precedenza ha registrato un SAP per la determinata classe di dispositivo TAPI. Se il client CoNDIS è NDISWAN, la stringa è NDIS. Se NDPROXY individua un sap con una stringa che corrisponde alla stringa passata dall'applicazione TAPI, NDPROXY chiama NdisMCmCreateVc per configurare un endpoint di connessione con NDISWAN in cui può inviare la notifica della chiamata in uscita effettuata. NDIS a sua volta chiama la funzione ProtocolCoCreateVc di NDISWAN e passa un handle che rappresenta il VC.

  • Dopo che NDPROXY configura l'endpoint di connessione con NDISWAN, chiama la funzione NdisCmDispatchIncomingCall per notificare a NDISWAN la chiamata in uscita. In questa chiamata NDPROXY passa la struttura CO_AF_TAPI_MAKE_CALL_PARAMETERS incapsulata che contiene i parametri di chiamata in uscita. NDIS a sua volta chiama la funzione ProtocolClIncomingCall di NDISWAN, all'interno della quale NDISWAN accetta o rifiuta la connessione richiesta. Se NDISWAN modifica i parametri di chiamata passati, deve impostare il membro Flag nella struttura CO_CALL_PARAMETERS con CALL_PARAMETERS_CHANGED.

  • Dopo aver deciso se accettare la connessione e dopo aver modificato i parametri della chiamata, NDISWAN chiama la funzione NdisClIncomingCallComplete . NDIS a sua volta chiama la funzione ProtocolCmIncomingCallComplete del driver miniport. A seconda che NDISWAN abbia accettato la chiamata in uscita e se il driver miniport accetta o rifiuta le modifiche proposte di NDISWAN ai parametri di chiamata, il driver miniport chiama NdisCmDispatchCallConnected o NdisCmDispatchIncomingCloseCall funzioni. NdisCmDispatchCallConnected notifica a NDISWAN che i trasferimenti di dati possono iniziare nel vc che NDPROXY creato per la chiamata in uscita. NdisCmDispatchIncomingCloseCall informa NDISWAN e NDPROXY per ridurre la chiamata in uscita proposta.

  • Dopo che NDISWAN accetta la chiamata in uscita, NDPROXY chiama la funzione NdisCoGetTapiCallId per recuperare una stringa che identifica il contesto di NDISWAN per il VC. NDPROXY passa questa stringa all'applicazione TAPI. L'applicazione TAPI usa questa stringa di contesto VC per completare la chiamata a lineGetID.