记录一次Kamailio的问题跟踪过程

sngrep,发现kamailio收到bye请求之后,转发错了,每次必现。

根据经验,收到的bye消息是对的,错误应该出在Kamailio路由上。

下面是查错的步骤:

第一步设置debug=3(一般情况下设置为2),运行下面这个命令:

kamcmd cfg.seti core debug 3 # 检查过kamailio.cfg,里面有这一行:loadmodule "cfg_rpc.so"

接下来复现问题,

然后检查日志,找到下面这段:

DEBUG:  [core/parser/msg_parser.c:677]: parse_msg(): SIP Request:
DEBUG:  [core/parser/msg_parser.c:679]: parse_msg():  method:  
DEBUG:  [core/parser/msg_parser.c:681]: parse_msg():  uri:     
DEBUG:  [core/parser/msg_parser.c:683]: parse_msg():  version: 

接下来的日志如下:

DEBUG:  [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Via] type 1
DEBUG:  [core/parser/parse_via.c:1303]: parse_via_param(): Found param type 235,  = ; state=6
DEBUG:  [core/parser/parse_via.c:1303]: parse_via_param(): Found param type 232,  = ; state=1
DEBUG:  [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5

这段日志是说核心在解析sip的各种头,这些不是重点,不要去过分关注,

DEBUG: LUA {BYE}:  [core/receive.c:259]: ksr_evrt_pre_routing(): event route core:pre-routing not defined
DEBUG: LUA {BYE}:  [core/receive.c:457]: receive_msg(): preparing to run routing scripts...
DEBUG: LUA {BYE}: app_lua [app_lua_api.c:490]: sr_lua_reload_script(): No need to reload [/etc/kamailio/kamailio.lua] is version 0
DEBUG: LUA {BYE}: app_lua [app_lua_api.c:673]: app_lua_run_ex(): executing Lua function: [[ksr_request_route]]
DEBUG: LUA {BYE}: app_lua [app_lua_api.c:675]: app_lua_run_ex(): lua top index is: 29

这段日志说明已经进到了路由处理,路由是用KEMI实现的,{BYE}表示目前正在处理BYE消息,

从这一行开始,往下搜索LUA {BYE}: app_lua

sanity检查正常,

删除Route头正常,

但是并没有执行loose_route,在ksr_route_withindlg之前路由就结束了。

嗯,很快就找到了问题。调整路由之后就正常了,皆大欢喜。

你可能感兴趣的:(Kamailio,信息与通信)