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