Handoff
Quando un'applicazione dispone del privilegio di proprietario per una sessione di comunicazione, l'applicazione può scegliere di passare la proprietà a un'altra applicazione. L'operazione di handoff viene in genere utilizzata per consentire la modifica del tipo di supporto della chiamata. L'applicazione con priorità più alta per il nuovo tipo di supporto deve accettare e gestire la chiamata. La modifica del tipo di supporto si verifica in genere per uno dei motivi seguenti.
Comando utente: Tramite un'interfaccia utente o tramite messaggi di finestra, l'applicazione apprende che l'utente locale vuole modificare il tipo di supporto. Ad esempio, l'utente ha comunicato alla nuova applicazione di destinazione (che non è ancora un proprietario) di ottenere una chiamata vocale esistente per la trasmissione dei dati. L'applicazione di destinazione deve ora assumere il controllo della chiamata. In questo caso, il proprietario corrente rileva l'aumento del numero di proprietari e quindi rinuncia al controllo della chiamata. In alternativa, l'utente potrebbe indicare al proprietario corrente della chiamata di consegnarlo a un'applicazione in grado di gestire il nuovo tipo di supporto.
Modifica del tipo di supporto: Il provider di servizi può rilevare una modifica del tipo di supporto. Ad esempio, l'applicazione locale sta riproducendo un messaggio vocale registrato al chiamante. Durante questo messaggio, il chiamante decide spontaneamente di trasmettere un tono chiamante fax e l'applicazione locale può rispondere di conseguenza modificando il tipo di supporto in fax e, se necessario, consegnando la chiamata a un'applicazione fax. Un altro modo in cui può funzionare è per un'applicazione di monitoraggio per abilitare il monitoraggio del tipo di supporto e, quando il tipo di supporto in cui è interessato viene rilevato in una chiamata, può richiedere la proprietà della chiamata. Questo meccanismo rende superfluo per ogni applicazione monitorare ogni chiamata per ogni tipo di supporto.
Comando di entità remota: L'entità remota può indicare in modo interattivo una modifica dei tipi di supporti durante una chiamata esistente, ad esempio se l'applicazione locale monitora l'input DTMF dal chiamante remoto. Tramite questo monitoraggio, il chiamante indica, ad esempio, che un fax sta per essere inviato. Altri modi in cui il chiamante può controllare le applicazioni locali sono con comandi ricevuti su altre connessioni dati e tramite messaggi di informazioni utente-utente ISDN.
Un call handoff avrà uno di questi risultati:
- La chiamata viene assegnata a un'altra applicazione (SUCCESS).
- L'applicazione di distribuzione è la destinazione (TARGETSELF).
- L'handoff ha esito negativo (TARGETNOTFOUND).
Se l'applicazione che riceve la chiamata passata ha già un handle di chiamata alla chiamata, viene usato questo handle di chiamata precedente. In caso contrario, viene creato un nuovo handle di chiamata. In entrambi i casi, l'applicazione termina con privilegi di proprietario per la chiamata. Ogni volta che l'applicazione di consegna non è uguale all'applicazione di destinazione, la destinazione viene informata del passaggio in un messaggio di stato della sessione come se ricevesse una nuova chiamata.
Se all'applicazione proprietaria corrente viene chiesto di modificare i tipi di supporti, lo fa passando la chiamata a un'applicazione usata per il tipo di supporto di destinazione. I due tipi di handoff di chiamata sono descritti in Handoff diretti e Handoff di tipo Media.
Non tutti i provider di servizi supportano l'uso di questa operazione.
TAPI 2.x: Vedere lineHandoff, con lpszFileName impostato sul nome dell'applicazione per un handoff diretto o dwMediaMode impostato su un tipo di supporto per un handoff indiretto.
TAPI 3.x: Vedere ITBasicCallControl::HandoffDirect, ITBasicCallControl::HandoffIndirect.
Un handoff diretto viene eseguito quando l'applicazione di destinazione è nota per nome all'applicazione originale. Questa situazione si verifica, ad esempio, tra un set di applicazioni scritte dallo stesso fornitore. L'utente può in genere configurare il controllo degli handoff diretti. Con tale handoff, la chiamata viene assegnata all'applicazione specificata se ha aperto la riga in cui è presente la chiamata. Il tipo di supporto specificato al momento in cui l'applicazione ha aperto la riga viene ignorata. Un esempio comune è una chiamata vocale seguita da una trasmissione fax nella stessa chiamata. L'handoff diretto verrebbe spesso usato dalle applicazioni dello stesso sviluppatore collegato in altri modi.
L'handoff diretto può essere usato anche nelle versioni future come parte del processo di arbitrazione di più applicazioni in attesa di chiamate in ingresso dello stesso tipo di supporto, con la selezione dell'applicazione per gestire la chiamata in base al rilevamento del collegamento dati o del protocollo di livello superiore anziché al tipo di supporto. Un esempio di utilizzo sarebbe una linea modem dati in ingresso con applicazioni quali acquisizione remota, bacheca, accesso alla rete remota e accesso remoto alla posta elettronica tutti in attesa di chiamate contemporaneamente.
Un handoff del tipo di supporto viene eseguito quando è presente un nuovo tipo di supporto di destinazione, in genere quando l'applicazione proprietaria determina che il tipo di supporto necessario per la chiamata non è presente o sta per cambiare.
Il processo per un handoff dipendente dai supporti può essere un processo di probe se il tipo di supporto UNKNOWN è attivato. È responsabilità dell'applicazione proprietaria scorrere i tipi di supporti per trovare l'applicazione con priorità più alta. TAPI esegue questo ciclo solo sulla chiamata iniziale in arrivo per trovare il primo proprietario. Non esegue questa operazione per un'operazione di handoff. In caso contrario, un handoff è praticamente uguale all'assegnazione iniziale di una chiamata a un'applicazione. La differenza è il fatto che è possibile impostare un solo tipo di supporto per un handoff indiretto (tipo di supporto).
Poiché è possibile specificare solo un singolo bit di tipo di supporto, la chiamata viene assegnata all'applicazione con priorità più alta per tale tipo di supporto. Tuttavia, è possibile che più di un tipo di supporto sia considerato per l'handoff. In questo caso, l'applicazione di distribuzione deve specificare la priorità più alta dei tipi di supporti possibili come parametro.
Se un'applicazione specifica il bit UNKNOWN durante l'esecuzione di un handoff di tipo multimediale e l'handoff ha esito negativo, significa che un'applicazione sconosciuta in grado di eseguire la determinazione del tipo di supporto non è attualmente in esecuzione. L'applicazione che sta consegnando deve quindi tentare di consegnare la chiamata all'applicazione con priorità più alta registrata per il tipo di supporto successivo superiore.
L'applicazione ricevente è ora responsabile della chiamata. Ora esegue il probe per il tipo di supporto effettivo della chiamata. Se l'applicazione può gestire il tipo di supporto della chiamata, deve assicurarsi che sia l'applicazione con priorità più alta registrata per quel tipo di supporto. In tal caso, mantiene la chiamata ed elabora normalmente. In caso contrario, passa il call off a un'altra applicazione registrata per quel tipo di supporto.
Se, tuttavia, il probe per quel tipo di supporto ha esito negativo, il probe dell'applicazione esegue nuovamente il probe, provando le altre possibilità in modalità multimediale. Deve prima disattivare il bit del tipo di supporto corrente, quindi provare un altro handoff con un tipo diverso.
Questo processo di esecuzione del probe e della consegna continua e i tipi di supporti rimanenti vengono eliminati uno per uno. Lungo la strada, una delle applicazioni può vedere che il tipo di supporto gestito è sulla chiamata e il passaggio di mano ha esito positivo.
L'applicazione deve quindi impostare il tipo di supporto corretto e cancellare tutti gli altri bit di tipo supporto. In questo modo vengono informati altre applicazioni interessate del tipo di supporto corretto. Queste altre applicazioni ricevono un messaggio di notifica degli eventi che informa che il tipo di supporto della chiamata è stato modificato.