OpenSIPS3.2保存和恢复sdp

UAC                             OpenSIPS            UAS

     --->invite with sdp-->

                                                    --->invite with sdp

                                                    <---183 with sdp

     <--- 183 with sdp

                                                    <--- 200 without sdp

     <---200 without sdp

这是最近碰到的一个case,需要在路由里面做如下处理:

  • 收到183 reply的时候保存sdp
  • 收到200 reply的时候恢复sdp

主要的路由代码如下:

loadmodule "sipmsgops.so"
loadmodule "textops.so"

loadmodule "cachedb_local.so"
modparam("cachedb_local", "cachedb_url", "local://")

...

route[invite] {
    $du = "sip:192.168.1.100"; 
    t_on_branch("per_branch_ops");
    t_on_reply("handle_nat");
    t_on_failure("missed_call");
    t_relay();
    exit;
}

onreply_route[handle_nat] {
	xlog("incoming reply, status = $rs\n");
	# xlog("****$mb\n");

	if (($rs =~ "18[30]") && has_body("application/sdp")) {
	    # save sdp
    	# xlog("****$rb\n");	
		$var(key) = $ci + "body";
		cache_store("local", $var(key), $rb, 120); # 120 秒超时
		$var(key) = $ci + "length";		
		cache_store("local", $var(key), $hdr(Content-Length), 120); # 120 秒超时
	} else if (($rs == "200") && !has_body("application/sdp")) {
        # restore sdp
		$var(key) = $ci + "body";
		cache_fetch("local", $var(key), $var(sdp));
        cache_remove("local", $var(key));
		xlog("****$var(sdp)\n");
		$var(key) = $ci + "length";		
		cache_fetch("local", $var(key), $var(length));
        cache_remove("local", $var(key));
		xlog("****$var(length)\n");
        if (($var(sdp) != NULL) && ($var(length) != NULL)) {
    		insert_hf("Content-Type: application/sdp\r\n", "Call-ID");
	    	insert_hf("Content-Length: $var(length)\r\n", "Call-ID");
    		add_body_part($var(sdp), "application/sdp");		
        }
	}
}

熟悉我的人都知道,我对OpenSIPS不熟,但上面的代码准确无误,先佩服自己一分钟

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值