Entregas
Quando um aplicativo tem privilégio de proprietário para uma sessão de comunicação, o aplicativo pode optar por entregar a propriedade a outro aplicativo. A operação de entrega normalmente é usada para permitir que o tipo de mídia da chamada seja alterado. O aplicativo de prioridade mais alta para o novo tipo de mídia deve receber e lidar com a chamada. A alteração do tipo de mídia geralmente ocorre por um dos motivos a seguir.
Comando do usuário: Por meio de uma interface do usuário ou por meio de mensagens de janela, o aplicativo aprende que o usuário local deseja alterar o tipo de mídia. Por exemplo, o usuário disse ao novo aplicativo de destino (que ainda não é um proprietário) para obter uma chamada de voz existente para transmitir dados. O aplicativo de destino agora deve assumir o controle da chamada. Nesse caso, o proprietário atual percebe que o número de proprietários aumenta e, em seguida, renuncia ao controle da chamada. Como alternativa, o usuário pode instruir o proprietário atual da chamada a entregá-la a um aplicativo que possa lidar com o novo tipo de mídia.
Alteração de tipo de mídia: O provedor de serviços pode detectar uma alteração de tipo de mídia. Por exemplo, o aplicativo local está reproduzindo uma mensagem de voz gravada para o chamador. Durante essa mensagem, o chamador decide transmitir espontaneamente um tom de chamada de fax, e o aplicativo local pode responder adequadamente alterando o tipo de mídia para fax e, se necessário, entregando a chamada para um aplicativo de fax. Outra maneira de isso funcionar é que um aplicativo de monitoramento habilite o monitoramento de tipo de mídia e, quando o tipo de mídia no qual ele está interessado for detectado em uma chamada, ele poderá solicitar a propriedade da chamada. Esse mecanismo torna desnecessário que cada aplicativo monitore cada chamada para cada tipo de mídia.
Comando remote party: A parte remota pode indicar interativamente uma alteração nos tipos de mídia durante uma chamada existente, como se o aplicativo local estivesse monitorando a entrada DTMF pelo chamador remoto. Por meio desse monitoramento, o chamador indica, por exemplo, que um fax está prestes a ser enviado. Outras maneiras pelas quais o chamador pode controlar aplicativos locais são com comandos recebidos em outras conexões de dados e por meio de mensagens de informações de usuário do ISDN.
Uma entrega de chamada terá um destes resultados:
- A chamada é dada a outro aplicativo (SUCCESS).
- O aplicativo de entrega é o próprio destino (TARGETSELF).
- A entrega falha (TARGETNOTFOUND).
Se o aplicativo que está recebendo a chamada entregue já tiver um identificador de chamada para a chamada, esse identificador de chamada antigo será usado. Caso contrário, um novo identificador de chamada será criado. Em ambos os casos, o aplicativo acaba com privilégios de proprietário para a chamada. Sempre que o aplicativo de entrega não é o mesmo que o aplicativo de destino, o destino é informado sobre a entrega em uma mensagem de estado de sessão como se estivesse recebendo uma nova chamada.
Se o aplicativo proprietário atual for orientado a alterar os tipos de mídia, ele o fará entregando a chamada para um aplicativo usado para o tipo de mídia de destino. Os dois tipos de entregas de chamada são descritos em Entregas Direcionadas e Entregas do tipo Mídia.
Nem todos os provedores de serviços dão suporte ao uso dessa operação.
TAPI 2.x: Consulte lineHandoff, com lpszFileName definido como o nome do aplicativo para uma entrega direta ou dwMediaMode definido como um tipo de mídia para uma entrega indireta.
TAPI 3.x: Consulte ITBasicCallControl::HandoffDirect, ITBasicCallControl::HandoffIndirect.
Entregas Direcionadas
Uma entrega direcionada ocorre quando o aplicativo de destino é conhecido pelo nome do aplicativo original. Essa situação ocorreria, por exemplo, entre um conjunto de aplicativos escritos pelo mesmo fornecedor. O usuário geralmente pode configurar o controle de entregas direcionadas. Com essa entrega, a chamada será dada ao aplicativo especificado se ele tiver aberto a linha na qual a chamada existe. O tipo de mídia especificado no momento em que o aplicativo abriu a linha é ignorado. Um exemplo comum é uma chamada de voz seguida por uma transmissão de fax na mesma chamada. A entrega direcionada geralmente seria usada por aplicativos do mesmo desenvolvedor que também estão vinculados de outras maneiras.
A entrega direcionada também pode ser usada em versões futuras como parte do processo de arbitração de vários aplicativos aguardando chamadas de entrada do mesmo tipo de mídia, com a seleção do aplicativo para lidar com a chamada com base na detecção de protocolo de nível superior ou link de dados em vez do tipo de mídia. Um exemplo de seu uso seria uma linha de modem de dados de entrada com aplicativos como controle remoto, quadro de avisos, acesso remoto à rede e acesso remoto a emails, todos aguardando chamadas simultaneamente.
Entregas de tipo de mídia
Uma entrega de tipo de mídia ocorre quando há um novo tipo de mídia direcionado, geralmente quando o aplicativo proprietário determina que o tipo de mídia necessário para a chamada não está presente ou está prestes a ser alterado.
O processo para uma entrega dependente de mídia pode ser um processo de investigação se o tipo de mídia UNKNOWN bit estiver ativado. É responsabilidade do aplicativo proprietário percorrer os tipos de mídia para encontrar o aplicativo de prioridade mais alta. O TAPI faz isso apenas na chamada inicial de entrada para localizar o primeiro proprietário. Ele não faz isso para uma operação de entrega. Caso contrário, uma entrega é praticamente a mesma da atribuição inicial de uma chamada a um aplicativo. A diferença é o fato de que apenas um tipo de mídia pode ser definido para uma entrega indireta (tipo de mídia).
Como apenas um bit de tipo de mídia pode ser especificado, a chamada é dada ao aplicativo de prioridade mais alta para esse tipo de mídia. No entanto, é possível que mais de um tipo de mídia seja considerado para a entrega. Nesse caso, o aplicativo de entrega deve especificar a prioridade mais alta dos tipos de mídia possíveis como um parâmetro.
Se um aplicativo especificar o bit UNKNOWN ao executar uma entrega de tipo de mídia e a entrega falhar, isso significa que um aplicativo desconhecido capaz de executar determinação de tipo de mídia não está em execução no momento. O aplicativo que está sendo entregue deve tentar entregar a chamada para o aplicativo de prioridade mais alta registrado para o tipo de mídia mais alto.
O aplicativo de recebimento agora é responsável pela chamada. Agora ele investiga o tipo de mídia real da chamada. Se o aplicativo puder lidar com o tipo de mídia da chamada, ele deverá garantir que ele seja o aplicativo de prioridade mais alta registrado para esse tipo de mídia. Nesse caso, ele mantém a chamada e a processa normalmente. Caso contrário, ele entrega a chamada para outro aplicativo registrado para esse tipo de mídia.
Se, no entanto, a investigação desse tipo de mídia falhar, o aplicativo investigará novamente, tentando as possibilidades restantes do modo de mídia. Primeiro, ele deve desativar o bit do tipo de mídia atual e tentar outra entrega com um tipo diferente.
Esse processo de investigação e entrega continua e os tipos de mídia restantes são eliminados um por um. Ao longo do caminho, um dos aplicativos pode ver que o tipo de mídia que ele manipula está na chamada e a entrega é bem-sucedida.
Em seguida, o aplicativo deve definir o tipo de mídia correto e limpar todos os outros bits do tipo mídia. Isso informa outros aplicativos interessados sobre o tipo de mídia correto. Esses outros aplicativos recebem uma mensagem de notificação de evento informando que o tipo de mídia da chamada foi alterado.