关于Asterisk SIP Info和SIP MESSAGE消息问题

1. 关于Asterisk SIP INFO问题

想通过SIP INFO发送一个开锁消息,发现Asterisk服务器经常返回415 Unsupported media type,
查看源码(chan_sip.c handle_request_info函数)发现Asterisk接收以下Content-Type

    /* Need to check the media/type */
    if (!strcasecmp(c, "application/dtmf-relay") ||
        !strcasecmp(c, "application/vnd.nortelnetworks.digits") ||
        !strcasecmp(c, "application/dtmf"))

修改Content-Type,body 填入Signal=xxx, Duration=xxx后发送成功。


2. 关于Asterisk SIP MESSAGE问题

看了源码,发送消息Content-Type必须为text/plain,否则会返回415 Unsupported Media Type。

Content-Type改了之后试了好久怎么发送消息还是不行。查了下资料,好像是需要在通话状态才允许发送MESSAGE消息。

改了下,在通话中发送消息,类似 SIP INFO。

以exoSip 为例
    osip_message_t *pMsg = NULL;

    eXosip_call_build_message(dialog_id, &pMsg);
    osip_message_set_body(pMsg, "hello world\r\n", strlen("hello world\r\n"));
    osip_message_set_content_type(pMsg, "text/plain");    
    eXosip_message_send_request(pMsg);

//eXosip库里面没有这个函数,我自定义了一个,用于发送通话中的MESSAGE
int eXosip_call_build_message(int did, osip_message_t ** request)
{
    int i;

    *request = NULL;
    i = eXosip_call_build_request(did, "MESSAGE", request);
    if (i != 0)
        return i;

    return OSIP_SUCCESS;
}

测试后对端收到了MESSAGE。终于搞定了。

对端需要对 EXOSIP_CALL_MESSAGE_NEW 进行处理

MESSAGE介绍可以参考
https://tools.ietf.org/html/rfc3428

参考
https://wiki.asterisk.org/wiki/display/DIGIUM/Digium+Phones+when+used+with+DPMA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值