LINUX.ORG.RU

Протокол Asterisk Management Interface (AMI) — ASCII или UTF-8?

 ,


0

2

Для второй версии AMI (AMIv2), который в Asterisk 12, явно указано, что «AMI is an ASCII protocol».

Стало быть, это значит, что AMI можно и нужно обрабатывать, как ASCII?

Для первой версии AMI (во всяком случае, для AMI 1.1) никаких конкретных указаний, что это именно ASCII, не нашел.

Почему я спрашиваю? Дело в том, что уже больше года мой демон интерпретирует AMI как строки в UTF-8, и пока проблем нет.

Более того, в полных логах AMI было выяснено, что там действительно пересылаются в некоторых полях не-ASCII символы, например

AppData: SMS_MOD=Я пытался(лась) Вам дозвониться

Я не уверен, правильное ли это поведение и использование AMI?

Может, действительно надо воспринимать строки в AMI как ASCII-строки, а уже отдельные поля (в случае необходимости) интерпретировать как UTF-8 строки?

При переходе с UTF-8 на ASCII значительно упадет нагрузка клиента AMI, которому приходится перемалывать много данных.

UPD: речь идет о самописном клиенте AMI на плюсах.

★★★★★

Последнее исправление: Chaser_Andrey (всего исправлений: 3)

UTF-8 обратно совместим с ASCII если не резать старший бит. Если не нужна проверка в клиенте на корректность представления code point'ов и не нужно делать операции вроде перевода из upper в lower и case insensitive сравнений, то можно всё обрабатывать в ASCII.

mashina ★★★★★
()

При переходе с UTF-8 на ASCII значительно упадет нагрузка клиента AMI, которому приходится перемалывать много данных.

Что ты там такое гоняешь интересное?

kernelpanic ★★★★★
()
Ответ на: комментарий от kernelpanic

Статистику не вёл (хотя хорошая идея).

Сам AMI-клиент находится в отдельном потоке. Профилирование показало, что одни из часто используемых и суммарно весьма тяжелых операций — это конвертирование потока байтов в UTF-8 и обратно.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от kernelpanic

А, ты в таком смысле...

В общем, есть демон, где AMI — только часть.

1. Он служит связью между Asterisk и браузерами тех.поддержки. Таким образом в служебке привязываются записи разговоров к отдельным записям в служебке. А ещё автооткрытие новой записи в служебке при поднятии SIP. Ещё саппорты могут себя ставить на паузу с указанием разных причин, смотреть статус других саппортов (free, ringing, in use, pause), ну и количество залогиненых саппортов. Колл-центр небольшой. Связь с браузером через WebSockets.

2. Автопрозвон с кучей настроек, отправка смс, выполнение USSD.

3. Мониторинг состояния донглов и текущих звонков в браузере (в реальном времени, вновь через WebSocket).

4. Мониторинг очередей, чтобы саппорты видели, есть ли сейчас ожидающие на линии (как раз в процессе доработки).

5. Периодические проверки баланса и количества смс, ну и состояние каналов, потом данные отдаются через HTTP по запросу Nagios.

Функциональность продолжает наращиваться.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от kernelpanic

И то, и другое.

По эвентам я узнаю о смс, звонках, статусах каналов.

Через запросы я вручную запрашиваю расширенную инфу, выполняю автопрозвон и прочее. Короче, и то, и то нужно.

А вырубить отдельные эвенты без патчей Asterisk я не нашел как.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от Chaser_Andrey
;eventfilter=Event: Newchannel
;eventfilter=!Channel: DAHDI*
; The eventfilter option is used to whitelist or blacklist events per user to be
; reported with regular expressions and are allowed if both the regex matches
; and the user has read access set below. Filters are assumed to be for whitelisting
; unless preceeded by an exclamation point, which marks it as being black.
; Evaluation of the filters is as follows:
; - If no filters are configured all events are reported as normal.
; - If there are white filters only: implied black all filter processed first,
; then white filters.
; - If there are black filters only: implied white all filter processed first,
; then black filters.
; - If there are both white and black filters: implied black all filter processed
; first, then white filters, and lastly black filters.

Еще есть Action: Filter (это с 11 версии появилось) - очень удобно для динамической фильтрации.

kernelpanic ★★★★★
()
Ответ на: комментарий от kernelpanic

Интересно, спасибо. Передам админу астериска.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от mashina

Спасибо. Попробую перевести на ASCII, посмотрю, как оно себя поведет.

Chaser_Andrey ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.