我在 C 中有一个遗留的 Asterisk 应用程序,它使用 MySQL 对用户进行身份验证、路由和计费。我将它保留在 Asterisk 1.4.21 中,因为在较新版本的 Asterisk 中没有返回任何 CDR 数据。
显然 1.4.22 https://issues.asterisk.org/jira/browse/ASTERISK-13064中发生了一些变化,完全改变了 CDR-s 的处理方式。不幸的是,没有提供有关如何正确迁移现有代码的有用信息。
他们更改了执行顺序,调用了“h”扩展名并重置了 CDR 数据。
我的代码:
ast_log(LOG_NOTICE,"拨号字符串:'%s'\n", dialstr); app = pbx_findapp("拨号"); 如果(应用程序) res = pbx_exec(chan, app, dialstr); ast_log(LOG_NOTICE,"从 pbx_exec '%i'返回, 处置: '%s'\n", res, ast_cdr_disp2str(chan->cdr->disposition));
代码的其他部分处理 chan->cdr->billsec 等,但它总是给出 0 值。
成功调用后,我总是从 CLI 获取此日志:
从 pbx_exec '-1' 返回,处置:'NO ANSWER'虽然相同的代码在 1.4.21 上运行良好
我听到的一种解决方案是在 Dial 之前使用 ast_reset() ,但我不确定如何实现它。有关如何调整此应用程序的任何帮助?