Это самое-самое начало. Первая глава моей серии статей, посвященной
такой на первый взгляд специфической теме, как телефония. Точнее
программированию под Win32 с использованием TAPI (Telephony Application
Programming Interface). Я, конечно, постараюсь соблюдать некоторую
последовательность в изложении материала, но не отвечаю за неё, ибо
мышление моё несколько анархично, идеи приходят совершенно спонтанно
(влияние дZen). Сейчас у меня в голове нет никакого плана относительно
статьи, я знаю только тему. Возможные листинги будут приводиться,
скорее всего, на MASM32, может ещё на С++, посмотрим…. В необходимости
написания подобного труда я часто убеждаюсь, встречая вопросы на
«телефонную» тему в различных рассылках и на форумах. Обычно они звучат
так: «Как связать два компьютера через телефонные линии в обход
Интернета?» Естественно речь идет о программном уровне. Так вот у меня
ни разу не получилось ответить на этот вопрос кратко, ибо сама тема не
предполагает этого. Приходится вкратце описывать саму технологию, а
затем посылать за детализацией к источникам типа MSDN; в общем,
указывать, куда копать. А по собственному опыту я знаю, что найти в
Сети толковые ресурсы на эту тему очень даже непросто. К примеру, я не
обнаружил НИ ОДНОЙ полезной статьи по TAPI в Рунете. Хотя буржуйские
сайты порадовали чуть больше... Эта работа – смесь альтруизма и
авторского эго, попытка своими скромными силами восполнить
информационный пробел. Короче.… Читай, и я покажу тебе, насколько
глубока кроличья нора :)
Самое начало, или Обзор.
Так вот, TAPI включает в себя средства, позволяющие приложению под
Windows более или менее безгеморройно взаимодействовать с телефонными
линиями (а том числе ISDN). Этим сфера влияния TAPI не ограничивается,
и есть ещё много-много вещей, таких как IP телефония и H.323 протокол,
поддержку которых в своей проге было бы непросто реализовать без помощи
Telephony API. О них речь пойдёт немного позже. Сначала рассмотрим
некоторые особенности TAPI, и, возможно, некоторые компоненты TAPI,
такие как TSPI, MSPI и сервер TAPI.
Существуют несколько различных версий TAPI. Например, TAPI 1.3
создавалась для 16-битных систем. Версия 1.4 была 32-битной и
создавалась для Windows 95. Версии 2.х уже более продвинуты, но всё ещё
базируются на TAPI/C, ну а в 3.х версиях возможности вообще огромные,
да и основываются они на TAPI/COM. Существует даже специальная версия
для Windows CE (TAPI 1.5). Подробная инфа о различиях версий, конечно
же, есть в MSDN, другое дело, что не у всех есть сама MSDN. Поэтому я
буду кое-где приводить информацию из MSDN, не указывая этого. Древние
версии мы использовать не будем, но и последние пока трогать не станем,
так как TAPI 3.0 требует наличия Windows 2000 или более поздней, а TAPI
3.1 требует Windows Server 2003 или Windows XP. Об этих версиях я
расскажу позже.… А сейчас, как я и обещал, обзор.
Прелесть TAPI состоит в том, что кодеру, при написании программы, вовсе
не обязательно вдаваться во все тонкости взаимоотношений между
различными коммуникационными девайсами, делать оптимизации под
различные модемы и типы АТС. Для того чтобы «поиметь» :) доступ к TAPI
приложение загружает TAPI DLL. TAPI DLL в свою очередь тесно
взаимодействует с сервером TAPI (TAPISRV). При совершении какой-либо
операции TAPI, TAPI DLL подтверждает её и пересылает TAPISRV. Сервер
TAPI определяет доступные коммуникационные ресурсы и обращается к TSP
(Telephony Service Providers) через специальный интерфейс - Telephony
Service Provider Interface (TSPI). А уже TSP более тонко работает с
девайсами и обеспечивает управление ими. Таким образом, конечный
пользователь TAPI лишь самым косвенным образом касается низкоуровневого
взаимодействия с устройствами, ибо система сама всё за него делает.
Программист, использующий TAPI, должен обладать лишь основными знаниями
в области телефонии (например, знаниями различий в форматах адресации,
типов девайсов [линии, терминалы, каналы и т.п.]).
Вот такую вот симпатичную схемку я обнаружил в одной Мелкомягкой доке
по теме… да оттуда и выдрал с особой наглостью. Здесь более или менее
наглядно изображено то, что, в сущности, составляет TAPI, да ещё и
схема TAPI 3.0 добавлена. Только очень уж обобщённо, ну да не беда.
Каждая функция TAPI относится к какому-либо уровню. Уровень функции
показывает, насколько тесно приложение, вызывающе функцию
взаимодействует с TAPI. Всего существует четыре уровня обслуживания.
Первый - основной уровень (Basic Telephony). Здесь находятся базовые
TAPI-функции, позволяющие инициализировать TAPI, определить версию
оного, установить связь и сделать ещё много-много чего, о чем я и
собираюсь в дальнейшем вести повествование. Функции этого уровня
работают с POTS линиями [POTS (Plain Old Telephone Service) – базовый
телефонный сервис, основанный на стандартных одноканальных
(single-line) телефонах и телефонных линиях – прим. авт.].
Следующий уровень – вспомогательный (Supplementary Telephony). Он
включает в себя основной уровень и вдобавок содержит множество функций
для поддержки современных коммуникационных технологий, таких как PBX
(это типа такая частная телефонная сеть, которая функционирует, не
затрагивая глобальной телефонной сети, хотя и имеет доступ к ней –
прим. авт.), передачи, паркинг, конференции и т.д. и.т.п.
Далее идёт расширенный уровень (Extended Telephony). Он, понятно,
включает в себя вспомогательный уровень. Но также позволяет расширить
возможности программы за счет более тесного взаимодействия с SP
(Service Provider). То есть в ход идут уже расширения, характерные для
определённого девайса, используется более тонкая настройка.
Для тех, кому на фиг не нужны все навороты TAPI, существуют ещё
несколько функций, относящихся к Assisted Telephony. Это несколько
функций для установки голосовой связи. Они лишь косвенно относятся к
сути TAPI, поэтому я их рассматривать не буду. К тому же я не разу не
видел, чтобы какое-либо приложение, работающее с TAPI, использовало эти
функции. Ими в основном пользуются программы, интеграция которых в
телефонные сети ОЧЕНЬ ограничена. Использование TAPI, как такового
инкапсулировано и сведено к нулю.