Передача

Если приложение имеет привилегию владельца для сеанса связи, приложение может передать право владения другому приложению. Операция передачи обычно используется для изменения типа носителя вызова. Приложение с наивысшим приоритетом для нового типа мультимедиа должно принимать и обрабатывать вызов. Изменение типа носителя обычно происходит по одной из следующих причин.

Пользовательская команда: С помощью пользовательского интерфейса или оконных сообщений приложение узнает, что локальный пользователь хочет изменить тип мультимедиа. Например, пользователь сказал новому целевому приложению (которое еще не является владельцем) получить существующий голосовой вызов для передачи данных. Теперь целевое приложение должно взять на себя управление вызовом. В этом случае текущий владелец замечает увеличение числа владельцев, а затем отказается от управления вызовом. Кроме того, пользователь может указать текущему владельцу вызова передать его приложению, которое может обрабатывать новый тип мультимедиа.

Изменение типа носителя: Поставщик услуг может обнаружить изменение типа носителя. Например, локальное приложение воспроизводит записанное голосовое сообщение для вызывающего абонента. Во время этого сообщения вызывающий абонент самопроизвольно решает передать тон факса, и локальное приложение может соответствующим образом ответить, изменив тип носителя на факс и при необходимости передав звонок факсимильному приложению. Другой способ — включить мониторинг типов мультимедиа приложением мониторинга. При обнаружении в вызове интересующего его типа он может запрашивать владение вызовом. Этот механизм делает ненужным для каждого приложения мониторинг каждого вызова для каждого типа мультимедиа.

Команда удаленной стороны: Удаленная сторона может в интерактивном режиме указать изменение типов мультимедиа во время существующего вызова, например, если локальное приложение отслеживает вход DTMF удаленного вызывающего объекта. С помощью этого мониторинга вызывающий указывает, например, что факс будет отправлен. Другими способами, которыми вызывающий объект может управлять локальными приложениями, являются команды, полученные в других подключениях к данным, и через информационные сообщения пользователя и пользователя ISDN.

Передача звонка будет иметь один из следующих результатов:

  • Вызов выполняется другому приложению (SUCCESS).
  • Приложение передачи само по себе является целевым объектом (TARGETSELF).
  • Сбой передачи (TARGETNOTFOUND).

Если приложение, получающее переданный вызов, уже имеет дескриптор вызова, используется этот старый дескриптор вызова. В противном случае создается новый дескриптор вызова. В любом случае приложение будет иметь права владельца для вызова. Всякий раз, когда приложение передачи не совпадает с целевым приложением, целевому объекту сообщается о передаче в сообщении о состоянии сеанса, как если бы он получал новый вызов.

Если текущему приложению-владельцу будет предложено изменить типы носителей, это происходит путем передачи вызова приложению, используемому для целевого типа мультимедиа. Два типа передачи вызовов описаны в разделах Направленные передачи и Тип передачи мультимедиа.

Не все поставщики услуг поддерживают использование этой операции.

TAPI 2.x: См. раздел lineHandoff, где для параметра lpszFileName задано имя приложения для прямой передачи или dwMediaMode с одним типом мультимедиа для косвенной передачи.

TAPI 3.x: См . раздел ITBasicCallControl::HandoffDirect, ITBasicCallControl::HandoffIndirect.

Направленные передачи

Перенаправление выполняется, когда целевое приложение известно исходному приложению по имени. Такая ситуация может возникнуть, например, среди набора приложений, написанных одним и тем же поставщиком. Обычно пользователь может настроить управление направленными передачами. При такой передачи вызов выполняется указанному приложению, если оно открыло строку, в которой существует вызов. Тип носителя, указанный во время открытия строки приложением, игнорируется. Один из распространенных примеров — голосовой вызов, за которым следует передача факса в том же вызове. Перенаправление чаще всего используется приложениями того же разработчика, которые связаны другими способами.

В будущих версиях можно также использовать перенаправление в рамках процесса арбитража нескольких приложений, ожидающих входящих вызовов одного типа мультимедиа, при этом выбор приложения для обработки вызова основан на обнаружении канала данных или протокола более высокого уровня, а не типа носителя. Примером его использования может служить линия модема входящих данных с такими приложениями, как удаленный захват, доска объявлений, удаленный доступ к сети и удаленный доступ к электронной почте, все ожидающие вызовов одновременно.

Передача типов мультимедиа

Передача типа мультимедиа происходит при наличии нового целевого типа мультимедиа, обычно когда приложение-владельце определяет, что тип мультимедиа, необходимый для вызова, отсутствует или изменится.

Процесс передачи, зависящей от носителя, может быть процессом проверки, если включен бит неизвестного типа носителя. Ответственность за циклическое переключение между типами мультимедиа для поиска приложения с наивысшим приоритетом лежит на приложении-владельце. TAPI выполняет этот цикл только при первом входящем вызове, чтобы найти первого владельца. Это не делается для операции передачи. В противном случае передача практически аналогична первоначальному назначению вызова приложения. Разница заключается в том, что для косвенной передачи (типа носителя) можно задать только один тип мультимедиа.

Так как можно указать только один бит типа мультимедиа, вызов выполняется приложению с наивысшим приоритетом для этого типа мультимедиа. Однако для передачи может быть рассмотрено несколько типов носителей. В этом случае приложение передачи должно указать в качестве параметра наивысший приоритет из возможных типов носителей.

Если приложение указывает бит UNKNOWN при выполнении передачи типа носителя и передача завершается сбоем, это означает, что неизвестное приложение, способное выполнять определение типа носителя, в настоящее время не выполняется. Затем приложение, которое выполняет передачу, должно попытаться передать вызов приложению с наивысшим приоритетом, зарегистрированным для следующего типа мультимедиа.

Теперь принимающее приложение отвечает за вызов. Теперь он проверяет фактический тип носителя вызова. Если приложение может обрабатывать тип носителя вызова, оно должно убедиться, что оно является приложением с наивысшим приоритетом, зарегистрированным для этого типа мультимедиа. Если это так, он сохраняет вызов и обрабатывает его в обычном режиме. В противном случае вызов передается другому приложению, зарегистрированным для этого типа мультимедиа.

Однако если проба для этого типа мультимедиа завершается сбоем, приложение снова пробует, пытаясь использовать остальные возможности режима мультимедиа. Сначала необходимо отключить текущий бит типа мультимедиа, а затем попытаться выполнить еще одну передачу с другим типом.

Этот процесс зондирования и передачи продолжается, и остальные типы средств массовой информации устраняются один за одним. Попутно одно из приложений может увидеть, что тип носителя, который он обрабатывает, находится в вызове, и передача выполняется успешно.

Затем приложение должно задать правильный тип носителя и очистить все остальные биты типа мультимедиа. Это сообщает другим заинтересованным приложениям о правильном типе мультимедиа. Эти другие приложения получают уведомление о событии, в котором говорится, что тип носителя звонка изменился.