【问题标题】:Asterisk incoming message gives: 415 unsupported media type星号传入消息给出:415 不支持的媒体类型
【发布时间】:2015-10-16 11:42:22
【问题描述】:

我和我的项目组正在尝试建立一个带星号的 PBX。我们已经设法让它只与 SIP 呼叫一起工作,而且效果很好。 但是一旦我们想尝试向它添加一条 XML 消息,Asterisk 就无法识别它并给出“415 Unsupported Media Type”。似乎呼叫甚至没有通过它立即被拒绝。

我们试图找到处理这个问题的代码段,但没有找到任何东西。

发送到 Asterisk 的 SIP 消息如下所示:

Request-Line: MESSAGE sip:701@xxx.xxx.xxx.109 SIP/2.0
  Method: MESSAGE
  Request-URI: sip:701@xxx.xxx.xxx.109
  Via: SIP/2.0/UDP xxx.xxx.xxx.111:5060;branch=z9hG4bK-3f138a53
  To: <sip:701@xxx.xxx.xxx.109>
  From: <sip:702@xxx.xxx.xxx.111>;tag=7a82b127
  Call-ID: 54634d4f2e@xxx.xxx.xxx.111
  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

我们的问题是: 在代码或配置文件中,我们可以在哪里找到星号决定是否支持“媒体类型”?

或者

有人知道如何添加 Asterisk(尚不)支持的媒体类型吗?

【问题讨论】:

  • 您使用的是 chan_sip 还是 PJSIP 堆栈?
  • @MattJordan 我们正在使用 chan_sip,但是当它是不受支持的媒体类型时,我们无法找到它的确切位置

标签: asterisk sip http-status-code-415


【解决方案1】:

看起来接受的消息内容类型是硬编码的,因此您无法在配置文件中执行此操作。如果您查看 channels\chan_sip.c 中的函数 receive_message(),您将看到以下几行:

    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() 函数的其余部分以适应你的需求。

【讨论】:

  • 谢谢,这确实是我们要找的答案!
  • 很高兴能帮上忙!
【解决方案2】:

您可以只使用“text/plain”作为 Content-Type 并通过自动检测来处理应用程序中的 scaip+xml(例如,如果消息以开头,那么您可以知道它是 scaip xml)。

【讨论】:

  • 是的,如果它是对我们应用程序的调用,我们可以翻译它。但是,呼叫在 PBX 服务器处停止,因为它给出了有关不受支持的媒体类型的错误。但我们已经解决了这个问题,但感谢您的帮助。
  • 啊,我在想发送这种请求的应用也是你的。
猜你喜欢
  • 2014-05-10
  • 2019-05-01
  • 2017-06-30
  • 2017-07-05
  • 2016-11-26
  • 2015-08-21
  • 2015-08-29
相关资源
最近更新 更多