Kamailio 遇到错误的 ACK 能怎么弄

📅 2026/7/10 20:09:09
Kamailio 遇到错误的 ACK 能怎么弄
这是个现场的问题主叫发的ACK缺了回车和换行估计是开发人员笔误ACK sip:xxx SIP/2.0Via:From:To:最后一行应该是 Content-Length:0 回车换行再加回车换行缺了最后的回车换行用 wireshark 打开有一个告警Header not terminated by empty line(CRLF)用 kamailio 的 sanity_check(17895, 7) 检查返回-1调整为 sanity_check(1, 7) 终于返回成功但 t_relay 转发时又报错在找解决办法写了这样一段路由if(!sanity_check(17895, 7)) {if (is_method(ACK)) {route(FIX_BAD_ACK);exit;}xlog(Malformed SIP request from $si:$sp\n);exit;}route[FIX_BAD_ACK] {$var(headers) ;$var(from) $sel(from);$var(to) $sel(to);$var(cseq) $sel(cseq);$var(forward) Max-Forwards: 70;$var(headers) $var(headers) From: $var(from) \r\n;$var(headers) $var(headers) To: $var(to) \r\n;//$var(headers) $var(headers) CSeq: $var(cseq) \r\n;$var(headers) $var(headers) Forward: $var(forward) \r\n;$var(headers) $var(headers) \r\n;xerr($$var(headers) $var(headers)\n);t_uac_send(ACK,$ru,$ru, //next hop, // socket$var(headers), // body);return;}但不能工作下面是日志core [core/parser/parse_hname2.c:317]: parse_sip_header_name(): parsed header name [From] type 4core [core/parser/parse_addr_spec.c:187]: parse_to_param(): add param: tag467e5948core [core/parser/parse_addr_spec.c:911]: parse_addr_spec(): end of header reached, state29core [core/parser/msg_parser.c:164]: get_hdr_field(): From [39]; uri[sip:1002192.168.1.140]core [core/parser/msg_parser.c:166]: get_hdr_field(): from body (24)[sip:1002192.168.1.140], from tag (8)[467e5948]core [core/parser/parse_hname2.c:317]: parse_sip_header_name(): parsed header name [To] type 3core [core/parser/parse_addr_spec.c:187]: parse_to_param(): add param: tag0070ec0db079f11198ca1b7b1022c00bcore [core/parser/parse_addr_spec.c:911]: parse_addr_spec(): end of header reached, state29core [core/parser/msg_parser.c:176]: get_hdr_field(): To [69]; uri[sip:1001192.168.1.140]core [core/parser/msg_parser.c:178]: get_hdr_field(): to body (30)[1001sip:1001192.168.1.140], to tag (32)[0070ec0db079f11198ca1b7b1022c00b]core [core/parser/parse_hname2.c:317]: parse_sip_header_name(): parsed header name [Forward] type 0core [core/parser/msg_parser.c:93]: get_hdr_field(): found end of headertm [rpc_uac.c:409]: get_hfblock(): one more hf processedtm [h_table.c:587]: tm_xdata_replace(): replace existing list in backup xd from new xdtm [h_table.c:420]: build_cell(): created new cell 0x7f98c1f14590tm [h_table.c:575]: tm_xdata_replace(): restore X/AVP msg context from backup datatm [uac.c:522]: t_uac_prepare(): next_hopsip:1001192.168.1.171tm [uac.c:773]: send_prepared_request_impl(): uac: 0x7f98c1f14860 branch: 0 to 192.168.1.171:5060core [core/onsend.c:52]: run_onsend(): required parameters are not available - ignoring改成下面这个版本可以了route[FIX_BAD_ACK] {$var(headers) ;$var(from) $sel(from);$var(to) $sel(to);$var(cseq) $sel(cseq);$var(forward) Max-Forwards: 70;$var(callid) $ci;$var(headers) $var(headers) From: $var(from) \r\n;$var(headers) $var(headers) To: $var(to) \r\n;$var(headers) $var(headers) CSeq: $var(cseq) \r\n;$var(headers) $var(headers) Forward: $var(forward) \r\n;$var(headers) $var(headers) Call-ID: $var(callid) \r\n;$var(headers) $var(headers) \r\n;xinfo($$var(headers) $var(headers)\n);t_uac_send(ACK,$ru,, //next hop, // socket$var(headers), // body);return;}换到去年碰到类似的问题应该解决不了