D-Modem – программный модем для передачи данных поверх VoIP

Опубликованы исходные тексты проекта D-Modem, реализующего программный модем для организации передачи данных поверх VoIP-сетей на базе протокола SIP. D-Modem даёт возможность создать канал связи поверх VoIP по аналогии с тем, как традиционные dialup-модемы позволяли передавать данные поверх телефонных сетей. В качестве областей применения проекта можно отметить подключение к существующим dialup-сетям без использования на втором конце телефонной сети, организацию скрытых каналов связи и проведение тестирования безопасности систем, доступных только через dialup. Код проекта написан на языке Си и распространяется под лицензией GPLv2.

Поддержка протокола SIP реализована при помощи коммуникационной библиотеки PJSIP, а для обеспечения работы функциональности модема использован компоненты драйвера slmodem, изначально поставляемого для софт-модемов Smart Link. В отличие от традиционных модемов, у которых для обработки сигнала используется DSP, а модуляция производится микроконтроллером, в софт-модемах присутствует только DSP, а все остальные функции реализуются программно на стороне драйвера.

Проект D-Modem предлагает полностью программный модем, в котором и функциональность DSP реализована программно. Применяемые в софт-модемах аппаратные компоненты заменены на SIP-стек и вместо использования DSP для передачи звука через аналоговые линии связи в D-Modem звук передаётся поверх мультимедийных потоков, таких как RTP или SRTP, используемых в процессе голосовых вызовов VoIP.

Механизмы обработки сигналов и поддержки AT-команд, а также реализации протоколов V.32bis (14.4kbps) и V.34 (33.6kbps), заимствованы из готового драйвера ядра slmodemd, который был дополнен и урезан с учётом специфики проекта. Драйвер был переделан для обособленного запуска в форме приложения, а в виде модуля ядра. Для взаимодействия с внешними приложениями реализована возможность обмена данными через сетевые сокеты. Для управления slmodemd подготовлена надстройка d-modem, которая предоставляет конечный интерфейс и включает средства управления звуковыми потоками и голосовыми вызовами на базе протокола SIP.

В процессе работы создаётся устройство /dev/ttySL*, через которое можно взаимодействовать с модемом, отправлять AT-команды и обмениваться данными, аналогично тому, как осуществляется работа с обычным модемом (например, можно использовать pppd для создания IP-канала). Привязка к учётной записи SIP осуществляется при помощи переменной окружения SIP_LOGIN. Проект в том числе может применяться для подключения к существующим dialup-сетям, в условиях когда отсутствует классический модем (SIP-вызов может перенаправляться в обычную телефонную сеть).

Release. Ссылка here.