Обзор поставщика служб 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, так и 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 должны обмениваться информацией о конкретном вызове, поставщик служб должен инициировать обмен данными.