Структура ПО

advertisement
Голосовая почта.
Структура программного обеспечения.
Версия ПО VMS_v0.8, редакция документа от 2011_09_05
Оглавление
Состав программного обеспечения. ................................................................................................. 1
Структура проектов. ......................................................................................................................... 2
Структура каталога установки. ........................................................................................................ 2
Алгоритмика работы сервиса............................................................................................................ 3
История версий, изменения сделанные в ПО. ................................................................................. 3
Состав программного обеспечения.
Программное обеспечение «Голосовая почта» состоит из 3 проектов:
1. Библиотека SIP-протокола. Интеграция SDL-системы, в операционной системе
представлена как библиотека vms.dll.
2. Сервер голосовой почты. Предоставление библиотеки SDL-системы ресурсов
ОС: файлового ввода/вывода, сетевого ввода/вывода, поддержки множества
потоков, настроек работы системы. В ОС представлен как исполняемый файл
vms.exe.
3. Модуль администрирования, интерфейсная часть ПО предназначенная для
управления реестром почтовых ящиков и параметризации работы системы. В
ОС представлен как исполняемый файл vmsform.exe.
1
Структура проектов.
1. vms. Проект интеграции SDL-системы с реализацией SIP-протокола и логикой
работы сервера. При компиляции проект создаёт DLL-файл для использования
сторонней программой. Структура проекта:
include\ - подключаемые файлы заголовков
src\ - файлы с исходными текстами библиотеки, в том числе генерированными
tauSDL.
sdl\ - исходные схемы SDL-системы.
lib\ - используемые библиотеки.
2. vms.server. Проект сервера «Голосовая почта», при компиляции проект создаёт
исполняемый файл. Структура проекта:
src\ - файлы с исходными текстами C++, реализующие логику сервиса.
etc\ - вспомогательные файлы тестирования сервиса.
3. formvms. Проект модуля администрирования сервера «Голосовая почта» при
компиляции проект создаёт исполняемый файл. Структура проекта:
gui\ - файлы с исходными текстами C++, реализующие интерфейс
администратора.
install\ - папка содержащая развернутое ПО, из этой папке создаётся
инсталляционный проект.
При компиляции проектов используется компилятор gcc4.5 совместно со средой
исполнения MinGW. Проекты настроены для среды Eclipse Indigo (CDTv7). В проектах
использованы функции из Win32 API, ANSI С, С++ 0x.
Структура каталога установки.
После установки ПО на компьютер в папке инсталляции создастся следующая
структура файлов:
vms.exe - сервер «Голосовая почта», основная программа системы,
vmsform.exe – модуль администрирования,
vms.bat – сркипт запуска системы, на него будет ссылаться ярлык с рабочего стола,
vms.dll – библиотека SIP-протокола,
settings.xml – файл настроек системы,
abonents/ - каталог хранения реестра почтовых ящиков абонентов,
docs/ - каталог хранения документации и файлов помощи,
Папка содежит файлы:
history.txt – история изменений и версий ПО.
"Рук-во по администрированию" - описание работы с ПО.
"Структура ПО" - структура проектов программного обеспечения, этот файл.
logs/ - каталог хранения журналов работы системы,
wavs/ - каталог хранения системных звуковых сообщений,
Алгоритмика работы сервиса.
Структуру ПО можно представить так.
vms.dll
VMS.exe
vmsform.exe
Файлы ОС:
Хранения параметров и
Почтовые ящики абонентов
ОС Windows
По запуску приложения с ярлыка в первую очередь запускается модуль
администрирования.
Он читает файл параметров settings.xml, отображает базу голосовых ящиков абонентов.
По кнопке "Запустить" запускается сервер голосовых сообщений vms.exe.
Сервер по запуску:
- инициализирует внутренние поля из файла settings.xml.
- запускает поток обслуживания SIP-соединения, поток создаёт сокеты
на чтение и запись и блокируется в ожидании входящего UDP-пакета.
- запускает поток обслуживания SDL-сигналов с библиотекой SDL. Поток создаёт
объекты-обработчики SDL-сигналов, запускает SDL-систему, инициализирует её
и блокируется в ожидании SDL-сигналов.
- запускает пул потоков обслуживания соединений на макс. кол-во одновременных
соединений. Потоки соединений создают сокеты на чтение и запись RTP-пакетов
и блокируется в ожидании команды соединения.
Все действия логируются в журнале работы, в соответствии с выставленным уровнем
детализации лога.
По приходу SIP-сообщения: поток обслуживания SIP-соединения принимает его из
сокета, формирует и отправляет сообщение в SDL систему.
По приходу SDL-сообщения: поток обслуживания SDL-сигналов принимает его из
объекта-сигнала SDL и определяет его тип:
 Если это UDPDR_long - отправляет его в выходной SIP-сокет,
 Если это Invite, Release - отправляет его в соответствующий поток пула соединений,
 Если это Err - логирует данные сигнала,
 Если это Err - логирует данные сигнала,
 Если это wr_Receiver_Table, wr_Sender_Table - анализирует поля сигналов,
