Обзор поставщика услуг TAPI

Приложения TAPI находятся в собственном пространстве процессов. Приложения TAPI загружают Tapi32.dll или Tapi3.dll в процесс, а TAPI взаимодействует с TAPISRV через частный интерфейс RPC. TSP выполняется в контексте TAPISRV. Указанный поставщик облачных служб может находиться на компьютере, отличном от компьютера пользователя, и к ней осуществляется доступ с помощью удаленного поставщика служб. TAPISRV реализуется как процесс службы в SVCHOST. MSP находится в пространстве процесса приложения и всегда является локальным.

Пару TSP/MSP можно рассматривать как виртуальную частную связь. Сведения можно отправлять между двумя с помощью непрозрачных буферов, которые не интерпретируются либо TAPISRV, либо библиотекой DLL TAPI.

Некоторые поставщики услуг реализуют операции, относящиеся к оборудованию. TAPI 2.x предоставляет доступ к таким операциям через функцию lineDevSpecific или phoneDevSpecific . TAPI 3.x предоставляет интерфейсы, относящиеся к поставщику.

На следующей схеме показан поток элементов управления и информации, показывающий одну автономную пару TSP (Unimodem) и одну пару TSP/MSP (H.323).

stand-alone tsp and paired tsp/msp flow of control and information

На следующей схеме показан ход выполнения входящего вызова, включающего как TSP, так и MSP.

incoming call with a tsp and an msp

Настройка входящих вызовов

  • TSP отправляет сообщение LINE_NEWCALL в TAPISRV. Состояние вызова — LINECALLSTATE_OFFERING.
  • TAPISRV уведомляет клиентов о вызове.
  • TAPI3 создает объект вызова TAPI, а затем вызывает ITMSPAddress::CreateMSPCall, который реализуется MSP.
  • MSP создает объект вызова MSP и потоки по умолчанию на основе типов носителей , необходимых для вызова. Он возвращает указатель IUnknown на объект вызова MSP.
  • TAPI3 объединяет объект вызова MSP в объект вызова TAPI, делая интерфейсы, такие как ITStreamControl , доступными для приложения. Затем он уведомляет приложение нового вызова.

Затем приложение может использовать такие методы, как ITStream::SelectTerminal для завершения подготовки к завершению вызова.

Завершение входящих вызовов

  • Приложение вызывает ITBasicCallControl::Answer.
  • TAPI3 вызывает lineAnswer.
  • ВЫЗОВы TAPISERV TSPI_lineAnswer.
  • TSP инициирует потоковую передачу вызовов. Как правило, TSP отправляет сообщение соответствующему MSP, а MSP запускает потоки. В некоторых реализациях TSP/MSP поставщик служб TSP запускает потоки.

TSP/MSP-обмен данными во время выполнения вызова

После выполнения вызова TSP и MSP обмениваются данными, передавая непрозрачные буферы через TAPISRV и TAPI3.

  • TSP отправляет сведения в MSP, отправляя сообщение LINE_SENDMSPDATA в TAPISRV.
  • MSP получает сведения от TSP через метод ITMSPAddress::ReceiveTSPData . Если данные связаны с объектом вызова MSP, в качестве параметра этого метода предоставляется указатель интерфейса на объект вызова MSP.
  • MSP отправляет сведения в TSP, отправляя событие MSP_TSP_DATA в TAPI 3.
  • TSP получает сведения от MSP через функцию TSPI_lineReceiveMSPData .

Точный процесс и содержимое обмена данными между поставщиками услуг зависит от заданного набора TSP/MSP.

Примечание

Для исходящих вызовов MSP обычно знает о вызове до TSP. Если MSP пытается связаться с поставщиком услуг, прежде чем TSP будет проинформирован о вызове, обмен данными завершится ошибкой. Когда MSP и TSP должны обмениваться информацией о конкретном вызове, TSP должен инициировать обмен данными.