Входящее сообщение Asterisk дает: 415 неподдерживаемый тип носителя

Я и моя проектная группа пытаемся настроить АТС с астериском. Нам удалось заставить его работать только с вызовами SIP, и это работает отлично. Но как только мы хотим попробовать добавить к нему XML-сообщение, Asterisk не распознает его и выдает «415 Unsupported Media Type». Кажется, что звонок даже не проходит, его сразу же отклоняют.

Мы попытались найти фрагмент кода, где это обрабатывается, но ничего не нашли.

SIP-сообщение, отправляемое на Asterisk, выглядит так:

Request-Line: MESSAGE sip:[email protected] SIP/2.0
  Method: MESSAGE
  Request-URI: sip:[email protected]
  Via: SIP/2.0/UDP xxx.xxx.xxx.111:5060;branch=z9hG4bK-3f138a53
  To: <sip:[email protected]>
  From: <sip:[email protected]>;tag=7a82b127
  Call-ID: [email protected]
  CSeq: 104 MESSAGE
  Max-Forwards: 70
  User-Agent: CareIP 7813409 v1.2.4.0
  Content-Type: application/scaip+xml
  Content-Length: 91
Message Body
  <mrq><ref>765745670002</ref<mty>ME</mty><cid>266786</cid><dty>0005</dty><stc>0010</stc></mrq

Наш вопрос (ы): где в коде или файлах конфигурации мы можем найти, где звездочка решает, поддерживается ли этот «тип носителя» или нет?

Or

Кто-нибудь знает, как добавить тип носителя, который (пока) не поддерживается Asterisk?


person Thomas de Groot    schedule 16.10.2015    source источник
comment
Вы используете chan_sip или стек PJSIP?   -  person Matt Jordan    schedule 16.10.2015
comment
@MattJordan Мы используем chan_sip, но не можем найти, где он точно определяет, когда это неподдерживаемый тип носителя.   -  person Thomas de Groot    schedule 20.10.2015


Ответы (2)


Похоже, что принятый Content-Type для сообщения жестко запрограммирован, поэтому вы не сможете сделать это в файле конфигурации. Если вы посмотрите на функцию receive_message() в channels\chan_sip.c, вы увидите следующие строки:

    if (strncmp(content_type, "text/plain", strlen("text/plain"))) { /* No text/plain attachment */
    transmit_response(p, "415 Unsupported Media Type", req); /* Good enough, or? */

Если вы измените функцию strncmp(), чтобы также разрешить «application/scaip+xml» и перекомпилировать, она больше не будет отвечать ошибкой 415 Unsupported Media Type, и вы можете изменить остальную часть функции receive_message() в соответствии с вашими потребностями.

person User41943    schedule 27.05.2016
comment
Спасибо, это действительно тот ответ, который мы искали! - person Thomas de Groot; 27.05.2016
comment
Рад, что смог помочь! - person User41943; 27.05.2016

Вы можете просто использовать "text/plain" для Content-Type и обрабатывать scaip+xml в своем приложении, автоматически обнаруживая его (например, если сообщение начинается с, вы можете знать, что это scaip xml).

person Istvan    schedule 27.05.2016
comment
Да, если это призыв к нашему приложению, мы могли бы его перевести. Однако вызов останавливается на сервере АТС, поскольку он выдает ошибку о неподдерживаемом типе носителя. Но мы уже исправили эту проблему, но спасибо за помощь. - person Thomas de Groot; 27.05.2016
comment
Ах, я думал, что приложение, которое отправляет такие запросы, тоже ваше. - person Istvan; 28.05.2016