HD Видеоконференции на OpenMCU



23.01.2015. Выпущен релиз OpenMCU-ru 4.0. Исправлены ошибки, проведена оптимизация, добавлен встроенный регистратор, появилась возможность совершать внутренние вызовы между терминалами, реализовано шифрование SIP (TLS, SRTP, ZRTP), новые кодеки G.722.1, G.722.1 Annex C, G.722 (AMR-WB), MPEG4 (MP4V-ES), NAT для SIP и многое другое.

Автор Тема: Linphone. SIP text messages error. Текстовые сообщения ошибка.  (Прочитано 2494 раз)

Vimpel

  • Новичок
  • *
  • Сообщений: 12
  • Карма: 0
OpenMCU: 4.1.6
Linphone Windows: 3.9.1

Добрый день! Обнаружил такую проблему. При отправке текстового сообщения с Linphone на сервер, сервер OpenMCU нормально распознает текстовое сообщение, то есть используется нормальная кодировка, но другие клиенты, которые получают это сообщение, отваливаются с ошибкой. Подозреваю, что сервер OpenMCU отдает не ту кодировку. При отправке сообщения с Linphone, у клиента Myphone отображаются кракозябры. Linphone использует UTF-8. В исходниках рылся ответа пока не нашел. Может и проблема в чем-нибудь другом, но если звонить c Linphone на Linphone то все нормально. Текстовый обмен конечно можно организовать другими средствами, но хочется использовать встроенные возможности.

Vimpel

  • Новичок
  • *
  • Сообщений: 12
  • Карма: 0
Подключил к серверу 2 клиента. 192.168.33.15 и 192.168.33.10. Сам сервер 192.168.33.2. Отправил сообщение "test" c клиента 192.168.33.15.

Что дала трассировка:

 recv 394 bytes from udp/[192.168.33.15]:5060 at 10:32:10.335139:
   ------------------------------------------------------------------------
   MESSAGE sip:VKS@192.168.33.2 SIP/2.0
   Via: SIP/2.0/UDP 192.168.33.15:5060;branch=z9hG4bK.xB~~uzE4w;rport
   From: <sip:ts01@192.168.33.15>;tag=v6ZFvKOzL
   To: "VCS" <sip:VKS@192.168.33.2>
   CSeq: 20 MESSAGE
   Call-ID: cYSZxevs1W
   Max-Forwards: 70
   Supported: outbound
   Content-Type: text/plain
   Content-Length: 4
   Date: Mon, 23 Nov 2015 09:33:08 GMT
   User-Agent: Linphone/3.9.1 (belle-sip/1.4.2)
   test

   ------------------------------------------------------------------------

 Сообщение получено сервером и оно нормального размера Content-Length: 4. Но ниже видим, что при отправке сообщения уже сервером второму клиенту 192.168.33.10 длина сообщения увеличилась Content-Length: 17 и само сообщение теперь содержит "[undefined]: test".
 
 send 471 bytes to udp/[192.168.33.10]:5060 at 10:32:10.336422:
   ------------------------------------------------------------------------
   MESSAGE sip:uaa@192.168.33.10 SIP/2.0
   Via: SIP/2.0/UDP 192.168.33.2;branch=z9hG4bKZt9trva1NSBHB
   Max-Forwards: 70
   From: "VKS" <sip:VKS@192.168.33.2>;tag=aFr61p91mg20H
   To: <sip:uaa@192.168.33.10>;tag=86F~2cmAi
   Call-ID: 4b42fa3c-0c70-1234-a6a9@
   CSeq: 914315133 MESSAGE
   Contact: <sip:VKS@192.168.33.2:5060;transport=udp>
   Date: Mon, 23 Nov 2015 10:32:10 GMT
   Server: OpenMCU-ru/4.1.6 (sofia-sip-1.12.11devel)
   Content-Type: text/plain
   Content-Length: 17
   [undefined]: test

   ------------------------------------------------------------------------

Уверен что проблема зарыта где-то в sip.cxx. Прошу разработчиков помочь.

Sandro

  • Новичок
  • *
  • Сообщений: 1
  • Карма: 1
Для того, чтобы между Linphone нормально ходили сообщения, необходимо пропатчить и пересобрать библиотеку belle-sip.

Конкретно проблема кроется в грамматике, с помощью которой разбирается SIP-протокол.
Нужно править файл grammars/belle_sip_message.g

При получении текстового сообщения от OpenMCU Linphone падает при попытке парсинга заголовка Call-ID.
В грамматике содержимое заголовка описано как
call_id   
  :   word ( AT word )? ;
А сам word объявлен как
word       
  :   (alphanum | mark   | PERCENT
                      | PLUS | BQUOTE |
                     LAQUOT | RAQUOT |
                     COLON | BSLASH | DQUOTE | SLASH | LSBRAQUET | RSBRAQUET | QMARK | LBRACE | RBRACE)+;

Если посмотреть на Call-ID, который приходит от OpenMCU в пакете с сообщением, видно, что его значение, например, - 4b42fa3c-0c70-1234-a6a9@.
Обращаем внимание, что в конце есть @, которая не входит по грамматике в допустимые символы для значения Call-ID.

Чтобы все это добро заработало, нужно заменить объявление word (у меня строка 1682) на
word       
  :   (alphanum | mark   | PERCENT
                      | PLUS | BQUOTE |
                     LAQUOT | RAQUOT |
                     COLON | BSLASH | DQUOTE | SLASH | LSBRAQUET | RSBRAQUET | QMARK | LBRACE | RBRACE | AT )+;

Возможно это грязный хак, и надо разбираться с самим OpenMCU, тем более что сообщения приходят от [undefined], явно проблема там есть, но у меня в таком виде все работает.

xak

  • Разработчик
  • Ветеран
  • *****
  • Сообщений: 1791
  • Карма: 58
Если проблема в "@", то исправил в 4.0/4.1.
"undefined" тоже исправил, будет "отображаемое имя" терминала.
Не проверял, проверил только сборку.

Vimpel

  • Новичок
  • *
  • Сообщений: 12
  • Карма: 0
Если проблема в "@", то исправил в 4.0/4.1.
"undefined" тоже исправил, будет "отображаемое имя" терминала.
Не проверял, проверил только сборку.

Проверил. Да действительно все работает. Linphone с ошибкой не вылетает. Большое спасибо.

Vimpel

  • Новичок
  • *
  • Сообщений: 12
  • Карма: 0
При отправке символа % и если строка заканчивается на %, Openmcu-ru отваливается. При отправке %% на выходе из сервера только один символ %. Скорее всего % используется для каких-то служебных целей.
« Последнее редактирование: 19 Января 2016, 10:51:05 от Vimpel »

xak

  • Разработчик
  • Ветеран
  • *****
  • Сообщений: 1791
  • Карма: 58
При отправке символа % и если строка заканчивается на %, Openmcu-ru отваливается. При отправке %% на выходе из сервера только один символ %. Скорее всего % используется для каких-то служебных целей.
При отправке в комнату?
Отправлял один символ "%" и несколько, все передаются, без проблем. Linphone 3.7.0