Поделиться через


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

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

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

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

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

автономный tsp и связанный поток управления и сведений tsp/msp

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

входящий вызов с tsp и msp

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

  • Поставщик служб TSP отправляет LINE_NEWCALL сообщение в TAPISRV. Состояние вызова — LINECALLSTATE_OFFERING.
  • TAPISRV уведомляет клиентов о вызове.
  • TAPI3 создает объект TAPI Call, а затем вызывает 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 и 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 попытается связаться с поставщиком служб до того, как поставщику служб будет сообщено о вызове, связь завершится ошибкой. Когда MSP и TSP должны обмениваться информацией о конкретном вызове, поставщик служб должен инициировать обмен данными.