запоминает значение портов RTP и IP-адрес источника сигнала.
Поток из пула потоков-соединений:
 По приходу Release – отбой соединения. Закончить слушать RTP-соединение.
 По приходу Invite — начать соединение:
Определить тип запроса и запустить соответствующий сценарий.
При отработки любого сценария, в случае прихода сигнала Release - прервать
сценарий и закрыть соединение.
При возникновении исключительной ситуации в потоке, соединение закрывается.
Сценарий "Запись":
 открыть сокет для трансляции RTP-пакетов, в соответствии с полями
wr_Receiver_Table, проиграть приглашение к записи - voiceBeforeRecord.wav,
 открыть запись входящих RTP-пакетов по указанному в wr_Sender_Table порту,
 Запустить таймер макс допустимого времени записи.
 По срабатыванию таймера - прервать запись, вернуть сигнал Release.
 По приходу Release — прервать запись, вернуть Release.
Сценарий "Воспроизвести":
 открыть сокет для трансляции RTP-пакетов, в соответствии с полями
wr_Receiver_Table
 открыть след. сообщение, проиграть его, пометить как прочтённое,
 если сообщение не последнее, проиграть voiceBeforePlay.wav и повторить пред
пункт.
 иначе проиграть финальное сообщение — voiceEmpty.wav и закрыть соединение.
Сценарий "Удалить прочтённые":
 проиграть приглашение к удалению — voiceBeforeDelete.wav,
 удалить все прочтённые сообщения.
Сценарий "Удалить все":
 проиграть приглашение к удалению -voiceBeforeClear.wav,
 удалить все сообщения
Особенности реализации.
Журналирование работы.
В ПО используется журналирование работы, в файле параметров присутствует
настраиваемый уровень вывода журнала - лога работы. В отладочных/тестовых целях
уровень можно понизить, тем самым увеличить состав и число сообщений в журнал, но и
тем самым ухудшить real-time-вые характеристики программы, и наоборот при повышении
значения уровня, все сообщения которые имеют более низкий приоритет - не выводятся в
файл журнала — что улучшает real-time-вые характеристики программы.
Генерация RTP-трафика.
При открытом соединении в сеть от VMS поступают звуковые RTP-пакеты, согласно
ТЗ они должны иметь среднее время выхода между пакетами 60мс. Средства windows не
позволяют настроить точность таймера менее 1 мс, и не проводят балансировки среднего
времени таймера. Таким образом периодический таймер в 60 мс даёт среднее время выхода
60.2-60.5 мс, а периодический таймер в 59мс даёт среднее время в 59.4-59.7 мс. Такая
особенность ОС приводит к опустошению буфера брикета и возникновению пауз при
воспроизведение звука т.е. страдает качество звука, что и наблюдалось при реальном
использовании программы.
Для решения этой проблемы был реализован механизм балансировки таймера
выравнивающий среднее время в 60 мс за последние 8 тактов таймера. Суть механизма в
следующем: измеряется фактическое время от предыдущей RTP-посылки, заносится в
кольцевой буфер из 8 элементов, рассчитывается среднее время по буферу, если время более
60мс, таймер взводится на 59 мс, если более то на 60 мс. При таком подходе среднее время
удалось выровнять до значений 60.002 мс
Дополнительно для решения этой задачи были повышены приоритеты потоков
сервера VMS до максимального REALTIME = 24.
Особенности Win7
В ОС Windows 7 были обнаружены следующие особенности. При установке ПО в
папку Program Files, все создаваемые и изменяемые пользовательские файлы располагаются
не в месте назначения (такие файлы как журнал работы, ящики абонентов), а в домашней
папке пользователя, на работе ПО VMS это не сказывается никак, но если администратор
захочет просмотреть/исправить эти файлы сторонними программами, то искать их следует в
своей домашней папке, а не в папке установки ПО. Если ПО VMS устанавливается на иной
— не системный логический раздел, подобных особенностей не обнаруживается.
История версий, изменения сделанные в ПО.
История изменений и версий хранится в файле history.txt
Download