Kamailio SBC 记录路由标头第一行为空,仅第二行包含 IP

问题描述 投票:0回答:1

记录路由头行 1 对于 180 Ringing 和 200 OK 消息为空,记录路由的第二行包含 IP。对于 INVITE 则不然,两行都包含 IP。 这会导致 200 OK 的 ACK 未转发到正确的 IP 的问题。

什么可能导致此问题?记录路由已添加但为空?下面我添加了一些有关我的设置的信息。

Kamailio 有两个接口,右侧(eth1)连接到 Asterisk,左侧是(eth0)。 Asterisk 正在发送 200 ok 的 ACK,但发送到记录路由标头第二行中的 IP,即另一个接口 (eth0)。

Kamailio SBC 接口

空记录路由头 180响铃 200 可以

感谢任何形式的支持。

谢谢!

这是记录路由配置:


  `remove_hf("Route");
        if (is_request()) {
                if (is_method("INVITE")) {
                        #!ifndef RECORD_ROUTE_WORKAROUND
                        $var(loglevel)=2;
                        $var(logmessage)="Insert Record Route into " + $rm ;
                        route(LOGGING);

                        record_route();
                        #!endif

                        #!ifdef RECORD_ROUTE_WORKAROUND
                        if(ds_is_from_list(2, "3")) {
                                $var(loglevel)=2;
                                $var(logmessage)="Insert Record Route into " + $rm ;
                                route(LOGGING);
                                record_route();
                        }
                        if(ds_is_from_list(1, "3")) {
                                $var(loglevel)=2;
                                $var(logmessage)="Removing Record Route " + $rm ;
                                route(LOGGING);
                                remove_hf("Record-Route");
                        }
                        #!endif
                }
                /* Set request URI and TO header to the target server */
                if (ds_is_from_list(-1, "3")) {
                        if(is_method("INVITE")) {
                                if($ru!=$null) {
                                        $ru = "sip:" + $rU + "@" + $(avp(dsattrs){param.value,fqdn}) + ";user=phone" ;
                                }
                                if(is_present_hf("To")) {
                                        $td = $(avp(dsattrs){param.value,fqdn});
                                }
                        }
                }
        }
        #!ifdef RECORD_ROUTE_WORKAROUND
        if (is_reply()) {
                if(ds_is_from_list(2, "3")) {
                        $var(loglevel)=2;
                        $var(logmessage)="Instert Record Route into " + $rm ;
                        route(LOGGING);
                        record_route();
                }
                if(ds_is_from_list(1, "3")) {
                        $var(loglevel)=2;
                        $var(logmessage)="Removing Record Route " + $rm ;
                        route(LOGGING);
                        remove_hf("Record-Route");
                }
        }
        #!endif
}`

sip ack kamailio
1个回答
0
投票

Record-Route 标头仅在 SIP INVITE 请求中添加,相应的 SIP 回复必须仅镜像它们。如果传出 INVITE 具有正确的 Record-Route 值,但相应的传入 18x/200 回复带有空 Record-Route,则问题很可能出在生成回复的 UA 处,请尝试在那里进行调查。

关于描述中的kamailio.cfg片段,应该没有删除用于回复的Record-Route标头,在if(is_reply())中有一个remove_hf(“Record-Route”) { } 块。它由 #!ifdef 守护,也许它未激活。

顺便说一句,如果从 Kamailio 发出的 INVITE 第一个 Record-Route 为空,那通常是因为 record_route()msg_apply_changes() 之前执行。

© www.soinside.com 2019 - 2024. All rights reserved.