Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Документация и статьи по Asterisk PBX Asterisk: новости


RTP-level packet bridging

А вот этого провайдеры ждали с большим нетерпением. Ранее при соединении двух RTP-потоков происходил разбор фрейма, формирование ast_frame, передача его в ядро астериска, и потом проделывалась обратная процедура. Для каждого фрейма. При том, что в большинстве случаев достаточно сменить в пакете timestamp'ы, и отправить другой стороне.

Отныне это делается правильно. Увеличение производительности от этого пока никто не тестировал, но оно должно быть существенным.

Теперь узким горлышком осталась только необходимость context switches на каждый пакет и отдельный тред на каждое соединение. В любом случае теперь практически все изменения связаные с улучшением производительности RTP можно производить исключительно в rtp.c, не затрагивая код реализации протоколов сигнализации (напоминаю что RTP используется совместно сл Skinny, SIP, H.323, MGCP, Jingle).

frame caching

Есть много участков кода, где Asterisk выделяет/освобождает ast_frame структуры на каждый приходящий фрейм (то есть, обычно, 50 раз в секунду на каждое соединение). Если вспомнить что memory allocation штука не столь простая и быстрая как хотелось бы, это вредная пустая трата времени.

Теперь создается кэш в локальной памяти треда, который используется вместо выделения/освобождения памяти на каждый фрейм.

В результате это существенно ускорило скорость выполнения функций ast_frame_header_new(), ast_frdup(), ast_frfree(), iax_frame_new(), iax_frame_free().

Немного чистки мусора

- Deprecate USERAGENT (рекомендуется использовать SIPCHANINFO(useragent)

- Mark ALERT_INFO as deprecated. This can now be done with the sipaddheader() application and does not need special code in chan_sip any more.

- опция autofallthrough теперь по-умолчанию включена, то есть если при обработке dialplan'а нет следующего priority, то выполняется Hangup.

AEL

Продолжается доработка AEL, теперь добавлена поддержка C-style комментариев. Несмотря на то, что написание диалплана на AEL невообразимо проще, чем с использованием plain old extensions.conf, пока я бы не рекомендовал этого делать. Оно конечно работает... иногда. А иногда не работает. Допинают его или нет до приемлимого состояния перед выходом 1.6 хороший вопрос. Если допинают, написание диалплана станет элементарным для любого хоть чуть-чуть знакомого со структурным программированием.

Новый загрузчик модулей и его API

- убрали функции key/description;

- весь код, который раньше был в корне дерева сборки перенесли в main/;

- у load_module/unload_module убрали void* параметр;

- добавили поддержку сборки Asterisk прямо с отдельными модулями, а также статическую сборку (без возможности подгрузки модулей) -- полезно для embedded;

- упростили cross-compilation (также с целью упрощения создания embedded решений);

- теперь модули могут вообще не экспортировать какие-либо символы;

- секция [globals] из modules.conf была удалена за ненадобностью;

В целом API стало с одной стороны проще и удобнее. В основном все это делалось для упрощения жизни сборщикам embedded решений, но и остальным стало легче жить -- появление AST_MODULE_LOAD_DECLINED жизнь мне, как сборщику Asterisk в дистрибутив, ой как упростило.

Возможность отказа от загрузки модулей

Добавили возможность модулю отказаться от загрузки (например при отсутствии конфигурационного файла) -- если ранее load_module возвращала 0/не 0, то теперь есть несколько вариантов, основные:

- AST_MODULE_LOAD_FAILURE -- ошибка при загрузке модуля

- AST_MODULE_LOAD_DECLINE -- модуль отказывается от загрузки (например не сконфигурирован)

- AST_MODULE_LOAD_SUCCESS -- загрузка модуля прошла успешно

- AST_MODULE_LOAD_SKIP -- цель использование этого значения мне непонятна

Variable DTMF length

До этого времени Asterisk, в отличии от всего остального мира, не знал что у DTMF кода есть длина. Это, в первую очередь, вызывала некоторые странные несовместимости с другими SIP-софтсвичами, приводящие к дублированию цифр. А также это делало невозможным его использование в системах, где длина DTMF-кода имеет значение (например в "домофонах", где замок держится открытым ровно до тех пор, пока удерживается клавиша).

Эта проблема полностью устранена. Осталось только доработать некоторые протоколы (Skinny, например) для полноценной реализации.

Теперь на каждую DTMF посылку вместо одного фрейма AST_FRAME_DTMF генерируется два -- AST_FRAME_DTMF_START/AST_FRAME/DTMF_END.

SeirosPBX Lite

Мы решили выпустить предварительную версию простого дистрибутива с Asterisk, на базе svn trunk версии.

В отличии от Asterisk@Home этот дистрибутив не содержит каких-либо средств конфигурации, и прочего неестественно интеллекта, который бы выбирал за пользователя какие-либо принципы работы.

Дистрибутив сделан как OEM-инсталлятор, то есть практически не задавая вопросов просто самостоятельно переразбивает диск, на который устанавливается, форматирует его и разворачивает образ с дистрибутивом, поэтому либо устанавливайте в VMWare, либо на чистую машину (для чего он, собственно, и предназначен).

Багрепорты можно отсылать на support@seiros.ru

Что должно работать "из коробки"

- RxFax/TxFax (с поддержкой T.38)

- Mwanalyze

- NVBackgroundDetect

- поддержка ODBC (по-умолчанию используется PostgreSQL, устанавливаемый в этом же дистрибутиве);

- отправка CDR в PostgreSQL базу;

Что пока не работает

- H.323

- SCCP -- увы, автор пока не обновил chan_sccp для совместимости с последним svn trunk, я частично проделал эту работу, но так как у меня сейчас нет ни одного телефона Cisco, доделать я не могу. Если есть желающие помочь -- буду очень рад.

Особенности

Дистрибутив сделан на базе ALT Linux, у разработчиков которого правильная параноя. В связи с чем:

- к ssh нельзя подключаться под пользователем root по-умолчанию;

- su работает только для пользователей, входящих в группу wheel по-умолчанию;

- для конфигурации сети используется система etcnet, вместо классической. Она очень простая, но гораздо более функциональная и описана на wiki.sisyphus.ru;


В избранное